八股文,吐了
大家好,我是帅地。
现在计算机专业是越来越卷了,在 2016 年那会,我朋友说他去培训班培训了 6 个月,就能找到一份月薪近万的工作,培训的内容也不怎么难,就是语言基础=》框架=〉做几个项目,之后就能上岗干活了。
但现在,不一样了,如果你是应届生,那么面试官会问你一大堆理论基础,当然也会问项目,而这些理论基础,也是我们通常说的八股文。
如果现在的你,单单只是掌握语言基础 + 项目,对计算机基础和算法不了解,那么分分钟被吊打,当然,还得看公司,一般小公司这方面就问的少一些。
所以呢,对于想要进大公司的校招生来说,最好的方式就是从大一大二就开始打这些理论基础,感兴趣可以去参加一些比赛,之后做项目,去实习。
当然,我说的是 以找工作为主的小伙伴可以这样,如果是想读研的,那又是另外一套学习理论了。
为了让帅地知识星球的小伙伴少走一些弯路,我前阵子也给帅友整理了一波八股文
这些都是我通过大量的面经 + 基于自己当时对八股文的准备来总结的,如果没有特别明确的学习规划,可以按我说的来。
一、通用部分
1、计网和操作系统:这两个考的非常非常多,0 基础的可以找个视频入门下,计网 0 基础也可以看《图解HTTP》,然后有时间我建议系统学下,计算机网络我觉得《计算机网络自顶向下》这本书看两遍就够了。
如果是半吊子水平,既会又不大会的状态,就看别人总结的 PDF,或者看我之前发的一个视频:计网+操作系统+计组入门教程
2、中间件:Redis,MySQL,zookeeper,消息队列,前面两个问的多,后面得看你项目有没有用到。
学习思路:MySQL 自己随便找个教程,跟着教程会一些基础操作,就可以学习原理了,面试就问原理。
我是强烈推荐极客时间的 MySQL实战45讲这个专栏,不然就看《MySQL技术内幕》,但是这一本还不够,可以配合文章吧,mysql 学习路线具体也可以看这个:肝完了,我的 MySQL 学习之路
然后 Redis,有两本,一本是《redis开发与运维》,一本是《redis设计与实现》,我觉得看第一本就可以了,然后配合文章,第二本会难一些,讲的更加深入,也可以第二本。
之后有兴趣的可以用 redis 实现一个消息队列+分布式锁,这样你在面试官面前更加能扯。
然后消息队列和 zookeeper,如果项目没用到,随便看看了解下就可以了。
如果项目用到,那就把常考理论搞明白,不用看啥书,看文章就可以了,另外可以看石衫老师的视频,B站搜索互联网Java工程师突击就可以了,看第一季。
3、设计模式:除单例设计模式会让你写代码,其他设计模式主要考察应用场景。
例如动态代理用了啥设计模式啊,所以呢,对于设计模式的学习,必须要结合场景勒,最好的场景就是框架。
就是在学框架的时候,如果有用到了某个设计模式,你就记起来,后面还能给面试题举例子。
另外就是设计模式我觉得不需要系统看书,貌似核心的就五六个,看文章学就可以了。
4、分布式:最后就是分布式了,其中分布式的学习最好是有对应的项目,但在校生哪有啥高并发分布式项目,如果有,也是你们刻意而为的项目,这些,面试官都知道。
你们说的天花乱坠的项目,在面试官面前就是小儿科,那为啥还要问,因为「卷」。
所以这块在学的时候,主要就是学一些「理论」和应用场景,例如 布式id,分布式事务、分布式锁、分布式算法(Raft)、分布式缓存。
不过这块如果你简历不写,其实也不怎么问,项目用了才会问,至于看什么资料?这块我当时是看文章的,你们可以文章积累,也可以看看极客时间有没有对应的专栏。
二、语言部分
5、Java部分主要考察:Java基础,并发,虚拟机,集合原理,就这四个,后两个问的更多。
学习思路:首先 Java 基础没啥好说的,随便找个视频快速看就可以了,我推荐上学堂Java高琪第一季。
不过我当时的看了第一季和第二季,这里其实也建议看到第二季,也就看到 242 集,然后 第一季在 147 ~161 集是一个小项目,这个项目不想做可以不用做,我当时没做。
之后并发,我觉得你把《Java并发编程艺术》这本书看三遍,就可以了,第一篇很痛苦,经常犯困,第三遍很多都豁然开朗。
之后就是集合这块,直接看别人的文章来复习源码,主要就是 hashMap,concurrenthashMap,ArrayList,LinkedList 这几个,像 List 这些,有时间可以自己实现一个。
然后就是虚拟机,把这本《深入理解Java虚拟机》的书,看两三遍就行了,一本就够了,重点是垃圾回收,内存管理,类加载机制 这块。
6、Java框架部分:这块没啥好说的,就 Spring,SpringBoot,MyBatis,SpringMVC,不用学太深,用他们做过一些项目 + 注意下用到的一些设计模式。
还有 AOP 和 IOC,学的时候,看视频 + 文章,通过面试题针对性看文章就可以了。
7、C++待补充,由于C++和前端这块,我不怎么熟悉,后面补充
三、学习优先级
学习优先级:1,2(mysql和 redis),5,6这四个,没啥优先级,都得学(非Java开发的 5 和 6 不用学)。
之后设计模式快速了解下,然后如果你项目用到了消息队列,分布式这些,那就要重点学习啊,否则有时间学习下理论,因为项目用到了就肯定会问,例如如何用 redis 实现消息队列啊。
最后学的时候,验证自己学的如何可以看面试题和面经,这块我网站都有提供,你们可以去看:https://www.iamshuaidi.com。
然后就是,是不是觉得需要学的很多?
假如你学习能力强,有基础,其实一年时间就够了,真的,就是要静下心,疯狂学,快的就半年(就是你平时有学过一些基础)。
后面我会基于这些八股文,系统补充上学习资料以及考察重难点。
最后,也欢迎加入帅地的知识星球,帅地会在星球知无不言,48 小时以内答复你的问题,并且根据你自身的情况,为你量身定制学习路线。
你有任何的疑惑,帅地都会答复你,并且星球里也有一群和你相同年龄的小伙伴在奋斗。
并且你有任何学习上的疑问,帅地都会指导你应该如何学习,根据你的情况为你量身定制,在星球会提供如下服务: