1. 前言
很幸运收到了腾讯Java后台开发的oc,从3月11号投递简历,到4月8号接到oc,非常感谢菜菜学长一直义务解答各种疑惑,受菜菜学长的委托写下这篇春招实习感悟,也算是对自己转行之路的一点点总结。
先做一下自我介绍,我本科毕业于末流985,硕士就读于top3(嗯,是的,top3),本科专业是机械工程,研究生是在机器人研究所,但仍以研究硬件与控制为主。自大二下学期开始,单纯出于兴趣跟随计算机系的学生一起上课,修完了数据结构、算法设计、操作系统、计算机网络和编译原理……。进入研究生阶段后,出于各种原因,我选择了转行。从研二上学期开始自学Java。以下是我的一点感悟和学习路线的总结,希望能给大家特别是非科班生带来一点帮助。
2. 学习建议
作为非科班生,项目经验肯定是跟科班生差得远,这是客观事实,所以一定要在基础知识上下功夫,证明给面试官你很热爱这一行,同时你也有潜力做好这一行。对于后台开发而言,基础知识无非就是以下几个方面:数据结构与算法、计算机网络、数据库原理、操作系统、语言基础,因此我就从这几个方面提出学习的建议。
数据结构与算法
- 算法 第4版:入门首选,好书。另外推荐牛客网上左神的算法基础入门班课程(感觉只看入门就好了),基本上带你过了一遍本科数据结构所学的知识点。
- 剑指Offer 第2版:很多人都推这本书,我刷了三遍,但我感觉面试过程中并没有遇到?似乎leetcode前二百遇到的更多
- leetcode:养成习惯,每天一道新题,然后把不会做的题或者做错的题用Anki这个软件记录下来,定期复习。题刷的再多,遇到之前错题如果做不出来都是白费。另外会有小伙伴问我困难题做不做,之前我是碰到困难题一概pass的,但经过今年暑期招聘,我发现阿里、网易的笔试题,普遍是1题中等+1题困难,或者2题中等+2题困难。困难题如果不是之前做过相似的,对于普通人(我)很难在笔试的时间里做出来吧,所以我的建议是leetcode前200的题目全做。
操作系统
-
深入理解计算机系统 第三版:非科班入门必看,感觉杂糅了计算机组成、汇编语言以及一部分操作系统。我看得时候是挑着看的,主要看了第一部分的第六章、第二部分以及第三部分
-
现代操作系统 第四版:主要看了第一章引论、第二章 进程与线程、第三章 内存管理、第六章 死锁,这三部分也是面试过程中操作系统方面会频繁问到的内容。书中内容与《深入理解计算机系统》互为补充。
-
鸟哥的Linux私房菜 第四版:我很快的翻了一遍,主要了解Linux基本命令,也可以看下b站的这个视频,前面部分就是介绍Linux各种命令
计算机网络
-
计算机网络 第7版:入门书籍,如果感觉一上来学的费劲可以在b站上找一下韩立刚老师的视频,讲的非常好,只不过视频比较早了,新版视频需要购买。
-
TCP/IP详解 卷1:主要看TCP协议、UDP协议相关章节,这本书感觉写的过于详细,实在看不懂的地方略过。可以看下我做的笔记
-
图解HTTP:http也是面试常问考点,有计算机网络基础后看这本书非常快,一天看完。我的笔记
-
计算机网络-自顶向下方法 第6版:我主要看了这本书的第六章 网络层部分,这一部分讲的比TCP/IP详解好很多。
数据库
- 数据库系统概念 第6版:这本书非常的厚重,我主要是配合b站哈工大战德臣老师的公开课翻阅,讲得非常好
- MySQL必知必会:应用层面的书籍,一些MySQL基本操作指令
- MySQL技术内幕 第2版:一开始读比较晦涩,主要是作者默认读者已经掌握了MySQL的一些基础知识,书中的一些名词没有做解释,需要随时百度,但不妨碍是本好书。我主要看了第1章、第2章、第5章、第6章、第7章
- Redis设计与实现:好书,通俗易懂,读起来没有《MySQL技术内幕》那么晦涩
JAVA
-
Java核心技术 卷1 第10版:主要看了前九章,也可以看下这个视频
-
深入理解Java虚拟机:神书,全是重点,如果一开始感觉费劲可以配合这个视频。
-
Java并发编程实战
听说Java编程思想和Effective Java也都是神书,但是我还没开始读所以暂不做介绍。
设计模式
- Head First 设计模式:设计模式是一种比较玄学的东西吧,有种说法是90%的设计模式都是多态的体现,感觉没有一定的代码量很难真正理解,但为了面试中会问到,把单例、策略、工厂、装饰者等常见的看一下就好,也可以看下我做的笔记
另外个人网站是一个非常加分的亮点,几乎每一轮面试的时候面试官都会问我学习过程中是否有做笔记的习惯,是否有个人博客,我现阶段的技术博客主要是对书本知识框架的梳理,夹杂一点自己的感悟和理解。虽然写博客耗时耗力,但可以帮助我们理顺知识点之间的逻辑关系,并且在以后复习的时候效率也更高。搭建个人博客可以照着这个视频来做,如果有git经验的话上手更快。我也强烈推荐这位up主,从他这里我也学到了很多。
3. 一点心里话
到底要不要转行,这可能是摆在天坑专业学生面前一个永恒的话题,在这里我说说我自己的想法。
学到大三,我就大概知道了机械这个行业究竟是干什么的,如果就业会从事那种职业,如果科研会研究什么问题。不管是从那个方面来看,我都不喜欢这个专业,但是面对一个自己用三年时间换来的保研机会,我没有了勇士断腕的决心和勇气。
进入研究生阶段之后,导师告诉我如果想在科研上做出点成绩,研一就多修一下数学。于是我在一年的时间里修完了数值分析、矩阵理论、统计、最优化和泛函分析、随机过程。随之而来的便是一份很糟糕的成绩单,因为我真的学不明白。看看身边进不了科研圈的博士师兄们毕业了也不过纷纷进入了华为敲代码,心想如果要转行为何不趁早呢?于是也就做出了这个决定。
有人问我,你不怕几年后计算机行业饱和么,我说我不怕,就算多年后计算机行业趋于冷静,薪资水平没这么扎眼,我还是喜欢这份职业。我自认为是一个循规蹈矩的人,转行是目前为止我做出的最不寻常的决定,其中有父母的阻拦(爸妈更希望我能在本专业读博),也有老师的劝解,我不知道我这一决定的对错,但是我不后悔。
我一直很喜欢一个词,功不唐捐。2016年9月,当我第一次坐在计算机系的教室跟着大二的学弟学妹们一起上数据结构与算法时,我不会想到三年后的今天能有机会进入腾讯实习,感谢自己所付出的努力,也感谢一路上的贵人相助。
转行之路必然充满了各种艰辛,这是我深有体会的,这篇文章是我在研一暑假写下的,那时的我陷入了深深的自我怀疑之中,然而半年之后我的心境已全然发生了变化。所以各位小伙伴如果下定决心想要转行,就坚持到底,有那么一句话嘛,守得云开见月明。