CS 求职分享--算法岗

前言

友情的小船要翻?

此篇求职分享来自实验室好哥们 “ LIU”,自称菜鸟,发了 DAC 顶会,顺拿了阿里 offer, (喂,过度谦虚 = 骄傲 )

一只热爱算法、撕代码、调 BUG 的羊


听,有人要一本正经矫情

毕业季找工作,大概是人生中类似高考的一个重要转折点。这标志着我们二十几年的学生时代即将终结,进入人生下一阶段。

我的秋招求职之路 - - 努力+幸运。

受博主的邀请,希望我为机器学习算法岗求职写一些经验;再者,求职也是人生很宝贵的一次经历,点点滴滴,日后翻看,也是回味无穷,所以便提起了笔。

看,菜鸟逆袭经历:

入学时:没有任何计算机/硬件基础。只想做好老师项目,找份好的工作。

研一上:杂事很多,没学好课程,遗憾。学了matlab,并在python上开了个头。大约在 寒假 时坚定要走软件这条路。

研一下:课程划水了,但专心科研。开始学习数据结构,在leetcode刷题。

研二上:跟着大佬混了个数学建模二等奖,作为二作完成了顶会paper,并专心学习机器学习基础。

研二下:paper被会议收录,主导并完成一篇paper(4月下旬)。拿到了阿里的实习offer(4月中旬)。参会回国后赴京实习(7月初),拿到阿里“百技”最佳团队、最佳个人(8月初),一个月顺利拿到offer。9月1日收到意向书,基本结束秋招。

很显然了,我不是天资聪颖的小朋友,反而是很贪玩很叛逆的“自家的孩子”。但“自家的孩子”只要准备得当,也是有机会逆袭哒(捂脸)!

知识储备

以下只是我个人的见解,如有不全,只因见识浅薄。

岗位架构

互联网技术方面,可以粗略分为前端和后端,前有 WEB 后有 数据库。

对于大公司而言,在前端和后端之间,因为业务原因,可能会多一个“中台”层面——例如衔接业务和数据库之间的中间层,技术上跟后端开发挺像。

近几年AI火热,因此会有少量高薪的“算法工程师”offer。

更进阶的还有架构师这些,不过对于应届毕业生,基本撬不动。

码农基本技能

说到码农技能,就要参考下计算机系的课程了。

归纳来说,就是语言和数据结构。

python那么通用,学!
数据结构那么基础,学!
coding那么有趣,写!
SQL那么根本,学!

关于java和c语言,还是建议学一种。主要还是看公司、看项目。其它还有操作系统,计算机网络等。

就我观察,coding肯定是要考,而且着重考察的。SQL、操作系统、计算机网络这些,有些公司笔试会考。腾讯、百度在今年的笔试中都考了挺多的。

如果调bug不能像打游戏那么上瘾,可能意味着码农不是一个很好的选择。

机器学习技能

机器学习就是要学习各种算法。

算法是很偏向数学偏向统计的东西,所以,统计和概率论,微积分,线性代数这些高等数学的基础课,还是要很熟的。

基于此,才有常用的机器学习理论(交叉验证、特征选择、模型评估等),常用机器学习模型(LR、SVM、XGBOOST等),以及常用的深度学习模型(AlexNet、VGGNET等)。

这些在书籍《统计学习方法》、《机器学习》、《深度学习》中都有非常详尽的介绍。

对各机器学习模型的原理做到有自己的理解,掌握各算法的优劣、适用场景(不能抱有幻想,任何点都可能会考察)。

推荐一个知乎专栏:BAT机器学习面试1000题。对机器学习知识点的覆盖非常全面到位,很适合在机器学习求职前进行准备,查漏补缺。

面试准备

简历

简历是个人给企业的第一印象。

简历力求简洁、大气、明了地讲述个人技能、项目经历,突出表明自己的能力、优点,必须突出表明自己胜任这一份工作。另外简历不宜过多(1~2页即可,正反打印),最好是每一页都写满,不要留空白,否则会降低颜值。

在找机器学习岗位工作时,可以清晰介绍自己在这个领域的理论积累,相关项目、竞赛、实习经历都可。如果实在没有相关的项目,则也可以将实验室的项目在里面体现,但是可以突出其中运用到的机器学习技术,或是其它自己擅长的领域。

写在简历里面的东西,必须仔细推敲,做到无懈可击。

简历是需要一遍遍进行迭代、完善的,越早准备越好。第一版的简历会很粗糙,甚至会没有内容。但是我们可以查漏补缺,弄清楚自己差什么,从而才可以进行有的放矢地提升能力,并逐步完善简历。我的第一版简历写于17年底,到18年3月找实习时,仍然没太多可写的内容,于是把在实验室做的相关的工作也摆上去了。

笔试

笔试是带有公司偏好的针对性考察。

阿里考察得很全面,阅读能力、归纳总结能力、基本数学能力等都有涉及,最后再来一道动态规划的编程题(做得非常爽),是一次非常综合的考试。

对于头条、网易,笔试就是简单粗暴的编程题。一般前两题很基础,都是leetcode的原题,可以找到。后两到三题就看他想不想让你做出来了。需要注意的是,编程题的数据读入和数据输出和leetcode完全不同。

在笔试前一天,通常会给例题,必须去熟悉,甚至可以在个人的IDE里写好(编程题允许切换屏幕)。否则在正式做题时可能会浪费很多时间。

对于百度、腾讯等公司,笔试题会考较多操作系统、计算机网络等内容。

对于外企,笔试题很可能是以英文形式给出。如果不是现场笔试,那就助攻走起~

面试

面试流程:自我介绍—针对简历讲项目细节—考察基础知识—手撕代码—向面试官提问。

  • 自我介绍

以精简为主。简单明了介绍自己所擅长的技能、在之前工作中最耀眼的成果即可。

  • 基础知识的考察和针对简历讲项目细节

比较有用的技巧是: 主动引导。
如果面试官对这个项目不熟悉,自己可以主动将面试官引导到他感兴趣,自己也熟悉的领域。

此外可以多讲自己的理解,突出自己的深度,通常讲得越深面试官越喜欢。

当然,面试官也可能会抓着一个点往深处问,答不上来没关系,可以和面试官探讨。

所以建议自己提前准备一些话语,引导技巧(个人不喜欢过分强调技巧,跟面试官兜圈子而没有深刻印象给他留下,结局不太会好)。

网易比较特别:一面均考察智力题,考察你的思维品质、随机应变的能力。

手撕代码

据上届百度的师兄说,百度三轮技术面,每一轮都手撕代码,写不出来直接gg。据说手撕代码占面试成绩的60%,重要性不言而喻。刷题,刷题,刷题,重要的事说三遍。

提问

面试最后的流程。

找工作是求职者和公司双向考察的过程,更是求职者近距离考察公司的机会。对意向公司有哪些疑惑的,对所属团队想有哪些了解,技术有什么侧重,都可以在这个环节进行提问,面试官也都会给予相应的解答。

关于实习

实习是秋招 PASS 卡。

通常,3月会有一次实习招聘(提前批),对象是 5~8 月实习生;5月底还会有一次,对象是暑期两个月实习生。

据我的体验,阿里的实习招聘,提前批难度较大,4轮技术面和一轮HR面,而暑期批只有两轮面试,难度相对低一些。

注意:提前批挂了也可以参加暑期批。

建议大家去找实习,原因有如下几点:

  1. 阿里的只要拿到实习offer就可以秋招 直通终面 ,爽歪歪
  2. 在实习招聘的过程中可以检验自己的知识水平,熟悉笔试、面试流程。
  3. 如果可以去意向公司实习,可以实地考察公司内部风气,了解团队氛围,也可以认识领域大牛,发展自己的人脉。

对于转正offer来说,不同公司的难度不同。有公司基本上都可以转正,但阿里转正率不算太高(据我观察大约只有40%)。

实习也是有利有弊的,如果不能留用,可能会因为实习期内没时间进行招聘准备,而在接下来的招聘季举步维艰。但如果到心仪公司实习,不必多想,好好干。这样才是争取留用的最佳姿势。

关于竞赛

互联网公司都希望校招生有实际经验,但我们不可能有工作经验,因此要么实习,要么竞赛,论文勉强凑合。竞赛成绩达到前10%最佳。

对于提升竞赛成绩,在知乎上有很多教程,这也有很多套路,如:多使用集成学习;多看看别人的代码,然后把别人的代码拿过来用;尝试多种调参技巧 (玄学调参哈哈哈哈)。

个人建议:比赛成绩好,并能讲清楚为什么比别人好,有一套自己的分析框架,非常加分。

推荐书单

机器学习方面

1、《统计学习方法》

2、《机器学习》 周志华 在这里拜拜大牛。

3、《机器学习实战》 能看英文版的尽量英文。因为当时缺少项目,不知道以后能不能去实习,因此把书上几乎所有的案例都在自己的机器上做了一遍。

4、《深度学习框架PyTorch—入门与实践》我学的是PyTorch,TensorFlow大神可以无视之。个人认为PyTorch适合自己调试,TensorFlow适合工业实现,因此选学前者。我也看了《深度学习入门之PyTorch》,但不推荐。

码农基础方面

1、《大话数据结构》挺好的一本书,通俗易懂,没槽点。

2、《数据结构与算法 Python语言描述》裘宗燕著。对于当时只会Python的人而言,专门找一本以Python语言描述的数据结构的书是必要的。

3、《剑指offer》、《程序员面试宝典》

4、leetcode、牛客 网站平台。程序猿必备网站! 个人喜好leetcode刷题,睡前用牛客网刷刷数据结构与算法。

计算机语言

1、《Python基础教程(第二版)》我的入门书。个人认为超经典,对初学者较难,可以多看几遍。

2、《Java从入门到精通》阿里的Java是世界级的,在这个公司还是要会一丢丢Java。Java推荐使用 intellij。此外,对于计算机语言,还是建议多看官方文档,毕竟官方的才是标准的。

3、《MySQL必知必会》不需要了解MySQL这种声明式编程语言内部实现,基本了解如何使用即可。这本书就够了。此外,对于数据库,还必须知道ACID。

进阶

1、《深入理解计算机系统》对计算机原理的阐释,关于如何写出容易执行的代码。

2、《大话设计模式》《重构—改善既有代码的设计》主要关于如何设计逻辑清晰易于写作的代码。这在找工作的时候不太考察,但对于编码习惯、思维方式的提升挺有帮助的。

其它的建议

1、研一的小盆友好好上课,成绩真的非常重要

– 外企的敲门砖 – 外企文化认为成绩是能力和态度重要的体现。所以,能好好学习就去学,多一分总比少一分要好!

2、越早明确自己的目标越有优势。

对于打算转行的同学,需要向梁静茹 借下 勇气。

如果不是非常热爱自己想从事的行业,请三思后绕门走,毕竟高薪的背后就是辛苦的付出以及那少得可怜的头发。

但也不可在犹豫的过程中虚度光阴。如果下定决心去搞互联网,需要认真准备,该看的书好好看,该刷的题好好刷。 上帝的仁慈在于:只要你想,它总给路。

3、在看书的同时,多写一写笔记、博客之类的。好记性不如烂笔头。再者,对自己从事的事务有信心,多多和别人分享、切磋,方能学到更多。

4、心态平和。面试可以看作是和面试官的一次技术聊天,不必拘谨。

和找对象一样,一切都是缘分。有的公司就跟你有莫名的缘分,即使自觉能力不足,也可能会给你 offer 。没有缘分的,就不必强求。认识一个同学,在天池上拿了百万的奖金,然而在阿里云的面试中,第一轮就淘汰了。

所以谋事在人,成事在天。厉害的公司很多,BAT JTMD都有7家了,还有海康网易等等大企业,总会收获到心仪的 offer。

致谢

感谢父母。任何时候都替我出谋划策,鼓励并支持我的决定。

感谢老师。对学生严格要求,鼓励支持学术往深入进行,跟着老师学到了很多。

感谢曼杰。虽然相处只有短短两个月,但却是脱离低谷的起点。是一所最令我感到深刻的学校。心底默默再种一波草。

感谢我哥,感谢郑志华、严辉学长,在职业方面给了我莫大的帮助。

感谢实验室同届伙伴们,跟大家相处很愉快。

感谢舍友们和对门的不杀之恩。万一在火锅里投毒可能我就没机会坐着打字了hhh

感谢 “小灰灰” 博主盆友的邀请以及帮忙润色文字,以及日常的帮助…

feifei wechat
欢迎扫描微信公众号交流哟~~