前几天拿到字节offer了,很开心,也有很多小伙伴私信我问了很多问题,所以在这里简单分享一下我是如何学习八股文的,文章篇幅略长,希望能帮助到有需要的同学或者也是双非大三正在迷茫的你。
【知识库分享】 很多小伙伴看了文章找我要知识库,我的建议是应该参考我的方法而不是内容。我的知识库整理好了,想看整理好的可以私信我“资料”获取
这是我的面经,整理的很详细字节后端暑期实习 一二三面(已OC|新鲜面经)
之前有小伙伴给我一张学习路线图,问我怎么学,这个我大有感触:望不见底的后端开发路线,小白看了泪目,工程师看了退步。
我结合这篇文章简单讲讲我的看法吧,首先上面的路线学完学懂大厂肯定稳了,但学完和学懂的人很少,因为路线不是合适每一个人,然后路线不能完全一样的学,而是作为参考。
然后讲讲我的学习路线看法(可以具体参考后文)
面试前复盘准备:计算机网络+操作系统底层 + Mysql底层+Redis底层 + (JVM、多线程、Netty、分布式等选几个系统学)
像上面这种学习路线,我觉得JavaSe、SSM、servlet、jsp这些大坑给初学者也看不出来,初学者对路线本身就不是很清楚的还是多自己探索吧,怎么探索就是基于问题出发去学习,而不是基于路线,你如果对计算机体系很清楚,其实路线还是自己的最好。具体参考下文我是如何准备八股文及路线的。
先讲一下做笔记的重要性。
"这是我要的一位字节大佬的笔记,最后也如他所说成功进入了大厂,我很喜欢他的笔记方式,条理清楚,每个点想补充就补充很方便,不必要像文章那样写一堆废话来填充幅度,也给了我很大的启发。后面自己很多文章也是这种类型走。"
最后讲讲我综合很多思想整理出的我自己的记录八股文的方法:推荐大概思路就是每次遇到不会的,或者八股就创建小记,这时候可以不去完善,它是出于未完成状态在那里,每次遇到合适的答案就慢慢补充内容,然后等篇幅合适的时候就去参考一些高质量的文章(比如下面TCP和UPD我先自己总结+八股文网站总结,然后我去掘金或者公众号找类似网站,看下别的大佬怎么写的修正我里面的思路,然后再归档,这样一个八股文就搞定了,也可以随时在语雀其它网站内插入小记,方便我后面整理汇总)
讲一下做笔记要点
首先要了解八股文的组成,这样学习的时候就清楚自己目前在学那一块了
后面学习步骤那边也会提供下面模块对应的八股文网站以及资料学习
-------------------上面是必要,下面是加分项---------------
首先,你要有一个做笔记的软件,你需要通过很长的时间去慢慢完善它,所以一定要满足既能清晰构建框架,又能随时更新维护的软件。其次是你要明白你要学哪些[参考上面八股文组成],然后可以构建从零开始的知识框架,这个框架不是给别人看的,不必要做的很好看,满足一些基础markdown语法自己写着舒服就行。
其次,完成初始准备你的知识库应该是空的,这时候你可以试着去参考一下一些八股文网站他们怎么归类的来构建你的知识库框架,很显然分类是有规律的,你如果自己试着去多看一些
学习步骤(待更新)
这里讲一下我是如何去逐层递进去完善我的八股文体系的
① 基于场景去学
这个阶段是处于萌新阶段,大概是大一大二刚刚学完基础语言,对于计算机体系还是一脸茫然的情况,这里可以按照我下面的几个问题或者几个场景去初步接触一些知识,大概对计算机网络、操作系统、数据库、javaweb有一个初步的概念。
看到这里其实你已经对 八股文有了大概了解,上面的各种场景都会让你接触到八股文框架,也就是计算机知识框架,除了中间件,微服务,redis没接触,计算机网络、操作系统、算法、数据结构、mysql,javaweb都已经被你简单探索过一遍了,这时候也应该有一个简单的知识库记录了你学习过程中的问题和理解,也对后面的深层次学习提供了基础。
② 基于八股文网站去学
在大二暑假前都可以在①阶段探索,构建自己的知识库体系,到了大二暑假肯定对很多知识都是一知半解的,这时候可以开始去看看别人的八股文网站了,看看我上面学习的计算机网络、操作系统、算法、数据结构、mysql,javaweb哪些内容是后面的重要。
③ 基于系统教程学习
系统学的方法就看经典书籍 + 看别人的成套视频
众所周知面试的八股文之分为 计网+操作系统和数据库和其它, 计算机网络和操作系统的理解至关重要。前面还要提一下这里建议的系统学是基于之前你的知识库去补充完善,而不是400多页的黑皮书/20多个小时的视频一字不差一秒不落的看完。如果之前看了别人的八股文网站会发现计算机网络重点就上面几层,重点就TCP、http这几处,所以应该把系统学放在更清楚的去搞懂TCP和HTTP,而不是把时间花在数据链路层,物理层。
计算机网络+操作系统:这两个是面试必备,也算基础,如果想和面试官来回拉扯,不好好准备还真不行,这里推荐 小林CODING的两本图解电子书《图解计算机网络》《图解操作系统》,这两本适合时间适中的同学。如果时间十分充足,可以考虑去看基本经典的书籍,我没看所以就没推荐,hh。
Mysql和Redis:我是看了极客时间的Mysql实战45讲,第一遍看完看的很迷糊,大概是对[索引、sql执行过程更清楚一点了],但后面随着长时间看其他文章又回头看,最后就对 索引、锁、隔离级别、事务、MVCC都有一个很清楚的认识了,每个点也都能讲,这些也是面试高频问题;其次是Redis,要去系统的学习搞清楚为什么快?Redis底层结构,redis 5种数据结构和场景就差不多了。
其它:其他要学的就很广泛了(SpringBoot、Java多线程,JUC,分布式,JVM,IO,netty等等),学不完怎么办?有个技巧,就是选你喜欢的学,然后再简历上重点写你会这个。比如我对Java多线程,JVM有兴趣。我就去慕课看了几个很高质量的 JAVA多线程JVM课程,彻底搞清楚JVM以及Java多线程问题,然后可以应对很多问题,比如面试官说你说说你技术方面哪块学的好(不指计算机网络+操作系统知识方面),你就可以讲你系统准备的这个(解答文章开头那个问题)。
④ 基于简历高质量文章学习
到这里差不多已经可以开始约面试了。首先你肯定要基于你的八股文知识库制作一份简历。下面简单举个例子。(尽量把你会的写前面,然后内容描述专业一点,可以参考下面)
这个阶段你的八股文知识库体系已经通过三轮学习慢慢维护的很细致了,这时候需要做的就是借鉴一些高质量文章,去修正你知识库的内容,面试前可以对照你的简历逐个去看关键词对应的一些文章。
像很多常见的问题,TCP三次握手等就去掘金或者公众号找高质量文章看一遍就行啦,然后把别人细致的地方补全你知识库,你表达不通畅的地方就借鉴看看他们怎么写的和描述的。
像操作系统有个问题 进程和线程 有什么区别,你知道大概个区别,但又不好怎么系统的描述,你去找一篇文章,你会发现写了一大堆,但还是没能抓住点去描述,导致你只能提取出 进程是资源分配的单位,线程是CPU调度的单位。然后面试问这个,你就只答这个,面试官就会不满意了,会感觉你跟个机器人一样,你借鉴别人的描述虽然能让你表达的更规范,但在面试官前面你简短的回答就是没思考死记硬背的体现。
所以应该怎么借用高质量文章去优化你的知识库和八股文表达呢,答案是看逻辑,比如我就会这样,先讲一下为什么要细分进程,然后讲一下一个程序运行是进程,一个进程为了更细致的工作就创建线程,然后下面是我的笔记,分点作答,分点就是参考的别人高质量文章,他一篇文章1000字,我就提炼出点来,而不是只记得 进程是资源分配的单位,线程是CPU调度的单位
总的来说我的所有经验就在上面了,大概总结下的话就是循序渐进,慢慢维护自己的知识库,一定要自己总结自己用,参考别人的持续更新完善自己知识库,最后就能灵活轻松应对面试官的提问啦。
感谢阅读,更多的java课程学习路线,笔记,面试等架构资料,私信我【资料】即可获取免费资料!