本人是2018届,去年实习拿了阿里算法工程师offer,最终顺利转正,也是看了师兄师姐的经验,饮水思源,于是将自己的总结一份,希望能够帮到师弟师妹。
1. 学习准备
What you want?
想清楚自己要做什么?
- Follow自己的兴趣方向 OR 现在什么挣钱最多?
- 算法对理论和最新paper的学习,而且是长期的,能否承受。
- 算法各大公司HC是最少的,而竞争人数在爆炸增长。
理论基础
- 基本的算法理论,分类、聚类、优化算法、深度学习······,可以看看《统计学习方法》,吴恩达的公开课,李宏毅深度学习课程。。。
- 算法的数学推导,如GBDT等。
- 自己的理解,应用之后的一些看法,如优缺点,应用场景。
编程
刷题,剑指offer,Leetcode,自己动手实现一遍。
语言最好熟悉Java或者C++,Python和SQL要熟练,处理数据和特征工程很重要。
深度学习框架,TensorFlow应用比较广泛,阿里实习时ODPS里面都可以用,PyTorch学术界应用也挺广泛。
实际项目
导师的项目,做的有多深入,理解是否到位,用的方法是否follow最新的paper。
是否发过文章,发在哪一类期刊上面。
比赛项目
比赛赛题的理解。
名次,越靠前越好,拿奖最好。
比赛中承担什么角色,做了哪些工作,自己是否还有能够提高的地方。
总结自己整个过程,做了哪些,为什么要那么做,目前最新的方法是怎么做的。
2. 面试经历
简历
- 简洁:不要超过一页*3,简明写出自己的match的经历,面试的时候再详细聊。
- 奖励:一定要是与职位match的,技术的就不要写学生会、各种水奖励。
面试心得
简单自我介绍,一分钟之内,准备好措辞。
面试时候尽量别紧张,没什么大不了,心态稳一点。
说话之前想好再说,思路要清晰,最好有个草稿纸写写画画。
面试官的问题,一定要问清楚再回答,面对不会的问题,不要说不会,要与多沟通讨论这个问题的解决路径,你困惑的地方,他会给你一些提示。如果实在是完全不会,也可以说没有学过,下去了解下。
如果感觉挂了,面试之后问问面试官,自己哪里还需要加强学习的地方。
HR面不要大意,很多HR都是做技术出身的,实力也很强,即使她不懂技术,表现也要谦卑。
面试问题
阿里投了菜鸟,两轮挂掉,然后又被捞起来,面了四次(其中一次面C++,问我什么水平,我说hello word水平,于是这一面基本算是没面,面试官随便问了些问题),总共阿里面了6面。
下面总结了面试的各个公司的问题(不限于阿里),其中腾讯面游戏部门时候,面试官居然问我玩不玩游戏,王者荣耀什么段位,(可能这造成了我在校招的时候别人都在找工作,而我却在玩王者荣耀),但是主要就说了下自己对于影响和伤害的理解,那个英雄bug,面试官概括说这就是游戏平衡性。
在回答问题的时候尽量基于数学来推理,腾讯有一面和面试官在讨论一个问题时,他说很少有人继续分析为什么,非常地满意。所以有时候回答完,最好再说说为什么。
算法理论
- LR,SVM,KNN,GBDT,XGBoost,K-means,决策树,PCA等原理和推导,数学上解释其中细节,为什么。
- 对深度学习的理解,CNN,LSTM原理。熟悉那些深度学习框架。
- 算法对比,ID3和C4.5却别,XGBoost、随机森林和GBDT区别,Adaboost和Boosting的区别。
- 损失函数有哪些,自己的理解。
- 优化方法,如rule对比sigmod优势,是否知道其他的函数。
- 知道的评价方式,优缺点,如AUC.
- 如何防止过拟合,L0、L1正则和L2正则,为什么L1正则具有稀疏性,为什么要交叉验证。
- 不平衡数据的处理方法。
- 对推荐系统的了解,提升CTR有哪些方法,有哪些Learning to rank方法。
编程&数据结构
- HBase原理,Hive自定义函数UDF,udf、udaf、udtf区别,gfs和hdfs区别。说说map和reduce。
- java多线程问题,生产消费者模式。线程和进程区别。
- 红黑树原理,B树等,排序二叉树,hash表,链表查找时间复杂度。
- 数据倾斜是什么,怎么处理,Join时候应该注意那些操作避免数据倾斜。
- Python yield,惰性求值,lambda表达式。
- Hashmap,TreeMap,LinkedHashMap原理与区别。
- 剑指offer上题目,如旋转数组等。
- SQL实现特定功能。
比赛
- 比赛赛题理解,建模问题。
- 比赛中耗时最多的部分?(特征工程);特征工程的看法,如何设计。
- 细节问题,为什么要这么做,有什么理论依据。
- 业界常用的方法,最新方法。
基础
- 计算机网络:如TCP三次握手,浏览器输入地址到返回页面整个过程。
- 操作系统:线程和进程区别。
智力题
- 概率问题:从数学上求的概率值而做出结论,不要凭感觉。
- 淘宝有1亿总量的商品数量,你作为一个用户通过什么办法得到京东的商品总量。
- size为100的数组,范围是1-101,有两个重复的数字,在线性时间,常数空间下找出这两个重复的数。
- 一个数组,size为n,对其中n-1个数做加1操作,然后最少经过多少次使得每个数都一样。
交叉面
- 深度:问一些项目问题,看你的理解程度。
- 视野:业界有哪些方法。
HR问题
- 自我介绍。
- 项目和比赛细节。
- 介绍那边主要业务,地点,薪资,补贴等各种。
- 有些HR问了怎么看他们的公司和阿里。
3. 实习经历
实习遇到了很多大牛。主管做了十多年机器学习,一个师兄以前是国外大学老师好像,数学基础很好,成长很快。实习生一个来自UCB的小姐姐,一个双鸭山发论文大佬,一个愣头青(我不说是我)。
- 找paper,看paper,如何在项目上应用实现。在学校看的英文文献比较少,虽然六级过了,其实阅读能力在直线下降,平时多看看论文至少阅读能力不会下降。
- 熟悉ODPS,UDF等,在上面做数据预处理,机器学习建模工作。对于算法整个部署的流程,上线都了解了。有很多数据和权限的问题需要和不同的人沟通讨论,也保持存在感。
- 被Challenge,心态放开,记下被Challenge的点慢慢啃,最终主管对实习的工作还是比较肯定,评价是正式员工的工作完成度。
- 活动很多,可以认识挺多其他部门的人,还有认识了许多同校师兄。平时组内最多的就是运动,一起打篮球比较多,隔壁组好像比较喜欢王者荣耀开黑。
- 杭州夏天很热,冬天很冷,饮食的话口味比较清淡。成都才是个好地方。
总结
- 平时多看看paper,扩展自己的视野和方向,有机会自己发几篇。
- 基础要扎实,像编程、数学、算法理论。
- 对于自己的项目或者比赛,好好总结,对于其中的点要揭示出遇到什么样问题,为什么要这么做,比赛做完之后看看别人的代码和答辩视频。
- 多看看别人面试经验。
时间略长,想起来再继续补充。。。。
其实无论那个岗位,要学些什么自己心里也是有点B number,有时候还是有太多惰性,想要找捷径。记得有一句话,“找一个怪兽,让他追着你,你就不会停下”。
CSDN原文:https://cloud.tencent.com/developer/article/1890992
https://cloud.tencent.com/developer/article/1890990