Peripateticism

Yuens' blog

View the Project on GitHub

header

2018年面试总结

写在前面:offer多不代表工程能力强,不要因为Offer多就觉得厉害,但是肯定是考试型选手,题目刷了,公式推了,项目说(总结)了,问题不大。好好复习,厚积薄发。前期准备好了,面试就是水到渠成。

曾看到一前辈写的经验,尤其对于996经常封闭开发的同学来说,想保持热情不断学习新的东西还是挺难的,因为工作回来已经很累了,怎么样保持自己的竞争力?

他的建议是保持对技术的热情,加入技术导向的小组。从组员身上学习与工作相关的新技术,也可以带领组员研究符合需要的新技术。老板逼你996画大饼干活,不用那么努力砸很多时间上去,保重自己的身体是根本,人生重要之经验。

为什么说到这一点?因为我把我的经历分为三部分:

1.第一阶段:锻炼身体

先从第一部分锻炼身体开始说,一年前,因一次赶项目,感觉身体不太好:有时突然从座位上站起身头晕,或者从饮水机那里接完水回来,突然感觉头晕。当然还有一些自身原因:体重超重。

从那时起,我每隔一小时,便去卫生间或楼道里锻炼身体。比方做一些拉伸运动,趴在洗手台水池做俯卧撑,还有蹲起,跳跳等。但是没有哪个活动让我感觉可以一直做下去或者慢慢积累。

不过时间长了以后俯卧撑的数量上来了,即使难度还是趴在洗手台上,从原本每天一二百个左右可以每天做到两三百三四百。从那以后我便进一步提升难度,因为我也有中午晚上吃完饭散步的习惯,我便在晚上在公园散步时,趴在公园长椅上做俯卧撑,角度低下来难度上来了,散步一个小时左右从最初可以做两三百个,到两三个月之后可以做五六百个。一天算下来的俯卧撑将近1000。

夏天到了,做完这些俯卧撑,挥汗如雨。与此同时,我还坚持每天周内跑3.5km,这个距离恰好是从宿舍到公司。也是在这段时间内,体重下降,肌肉增加,因为是俯卧撑,所以主要是胸肌。

在这之后,再次提升难度,在公司楼道里,将难度划分为台阶高度,做俯卧撑,一天可以做到1500左右。

我前面叙述这么多关于身体,是因为第一阶段这部分打好了身体基础,养成习惯,后面早起刷题,晚上个别时间晚睡,出去面试等等,都需要超强的身体素质,而且千万不要生病。晚上十一点半睡觉,早上六点半起床,至少保证七个多小时睡眠时间,中午午睡十来分钟,其它时间都用来做题,项目总结。

2.第二阶段:刷题,巩固基础,总结项目

这样,我便有能力进入第二阶段,但是我锻炼身体的习惯并没有放松,到最后难度变为脚高手低的,脚在第四级台阶,手在平地,做俯卧撑。一天最多做了5000个。同时第2阶段开始,每天早上6:20~7:00之间起床,直接去公司开始剑指Offer刷题,开始的第1天是7月9号,花了一个月多的时间过完了第一遍,每天晚上散步去自习室看剑指offer电子书,早上和中午牛客网刷题。

9月底10月初的时候,剑指offer已经完成第二遍,同时总结题目和答案到自己的Github上,第2遍的重点在于看别人的解答,有其他的哪些方法。

9月底10月初也开始C/C++基础知识总结。这部分,一个是牛客网上本身有很多常考C/C++题目,大概100道以内,同样的自己总结题目和别人答案到Github上。

与此同时,十月初到十二月初,我在网上报了C/C++课程,花了一点钱让人带一下,以C++ Primer为大纲,因为基础薄弱我收获良多。

以上刷题还有基础知识点是两个重要的地方,除此以外,便是总结项目,这个相当重要。把之前自己做过的项目,横向纵向总结,我们用的方法的原理,场景,优缺点,改进,要有自己的思考深度,核心部分的代码多看几遍,甚至重写,自己写出来,这是纵向深度挖掘项目,再就是横向挖掘,此类方法的同类方法的优缺点,大概原理,应用场景,与我们所用方法的异同等等。我把我做过的几乎每个项目按照我说的形式,写成了博客,链接也附属在我的履历上。

题外话,履历简明扼要,量化提升性能的数字或指标,重点方法关键词加粗,推荐用LaTeX的模板。其它经历也只写和目标岗位相关的。

差不多总结一个项目,对应一篇博客,每篇总结花一周时间,差不多一个半月也总结完了。

3.第三阶段:面试总结反复迭代

十一月中旬,开始第三阶段,从小公司往大公司的规模开始面试,一个是拿小公司练手查漏补缺每次总结得失考题,二是积累信心和珍惜机会,把好的机会留到后面。注意,我这个阶段仍旧每天总结,早去公司,做俯卧撑锻炼身体。

从每周两三个面试,到四五个,五六个,甚至十来个。因为初期练手,可以投一些其它城市的公司,一来是自己练手并不是真的去,二来以电话视频的形式,节省路上开销和时间。

在拉勾上投了一个月左右,也面试了这么长的时间后,发现早点投递好,别人不一定给你面试机会,等到一个月的练手时间结束,发现自己通过率在80%左右,信心大增。开始投大公司,因为能投的小公司已经投的差不多了。这个时候,开始找朋友内推各家公司,很快便可以得到面试机会,结果是还算顺利吧,有些题目常考,下面好好准备准备,基本上也差不多了。

说白了,哪怕是个傻子,把常考的几个题目代码多抄几遍,也会了,智商不够,勤奋来凑。另外第三阶段,每天早点去公司学习,晚上都累成了狗,没功夫学,除非带实习生,给他上班时候讲,回顾自己项目经历和知识点,把他当面试官。晚上累了,不想学,有条件的话也可以把室友当做小黄鸭给他讲,回顾知识点,强迫自己学习复习。

HR面,非名校,无名公司,怎么谈薪酬和级别?看了HR套路总结,也面了很多HR的我来说,拿很多Offer,让她有压力,开门见山说我有哪些家多钱的Offer,虽然你给我说了我能拿到的数字,但其实HR一开始拿各种理由说不能再高了,大多情况也只是说说,你可以反问她,你给这个数字,你觉得我回来嘛,无非就是你心里有个上限数字,我心里有个底线数字,想知道彼此的数字罢了,确实是一场博弈。可以直接告诉她你期望数字,你也可以说的比期望的高一些,再让她砍价也行,这是一种策略。

级别这个东西不好说,我觉得自己工程有待提高,没去进一步争取,不过级别问了几个人还是很重要。在一定程度上给你定薪,再就是意味着话语权,资源,公司中的地位,跳槽的时候一般不会平级跳,会跳高一级的。

面了四十家左右的公司,知道三件事:

此外,感觉多少面试也看眼缘,早点加目标公司部门的同学为好友,平时聊聊,我觉得挺好进,排除掉性价比高的,确实是技术大拿的,咱们普通人,招谁不是招呢?

4.其它

4.1 外企注意事项

投外企,早2到3个月投,除非认识HR或者部门内的同学可以加快面试安排,中文简历直接翻译,内容进一步优化精炼,因为中文比英文凝练。

4.2 coding常考题

最大连续子数组和,字符串全排列,字符串复制,内存复制,二叉树层序遍历,数二进制形式的数字中1的个数,快排,堆排,归并排序,字符串转数字,正则表达式引擎,反转链表,成环链的表入口或长度,重建二叉树等。

二叉树的题目稍微有点难,多看看但是考的不多,智商不够,勤奋来凑,常考的多抄几遍,咱们又不是大笨蛋,怎么说也都能默写出来了。太简单的线性表的题目,没啥说的。大都是剑指Offer上面的题目,投外企的话,需要再LeetCode刷更多题喽,或者相关题,如2Sum到3Sum等,掌握方法论。

4.3 系统架构题

现在也爱考察系统架构题,一般最后一轮,让你设计一个XX,怎么设计,或者讲讲某个框架的特点,底层设计等等,需要事先对知名的框架分析总结,看看别人总结与源码,分析一下,自己写一篇文章记录就更好了。

4.4 公式推导

因为目标岗位是工程岗,或者说是算法工程,但实际内容和我的项目经历中,也有不少跟算法模型相关的,为此我也准备了逻辑回归,支持向量机,牛顿法,DFP拟牛顿法的公式推导,最亮的点是准备了凸优化中的sgd,adam,rmsprop,momentum等方法的原理与指数滑动平均EMA的关系,对应图像如何跳出局部最优与优化器选择,因为这牵扯到模型训练。

另外机器学习这里,业务模型卷积网络的一些特例mobilenet,shufflenet,ssd,yolo,rcnn系列也要懂关键点,特点和底层计算原理。

4.5 关注原理

说到这里不得不提到原理这个东西,面试到最后,有几家着重看这个,举几个例子,Linux底层怎么做内存管理,多线程调度的原理是什么,GDB或者Valgrind内存检查工具的原理是什么等等问题。

可以看出来,有量化指标的项目经历是一部分,另一部分是对原理的理解认识。这部分都是可以突击的,当然有时间还是仔细分析,同时看看别人写的博客自己总结出一份最棒的出来!

4.6 建立联结

不认识目标公司的同学,可以通过加行业QQ群、微信群后,再在群里以目标公司名为关键词检索成员名,直接建立联结进行内推。此外,也可借助linkedin、脉脉等职场社交应用建立联结。

其它