2019年7月25日
查看数据库的大小 use 数据库名
SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH)
FROM information_schema.TABLES where TABLE_SCHEMA=‘数据库名’;
得到的结果是以字节为单位,除1024为K,除1048576为M。
查看表的最后mysql修改时间 select TABLE_NAME,UPDATE_TIME from INFORMATION_SCHEMA.tables where TABLE_SCHEMA=‘数据库名’;
可以通过查看数据库中表的mysql修改时间,来确定mysql数据库是否已经长期不再使用。
查看数据库中各个表占用的空间大小 如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:
TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小
其他字段请参考MySQL的手册,我们只需要了解这几个就足够了。
所以要知道一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 即可。
SQL:
SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA=‘数据库名’ AND TABLE_NAME=‘表名’……
阅读全文
2019年7月25日
文字部分
( U+0000 – U+007F) 基本拉丁字符
( U+0080 – U+00FF) 增补拉丁字符集 1
( U+0100 – U+017F) 拉丁字符扩展集 A
( U+0180 – U+024F) 拉丁字符扩展集 B
( U+0370 – U+03FF) 希腊文字中的科普特字符
( U+0370 – U+03FF) 希腊字符
( U+0400 – U+04FF) 西里尔字符
( U+0500 – U+052F) 增补西里尔字符
( U+0530 – U+058F) 亚美尼亚字符
( U+0590 – U+059F) 希伯来字符
( U+0600 – U+06FF) 阿拉伯字符
( U+0700 – U+074F) 叙利亚字符
( U+0750 – U+077F) 增补阿拉伯字符
( U+0780 – U+07BF) 塔纳字符……
阅读全文
2019年7月25日
什么是Patch? Patch方法可以用来更新资源的一个组成部分
什么时候使用Patch? 当你仅需更新资源的某一项,即不完全也不幂等
那当我们的模型在数据库中几乎每个字段都可能会遇到改变的时候,难道在patch的时候,或者专门写一个post的接口去一个一个if else操作吗,而我们又使用的是静态语言golang,有没有什么办法能够动态的让我们进行愉快的Patch呢?
答案当然是有的,先说说如何去实现:
我们需要利用golang的map[string]interface{}结构
我们需要一个动态的结构
在mgo中大多使用map[string]interface{}的结构,我们直接构造出这个结构有利于我们直接进行Update({"$set": xxxx})操作
使用BindJSON函数,当然你也可以使用Gin的其他函数对map[string]interface{}进行绑定,这里我们不使用一个struct进行绑定,原因是我们无法判断客户端,或者说是浏览器会传送哪些字段来,这样做也有利于我们客户端将某一个字段置为默认值(如果用struct就只能避开默认值了)
来,开始贴代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 // 这个是我们需要存到数据库中的Model type Article struct { ID bson.……
阅读全文
2019年7月25日
情景: 在httpie post 下,在 axios post下,总的来说,就是在form-data下只有c.Bind()会有用
如果一定要用c.PostForm() headers必须为x-www-form-urlencoded……
阅读全文
2019年7月25日
原文来自于: https://coderwall.com/p/mvsoyg/django-dumpdata-and-loaddata
dumpdata 命令 这个是Django自带的管理命令,可以用来备份你的模型实例和数据库 dumpdata 基本数据库的转存 下面的命令将把整个数据转存到db.json文件中 ./manage.py dumpdata > db.json
dumpdata 备份特定的 app 下面的命令将在django admin app 转存到 admin.json文件中 ./manage.py dumpdata admin > admin.json
dumpdata 备份特定的表 下面的命令将只转存django admin.logentry 表中的内容 ./manage.py dumpdata admin.logentry > logentry.json
下面的命令将只转存django auth.user 表中的内容 ./manage.py dumpdata auth.user > user.json
dumpdata (–exclude) 你可以使用 –exclude 选择不需要备份的app或者表……
阅读全文
2019年7月25日
普通函数 普通函数(非成员函数)只能被overload,不能被override,而且编译器会在编译时绑定函数。
多态的运行期行为体现在虚函数上,虚函数通过继承方式来体现出多态作用,顶层函数不属于成员函数,是不能被继承的
构造函数 因为构造函数本来就是为了明确初始化对象成员才产生的,然而virtual function主要是为了在不完全了解细节的情况下也能正确处理对象。另外,virtual函数是在不同类型的对象产生不同的动作,现在对象还没有产生,如何使用virtual函数来完成你想完成的动作。
内联成员函数 内联函数就是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,这是不可能统一的。
静态成员函数 静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,他也没有要动态邦定的必要性。不能被继承,只属于该类。
友元函数 C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。友元函数不属于类的成员函数,不能被继承。
……
阅读全文
2019年7月25日
1、直接使用字符串相加
std::string a = "hello";
std::string b = "hello";
for(int i = 0; i < 100; ++i)
{
a = b + a;
}
2、使用insert函数
std::string a = "hello";
for(int i = 0; i < 100; ++i)
{
a.insert(0, "hello");
}
比较:通过Quick C++ Benchmarks 可得到结果
static void StringCreation(benchmark::State& state) {
// Code inside this loop is measured repeatedly
std::string x = "hello";
for (auto _ : state) {
x.……
阅读全文
2019年7月25日
阅读源码: sds.h sds.c
SDSHDR 全称 Simple Dynamic Strings Header
sds char *的别名
1 2 3 typedef char *sds; sdshdr sdshdr有好几个类别,它们分别是:sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64,其中sdshdr5是不使用的
源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 /* Note: sdshdr5 is never used, we just access the flags byte directly.……
阅读全文
2019年7月25日
主要函数 void *zmalloc(size_t size);
void *zcalloc(size_t size);
void *zrealloc(void *ptr, size_t size);
void zfree(void *ptr);
char *zstrdup(const char *s);
size_t zmalloc_used_memory(void);
void zmalloc_set_oom_handler(void (*oom_handler)(size_t));
size_t zmalloc_get_rss(void);
int zmalloc_get_allocator_info(size_t *allocated, size_t *active, size_t *resident);
size_t zmalloc_get_private_dirty(long pid);
size_t zmalloc_get_smap_bytes_by_field(char *field, long pid);
size_t zmalloc_get_memory_size(void);
void zlibc_free(void *ptr);……
阅读全文
2019年7月25日
和后端联调时总是会面对恼人的跨域问题,最近基于Vue开发项目时也遇到了这个问题,两边各自想了一堆办法,查了一堆资料,加了一堆参数,最后还得我把自己的localhost映射成上线时将要使用的域名。
今天翻看代码时,突然发现vue-cli的config文件里有一个参数叫proxyTable,看这个名字就感觉能解决问题,于是我就去搜了一下,果然。在vuejs-templates,也就是vue-cli的使用的模板插件里,有关于API proxy的说明,使用的就是这个参数。
https://vuejs-templates.github.io/webpack/proxy.html
这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化,例如我们要请求的地址是api.xxxxxxxx.com/list/1,可以按照如下设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 proxyTable: { '/list': { target: 'http://api.xxxxxxxx.com', pathRewrite: { '^/list': '/list' } } } 这样我们在写url的时候,只用写成/list/1就可以代表api.xxxxxxxx.com/list/1.
那么又是如何解决跨域问题的呢?其实在上面的list的参数里有一个changeOrigin参数,接收一个布尔值,如果设置为true,那么本地会虚拟一个服务端接收你的请求并代你发送该请求,这样就不会有跨域问题了,当然这只适用于开发环境。增加的代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 proxyTable: { '/list': { target: 'http://api.xxxxxxxx.com', changeOrigin: true, pathRewrite: { '^/list': '/list' } } } ……
阅读全文