我的2014年终总结

我尝试在2014最后的半个小时,记录一下这一年自己经历的事情。

3月,拿了一个自己以为当初想清楚了,但是拿到手却毫无喜悦的毕业证书。一直以为自己与众不同,其实,“我们终将成为当初我们讨厌的人”。以为手到擒来的优秀论文结果却莫名的没有……嗯,反正也是制造学术垃圾,就无所谓分个三六九等啦,如此想来,倒也释怀。作为毕业生代表,在毕业典礼上有一次「失败」的发言。当然啦,其实根本也没人听你说些什么,即使听了,你说些什么也不重要。你能指望在一个自己都没去过大海的毛孩子能告诉你大海的波澜壮阔么?

毕业那几天,妞妞来了学校。我知道,这本来是一个跟高考一样无聊的人生转折点,但是我那段时间真的是想她了。与羽毛球、昊妞一行,在帝都爆表的雾霾下,泛舟紫竹院——基友,挚爱,青春,无知——有时候人生的幸福就是那些你习以为常的事物正好在某一时刻凑在了一起。

毕业即失业。公司的发展越来越举步维艰。当初的幻想基本破灭,只不过大家碍于各自原因,都没有捅破。老罗说,没有人嘲笑的是不值得实现的。但是,现在的人们其实都太喜欢显示自己的涵养与逼格,即使你用肉包子取打狗,他也会委婉的告诉你,达尔文也不能解释这个问题。人生就是认真的体验,经历就不后悔。只是,如果我们能够做得多一点,体验也能更加丰富一点。

5月,带着简历走错了地方,赶上了天府软件园招聘。感谢360刘朝辉,跟他聊了半个小时,他给我了一张回成都的机票。感谢为我免费打印简历的现场工作人员,尤其是那位看着我的简历断定我一定能讨到职位的小哥。临走前,多出一份简历,丢给了我现在在职的N公司。6月初,回到了成都。

机械式的工作了两个月。更多的时间选择陪伴家人和妻子。没有任何工作上的成就。

7月,终于等来了小马三。一辆很纯粹的驾驶者之车,希望在这位智美伙伴的陪伴下,看能多的风景。

8月底,参加了北理工四川校友的迎新活动。顺便把一个小学妹推荐进了N公司。

9月,我和妞妞接受了亲朋好友的祝福,开始了我们不一样的幸福生活。婚礼后,带着远道而来的小伙伴们自驾走马观花了都江堰、乐山大佛、峨眉山。在峨眉山的那个夜晚,是自己回成都以来睡得最香的一个夜晚。

金秋十月,我跟妞妞每周到不同的地方吃喝玩乐+腐败。终于去了简阳海底捞总店——跟味道、服务无关,就是想起了帝都那会跟小伙伴笑的花枝乱颤的日子。

11月,日程表出了bug. 我和妞妞收到了意料之外的人生升级礼包。虽然是大喜之事,但是当时的确萎靡了半个月。自己的确没有准备好,但是什么时候能准备好呢?等你年薪过百万?等你游遍千山万水?人生呢,如果都是既定程序,真的好无聊。

成为了易到的司机,至今未开工。希望来年财源广进。

老爸那边,有了新的事情和项目,挺为老爸高兴的。老爸必然有自己的局限性,我关注的也跟金钱无关,就是喜欢老爸忙碌时候跑去天府广场对着雾霾拍一个若隐若现毛爷爷朋友圈的状态。

在N公司半年,自己无建树和贡献。感慨时光飞逝之时,也自责误人子弟。切忌,没有好目标也没有坏目标,最坏的是没有目标。回成都养老也半年有余,这次驻足早已timeout。

新的一年,无他,肩负好自己理所当然的责任。在追寻不凡的道路上不妨快一些,再快一些!

Bye 2014!

Hello 2015~

2015.1.1 00:13

golang中接收者初探

今天使用net/http库做了一个简单的server. 遇到一个之前自己忽略的问题,觉得挺有意思,简单做一个笔记。

server通过调用

实现。需要传递一个Handler类型的接口进行request/response的处理。Handler接口定义如下:

一切都非常简单,于是花了一分钟,写了一个server:

看似一切都没有问题的样子……但是却编译错误:

原来是类型不匹配的问题。具体来说,接收者的类型才是真正实现接口的类型。在本例中,接收者类型是*Myserver,myServer也必须是一个指针。fix后的代码如下:

「Golang server design pattern」学习笔记

花了近一周时间,把golang基本语法看了两遍。使用了两个资料:

  1. 「学习 Go 语言」,邢星翻译版。GitHub地址PDF版。资料比较精要,非常适合短时间入门。每个章节后的习题设计不错,考察知识点比较充分和全面,但是经常出现「越级」现象,即第x章的内容习题,往往需要你学习了第x+1,x+2章后的内容以后才能完成。
  2. Go语言程序设计」,Mark Summerfield. 虽然是七牛许式伟翻译,但是还是比较粗糙,逻辑错误和排版错误比较多,有人评价说这是许的一本黑书,姑且批判性的看吧。这本书每章的例子分量很重,值得花时间研读以及抄一下代码。

以上是题外话。我接下来的工作会逐步转向golang的服务器维护和开发。因此,除去语言本身,对design pattern是下一阶段要着重学习的。找到一个这方面的资料资料:Golang server design pattern,阅读笔记如下:

  1. golang采用CSP(Communication Sequential Processing)实现并行,类似于Unix管道的概念,但是golang中,CSP是双向的,管道是单向的。由于没有共享资源,因此程序员可以避免显式加锁。
  2. 收/发chan的本质是带锁的FIFO操作。
  3. 从C++观点来开,
    1. golang的一个目录就是一个namespace/class。同一目录中的所有文件中的变量、函数,相互可见。
    2. C++继承 => golang嵌入
    3. 类方法 => 接收者
    4. 构造方法 => init()或者New()接口方法。golang中,一个目录/一个文件中可以有若干个init函数。
    5. void*/object => interface{}
    6. try()/catch() => panic()/recover()
  4. go项目组织原则:
    1. 一个目录下的所有.go文件爱你共同构成一个功能模块,为一个目的服务。
    2. 用层次话的方式组织工程。
    3. 尽可能多的使用goroutine处理并行,goroutine是很廉价的。
    4. 模块+接口 的方式构建项目,二不是OOP的方式。