转码经验
非cs专业如何转码三个月拿到大厂offer
|背景
首先说一下我的背景,本科是传统工科,有上C语言和数据结构算法,除此以外几乎没有碰过编程;硕士读的是数据分析,会学python和数据库基础。不能算完全编程零基础,但是离面试找工作还是差很远的。因为我是2020年7月硕士入学,一开始因为学业繁忙也没下定决心转码,直到后来11月秋招已经几乎结束了,才开始真正意义上转码准备面试。
|时间轴
- 2020年11月开始自学Java和补充计算机基础
- 2021年1月拿到字节跳动校招后端开发offer,中间经历三个月
- 2021年3月春招继续投递进行面试,最后拿到了百度、美团、阿里、拼多多等大厂offer
本文主要给非科班想要转码做【后端开发】的同学一些建议和参考,虽然没有捷径,但是行动起来,转码并不难,主要分为3步骤:
1. 确定目标
2. 拆解要求,制定计划
3. 边执行边调整
1. 确定目标
这里的目标是指在哪个时间段拿到怎么样的offer,比如今年春招拿到大厂SSP的后端开发offer. 这会让你有一个很清晰的时间轴,知道你在4-5月要达到怎么样的能力水平。当你没达到这个目标,你就有足够动力持续学习,准备面试。
2. 拆解要求,制定计划
决定后端开发offer的因素有:学历,数据结构与算法(leetcode题),CS八股文(计算机基础,JVM,框架中间件),实习/项目经历,面试能力,智力题(偶尔会考),市场环境,运气,...
因为时间有限,我们主要针对可以短期提升的部分进行重点学习。
|计算机语言
如果已经掌握了一门编程语言,比如C++/Java/Python,那么直接可以跳过。这里推荐Java,因为市场需求大,入门也不难。对于校招来说,编程语言的重点就是拿来写算法题的。
推荐目标:学会Java的语言基础,能用来写算法题即可。
推荐资料:B站很多视频,我当时看的是动力节点的,不需要看完,掌握基础和语法就可以。如果不喜欢看视频,也可以看《Head First Java》这本书。
|数据结构与算法
首先校招最重点考察的就是数据结构与算法,无论是哪一轮的技术面都至少有一道算法题,如果你面试的其他部分回答得一般,但是算法题做出来了,面试官可能会放你一马;但如果你计算机基础不错,算法题没做出来,那通过的几率就不到一半了。比如我在字节四面技术面的时候,前面计算机知识答的7-8成,没有特别好,面试官给我出了一道hard题,最后做出来了,也就顺利通过面试了。
推荐目标:建议Leetcode刷到200道以上,那么算法题不会成为你的软肋,刷到400道的时候基本上笔试题可以过80%-100%,面试国内大厂基本算法题全过了。同时基础的知识点也要掌握,比如不同树的区别,各种排序算法的区别和实现。
推荐资料:零基础而且时间充 裕可以看一下伯克利的cs61b。或者可以直接B站搜索“左神”或者“左程云”,里面有他的全套课程,或者买他写的书《程序员代码面试指南》。左程云老师可以说是算法题的引路人了,我就是跟他学的二叉树解法,后来基本二叉树的题都做得很顺利。
|CS八股文
包括操作系统,计算机网络,数据库,以及Java和JVM考点。如果有相关经验,可能还会考察Redis,SpringBoot等框架组件
- 操作系统和计算机网络这两门课,都是推荐B站看**王道考研**的视频,看一遍下来对基本概念都有所掌握了,但是对于一些考研的考点,比如计算题,不用太纠结,这些面试不会考。
- 数据库,主要是MySQL关系型数据库。这部分因为硕士课程有学,我就没有额外看视频。也可以在B站找相关视频,或者直接网上找Mysql入门教程的文章看看。
- Java和JVM考点,这部分首先在前面学Java的时候有掌握,其次推荐周志明老师的《深入理解Java虚拟机》这本书,应付JVM的考点完全足够了。
- Redis、SpringBoot等其他组件推荐直接看网上的文章,主要因为时间有限,不建议看书和看视频,直接看对应知识点的文章效率更高。
学习的优先级是:计算机基础(操作系统+网络+数据库)> JVM > Redis, SpringBoot等。当过了一遍知识后,默认你已经理解大部分知识,这时候就要针对面经的题目来查漏补缺,通过回答面试问题的形式来学习对应 的知识点。
|实习/项目经历
如果有这部分经历,一定是加分项。但对于非科班的同学一般都是没有的,可以把以往和编程有关的项目经历写到简历上。同时在学习好前面提到的计算机知识的前提下,在简历上补充一些项目,可以是学校/公司/网上开源的,保证面试官在问这个项目的专业知识你都可以回答得出来。
|智力题
这部分就字节考了,准备一下常问的题就可以了。
|小结
首要准备:计算机语言基础+Leetcode+操作系统+网络+数据库。次要准备:JVM+Redis+项目经历+Spring全家桶+智力题。
3. 边执行边调整
基本策略:尽可能多投简历,多面试,并在这个过程中不断微调自己的学习重心。
|多投简历多面试
招聘信息来源:牛客网,各大招聘app(我主要用boss 直聘),各大厂的招聘微信公众号。
只要有招聘信息,原则上都应该及时投递简历,除非是真的完全没准备。等你觉得自己准备好了,人家已经招够人了,往往是越晚投递的面试要求越高,所以对于校招,只要有招聘信息出来都应该及时投递。具体来说,如果是某个公司一次正式的秋招/春招,那可以在它开启招聘后的2-3周内投递;如果是一些个人比如HR/team leader发出来的校招补录,那应该在看到这个招聘信息那一刻就马上投递简历,因为这种不影响你的其他面试机会,而且headcount一般也很少,先到先得。
如果是担心本次面试失败可能会影响下一次面试,从我去年面试的经验来看,基本不影响。我一开始面字节是挂了,之后收到另一个部门的面试邀请,面试官后来跟我说他们也不看以前的面试记录,只关注当下你面试的表现。所以还是要大胆投。
|根据反馈调整计划
比如我一开始以为Java本身的知识很重要,深入学习了很多,但在面试的过程中发现计算机三大基础课和算法题才是最关键的,随后就把学习重心放到这里。而且每年招聘要求,招聘人数都有所不同。比如可能因为转码的同学太多,对简历的项目要求变高了呢;而且每个人的背景不同,重点还是自己在投简历面试的过程中不断根据得到的信息反馈及时调整计划。