笔记-5

函数记忆

函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。

实现原理

构造一个记忆封装函数 memoize(),接受功能函数作 func() 为参数,返回一个包装后的新函数 memoizedFunc(), memoizedFunc 函数会缓存每次结算结果,并检查前后两次调用时接受的参数是否一致,如果是直接返回结果,跳过 func() 方法的执行。还得考虑到多参数问题。

实际使用时可以用这个库

underscore 代码实现

1
2
3
4
5
6
7
8
9
10
11
12
var memoize = function(func, hasher) {
var memoize = function(key) {
var cache = memoize.cache;
var address = '' + (hasher ? hasher.apply(this, arguments) : key);
if (!cache[address]) {
cache[address] = func.apply(this, arguments);
}
return cache[address];
};
memoize.cache = {};
return memoize;
};

参考链接 https://github.com/mqyqingfeng/Blog/issues/46

深浅拷贝梳理

循环引用

null 值

create-react-app build 后的文件引用采用相对路径

在 package.json 文件中 增加 一级 "homepage": "./",配置。

1
2
3
4
5
6
7
{
"name": "my-create-react-app",
"version": "0.1.0",
"homepage": "./",
"private": true,
...
}

重新构建后生成的 html 文件就会用相对路径的形式引入其他文件。

导出 mysql 表的结构和注释到 Excel

发现大部分数据库管理软件都不支持直接将表结构导出成 Excel 格式,但是这些软件基本上都支持 sql 查询并已表格形式展示结构,查询结果是支持导出 csv 的。

所以可以通过如下 sql 语句将所有表的结构信息输出,然后手动导出或者复制结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT  
TABLE_NAME 表名,
COLUMN_NAME 列名,
COLUMN_TYPE 数据类型,
DATA_TYPE 字段类型,
CHARACTER_MAXIMUM_LENGTH 长度,
IS_NULLABLE 是否为空,
COLUMN_DEFAULT 默认值,
COLUMN_COMMENT 备注
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
-- test_database为数据库名称,到时候只需要修改成你要导出表结构的数据库即可
table_schema ='test_database'
-- AND
-- test_table为表名,到时候换成你要导出的表的名称
-- 如果不写的话,默认会查询出所有表中的数据
-- table_name = 'test_table'

具体操作参考这里

导出后可能出现乱码的请求,这是可以参考这篇文章