林花谢了春红,太匆匆。
一晃眼,竟已到了快毕业的年纪。我经历了一场“漫长”的校招,将回忆总结于此。
前期积累
面试是对自己在校生活的总结,要珍惜在校时光:
- 确认目标,以后是做开发还是算法?程序员还是PM?
- 在目标领域发表顶级会议论文、参与实际项目或实习,提升自己在相应领域的积累 。
- 构思好想去的公司或地点,有针对性地准备。提前了解候选公司相关部门的情况,地区性人才补贴政策等。
基础准备
这篇推送主要总结算法岗面试的注意事项,分为算法题和机器学习两部分。
算法题
如果打算面外企,必须刷题;国内大厂很可能会问算法题。入门可以看《剑指offer》,练习推荐Leetcode。除了面试需要,我有3个原因推荐多做算法题:
- 很多算法题是实际工作中抽象出来的,需要考虑Corner Case,优化复杂度等,有助于提升分析问题的能力。
- 快速理解问题,掌握算法设计的流程,能提升自己的逻辑思维能力。
- 面试的时候很可能就是全英文的算法题,提前多做对于英文沟通有帮助。
- b站刷视频 我一般都是看左程云老师的视频
- Java数据结构与算法【面试必备 史上最全】学完一脚踢进大厂!_哔哩哔哩_bilibili直接上干货!!俗话说数据结构玩的好 大厂为你敞开门 助你高效准备java数据结构面试顺利拿到offer!, 视频播放量 137、弹幕量 1、点赞数 3、投硬币枚数 2、收藏人数 16、转发人数 0, 视频作者 Java并发编程, 作者简介 添加可领取更多马士兵教学视频、课件、源码以及咨询vip课程最新优惠,相关视频:还在到处寻找Excel函数用法?有这个Excel函数大全就够了,linux内核编程(基础,进阶,高级),深入理解计算机系统,伯克利大学CS61B: Data Structures and Algorithms 数据结构与算法设计 2019年春 中英字幕 001至096,从华为外包到华为正式员工的大数据之路,漫谈几点看法,速学数据结构-栈的原理与实现(Python),51cto风哥oracle云数据库高级工程师,一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解,java学习反射和注解_注解_元注解_尚学堂,【财务分析与建模】01 为什么要建模https://www.bilibili.com/video/BV1wi4y1U7rD?spm_id_from=333.999.0.0如果之前没有接触过算法题,和我一样不是大神,那么一开始感到吃力是正常的(我曾经被自己的智商气哭了出来)。我们不天资过人,也没有足够多的经验,自然会被打击。一遍不会就多看看再刷一遍,一直思考,慢慢总能会的。
大家可以选自己喜欢的方式做题,我总结了两种模式:
- 滴水穿石
面对每一道题,都思考清楚问题的关键,尝试多种方法解决问题。了解每一种方法的利弊和复杂度,力求最优最简洁地做这道题,这样做完一题基本上就拿下了一类题。这类做法适合于有耐心,探索欲强的人。 - 积水成渊
面对一道题,尽快想到一种做法,半个小时想不出来或者复杂度降不下就去看Discussion,掌握复杂度较优的某种做法,然后接着刷同类题,刷多了自然就能掌握这类题的规律了。这类做法适用于耐心和积累都欠缺的人(比如我)。
这两种方式起初大相径庭,但是做到中期都会趋于用最优解法做完题目。刷题初期可以参考别人优秀的代码,学习Coding风格,比如:变量名的取法,一些常用函数的优美写法等。中期做完题调试到最优之后,要检查自己的代码是否规范,可读性强,优美。刷题大概可以按照三个阶段来:
- 初期
按照Topic刷题,先了解当前topic概念,如背包,搜索等。每个Topic选5-10道题刷,熟悉模式。尽量选点赞多的题目,以Medium为主。实在太受打击,需要重燃希望,可以选1-2道Easy激励自己。刷完一个专题,总结一套自己的模板。要保证遇到Medium几乎没问题,普通Hard能较优解决。 - 中期
随机从题库中Pick题目,或者选高频企业考题刷;每周参加Leetcode周赛或Mock Interview。总结每个Topic的重点题目,选综合性强的刷,或者重新刷之前没有理解透的题目。平时和小伙伴互相模拟面试,缓解不适应感。大部分同学走到这里,校招差不多也结束了。 - 后期
我还没到这个境界QAQ
观察大神大概就是Leetcode Hard 很快有思路,然后调到最优解法。平时在Poj,Kickstart,Codeforces等地练习。(有些公司的笔试,还是需要后期的水平才能通过。所以,足够强大之前尽量找人内推)
机器学习
- 机器学习基础
《统计学习方法》(李航)&《机器学习》(周志华),可根据时间至少选一本阅读。概念要清晰,理解了符号含义后每一个公式都必须要自己推导出来。推荐自己慢推一遍,面试前难点再快推过一遍。
面试中可能会有:
逻辑回归及其推导公式?KNN和K近邻的区别?Bagging和Boosting的概念和设计过程,优缺点分别有哪些?LR和SVM的区别? - 深度学习基础
基本概念要能说明白,比如CNN,RNN的大概结构,梯度反向传播过程等。
推荐搜面经,检查下别人被问到的地方自己能不能答出来。平时自己总结基本知识点。
面试中可能会有:
1.激活函数:为什么需要激活函数?常见激活函数有哪些?它们有什么优缺点?
Sigmoid, Tanh, ReLu, Leaky ReLu, RReLu, PReLu, ELu, SeLu, Maxout 等基本的类型要清楚。
2.梯度消失/爆炸是如何产生?怎么解决?
非饱和的激活函数,LSTM,初始化,Batch Normalization,梯度截断与优化器的选取等关键词要答出。
3.过拟合欠拟合的原因?表现?解决方法?
掌握数据增广,特征工程,正则化,集成学习,Dropout,Early Stopping,加噪声,调整模型容量等常见方法。
4.对于每个领域的常见评测指标,要有所了解。
如:NLP领域的BLEU, NIST, PPL, WER, TER, GLUE, F-SCORE, ROUGE等。
5.了解目标小组的工作方向,阅读几篇他们的或相关方向的论文。 - NLP基础
如果是NLP领域,可以看一下《统计自然语言处理》及近几年每个方向的综述。
如果是北大的同学可以选《计算语言学》 这门课,老师讲解很清晰。面试前课程PPT最好全部回顾一遍,里面很多基础模型容易被问到,如:请介绍下LDA模型?上下文无关文法?等。 - 常见模型&前沿工作
要掌握相关领域的经典模型及近两年比较有影响力的工作。比如NLP领域的:
Word2Vec ( Skip-Gram & CBOW )
Seq2Seq
GAN系列
VAE系列
Tranformer
语言模型:ELMo & Bert & Gpt & XLNet
Capsule Net
Policy Gradient
Active Learning
Transfer Leraning
......
面试时可能会给一个工作场景,让你提模型解决问题。
个 人 准 备
工作
对于简历中提到的论文、项目及实习经历,都要回忆清楚工作背景、模型优点、算法框架以及实现细节。面试中我被问到过自己算法的某一步存了几个状态,有没有用到什么内存优化?所幸面试前每个工作都回忆了一遍,不然可能会漏答。
公司
投递简历前,要了解目标公司的政策。
- 内推:有些公司每个内推人可以免部分候选者的笔试,笔试算法门槛比面试高很多,所以问清楚之后再请人内推。
- 转岗:校招期间一家公司能投几个组?面试一个组如果觉得不合适,是否能换组?
- 内情:想去的组能力如何?关系如何?绩效如何?
许多问题,要投递简历之前问清楚。
英文
如果面试外企,需要捡回语感。我遇到过全英文算法面和全英文设计面。算法面其实大家刷题的时候都是英文已经熟悉了,设计面可能会问到你对公司某个产品的感受、建议之类的,所以要做好调研,了解这家公司的产品,避免词穷。
准备篇就总结到这了。加油复习,自信面试~
面试,你有哪些难忘经历?准备的妙招?害怕的地方?......欢迎留言评论~
相关书籍:
需要以上书籍可关注下方公众号回复【书籍】 即可货区