2015-08-12 Lim Geng
递归 ```js function deepCopy(obj) { if (!obj || typeof obj !== 'object') return obj; var target = isPlainObject(obj) ? {} : [], property, val; for (var key in obj) { val = obj[key]; // 防止循环引用 if (val === obj) continue; if (Array.isArray(val) || isPlainObject(val)) { target[key] = deepCo 继续阅读 »
2017-03-18 kk
其实我是一个月前,也就是寒假的时候就读完了这本书,受益匪浅。当时就想写篇博客总结一下,结果一直 拖到今天,实在是惭愧! 《代码大全》是一本非常厚实的书,总共有八百多页,读完用了一个月时间,大概每天读1~2章。 这本书从变量命名,循环语句,到代码质量,团队协作等等,对涉及到写代码的方方面面都做了讨论, 结合学术界研究和业界实践,告诉你什么是好代码,以及如何写出好代码。 继续阅读 »
2016-09-03 craneyuan
定义 快速排序(英语:Quick Sort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 more 算法步骤 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 步骤为: 从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列 继续阅读 »
2016-12-16 Li Shuai
1. 连接数过高 Redis连接数过高,且没有修改进程能打开的最大文件数,当达到最大文件数限制时,Redis在accept新连接的时候会立即报错"Max open files",无法成功获取该连接,此时,listen socket是持续可读的状态,事件循环直接把CPU跑满。这种现象还可能与没有配置Redis配置文件中的timeout参数有关,不设timeout参数,Redis不会主动关闭僵尸连接,导致连接数越来越高,容易达到限制。 解决方法:1)config set timeout xx修改keeplive时间;2)client kill ip:port杀死一部分僵尸连接;3)修改系统参数,增加单进程能打开的最大文件数。 这一点M 继续阅读 »
2014-11-13 码农明明桑
动画在Material Design设计中给用户反馈放用户点击时,并且在程序用户界面中提供连贯的视觉。Material主题为按钮(Button)和activity的转换提供了一些默认的动画,在android5.0(api 21)和更高的版本,你可以自定义这些动画和创建一个新动画: Touch feedback(触摸反馈) Circular Reveal(循环揭露效果) Activity transitions(Activity转换效果) Curved motion(曲线运动) View state changes (视图状态改变) more 自定义触摸反馈 触摸反馈在Material Design中在触摸点提供了一个即时视觉确认 继续阅读 »
2016-07-28 Li Shuai
greenlet是Python众多协程实现技术中的一种,eventlet是基于greenlet实现的。而eventlet和libev又是gevent的核心。greenlet的上下文切换清晰易懂,可以结合IO事件循环构建出一些高效的事件处理逻辑。不同于yield类型的上下文切换,greenlet的上下文切换从表现形式上看更纯粹,可以直接switch到另一个greenlet,不用管目标greenlet是否已经在运行,不同greenlet之间处于完全对等的状态,可以相互switch。基于yield实现的协程往往只能切换回自己的直接或间接调用者,要想在嵌套的调用中切换出去是比较麻烦的。本质上是因为yield只能保留栈顶的帧,Python3对 继续阅读 »