小知识点归纳
线程池使用注意:
在使用线程池的时候若碰到线程数量高居不下,试试加上下面:
if not hasattr(threading.current_thread(), "_children"):
threading.current_thread()._children = weakref.WeakKeyDictionary()
weakref.WeakKeyDictionary():创建为弱引用,主要是解决循环引用的问题,当除了弱引用外的引用计数为0则清除该对象。
for else语句:
for i in range(3):
print(i)
if i % 2 == 0:
break
else:
print("end")
>>> 0
循环遇到 break 退出后,整个语句就结束,else 语句块也不执行了。
综上,我们可以得出这样一个结论,只有当循环里没有遇到 break 时,else 块才会执行。此刻,你应该明白了,真正和 else 搭配使用的是 for 循环中的 break,break ... else ... 才是两个互斥的条件
js 中判断一个字符串是否为纯数字:
if (/^\d+$/.test(字符串)){
如果是纯数字会进来
}
varchar & char
char是一种固定长度的类型,varchar则是一种可变长度的类型 。
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。
如何选择:
1、存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。
2、固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。
3、十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
一句话小知识:
打开一个文件或者别的操作,一般都要执行XXX.close()。原因是你写入的任何文件在关闭之前不会真正写入磁盘。
python2 出现u"" u[] 格式,用 .encode('utf-8') 转化为utf8
CSS匹配HTML元素是一个相当复杂和有性能问题的事情。所以,你就会在N多地方看到很多人都告诉你,DOM树要小,CSS尽量用id和class,千万不要过渡层叠下去,……
XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
引用和对象分离,是动态类型的核心。引用可以随时指向一个新的对象
前端解析属性时,把属性里的双引号解析了,显示不完全
sync_status = '<td title="' + title_value + '" db_data="'+ db_value.replace(/\"/g, """) +'" label_title="'+label_value+'">'+ td_value +'</td>';
用 " 替换 双引号
前端展示位json格式方法:
var show_db_obj = eval("(" + str+ ")"); // object 对象 此方法还可以把不规范的字符串转化为对象
show_db_json = JSON.stringify(show_db_obj, null, 2)
json.dumps的代码处,如果内容有中文,请加上参数ensure_ascii=False
js去除字符串最后一个逗号:config_pkgs = config_pkgs.substring(0, config_pkgs.lastIndexOf(','));
去除所有空格:str = str.replace(/\s+/g,"");
去除两头空格:str = str.replace(/^\s+|\s+$/g,"");
去除空格(TimeSheet用过):arg0=arg0.replace(/\s+$|^\s+/g,"");
threading.Thread:
setDaemon() 方法。主线程 A 中,创建了子线程 B,并且在主线程 A 中调用了 B.setDaemon (), 这个的意思是,把主线程 A 设置为守护线程,这时候,要是主线程 A 执行结束了,就不管子线程 B 是否完成,一并和主线程 A 退出。这就是 setDaemon 方法的含义,这基本和 join 是相反的。此外,还有个要特别注意的:必须在 start () 方法调用之前设置,如果不设置为守护线程,程序会被无限挂起。就是设置子线程随主线程的结束而结束。
join () 方法:主线程 A 中,创建了子线程 B,并且在主线程 A 中调用了 B.join (),那么,主线程 A 会在调用的地方等待,直到子线程 B 完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的 join 方法。
我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)他的最小单元是块,一个块的大小是 4k,而对于我们的 InnoDB 存储引擎也有自己的最小储存单元 —— 页(Page),一个页的大小是 16K。