Sun Jun 10 15:32:31 2018,对这个网站基本无感,速度太慢了,所以改换其他网站了。 Always be coding!
选择语言为C++11,兼具底层细节又有丰富类库来避免重复造轮子。
所有代码均通过Lintcode在线检测, 同时也考虑了诸如内存泄露等产品级需求, 命名规范参考了Google C++命名[fn:1], 许多代码中注释的部分比如List/Tree的定义, 在源码中都打开了, 为的是本地调试需要。 所以在进行在线检测时请把相关定义删掉以免造成在线编译不通过。
基本上代码都经过clang-format format过的(和gofmt类似)。
举例来说明: 一个lintcode题目的url为: http://www.lintcode.com/zh-cn/problem/word-search-ii/ 则对应的文件名为 ./src/word-search-ii.cc
,
在该文件中第一行的内容即为此URL的注释(此行内容是根据文件名再生成自动添加上)如果你是在Emacs中编辑此文件则可以在URL上M-x browse-url来打开这个链接,
因此对于题目的说明不会在文件中重复, 当然缺点就是你得有网络. 或者你可以在有网络的情况下根据这里的文件名写一个shell用wget全部download下来,
这样就可以躲到深山老林里刷这些题目了。如果有多个解答,有些函数名就会有些后缀,或者是方法或者是TLE这种超时版本,目的在于方便理解。
OS选择Ubuntu,作为一个后端程序员在Linux上开发习惯了,好处就是甚至可以从XWindow层去自定义、修改一些快捷键。OS的设计者 认为你自己知道自己在做什么,所以不拦你,当你GDB调试时不会跳出框子给你安全方面的确认(说你呢,MacOS)。
Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish – In the Beginning was the Command Line[fn:2]
写代码是一种不断人机交互过程,输入、验证做这样的循环迭代过程,好的编辑器可以加速这一过程的处理。Vim是,Emacs也是。 如果你使用Vim, 有15年使用经验的人的一些总结[fn:3]可以参考一下,四年前他写的11年经验总结[fn:4]同样可以参考一下, 使用Emacs推荐…额,因为每个使用Emacs的方式都不一样(Emacs Hell)就不推荐了。
这里具体涉及到的刷题方面的编辑器功能有:
- 快速编译: 刷题一般都是单个文件,没有Makefile,所以这里需要对单个文件进行快速编译和运行。一般这种情况是编辑,之后切换窗口到命令行执行相关操作遇到问题再回到编辑器中,这些循环单调规律的调试过程同样可以用代码在Emacs中固定下来。所以可以在一个Editor中实现这些功能。
- gdb集成: GUD模式可以方便的进行gdb调试,对递归的理解,对一些边缘case的确认,当然还有debug。
- 常用模板的快速插入
- git提交: magit是我认为最好用的git工具,没有之一,push/commit完全在一个编辑流当中,这里不展开。
- lint、代码补全:我选择的YCMD和Emacs客户端来进行补全。Flyheck来进行代码lint。
清明到来,我就38岁了,日暮乡关之感如针锥心
薄雾从村头飘来,坐在橘园里,一些病果尚在枝头
蒲公英又一次开出黄色的花,如一年一发的寂寞
能够思念的人越来越少。我渐渐原谅了人世的凉薄
如果回到过去,我确定会把爱过的人再爱一遍
把疼痛过的再疼一遍
但是我多么希望没有病痛的日子,一年或者一星期
在春天的风里跳舞,踮起脚旋转
他能看见也好,看不见也罢
我只有一个愿望:生命静好,余生平安
在春天的列车上有人为我让座
不是因为我摇晃的身体
– 《人到中年》 余秀华
[fn:1] https://google.github.io/styleguide/cppguide.html
[fn:2] http://cristal.inria.fr/~weis/info/commandline.html