在开始介绍学习路线之前,想先和大家分享一下我的几个观点,读研还是工作,算法还是开发,C++还是Java,国企还是互联网,除了第一个问题外,都曾经困扰过我,当然我相信很多人也会遇到类似的迷茫,所以在这里分享一些我的想法,希望能给有需要的人提供一些参考,自己已经想的很明确的可以直接跳过~
(1)读研还是工作
这个问题是牛客上经常被讨论的一个问题,已经拿了某大厂的offer是否还有必要读研,这个问题我的看法是这样:如果自己很明确就是想进互联网做开发,并且读研的学校比较一般,那我建议选择就业,能力强的人在三年内就能有很好的技术积累,这些是在研究生期间很难得到的锤炼;相反,学校本身还可以,自己也没有明确以后就是互****联网做研发,有可能考虑国企或者研究所,或者从事偏研究性的算法工作,建议读研,因为国企和研究所学历卡的比较严,读研意味着以后有更多的选择。
对于我个人而言,本科阶段基本没有计算机相关的就业能力,所以读研让我有了更多的时间去思考自己的规划,并且在自律上有了很大的提高,这些都算是我在读研过程中的收获。
(2)算法还是开发
这几年算法由于起薪较高,偏研究性质的工作吸引了大量的人才涌入,也就造成了现在激烈的竞争情况,不过这都是符合市场规律的正常现象,毕竟风口在哪,热钱就在哪,总会吸引一大批优秀的人才涌入。对于这个问题,我的看法是个人兴趣结合个人特长,算法算是一个投入反馈比较慢的工作,也就是可能投入了大量的精力也会得不到实时有效的反馈,而开发则基本能够得到实时的反馈,于是我这种本身不是很能耐得住性子的人,对于算法就有些难以接受了(个人有过一段1个多月的算法实习);
同时,算法要求一定的数学能力,我很清楚自己更擅长一些逻辑性的问题,而不喜欢数学推理论证性的问题,这也会影响以后的上限。最后就是实验室有一位坚定走在算法道路上的大佬,@daili0015(牛客),大佬读完论文后经常脑子里冒出一些骚操作,看的我是目瞪口呆,发现自己是真的不适合算法。
(3)C++还是Java
刚开始转开发的时候,纠结过一段时间Java还是C++,有一位师兄劝我转向Java,毕竟机会多,而我纠结了一段时间后最终选择了C++,理由是:为什么大家都选Java我就要选Java呢,这可能也是性格偶尔有些叛逆的原因吧。
好了,回到主题上来,C++应用场景确实不如Java广泛,但是也是有自己的立足之地的,这里可以参考**@TeeKee 牛客**大佬的帖子,C++因为更偏底层一些,可能上手上难度会略大,说回来其实还是个方向选择上的问题,Java大多是业务侧,数据库以及各种组件就会很重要,而C++偏底层一些,操作系统以及Linux相关的知识更为重要一些,具体选择,因人而异,给个说服自己的理由就好。
其实在校招过程中,更加关注的还是基础知识的把握能力,还有项目过程中体现出来的问题解决能力,快速上手能力,个人的思考,这些都是在美团、远景(这两个offer的部门都是Java系)包括春招实习投递的蚂蚁Java岗中注重考查的点。
(4)国企还是互联网
这真的是一个围城,城外的人想进去,城里的人想出来。看过一些国企待不下去跳互联网去的人,身边也有不少朋友(复旦、南京大学等本科生)进入国企后,觉得工作上没有动力,升职加薪遥遥无期,我觉得自己是那个最了解自己的人,所以一定要想清楚自己想要什么,然后做出自己的选择。
调整心态
我的秋招之路,始于牛客,也在此终于牛客。在牛客上找到了学习路线,学习资源,也明白了自信与坚持的重要性,在这里放一段(@XiaoTeng )牛客大佬在面经中的一段话:
offer = 心态 * (实力 + 面试技巧) + 缘分运气
1、心态
-
首先是要正视自己的能力,不轻视,不高估。不轻视:对自己有信心,机会那么多,怎么都能有个差不多的offer,不至于失业 。不高估:清楚自己的能力范围,保持好心态,面试是有偶然性的。
-
不要总给自己消极的暗示,心态差了积极调整,一个乐观向上的态度是非常重要的,提高效率,专注寻找自己的方向。
-
多交流,不比较。对于每一次面试,只跟自己比有提高就已经很好了,每个人适合的方向和技术栈都不一样。
2、硬实力是关键
我是从2018年3月底开始准备校招,因为是在18年春招实习的时候获得了两次面试机会,分别是网易游戏和去哪儿,下面给大家还原一下真实面试场景,其实我也是和各位非科班的同学一样,基本是零基础开始准备秋招,但希望大家相信只要努力,永远不晚。
2018.03.27 —— 网易游戏研发工程师实习面试(下面以Q代表面试官,A代表我)
Q:C里面内联有什么作用
A:不知道…
Q:struct和class有什么区别,和union有什么区别
A:不知道…
Q:虚函数有什么作用
A:不知道…
Q:智能指针听说过吗
A:没听说过…内心os(啥,这玩意是啥…)
…
就是在这种情况下,面试官还拿着准备好的题目一直面了我40分钟,面试体验很棒,QAQ
2018.04.某天 —— 去哪儿后台开发实习面试
Q:知道二叉树的各种遍历顺序吗?
A:知道,前序中序后序,分别说了下怎么遍历的
Q:好,那你手写一下中序遍历…
A:拿笔挣扎了好久…一个字没写
Q:要不你再好好想想,你都知道遍历顺序了,应该可以写出来的
A:我真不会写…
Q:那今天就到这吧…
总结:相信很多同学在开始的基础都比我好,所以一定要有自信,然后坚持学习,秋招肯定是收获满满(不仅仅是offer上的收获,还有很多关于自主学习能力、个人自律以及自信上的收获)。
#学习路线
毕竟以前没刷过题,没看过书…写的大部分都是C#代码,于是决定开始着手秋招,从语言开始系统学习,关于学习的几个建议(个人觉得算法开发通用,且可能比学习路线更实用!!!)
1、一定要做笔记!!!好记性不如烂键盘,知识温故而知新,每次回顾总结再原来基础上再引申一些新学到的知识,如果能达到这样的效果,就相当于自己在给自己面试!做到面试效果好,还不会紧张
2、笔记可以选择很多可在线编辑的软件,个人在用的是Evernote,可能已经积累了数十万字的笔记
3、可以先在网上看看相关的面经,记录常见的考点,在读书过程中及时总结自己的答案,这样既高效,面试时的答案又有自己的理解,绝对加分项!
4、talk is cheap,show me the code. 无论是算法还是开发,只要你是计算机编码相关从业人员,能刷题都是很重要的,这里面不仅可以反映你写代码的速度和质量、思维的灵活性、对常用算法的掌握与迁移以及将抽象的问题具体化的能力,一定要刷题
下面是各方面知识体系的学习资料和路线,大部分是书籍,少部分是我推荐的一些公开课或者b站视频
C++:
-
C++Primer 基础书籍,初学者建议精读,可重点关注一些C++11的新特性,比如智能指针、移动构造等在面试中常考的特性
-
深度探索C++面向对象模型,这是一本建立起C++面向对象模型观的好书,个人收益良多,另附一份此书总结的技术博客,写的很好,读完本书再读一遍博客,绝对收获满满,以至于我后面复习C++面向对象观,直接对着博客看了
-
STL源码分析,主要看各种STL容器的底层实现方式、内存管理方式,看完自然会对这些容器内部对象到底分配在堆上还是栈上,迭代器失效情况,内存是连续还是非连续等各种问题都有一个很好的掌握
-
Effective C++和More Effective C++,需要对C++有一定了解和使用经验后阅读,里面主要是介绍各种安全管理、效率提升的小细节,可以参考阅读,有些小细节可以在手写代码时体现,给面试官很好的印象!
操作系统 :
-
清华大学 陈渝老师的公开课(b站和网易云课堂上都有),非常系统的讲述操作系统的一些实现原理,也把包括生产者消费者、读者写者、哲学家就餐等经典问题讲得非常透彻,作为清华的公开课,又不失知识的广度和深度,推荐 。
-
深入理解计算机系统(CSAPP),这本书真的是讲解整个计算机系统的一部神书,短短的篇幅内能涵盖到这么多的技术点(看完公开课后再来读效果应该会更好),我翻来覆去读了三四遍,每次读都有新的收获,极力推荐 。
-
现代操作系统,详细讲述操作系统的基本概念,其实我并没有读过,因为没有找到这本书的电子资源…但是很多人推荐,应该也是一本好书!
-
Unix环境高级编程(APUE),详细讲述Unix环境下的各种编程机制和接口,建议书上的代码都自己敲一遍执行,才能有更好的理解。(尤其是以腾讯为目标的同学们,此书必读)
计算机网络 :
-
图解TCP/IP,图解系列的书籍都是比较浅显易懂,但是作为入门或者第一本相关书籍,可以看到全貌却有不打击大家的学习积极性,可以快速阅读 。
-
图解HTTP,建议同上,但是我其实对HTTP了解并不多,因为实际上C++开发很少与http打交道,基本是C++与Java通信,Java再与前端通信,但是还是应该扩充自己的知识面 。
-
计算机网络,这本书是本科上课时我们选用的教材,对于计算机网络有一个比较深入的讲解,包括网络协议中的各种设计细节以及相关算法的原理,值得阅读 。
-
UNIX网络编程(UNP),同前面操作系统一样,可以配合Allen大佬的技术博客,学习一些底层的网络编程知识,尤其是打算准备网络相关的项目时,建议细读本书 。
-
TCP/IP详解,非常详细讲述了TCP/IP协议栈下的各个技术细节,建议大家挑自己感兴趣的阅读,都是拔高点,体现个人技术深度的点 。
数据结构:
-
大话数据结构,入门书籍,把每个抽象数据类型(ADT)的实现方式都讲得比较透彻,也涉及了相关的算法,可以仔细阅读,后面面试可能也会涉及一些让你在某个应用场景下的适用数据结构,应该详细掌握 。
-
清华大学 邓俊辉老师的公开课,详细细致讲述了数据结构与算法相关的内容,因为算法和数据结构密不可分,在讲述基本的数据结构与算法同时,包含一些时间复杂度的推导,课程又有一定的深度,老师讲课也非常有趣!值得深入学习 。
-
网易云浙江大学 数据结构公开课 ,课程感觉不如邓俊辉老师的有趣,但是优点是有配套的学习平台和练习题,配合课程刷题,效果更佳!
算法(这块其实是我的薄弱点,我大概只刷了200道题+剑指offer):
-
leetcode2016,这本书是在北美找工作的国内同学总结的,将leetcode上的一些经典题目按照各种方法总结在一起的,大约有200题,建议按照专题开始刷!这本电子书我会在后面给出百度网盘的链接,大家可以自己下载 。
-
剑指Offer,不多说了,哪里不会刷哪里 。
-
算法图解,一本适合刚开始接触算法的初学者,用通俗易懂的语言说明了一些常用的算法 。
-
程序员代码面试指南,左神神书,适合算法进阶,题的数量和质量都有保障 。
数据库:
-
Mysql必知必会,介绍了sql查询相关的用法,读完之后可以配合牛客上的SQL查询相关练习进行熟悉 。
-
高性能Mysql
-
MySQL技术内幕 InnoDB存储引擎
-
Redis设计与实现,前面几本书都是sql相关的知识储备,而详细了解一款nosql也是很有必要的,因为各自有不同的应用场景,面试中也常考一些Redis相关知识 。
-
Mysql:Mysql技术内幕和高性能Mysql侧重于数据库本身的底层实现,而这套视频则是从实用的角度出发,讲解了数据的查询到优化等方面的知识,配合使用效果更佳 。
设计模式:
- 大话设计模式,描述了二十多种设计模式的使用场景,设计模式只有了解了概念以后,在实际项目中去加深理解,单例模式、工厂模式、***模式、中介者模式等都是在实际项目中常用的设计模式 。
Linux与编译原理:
-
鸟哥的Linux家常菜,基本就是讲一些Linux下的命令操作,C++必然是跟Linux结合在一起的,所以如果对Linux不够熟悉,可以粗读一遍,熟悉相关的命令 。
-
Linux内核完全注释,采用早期Linux内核0.11或0.12版本的代码进行完全注释讲解,作者是同济的一名老师,阅读本书需要有一定的汇编基础、硬件基础和操作系统基础,适合对Linux内核机制比较感兴趣,想了解底层源码的同学 。
-
程序员的自我修养——链接、装载与库,校招面试过程中发现,只要面试一深入,就经常会讨论到编译和链接过程中的一些问题,虽然对开发并没有太大的作用,但是掌握过程中发生的情况,可以帮助分析和解决一些问题 。
面试相关 :
(下面这两本书中都有很多常见的面试题,可以细读当做个人知识的一个查漏补缺,也需要关注一些常见的智力题,比如头条有时候就会问一些相关的智力题):
-
程序员面试笔试宝典
-
王道程序员面试宝典
小福利:
在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021大厂最新Android面试真题解析
各个模块学习视频:如数据结构与算法
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!