最近的一点生活总结

距离上次发表文章已经过了很久了,原来许诺的 MyIcons 介绍也一直未能完成。主要的原因在于在这段时间忙了一些比较重要的事情。 今天抽出一点时间,在这里稍微总结一下。

实习

在这段时间忙碌的最主要当然是实习方面的事情。转眼研究生也上到了第二年, 经过一段时间的考虑,最后还是否决了出国 Ph.D (更不用说在国内继续念书)这一选择了。 于是从去年底的时候就开始准备了各种实习的申请。总体来说,结果如下:

  1. Google (跪了,泪奔)
  2. 阿里(Offer)
  3. 腾讯(Offer)
  4. 百姓(跪了)

Google 每年的实习开始的时间都很早,我也比较密切的在关注相关消息, 面试的时间在今年春节之前,最后还是跪在算法水平方面,总体来说面试考题难度并不高,但是在现场的压力确实比较考验心理素质。 虽然事先刷了一段时间相关题目,但是总体来说还没有达到能在现场灵活表现的程度,总体而言跪的不亏。

国内方面我并没有去海投大量的面试,只选择了一些还比较中意的企业去面。 阿里、腾讯和百姓方面投的都是 iOS 开发方向。一来对这方面有一定的基础,二来也希望能多感受一下面试, 锻炼和提高一些心理素质。

阿里因为是内推走的提前批,结束的最早。面试的是阿里在杭州的部门, 所以主要是电面和视频面,前后共历经四面,最终是拿到聚划算组的 iOS 开发实习职位。

之后是百姓的面试,因为就在上海,onsite 面试了一下午。个人感觉和面试官之间交流的还比较好, 最后可能是因为时间安排等方面的原因没有拿到 Offer,真正的具体原因不明。

腾讯虽然也是内推,但是最后基本上是普通流程,通过笔试最后进入面试。腾讯的面试和前面的都不一样, 之前因为无论是阿里电面还是百姓现场面,都是自己一个人,所以并没有紧张的感觉。 在腾讯这边,面试的时候都是跟很多同学在一起,这种情境下其实无形增加了很多压力。 让我惊讶的是,即使我已经拿到了阿里的 Offer,在这种场合下也没有很好的控制住心境,在现场还是会有情绪波动。 看来心理素质的不足还是比较严重。

不像 Google 主要重视算法,这三家国内企业的面试内容基本上都是开发知识。 譬如移动开发这边就问了很多 iOS 相关的开发知识,而 PC 客户端那边据说也很多的问一些 C++ 的基础问题。 好像只有一些偏算法的方向问了算法题。

我的实习面试季就这么结束了。最理想的企业果然跪了,其他的面试也体现出很多需要提高的地方。 希望从现在到校招这段时间还有机会弥补这些问题。

Google Summer of Code

GSoC 是这段时间又一个比较大的收获。我知道 Google Summer of Code 并不晚,但是一直没有鼓起勇气去尝试。 认识了一些往届成功进入 GSoC 的同学们以及年前 Google 面试跪掉这两件事,刺激我在这方面付出了很多努力。 最后提交的 Proposal 总算被 Accepted 了。

GSoC 的项目选择其实比较困难,中间也有很多波折。就我而言,Python 和 Web 前端方面是比较熟练的, 而个人比较希望进一步发展的方向是 Go 语言相关的项目。总体来说这些方向的选择都不是很多,比较知名的如 Apache 等组织的项目也比较难入手。在今年的组织名单发布之前,我主要在 Buildbot 和 Mozilla 两个组织的相关项目上进行了简单的接触,其中 Mozilla 还要接触的更深一点,Mentor 的交流也比较好。 但是没有想到 Mozilla 最终没有进入 Google 的组织名单。随后还在 Github 的一个项目上进行了一点接触, 因为对他们一个 Go 语言相关的项目还比较感兴趣。可惜的是这个项目最后也因为种种原因从 idea list 里去掉了。 最后集中精力在 Buildbot 项目的申请上,经过几次 Pull Request 最终奠定了项目通过的基础。

GSoC 的申请经验我觉得总结起来主要有以下几条:

  1. 不要害怕,要去更勇敢的接触那些项目组织的成员,很多时候失败是因为没有去尝试
  2. 早作打算,这些项目组织当然更愿意接受自己比较熟悉的,特别是之前已经贡献过代码的学生
  3. 用代码说话,配合一些邮件交流。我个人认为,代码比在邮件列表里夸夸其谈更有效, 当然也不是只干不说,应该尽早让项目组织的维护成员认识你而且要明确的让他们知道你是来申请 GSoC 的、 你的目标项目是什么

除了以上几条,我觉得在开始起步的时候,可以适当选择两到三个项目进行准备,以防最后目标的组织没有进入名单。 但是也不必海投,就我感觉,哪些到处试运气在很多组织发一两封邮件而没有深度跟进的人成功的概率微乎其微。

总之在今年的 GSoC 上,我算是取得了初步的胜利,最后的胜利果实还要等待整个暑假的 Coding 结束之后才能品尝。

一些算法上的练习

在这段时间,我也进行了一些算法上的练习。目前主要是在比较大众的网站,比如 LeetCode 以及 TopCoder 刷一些算法题。此外,通过各种渠道了解到一些可用的资源, 在这里也一并总结一下。

  1. Cracking the Coding Interview [书籍] 大名鼎鼎的 CtCI,中文译名是《程序员面试金典》,买的时候可别看错了!
  2. 挑战程序设计竞赛 [书籍] 一个面向程序竞赛的算法书,据说对于提高算法水平效果很好
  3. LintCode [网站] 类似于 LeetCode 但是有一些其他来源的题目,分类比较清晰。 一部分题目可以对照 CtCI 进行练习。
  4. LeetCode 题解 [在线书籍] 一份比较完善的 LeetCode 在线题解。
  5. gettc [工具] 一个超方便的用来刷 TopCoder 的练习题的工具, 它可以将题目的 Demo 测试和系统测试抓取下来并自动为你生成多种语言的代码框架。 因此就可以在本地方便的编写和测试代码,无需使用在线的提交工具(在线提交应用往往运行很不流畅)。

为了记录自己练习算法的过程,我也在 GitBook 上新建了一本笔记, 这本笔记将会在今后练习的过程中不断的填充内容。此外再推荐我的同学 Bill Ryan 的一本类似的 算法学习笔记,这本笔记的内容已经比较丰富了。

The End

OK,这段时间的总结就到这里吧。在接下来的几个月,我估计还将继续保持现在的节奏。 因此在未来一段时间,我各个 Project 的开发和维护也会继续处于停滞状态, 在这里给我开发或开源出来的项目的用户道个歉。