前几天拿到字节offer了,很开心,也有很多小伙伴私信我问了很多问题,所以在这里简单分享一下我是如何学习八股文的,文章篇幅略长,希望能帮助到有需要的同学或者也是双非大三正在迷茫的你。
1. 要明白的一些事情 讲讲我的学习路线。 像上面这种学习路线,我觉得JavaSe、SSM、servlet、jsp这些大坑给初学者也看不出来,初学者对路线本身就不是很清楚的还是多自己探索吧,怎么探索就是基于问题出发去学习,而不是基于路线,你如果对计算机体系很清楚,其实路线还是自己的最好。具体参考下文我是如何准备八股文及路线的。 2. 一定要做笔记!
先讲一下做笔记的重要性。
首先做笔记可以加深理解,一边动手一边动脑防止你大脑摸鱼,光看不思考,学习时迷迷糊糊就走神或者(。-ω-)zzz睡觉了。 其次你面试的时候比起标准八股文,你更先回忆起的是你的笔记。 等你很久没看八股文,你通过你的笔记以及之前的基础可以很快的又找回八股文的感觉
先讲一下笔记类型
"这是我要的一位字节大佬的笔记,最后也如他所说成功进入了大厂,我很喜欢他的笔记方式,条理清楚,每个点想补充就补充很方便,不必要像文章那样写一堆废话来填充幅度,也给了我很大的启发。后面自己很多文章也是这种类型走。"
讲一下做笔记的软件推荐
讲一下做笔记要点
3. 基础八股文组成
首先要了解八股文的组成,这样学习的时候就清楚自己目前在学那一块了
后面学习步骤那边也会提供下面模块对应的八股文网站以及资料学习
计算机基础知识:计算机网络、操作系统、数据结构、算法。
Java基础八股文:Java基础、Java多线程、Java JUC、JVM虚拟机、java容器、Java 8
Java高级八股文:SpringMVC、SpringBoot
数据库八股文:Mysql、Redis
中间件八股文:消息队列MQ(任意一种推荐RabbitMQ)
场景问题八股文:缓存一致性解决、4G数据找系统记录(大数据题)
-------------------上面是必要,下面是加分项---------------
微服务分布式:分布式、微服务、、高性能、高可用等
4. 方法的要点
首先,你要有一个做笔记的软件[具体参考上面],你需要通过很长的时间去慢慢完善它,所以一定要满足既能清晰构建框架,又能随时更新维护的软件。其次是你要明白你要学哪些[参考上面八股文组成],然后可以构建从零开始的知识框架,这个框架不是给别人看的,不必要做的很好看,满足一些基础markdown语法自己写着舒服就行。
其次,完成初始准备你的知识库应该是空的,这时候你可以试着去参考一下一些八股文网站他们怎么归类的来构建你的知识库框架,这里我拿最经典的JavaGuide做例子,很显然分类是有规律的,你如果自己试着去多看一些
学习步骤(待更新)
这里讲一下我是如何去逐层递进去完善我的八股文体系的
① 基于场景去学
这个阶段是处于萌新阶段,大概是大一大二刚刚学完基础语言,对于计算机体系还是一脸茫然的情况,这里可以按照我下面的几个问题或者几个场景去初步接触一些知识,大概对计算机网络、操作系统、数据库、javaweb有一个初步的概念。
**计算机基础知识探索阶段**:(这个阶段学习计算机基础知识,对计算机框架有一个基础概念)
**动手实际操作探索阶段**:(这个阶段需要动手去实际操作,基于已有的基础去探索更多领域)
看到这里其实你已经对 八股文有了大概了解,上面的各种场景都会让你接触到八股文框架,也就是计算机知识框架,除了中间件,微服务,redis没接触,计算机网络、操作系统、算法、数据结构、mysql,javaweb都已经被你简单探索过一遍了,这时候也应该有一个简单的知识库记录了你学习过程中的问题和理解,也对后面的深层次学习提供了基础。
② 基于八股文网站去学
在大二暑假前都可以在①阶段探索,构建自己的知识库体系,到了大二暑假肯定对很多知识都是一知半解的,这时候可以开始去看看别人的八股文网站了,看看我上面学习的计算机网络、操作系统、算法、数据结构、mysql,javaweb哪些内容是后面的重要。
下面的notion是我的八股文网站收录
这里八股文网站太多了怎么选择呢?答案是选2-3个自己觉得看的舒服的
我的推荐是
然后讲讲怎么去学,这里还是需要很高的驱动性,就是带着问题去看,我举个计算机网络学习的例子,比如我没学计算机网络,我看到下面这个图,会怎么学,肯定很难学:
为什么?因为你不觉得这个和课本很像吗,让你预习,但我本身就不清楚这个内容,就看完也没有什么思考。所以需要是有问题导向的八股文网站,这里讲一下怎么鉴别内容,就是初学的时候不要去看笔记总结(上面这张图就是计算机网络知识点总结),总结是给别人复盘来看的,我建议是看那种带常见问题的模块看:
显然这张图左边问题导向很清楚,右边解释也很清楚,这时候记录一下笔记,不懂的就后面再来,总的看目录可以记住计算机网络考协议,考三次握手,tcp-upd等,这时候刚刚入门不懂TCP,UDP了怎么办?那就记录下来呀,然后百度去看文章,总之就是一直维护你的知识库,先构建框架,然后新学的加进去,不懂的加进去,懂了的更改状态加进去,慢慢的你已经有一个基础框架完整的知识库,然后通过八股文网站初步学习每个考点下面分支也更细致了,这时候就可以开始下一步,系统学。
③ 基于系统教程学习
系统学的方法就看经典书籍 + 看别人的成套视频
众所周知面试的八股文之分为 计网+操作系统和数据库和其它, 计算机网络和操作系统的理解至关重要。前面还要提一下这里建议的系统学是基于之前你的知识库去补充完善,而不是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调度的单位
总的来说我的所有经验就在上面了,大概总结下的话就是循序渐进,慢慢维护自己的知识库,一定要自己总结自己用,参考别人的持续更新完善自己知识库,最后就能灵活轻松应对面试官的提问啦。