Blog of Ditsing

三日不读书,便觉言语无味,面目可憎

面试投行

| Comments

从今年年初我就一直在留意 Google 之外的工作机会。倒不是因为我不喜欢在 Google 工作,而是因为人有时候会幻想,幻想自己跳个槽就能升职加薪走上人生巅峰;有时候也会好奇自己现在在市场上还值多少钱。恰好我经常会收到 LinkedIn 私信,问我有没有兴趣换工作。有些邀请根本就是群发的,跟我的经历一点关系都没有;也有那么几个来自有潜力的创业公司,比如某个做发裸照的应用的公司。今年七月份的时候我收到一封私信,声称他们在帮一个跨国 “Prop Firm” 招 “technical” 人才。我花了很久才 Google 到 Prop Firm 是投资银行的简称。以前经常在某乎上看到投行的实习生晒工资,我突然感到很有兴趣,升职加薪的欲望在心里蠢蠢欲动。

记一个工作中遇到的问题

| Comments

一年没有写博客了,写一个我今年在工作中遇到的问题吧。

首先有一个字符串集合A(母串集),A中大概有1.6x1010个字符串。这些字符串大部分都比较短,长度小于100。最长的字符串有216个字符。

还有一个比较小的字符串集合B(子串集)。B里的每个字符串都是A里某个字符串的前缀,共有2.4x107个前缀。B中的每个字符串都与一个非负整数相关联。

现在对于A中的每个字符串a_i,求一个整数。这个整数等于B中所有a_i的前缀所对应的整数的最大值。

(之前已经听我白话过这个问题的同学们:是的,问题规模又扩大了。)

背景:A是数据的key集合,B是用户的删除数据请求,删除被匹配的key和它对应的数据。因此,最后A中被匹配到的字符串不会特别多,大约是B的大小的若干倍。可以认为远小于100倍。

Compiler学后

| Comments

从我高三听说“公开课”开始,我就觉得这个东西一定会有前途。那时候他们还叫Open Course Wave,公开课的形式还都是课程笔记和清晰度超低的课堂视频。当时我看完了流行的《哲学:死亡》和《聆听音乐》,哈佛的《公正》和《幸福》都只看了一点点。另外还囤下了 好几套课程,一直拖到现在都没有接着看。可惜当时没有抓紧时间上《Algorithm》和C语言的课程,要不然上大学的时候也不会那么智商捉急了。

课程名两边用什么标点符号都觉得不对劲,我就用书名号了。

回到正题。大三上编译原理的时候我一直都在忙其他事情——ACM,GRE,莫名其妙的项目,实习,以及无聊的单机版Dota。跟随机房里诸位大牛的脚步,我开始了《Compiler》课程的学习。当时觉得自己自制力不行,没敢跟着老师的脚步上,而是选择了自助模式。看视频做作业,学习过程断断续续,前后持续了近一年。

课程设置非常不错,课堂上讲解的内容也比较简单,基本被我们大HIT课程覆盖。虽然我大HIT讲的我基本没听懂——也有可能是我总在上课的时候睡觉。视频讲得比较浅,但是很详细,有许多step-by-step的例子,例如模拟自动机和算法的运行等等。我之前一直对我们教材龙书的难度深表不满:许多涉及实现细节的代码和算法,跟原理混在一起,真的很难懂很难懂。我也不知道该怎么讲才能讲简单讲清楚。但是我想Alex Aiken教授的这门《Compiler》真的做到了易懂:整个编译器地框架和结构讲得非常清晰,具体算法和原理也都有介绍。教授涉猎很多,跟着教授上课不会担心他漏掉什么东西没有讲。编译器的实现主要体现在作业里,需要自己下一番功夫才能做好。小课堂大作业,我最喜欢的模式。所以我这篇博客会一直说作业怎么样怎么样怎么样。

一发智力小问题

| Comments

前几天从同事那里听到了一个面试的小智力题,来给大家分享一下

有一张方形的桌子,桌子四角放了四枚一模一样的硬币。在每一轮操作中,玩家可以任意反转这些硬币。一轮操作之后,桌子会被水平旋转90度的倍数,但是玩家并不知道它被转了多少度。某一轮操作之后所有硬币都是正面或者都是反面朝上,则玩家获胜,游戏结束。 求一个必胜策略。

提问者(一个印度人)说这个问题是面试题,大家五分钟之内就能想出来答案。我只能表示智商需要充值了。

博客重新开张啦

| Comments

从FB回来之后再没写过博客。原因很多,一个是因为忙,另外一个是因为…心灰意冷专心学术思考人生去了。

那我为什么突然抽风要回来写日志了呢?

  • 第一,当然是因为在悉尼的生活稳定下来了。
  • 第二,经过努力终于修复了博客的评论数量,现在主页上的评论统计是正确的了。
  • 第三纯粹是个意外,我突然发现一年前的今天我搞了一个Todo list。这个list上除了第一条之外我居然都完成了。这点让我非常开心。

综上所述,心情好了就会来写博客了。

我还是有一个写作计划的。 Coursera上的Compiler课程基本上学完了,要写心得体会;XFSd做完了也有很多话想说。把计划公布了就更有压力,希望我不会拖得太久。

好吧,按照惯例,我来回忆一下一年的生活。各位看官可以不用继续往下读了。请期待我另外的两篇文章吧。

接近尾声:Facebook又三周

| Comments

第九,第十,第十一周。今晚是我本周唯一一个过了九点还不困的晚上。

  1. 第九周本来是应该开始新工作的,结果却一直在对旧工作修修补补。新工作进展不错,雏形已经出来了。
  2. 第十周没有什么实质性的进展,尝试做了一个工具。实验发现工具的效果不太稳定,跟预想有很大误差。Mentor认为我没办法处理这个问题,于是让我先放下了。真正扫尾的时间到了。
  3. 第十一周扫尾,完成我一直在挂念的任务——重构那个巨丑无比的旧代码。为了搞清楚它的逻辑我真是脑袋都大了。让我重新开发估计也就一天就能搞定。事实上我确实重新开发了几乎所有重要的部分。800余行代码里连续没有改动的行数最大值小于13。

这次没有心情再写流水账了。之前写是因为觉得这段时间很重要,发生的每件事情都要记下来。现在觉得不一样了,没有什么事情很重要。认真去生活,认真去思考,认真去品味。这就够了,犯不着大动干戈。 临近离开反而心如止水,没有思前想后的犹豫,没有患得患失的顾虑。在Facebook可以为未来奋斗,回到哈尔滨的也可以。

只可惜…

必须说,这将是一段珍贵的记忆。

一些想法:FB七八周

| Comments

首先恭喜HIT_Encore拿下今年第一枚金牌,我死也瞑目了。今年注定是ACM@HIT丰收的一年,加油!

时间过的真快,在FB的第七第八周也结束了。这两周没有什么remarkable的工作:做幻灯片,修修补补加功能。基本都是在耍小聪明,没什么可以写的。

那就写写其他的。这两周我对未来的打算波动很大。

第七周之前我一直很坚定的要工作不要读书,但是第七周这个信念就动摇了。前几周碰到的所有同事几乎都是PhD,没有个学位真的不好意思跟他们打招呼。 给我的感觉就是没有PhD可能在Facebook不太好混。第七周的时候跟几个同事聊了聊这个想法,他们都说要是愿意申可以申一个,还不是太晚。于是我就心动了,觉得反正申一申也不费什么力气。只是我还缺 一个托福成绩,得找个时间把托福考了。一想到准备考试我就头大,何况这还是个考口语的考试。纠结。

第七周周四跟大馒头进行了中期总结,中间又被狠狠的打击了一次。确实,一没学分二没背景三没知识,靠什么号称自己excellent?所以我在G+上感叹说一切都来的太早。再给我半年时间,潜心修炼,什么都有了。

所以,还是去申个学校吧。周五去Google的路上又跟同事讨论了一番,明白了master和phd的区别。这样,申个学校的想法就在我脑子里深深的扎根了。一直在想什么时候去考托福,怎么考,怎么准备。 第八周一开始我就觉得应该选点有挑战的学校投,否则跟Facebook的offer比根本没有竞争力。但是就我这GPA,选这些学校太容易悲剧了。再想想还要跟教授陶瓷,真心觉得压力大:说都不会话。

到了周三,我又动摇了。费这么大力气只是给自己增加了一个不那么理想的选择,有必要吗?一会儿想,投一个也不费事,说不定会突然想体验一下新的生活;一会儿又想,直接工作多easy,申到学校也不会去的。 毕竟科研并不是我最想要的。

真正让我放弃这个想法的是周四早上跟涛哥聊的天。他跟我描述了一下PhD的日常工作。我坐下来想了好久,觉得也不是非要去体验一下那种生活。可能是最近的工作比较有乐趣,比较有成就感,所以找第二条路的需求就淡了。

周六本来要去Sail的,起了个大早却错过了班车。于是又在家宅了一天,看电影看公开课,思考人生。

周日也是这样。周日晚上我室友回来了,我尝试跟他提了一下这个问题。他的看法很简单,如果我最终还是要工作的话,最多需要去读一个master。master才是我所谓的“学”东西,PhD是专心搞研究。而且,如果觉得自己的知识储备还不够,那我应该在工作之余Self Studying。Self Studying对我来说不是问题,花的时间可能会长一点,努力可能会多一点,我肯定还是可以学会的。再说现在还有Coursea这种神器,真的不用想那么多。

其实我现在还在纠结中,很纠结。这种事情吧,除非做了决定,否则肯定不知道哪个是更好的选择。

列一下想做的事情(已经copy至Todo List):

  1. 把具体数学和组合数学看完
  2. 在Coursea上一门Compiler的课,自己写一个Compiler
  3. 复习形式语言与自动机
  4. 把xfsd的项目做完
  5. 把N年前下的公开课看了
  6. 未完待续,想到了再补充,太长了就单开个页面

流水账在下面,除了我应该没人能看懂。

FB第五六周

| Comments

上次写日志是17天之前了,懒了。 这两周生活丰富了很多,公司组织了不少活动,自己也认识了不少PhD朋友。BS跟PhD果然不是一个等级的,感觉大家想的东西差的太多。

上周六去了附近的Big Basin公园爬山,当然是被同事包养去的。见识了高耸入云的红木和幽静深沉的森林,感觉人生观又有不同。

另外一件大事就是自行车丢了,也是毁三观的事情,米国也有人偷自行车!到现在也没有报警,因为觉得找回来的希望不大。没有了自行车,剩下半个实习期恐怕要少了很多阳光了。也想过再买一辆,但是觉得没剩下几周了还是算了吧。惆怅啊。以后再要出门只好请人带着或者,借室友的自行车了——反正他也不骑。

然后就是痛恨前端的感觉越来越强烈。我一点也不想再做前端的工作了。

太晚了,先这样吧,明天后天想到什么再更新。


以下依旧是流水账,路人切记一定要绕过!!

FB第三四周——无聊的连载

| Comments

今天下午去超市疯狂购物,花了三十多美元。爽!

两周并作一周写吧。让我好好回忆回忆这两周都做什么了。 第三周大部分时间还是在写代码。这周开始有乱七八糟的事情了:信用卡,SSN,还有无聊。无聊是最大的障碍。每天下班回到家,除了上网没有什么有意思的事情可以做。基本到家的时候天就黑了,周围也没有同事朋友,在家里基本就是看电视看书发呆。越是无聊晚上还越是睡不着觉。于是第二天精神很差,效率也不高。唉。

周二一大早我就跑去Bank of America开了一个银行帐户,把周一刚发的工资存了进去。利息什么的就不想了,按照米国现在这个利率,我一年也就能拿几块钱。开帐户附送一张借记卡,这样我就可以花自己的钱了!虽然爸妈可能看不到,但是我还是想在这里跟他们说声谢谢。二十一年了,辛苦了!

第四周倒是很充实,虽说干的是码农活,我还是学到不少东西。印象最深刻的是:做事情一定要有计划——详细的计划,每周做什么、每天做什么。 只有一个含糊其辞的大概规划是不行的,一定要有对每个细节的考虑。这样不仅馒头来问的时候有话可以说,自己也能控制自己的进度和时间,干起活来才有效率。

还要提醒自己的是要稳重,不能一激动就把代码交上去了。馒头说,我们工作的唯一产出就是代码,因此对这个东西要求一定要严格。深以为然。

在FB的三四周很快就过去了,这就意味着实习生活已经过去了三分之一。这两周我想了很多,觉得这次实习固然是一种很好的经历,但是它对于我的帮助最多也止于此了。 我想了解美国,但是语言不通、空闲时间不多,又在这样一个小城市里。连我的馒头都说这里中国人的圈子往往仅限于中国人。这样的经历显然不能跟在米国留学、呆一年两年的比。 技术上呢?做码农活主要还是看自己,他人能给予的指导帮助也很有限。不过FB有一点我很满意,就是给我的Project是我一个完成的,这也能成为我简历里的一个亮点。 剩下的还有什么?也许最大的帮助就是钱了。有人说钱多的码农活也能干,我说那咱还不如去铁道部混呢。

突然又不甘心于当码农的命运了。资深同事告诉我说在FB这样的公司搞工程,本科生就够了。这对我来说最多算一个安慰。回来之后我自己在纸上画了画,觉得可以感兴趣的东西很多,工程最多也就排在第四第五的样子。回头看看我这GPA,再看看我这出身(大HIT啊),还是算了吧。我甚至想过先工作两年再去读书,异想天开吧。又迷茫了。

以下是流水账,大家绕过吧:

FB第二周——连载

| Comments

写文章的时候才发现今天是个特殊的日子。入乡随俗,为不幸的人们哀悼吧。

好吧这个连载真的很无聊。这次就不要一天一天的写了,来点意识流的。

鉴于众神都把mentor叫做馒头,我就跟风一把。大馒头居然上周就去旅行了,还要十月份才能回来。于是我的老师就只有一个小馒头了。小馒头本科清华,拿到了斯坦福的offer但是没有去,去了全奖的密歇根。Orz一个先。小馒头非常和蔼,又非常认真。我的第一份python脚本被他挑出来20余处问题,于是我上周二三四就只在忙这一个脚本了。FB明明有lint可以在commit的时候检查代码的,不知道为什么python没有这个检查,导致我犯了很多无聊的(缩进)错误。欣慰的是我学到了不少python的姿势,也算不白写了。小馒头非常照顾我,跟我讨论的时候能用中文就用中文了,泪牛满面呀。以后不能太怂了,要敢跟人说话才行。

周五终于有点空闲时间了。脚本完成的差不多了,坐等馒头们accept。鉴于我接下来的工作是写个网页,我决定先去看看手册。FB的各种模块做的非常好,从架构到UI提供全方位支持,这就不提了。作为一个构建在PHP上的帝国,FB在PHP上果然还是有一手的。FB有自己的PHP编译器hphp(叫做Hip-Hop,把PHP编译成C++代码),调试器hphpd,解释器hphpi。hphp用来跑真正的网站,hphpi和hphpd用来测试调试。除了提升代码本身的执行性能之外,FB还对数据访问做了优化,思路很简单但是据说效果很不错。伟大的网站还需要伟大的技术作后盾啊。

周六放假啦,决定骑车去斯坦福转一圈。上午宅在家里做饭玩儿,下午两点多才出发。骑车二十分钟就到了,看到地图上写着Standford,周围却找不到任何斯坦福的标志。这就是传说中没有围墙的大学吧。我在校园里不辨方向,信马由缰的乱跑,跑了一个小时也没有看到重复的景色。四处可见大片大片的草坪、树荫;楼宇稀稀落落的,很安静,粗糙的砖墙给人一种厚重的感觉。大概是因为周末吧,学校里人不多,有很多跟我一样的游客。也看到不少妹子在跑步——还看到一个自己霸占了整块草坪趴着看书的妹子。在这样的学校里,跑步看书总相怡呀。我就不吐槽我大哈工大了。

周日在家宅。没有别的可以写的了。周一继续读代码,想要瞬间搞清楚FB是怎么工作的还真是很困难。

周二也就是今天,我终于下定决心去申请SSN了。路线依旧是先Caltrain再bike。没有费什么力气就找到了Social Security Administration。本来以为里面会是空无一人的寂寞场面,谁知道里面竟然有一二十人在排队。碰到了两个在米国工作要申请SSN的美女,于是乎感叹大美利坚是不是要被中国人占领了。等了半个小时,轮到我了。办的过程没有费什么周折,把文件交给工作人员,过了一会儿她就递出一张纸要我核对信息。核对完了又递出一张收据,这就算结束了。完全没有想象中的难度,话都没有多说两句。

Happy的办完手续,就是苦逼的回家之路了。太穷买不起车票,只好骑车回公司。半个小时的跋涉,背上都湿透了。最近几天我的累计骑行历程应该已经超过了30公里。去斯坦福的时候还专门把车调到了最费劲的那档,享受一下自虐的乐趣。

到了公司之后依旧是看代码写代码。下午跟小馒头商量了一下我本周的工作计划,貌似我的进度超过了馒头的期望,或者是我低估了工程的难度,总之形势一片大好啊。回去继续扣吧。

这周还在等Google那边的消息,不知道结果出来了没有。我的签证赞助商也没有给我回信,告诉我到底用不用回国两年。SSN也要两周后才能拿到。我能做的就只有等待而已了,安心工作,不要想其他了。最近看到大家在G+上讨论自己的生活,遇到的题目,碰到的大神,还有自称loser,觉得有一种莫名的温馨。希望好基友都能一辈子吧。

PS:意识流完结。什么?居然还是按时间顺序!这是程序写多了干什么都要一行一行来么?