年后这段时间连续遇到了两次 git clone 龟速缓慢,一天之内都 clone 不下来的问题。这里记录一下解决方法和原理。
git clone 太慢的常规原因有两种,第一种是 git 仓库本身导致的,第二种是我们使用者的网络问题。
年后这段时间连续遇到了两次 git clone 龟速缓慢,一天之内都 clone 不下来的问题。这里记录一下解决方法和原理。
git clone 太慢的常规原因有两种,第一种是 git 仓库本身导致的,第二种是我们使用者的网络问题。
最近在组内 code review 中遇到了一处业务代码中需要深拷贝的地方,同学简单地通过 JSON.parse(JSON.stringify(target))
来进行,在讨论中发现了一些好玩的东西,特此来回顾一下。
2017: no silver bullet.
豆瓣地址
这本书的中文版被翻译为《程序员修炼之道——从小工到专家》,看起来有点中二,其实原名直译《注重实效的程序员》就很合适了。
定位于给初级开发人员阅读,涉及到软件工程开发的方方面面,摒弃平时所关注的语言特性,技术细节,而是高屋建瓴,着眼于正确的软件设计方法和应该具备的软件工程意识。(也是一个机会了解行业术语与典故)
zsh 被称作是最强大的 shell,而 oh-my-zsh 则是最流行的 zsh 配置文件,提供了丰富的主题以及大量插件,极大地扩展了 zsh 的功能。
可以无脑引入,便得到了最基本又好用的文件夹跳转,路径、命令、参数补全等便利操作。
推荐 plugin: git, autojump, osx
① 美化 diff
Git 自己的 git diff 还是蛮不好用也不好看的,文件名和 diff 内容不太好定位。
基于 diff-so-fancy 我们可以做一些美化工作。
在通过监听用户输入,将输入作为 Keyword 进行查询时(做了防抖)发现有如图问题,使用中文拼音输入法时,未选中所要的字词前,会自动将输入法分词过的拼音作为文本,由于实时监听输入,就存在将 ce’shi 作为 keyword 查询的问题了。
在这里,前端需要对拼音输入法的这种情况进行处理。
首先,setTimeout()/setInterval() 方法不是 ECMAScript 规范定义的内容,而是属于 BOM 提供的功能,也就是说定时器作为 BOM 对象和方法的一部分才能在浏览器中使用。
需要注意的是 setTimeout() 与 setInterval() 在触发周期的定义上完全不一样,在下面例子 setTimeout() 代码中,要在前一个 callback 回调执行结束并延迟 10ms 以后才能再次执行 setTimeout(),即延迟是要求运行时(runtime) 处理请求所需的最小时间,但不是有所保证的时间。而 setInterval() 则是每隔 10ms 就执行一次 callback 回调,不会关注 callback 何时执行结束。
在 ES6 把 Promise 写进语言标准前,为实现异步编程,经常会采用 观察者模式(发布-订阅模式) 作为替代传递回调函数的方案。
它定义了一种一对多的关系,让多个观察者订阅同一主题对象,当主题状态发生改变则立即发布,通知所有的订阅者。发布者和订阅者之间完全解耦,仅仅是共享同一自定义事件的名称。当新的订阅者出现,发布者无需做任何修改,反之亦然。
最近在进行 underscore.js 源码分析,也顺便看了些别的库的大致封装方式
underscore:
|
|
JavaScript 是一门动态类型语言,与静态类型语言相比,在进行变量赋值时并不需要考虑它的类型。在动态类型语言的面向对象设计中, 鸭子类型
的概念非常重要:
鸭子类型 (duck typing) 的通俗说法是““当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”” 鸭子类型指导我们只关注对象的行为,而不专注对象本身,即关注 HAS-A,而不是IS-A。
多态的含义是“同一操作作用于不同对象上面,可以产生不同的解释和执行结果”,背后的思想是把“不变的事物”与“可能改变的事物”分离开来,把不变的部分隔离出来,把可变的部分封装起来,使得代码变得可扩展,修改代码也变得更加安全。 不必再向对象询问“你是什么类型”再根据得到的答案调用对象的某个行为,直接调用就是了 。JavaScript 的多态性与生俱来,它在编译时没有类型检查的过程。