算法面试和实习经验分享

本人是2018届,去年实习拿了阿里算法工程师offer,最终顺利转正,也是看了师兄师姐的经验,饮水思源,于是将自己的总结一份,希望能够帮到师弟师妹。

1. 学习准备

What you want?

想清楚自己要做什么?

  • Follow自己的兴趣方向 OR 现在什么挣钱最多?
  • 算法对理论和最新paper的学习,而且是长期的,能否承受。
  • 算法各大公司HC是最少的,而竞争人数在爆炸增长。

理论基础

  1. 基本的算法理论,分类、聚类、优化算法、深度学习······,可以看看《统计学习方法》,吴恩达的公开课,李宏毅深度学习课程。。。
  2. 算法的数学推导,如GBDT等。
  3. 自己的理解,应用之后的一些看法,如优缺点,应用场景。

编程

刷题,剑指offer,Leetcode,自己动手实现一遍。

语言最好熟悉Java或者C++,Python和SQL要熟练,处理数据和特征工程很重要。

深度学习框架,TensorFlow应用比较广泛,阿里实习时ODPS里面都可以用,PyTorch学术界应用也挺广泛。

实际项目

导师的项目,做的有多深入,理解是否到位,用的方法是否follow最新的paper。

是否发过文章,发在哪一类期刊上面。

比赛项目

比赛赛题的理解。

名次,越靠前越好,拿奖最好。

比赛中承担什么角色,做了哪些工作,自己是否还有能够提高的地方。

总结自己整个过程,做了哪些,为什么要那么做,目前最新的方法是怎么做的。

2. 面试经历

简历

  • 简洁:不要超过一页*3,简明写出自己的match的经历,面试的时候再详细聊。
  • 奖励:一定要是与职位match的,技术的就不要写学生会、各种水奖励。

面试心得

简单自我介绍,一分钟之内,准备好措辞。

面试时候尽量别紧张,没什么大不了,心态稳一点。

说话之前想好再说,思路要清晰,最好有个草稿纸写写画画。

面试官的问题,一定要问清楚再回答,面对不会的问题,不要说不会,要与多沟通讨论这个问题的解决路径,你困惑的地方,他会给你一些提示。如果实在是完全不会,也可以说没有学过,下去了解下。

如果感觉挂了,面试之后问问面试官,自己哪里还需要加强学习的地方。

HR面不要大意,很多HR都是做技术出身的,实力也很强,即使她不懂技术,表现也要谦卑

面试问题

阿里投了菜鸟,两轮挂掉,然后又被捞起来,面了四次(其中一次面C++,问我什么水平,我说hello word水平,于是这一面基本算是没面,面试官随便问了些问题),总共阿里面了6面。

下面总结了面试的各个公司的问题(不限于阿里),其中腾讯面游戏部门时候,面试官居然问我玩不玩游戏,王者荣耀什么段位,(可能这造成了我在校招的时候别人都在找工作,而我却在玩王者荣耀),但是主要就说了下自己对于影响和伤害的理解,那个英雄bug,面试官概括说这就是游戏平衡性。

在回答问题的时候尽量基于数学来推理,腾讯有一面和面试官在讨论一个问题时,他说很少有人继续分析为什么,非常地满意。所以有时候回答完,最好再说说为什么。

算法理论

  1. LR,SVM,KNN,GBDT,XGBoost,K-means,决策树,PCA等原理和推导,数学上解释其中细节,为什么。
  2. 对深度学习的理解,CNN,LSTM原理。熟悉那些深度学习框架。
  3. 算法对比,ID3和C4.5却别,XGBoost、随机森林和GBDT区别,Adaboost和Boosting的区别。
  4. 损失函数有哪些,自己的理解。
  5. 优化方法,如rule对比sigmod优势,是否知道其他的函数。
  6. 知道的评价方式,优缺点,如AUC.
  7. 如何防止过拟合,L0、L1正则和L2正则,为什么L1正则具有稀疏性,为什么要交叉验证。
  8. 不平衡数据的处理方法。
  9. 对推荐系统的了解,提升CTR有哪些方法,有哪些Learning to rank方法。

编程&数据结构

  1. HBase原理,Hive自定义函数UDF,udf、udaf、udtf区别,gfs和hdfs区别。说说map和reduce。
  2. java多线程问题,生产消费者模式。线程和进程区别。
  3. 红黑树原理,B树等,排序二叉树,hash表,链表查找时间复杂度。
  4. 数据倾斜是什么,怎么处理,Join时候应该注意那些操作避免数据倾斜。
  5. Python yield,惰性求值,lambda表达式。
  6. Hashmap,TreeMap,LinkedHashMap原理与区别。
  7. 剑指offer上题目,如旋转数组等。
  8. SQL实现特定功能。

比赛

  1. 比赛赛题理解,建模问题。
  2. 比赛中耗时最多的部分?(特征工程);特征工程的看法,如何设计。
  3. 细节问题,为什么要这么做,有什么理论依据。
  4. 业界常用的方法,最新方法。

基础

  1. 计算机网络:如TCP三次握手,浏览器输入地址到返回页面整个过程。
  2. 操作系统:线程和进程区别。

智力题

  1. 概率问题:从数学上求的概率值而做出结论,不要凭感觉。
  2. 淘宝有1亿总量的商品数量,你作为一个用户通过什么办法得到京东的商品总量。
  3. size为100的数组,范围是1-101,有两个重复的数字,在线性时间,常数空间下找出这两个重复的数。
  4. 一个数组,size为n,对其中n-1个数做加1操作,然后最少经过多少次使得每个数都一样。

交叉面

  1. 深度:问一些项目问题,看你的理解程度。
  2. 视野:业界有哪些方法。

HR问题

  1. 自我介绍。
  2. 项目和比赛细节。
  3. 介绍那边主要业务,地点,薪资,补贴等各种。
  4. 有些HR问了怎么看他们的公司和阿里。

3. 实习经历

实习遇到了很多大牛。主管做了十多年机器学习,一个师兄以前是国外大学老师好像,数学基础很好,成长很快。实习生一个来自UCB的小姐姐,一个双鸭山发论文大佬,一个愣头青(我不说是我)。

  1. 找paper,看paper,如何在项目上应用实现。在学校看的英文文献比较少,虽然六级过了,其实阅读能力在直线下降,平时多看看论文至少阅读能力不会下降。
  2. 熟悉ODPS,UDF等,在上面做数据预处理,机器学习建模工作。对于算法整个部署的流程,上线都了解了。有很多数据和权限的问题需要和不同的人沟通讨论,也保持存在感。
  3. 被Challenge,心态放开,记下被Challenge的点慢慢啃,最终主管对实习的工作还是比较肯定,评价是正式员工的工作完成度。
  4. 活动很多,可以认识挺多其他部门的人,还有认识了许多同校师兄。平时组内最多的就是运动,一起打篮球比较多,隔壁组好像比较喜欢王者荣耀开黑。
  5. 杭州夏天很热,冬天很冷,饮食的话口味比较清淡。成都才是个好地方。

总结

  1. 平时多看看paper,扩展自己的视野和方向,有机会自己发几篇。
  2. 基础要扎实,像编程、数学、算法理论。
  3. 对于自己的项目或者比赛,好好总结,对于其中的点要揭示出遇到什么样问题,为什么要这么做,比赛做完之后看看别人的代码和答辩视频。
  4. 多看看别人面试经验。

时间略长,想起来再继续补充。。。。

其实无论那个岗位,要学些什么自己心里也是有点B number,有时候还是有太多惰性,想要找捷径。记得有一句话,“找一个怪兽,让他追着你,你就不会停下”。

猜你喜欢

转载自blog.csdn.net/shine19930820/article/details/80098065