一行正则引发的事故

2019年10月22日中午,偶然在 freeCodeCamp 翻译协作组微信群看到 Miya 转发的一篇 Quincy 文章:What the heck is going with freeCodeCamp’s servers?

文章中开篇就声明最近一段时间 freeCodeCamp 的服务器很不稳定,工程师花费三天时间才查明问题的症结就是下面的这行代码。

阅读全文

mongodb run error

Mongodb 启动常见错误

Ubuntu 系统下的 Mongodb 安装好后,官方推荐我们用 service mongod start 的方式来启动数据库。

阅读全文

一条命令引发的灾难

起初

故事最早发生在2014年6月,那段时间我正在跟随 nswbmw 的博客项目 Nblog 学习 Express 框架。
中间正好用到了 Mongodb 数据库,那也是我初次使用 Mongodb,给我的印象还是很不错的。
当我完成了这个简单博客后,我尝试发了十几条诗词,都是关于唐诗三百首的。
当时对数据库的了解非常有限,也不知道守护进程这些。
直到有一天我重启数据库发现之前的诗词数据都没了。
当时让我觉得非常奇怪,找来公司的技术大牛张春生帮忙,各种修复数据库的方式都试过了,依然没用。
在网上查找 Mongodb 丢失数据的问题,好家伙,不查不知道,一查吓一跳,这么多人都遇到过 Mongodb 丢数据的问题。
在看到很多人遇到和我同样的问题后,我心里告诉我自己,这问题和我没关系,是 Mongodb 本身的缺陷。

阅读全文

js中的继承

js中如何实现继承?

js是门超级灵活的语言,实现一种功能往往有多种做法,
ECMAScript没有明确的继承机制,es6引入了extend来实现继承,真的是大块人心。
但我们还是应该看看es6之前,改如何实现继承。
js中继承大体上可以分为两种:对象冒充和原型链方式

阅读全文

js中的拷贝

拷贝和继承有什么区别?

简单理解,huluoyang.gitcafe.io和hexo.com的关系就是继承,
hexo提供了博客的的网站架构、主题和插件等,
我不需要重新发明轮子,直接继承hexo就拥有了hexo的所有功能。
而Typecho与WordPress的关系就是拷贝,前者基于后者做了一个一模一样的博客软件。
当然Typecho发展得如何,与WordPress就毫无关系了。
拷贝就是我拥有你的功能,并且与你无关。
继承就是我拥有你的功能,而且与你密不可分。
一个是白手起家,一个是富二代创业,两者各有利弊。

阅读全文

how to choose a company?

优秀的程序员应该去什么样的公司?

每当我接受一个任务,打开项目的源码,随便一个文件几千上万行的代码时,头都大了。
嘴里念到:a piece of shit,心中一万只草泥马在狂奔。
这种只管功能实现,不管代码复用、后期维护,是否简洁易读的做法让后来接手项目的人头疼不已,
相信你我都曾经有过这样头疼的时刻。
一个公司最初的几个程序员奠定了公司代码的品质。
如果他们也是心浮气躁,干完活就行,打短工的心态。
那我只能说这样的公司只能喧嚣一时,必然活不长。
这样的公司我们见过太多了,其兴也勃焉其亡也忽焉。
我比较欣赏有自己节奏的公司,好的公司不会被对手、市场影响自己的节奏。
对手越是疯狂、市场越是极度繁荣,好的公司越应该冷静下来。
2013年刮起在线教育风、2014年刮起O2O风,看看现在活着的还有几家。
那些指望迅速占领市场份额的公司都活不长,每个产品都有自己的生命周期。
如果你硬要拔苗助长,就只能迅速灭亡。

阅读全文

js object and array

如何返回一个数组中的重复元素?

这个问题好像等同于:如何返回一个数组中被删除的重复元素?
我们换个测试案例,立刻就能看出问题所在。

阅读全文

js double for loop

如何删除一个数组中的重复元素?

先来看看淘宝UED官方博客的一个题目:(http://ued.taobao.org/blog/2007/11/job_test_explanation/)
请给Array本地对象增加一个原型方法,
它的用途是删除数组条目中重复的条目(可能有多个),
返回值是一个包含被删除的重复条目的新数组。

阅读全文

js variable scope

变量作用域

变量的作用域无非就是两种:全局变量和局部变量。
长期以来我一直以为用var关键字声明的就是局部变量,直接声明的就是全局变量。
直到我在项目中发现在代码开头部分用var关键字声明的变量居然是全局变量,
我深刻记得当初这个发现给我自己带来的震惊,
长期地写业务代码真的并不能成比例地提高技术水平。
因为我发现很多人和当初的我一样,都搞不清这个变量作用域,
体现在代码中就是你经常看到全局变量,这是一种因为不深入原理,所以采用这种简单粗暴的解决方式。
因为搞不清变量作用域,为了自己开发方便,直接声明全局变量,丝毫不考虑这会给后期维护带来什么后果。
去看js权威指南后发现,var仅仅是个关键字而已,它本身没有任何意义,它并不能决定变量是全局还是局部。
决定变量是全局还是局部的是变量所处的作用域,
如果是在最外层或在块语句中,用var声明的就是全局变量,
而如果是在函数中,用var声明的就是局部变量。
es6引入了全新的关键字(let)来声明变量,我们不禁要问为什么?
难道仅仅是因为js只有函数作用域,没有块级作用域吗?
那我们继续追问,为什么要引入块级作用域?
如果你搞不清这个问题,你可以从自己熟悉的角度来提问:为什么要有函数作用域?
如果没有函数作用域,那js中就没有局部变量了,全部是全局变量,甭管是否用var声明。
也就是说函数作用域存在的目的就是为了减少全局变量的使用。
当你搞清楚了为什么要有函数作用域也就搞清楚了es6为何要引入块级作用域。
没错,它们俩的目的都是一样:创建局部变量环境,减少全局变量的使用。

阅读全文

git push failure

技术的乐趣就在于解决一个个问题的过程中!

有一个问题纠缠我好久,一直没找到问题的原因。
在github上创建了个仓库,在本地上传总是失败。

阅读全文