个人情况
TOP 2 本硕。本科电子系,硕士通信方向。实验室里基本做的是通信的事情。计算机基础方面,大一时学过一点 C++,更准确地说是 C with classes,研究生阶段学过一点机器学习,除此之外没有计算机基础。
2021年的秋招中,拿到了腾讯 WXG,蚂蚁金服,字节跳动,美团,快手,Shopee 新加坡开发岗的 offer,并且基本都是SP/SSP。
岗位选择
研一的时候就打算去互联网公司做技术方面的工作,并一直在开发/算法二者中纠结,毕竟当时正是 AI 行业快速起飞的时候。在知乎上也看过许多相关的帖子,后来考虑到算法越来越卷了,许多非科班的专业都可以转到算法岗,竞争压力大。加上实验室导师不放实习,以及非科班很难出算法顶会文章,最后选择了开发岗位。
事实上,在今年的秋招中,再一次印证了“选择大于努力”这一句话。我身边选择开发的同学,基本都有 BAT 等大厂的 offer。而算法岗位由于 hc 较少,竞争大,内卷极其严重,和开发相比更难拿到大厂 offer。例如,我一个室友面腾讯算法岗位面到三面,才被告知部门里没有 hc 了。
并且, AI 行业也逐年趋于冷静,许多 AI 公司必须让业务落地,实现公司盈利。其次,AI 岗位的薪资也没前几年疯狂了,许多大厂算法岗基本与开发岗同薪了。所以如果没有充分竞争力的情况下,还是建议大家选择相对容易的开发岗位,当然大佬除外。
另外,在 C++/Java 二者的选择中,我选择了需求量更大的 Java。实际上,在校招面试中,面试官并不会在意你的语言。只要选择一种语言并且熟练掌握即可。正式工作中需要什么语言,入职后再进行学习即可。
学习路线
在确定下来走开发岗位后,我参考了许多过来人的学习经验,从 Java 基础学起,接着是 Java 并发,JVM,MySQL,Redis, 最后是 Java 后端生态常用的框架,例如 Spring,Zookeeper,SpringBoot 等等。
另外,计算机网络,操作系统和数据结构与算法也是面试中必考的知识点,需要花功夫去学习。尤其是算法方面,面试的时候都会有在线网页编写代码题的考核,并且会占据面试半数以上的时间,需要着重准备。
算法学习上,简单翻翻《算法(第四版)》后,可以刷几遍《剑指 offer》,这时基本可以应付小厂的面试题了。另外再建议刷完左程云的《程序员代码面试指南:IT 名企算法与数据结构题目最优解(第二版)》,这时大厂的面试算法题基本毫无压力了,笔试也基本能通过了。如果还有空余时间,可以看看 GitHub 上前人总结的 Leetcode 分类习题,我参考的是/github.com/dingjikerbo/L。这个 repo 总结得特别全面,刷完后算法的考核就不再会是面试的难点了。
面试准备
面试时,除了算法题的考核是硬功夫外,80% 以上的知识点都是常考的,也就是大家所说的”八股文“。面试前,可