引言

细心的朋友可能发现,上一篇文章最后的面试其实不止一场,那第二次面试机会如何得来的呢?

主人公又是怎么去百度实习,最后又拿到微软offer的呢?

我们原文再续,书接上回。(没看过的朋友点这里:上文

正文

这个机会说来很巧,我某次跟同学提到我想换个更大的厂,她说百度给她打过电话面试,是个私人号码,她自己已经有公司了所以不想面试。

我意识到这是个机会,招聘信息里面大部分是邮箱或者工作电话,其实联系的成功率并不高,但是这种私人电话基本是点对点,中间不存在邮箱这种轮询或者工作号码背后的一层Nginx。

我直接把号码拨过去,询问对面是不是需要招收实习生,表明了自己的学校和来意,希望对面能安排一个面试机会。

答复是肯定的,我特意要求在跟字节同一天,这样子免得我需要频繁请假,所有才有了一天之内字节和百度的两次面试。

来北京的第一个星期我就去拜访过百度大厦,西二旗地铁的一侧静静躺着一个熊掌,当我近距离看到这个标志的时候心中翻起的是澎湃和向往。

不过这次的面试在百度科技园,如果说大厦给我的感觉是大气,那么科技园就是真正的气势恢宏。

回字型的无限大标志由七栋大楼构成,K2和K1的连廊接在三楼,直接跨过了一个双向车道。面试的整体过程比较顺利,给我的面试体验也非常好,面试官会针对我简历上的技术栈由浅入深的进行询问,有些原理还会给我讲解。

三轮面试一共做了四个题,刚好打在了我的强项上。分别是最短编辑距离,最长回文字符串,变态跳楼梯和树的最长直径。我把这些题全部通关,中间还在百度食堂吃了个饭。

面试耗时3个半小时,到我出公司的时候已经是下午两点半了。

我非常感谢百度,不仅仅是因为它给了我实习的机会,更多的是对我这样一个要强的人来说,一天内连续挂掉两家公司的局面可能真的是无法接受的。

特别是字节的面试让我觉得毫无还手之力,在这种情况下,熊度就显得格外可亲。

进入百度是一个新的开始,我需要做的事情很多:学习一门新的语言,学习服务器上的开发,学习百度的一些内部工具以及...学习使用Mac。

在这些需求里面我直接砍掉了Mac的学习,把重心放在了语言和Linux上,具体的做法是我向Mentor提出把Mac换成ThinkPad。

我Mentor奇怪地跟我说:大部分人都是Windows本想换Mac,很少有你这样Mac想换Win的,我就笑笑说我时间不够用。

其实很巧的是我的Mentor也是ThinkPad,而他的技术非常强,是我们组绝对的实力担当 ,我觉得我技术路线的尽头应该就是我Mentor的样子。白天我看公司内部的各种文档,八点半下班以后我会花两个小时看Linux视频,并且做一些笔记,因为我觉得在工作时间看视频总给人一种在偷玩的感觉。

十点的西北旺还是灯火通明,出了科技园会看到旁边的网易,新浪和腾讯北京。我顺着腾讯的大楼先走到马连洼地铁站,回中关村的地铁一共要倒两趟,然后再从苏州街走回人大。

通勤时间大概在一小时四十分钟,所以到家一般都是十一点多了,我经常会在楼下的KFC买个吮指原味鸡或者鸡米花,静静地坐着吃完再回去洗澡睡觉。

期间我也想过换个住处,但是想了想,现在的房子地段很好,各种生活用品和娱乐都很多,西北旺那片还是有些冷清,还是算了。

还有一个原因是我特别喜欢人大,我在任何一个地方租房都喜欢租在学校旁边,校园的景色和人文气息都让我很舒服。

在百度的周末我一般也用来学习,通常是花一天的时间看Linux,另外一天去公司看文档。我看的书是Linux编程手册,这是我一个大牛同学推荐给我的,他初中就开始玩Linux,在社区比较活跃。

很难想象我这么一个不爱学习的人能静下心来看一本大部头的书看一下午,最深的原因是,我在北京有个漂亮的女同学,我一般都会喊她陪我在她们学校的自习室看一下午,然后去吃个饭看个电影啥的。如果这我都看不进去的话,那我真的不知道该说对不起谁了。

那段时间可能是我在北京最快乐最回忆的时光,每当地铁报站到了芍药居的时候,我都会有些悸动。

我们一起去过中关村的店,后海的店,印象最深的是第一次在万泉河的一家西餐厅。

那天她穿黑色的裙子,化了妆,坐在西餐厅的白色桌布前。我直接想到了十年以后,天是那么蓝,花静静躺在路边,我觉得我一定要好好写代码,成为一个厉害的人因为... ...

这样规律的日子我过了大概有三个月,也是我在百度呆的大半时间,我每周最大的期待就是周末可以看书的时光,因为去别人学校学习知识当然让人快乐啊。

百度楼下的蛋糕店有很好吃的慕斯蛋糕,有时候我会六点就下班,然后大概一个多小时通勤给同学带一个吃,因为这个蛋糕到六点以后基本上就买不到了。

不过很认真的说,我能坚持看Linux很重要的原因也是在字节的面试给我的打击太大了,让我认识到我在Linux这块就是一片空白。并且工作中确实遇到了相关的问题,有一次我做了一个定制化的HDFS上传程序,fork的时候在父进程中没有wait,导致服务器上产生了大量处于僵死状态的进程。

这些进程的执行流已经结束了,可是由于父进程未对它们进行最终处理,导致进程号一直被占用,久而久之可能会影响到服务器上其他进程的pid分配。

还有我们的HDFS资源比较有限,处理的数据量很大,大家的MR任务和Spark任务都在一个HDFS空间上,细碎的文件很多导致INode被占用的很严重,有时候还有磁盘,却没有足够的INode能分配了,导致任务执行失败等等。后来这种类似的问题我都在Linux编程手册中找到了对应的知识点,也让我越来越认识到它的重要性。

差不多两个月之后,我对Python和服务器上的开发已经有了一点点认识了,也开始接了一个新的项目。这个项目在工作计划上的执行人其实是我Mentor,不过他比较忙,我看了下这个活应该可以做,我就接了下来。项目的具体内容在此不方便多提,但是这个项目让我真正的接触到了很多开发中的交流,合作,踩坑,出坑,设计等等等等。

印象最深的是来自Google响应报文里面一个隐式编码的问题,Chunk协议在一些报文中会被使用,用作数据交流格式的标准。

Google的响应报文中使用了这种编码,却没有显式地声明出来,我在对报文进行了DOM树构建和重写之后,改变了报文的字符数,而Google用一个16进制的数字声明了这个长度。这个细节直接导致所有被我篡改的报文均不能在浏览器端被正常解析,表现为无限等待的界面。

这个Bug我足足改了七天,中间有一天我已经无限接近这个答案了,我把一个疑似表示长度的十六进制数进行了还原,想看看它是否指代长度。坑爹的是在服务器上看到的长度是字节数,中间涉及到编码的问题,而这个16进制数指代的是字符数,中间的差值让我一直不敢确定这个是代表长度(其实就算知道了也不可能改对,因为中文字符的字节数在UTF-8下是不同于字符数的)。

在这个开发周期中我熬过最多的夜就是这个时期了,以至于之后的需求性开发我都很轻松的完成,因为我觉得应该没有比这个Bug更加难弄的情况了(中间还有其他的问题,比如URL编码异常,Gzip的隐式刷流,开源库的DOM化缺陷,但是这些慢慢处理就好)。

这期间最让我印象深刻的是在我解决了这个问题之后一天的晚上,隔壁组对接的开发过来问我的经历我是今年的新同事吗,工作多久了。

经理哈哈大笑,说“怎么样,xx牛*吧”。隔壁的开发说确实很不错,我经理又补了一句“xx是我们的实习生”,隔壁的开发惊讶了说“我以为xx都早工作了”。

我全程背对着他们,那一刻我靠在椅子上,他们看不到我嘴角咧起的笑。我很喜欢看程序员生涯记录之类的小说,《疯狂的程序员》里面这样子写道“很多时候,我们开发一个项目,做一个需求,加班,熬夜,干耗,不是为了赶某个工期,或者是任务完成后领导给的拿一笔钱,更重要的是,我们享受这种克服万难,成人所不能的感觉,这种感觉跟钱是不一样的东西”。

正是这样子的瞬间,让我在程序的世界里真正的发现了自己。

故事直到这里,好像都跟微软没什么关系,可能有些朋友很想看如何去微软的过程,但是我个人觉得此处实在是乏善可陈,同时这个事情本身也没那么重要了。

一月下旬我从北京回湖北过年,没几天就遇到了疫情,在老家被辗转着隔离,家里也有亲人感染,可以说整个二月都是在隔离中度过。心里的压力更多来自对亲人健康的关心,到了二月中旬,情况渐渐好转,基本处于康复期了,恰逢学校群里有人发布微软春季实习生招聘,我就发了简历。

二月下旬开始,我在隔离的地方用手机开着热点,抱着公司的ThinkPad开展了新一轮的征程。

实习期间大量的开发任务确实很难抽出时间做这种集中式的复习,这次刷题我的目标很明确,牛客上的剑指Offer和LeetCode148一题不漏全部写完。

其实之前已经实现了大概80%,但是剩下的20%无疑是更加麻烦的,中间穿插着各种DP的训练,还是老规矩,AC才算过。刷累的时候会去整理在爱奇艺和百度的项目,它们的需求点,难点和结果。

这中间还有天在群里吹水,跟人吵起来AVL和红黑树哪个更难,我为了证明红黑树更难还专门花了半天去实现了一个可用的AVL。

写的时候我内心已经是很平静了,记得大学刚学树的时候,我觉得这种代码只能靠背,而且还背不下来。

到现在,这种东西只是去看一遍它的思路,然后在心中大概的复现一次,遇到有问题的点就停下来详细想想。一个数据结构无非ADT和对应的增删改查,然后再想想哪块的代码可以复用,抽离出来。

接下来就是各种边界和小case,头一天晚上我看到两点钟,把全部的思路复现了一遍。第二天起来吃完隔离点送过来的早饭就开始写,直接在记事本里面开始进行实现,然后微调了下,过我自己的case,没啥磕绊就完成了。

后面的微软面试一共做了五个题,最后一面的leader说我对边界条件的分析很到位,是她今天面试的所有人里面最全面最准确的,我当她给了个好消息吧。

同年的四月,我在师弟的帮助下,再次进行了字节跳动的面试,一下午三面过关斩将,也在不久之后收到了字节跳动的意向书。

坦白来说,这个时期的我心中已经没有了什么波澜,不会特别高兴,也不会再对哪家公司产生特别的展开追逐的那种意愿。一来我已经呆过好几个公司了,那种大公司的憧憬和新鲜感对我而言已经没有那么大的吸引力,同时我也开始认为,一个程序员,他的目光不应该全部放在对哪家公司的追求上。

第一,我们服务于我们具体的业务和相应的技术,具体的业务是比公司这种平台性的东西更加值得讨论的。

第二,追求公司的本质是希望自我的提升,在这种前提下更应该把精力放在如何精进自己的技术水平上,因为公司本身并不能成为一个努力的方向和路线,它只是一个结果。

最后,又是一年的国庆,还是坐在电脑前。闭上眼睛,一路的回忆像浮光搬掠过眼前。

我喜欢看别人故事的原因是,几千个字的篇幅其实写尽了这个人很长的一段经历,浮浮沉沉,故事中的低潮可能在几行文字中就轻描淡写的过去了,读者喜欢去看走出这个低潮再见阳光的感动,其实对这个人来说,这一段恰恰是最难熬最难经历的一段。

我们看着故事中的人,好像自己也会离开这样的谷底。真实的说,这个故事中应该花大篇幅描述的难过我都略去了。

许多面试时候被否定的环节,被问到哑口无言的时刻,丹棱街SOHO微软大楼明灭的红光,冬天寒冷的西北旺东路到万泉河路海淀中街,爱奇艺十点半下班回去还在床上抱着电脑看一两个小时博客的那种追逐,西二旗人头多过Integer.MAX_VALUE的地铁站,一道题一个Bug困整整一个下午的纠结,二月新冠疫情落在家庭的恐慌,隔离时期对于家人的担心,老家甚至没有Wifi的手机热点面试,包括出来实习需要顶住的学业压力。

我把这个故事记录下来,是因为我喜欢《疯狂的程序员》里面的绝影,Boss绝,我想成为他那样的程序员,一个执着于代码,纯粹于代码的程序员。

本科期间我有些想做的事情未能完成,大三的时候武汉一个比中兴还低的本地的国企IT公司我都觉得很不错了,而时至今日我已经去过好几家大型互联网公司实习,拿遍了头部互联网的Offer,亦或者去到微软。

这些东西其实我在那时候并没想过,但是我也更加没想过绝对到不了今天。在晚归的中关村大街上,我经常会想到一首歌《奉献》,这是电影[飞驰人生]的主题曲。长路奉献给远方,岁月奉献给季节,我拿什么奉献给你。我们经常提起奉献,却很少真正理解奉献的样子。

对啊,到这一步,做到纯粹,更多的是热爱带来的奉献,我不是要执着于哪个Boss,或者执着于哪个公司,我是执着于我所热爱的程序,我所热爱的行业。

因为热爱,所以我不计回报,所以我做到比自己更多一点,因为喜欢,所以回忆里更多的是那些奉献与努力的时刻。

再回望去年随便收拾了两件衣服就踏上北京的自己,有些面试官听到我这个经历的时候会先大笑一下,然后说这样子是否有些冒进。也有些面试官因为这个性格将我挂掉,但是我已经过了那种因为别人评价感到疑问的阶段。如果再给我一次机会选择,或者说再给我一百次机会选择,在爱奇艺的那个电话里给的回复也还会是YES。

因为年轻,就是有无限的可能,青春就是不设限的。

阿里的招聘页面上有句话:If not now, when? If not me, who? 官方给出的翻译是“此时此刻,非我莫属”,我觉得差点意思。

时不我待,舍我其谁。

2020年10月3日于西安

写在最后

故事结束了,但是属于这个少年的未来才刚刚开始。

其实这个故事结尾最好的并不是他收到了多少offer,而是他终于找到了这份工作对于他的意义,找到了自已真正热爱的事业。单从这一点来说,他就已经成功了。

而当他拿到那些曾经遥不可及的大厂offer之后再回首,那些在暗淡时的迷茫困顿却不屈不挠用力生长的经历,每一秒都熠熠生辉。

我是敖丙,你知道的越多,你不知道的越多,我们下期见。


©著作权归作者所有:来自51CTO博客作者mb5fdb09f39fed1的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 从网瘾少年逆袭拿到微软 、字节等offer(上)
  2. 敖丙读者字节、滴滴面经(已拿offer)
  3. 阿里面试:说说一致性读实现原理?
  4. 苹果Mac如何使用iMovie剪辑添加字幕?
  5. 苹果Mac强大的批量重命名工具:A Better Finder Rename
  6. 如何解决苹果电脑弹出本地项目钥匙串提示?
  7. 32 道常见的 Kafka 面试题你都会吗?附答案
  8. 就算有“中台”模式,企业也应该重视“大部头”架构设计
  9. 产品加密之我见

随机推荐

  1. php时间戳转换
  2. php语言的标记是什么意思
  3. php+WebUploader图片批量上传
  4. php文件后缀名是什么
  5. PHP之内置web服务器
  6. 后缀名为php是什么意思
  7. 一篇文章帮你了解 PHP 7.3 更新
  8. php脚本的后缀名是什么
  9. php模板引擎有哪些
  10. php的设计模式是什么意思