前几天拿到字节offer了,很开心,也有很多小伙伴私信我问了很多问题,所以在这里简单分享一下我是如何学习八股文的,文章篇幅略长,希望能帮助到有需要的同学或者也是双非大三正在迷茫的你。

【知识库分享】 很多小伙伴看了文章找我要知识库,我的建议是应该参考我的方法而不是内容。我的知识库整理好了,想看整理好的可以私信我“资料”获取

这是我的面经,整理的很详细字节后端暑期实习 一二三面(已OC|新鲜面经)

学习要点

1. 要明白的一些事情

  • 什么是八股文?八股文不是死东西,八股文本应该指计算机基础知识,考验的是面试者基础能力、广度以及深度,大厂面试往往不会很重视死八股,往往是很灵活的分析,本文我就讲讲我是如何灵活的学习的。
  • 大概学习多久?因人而异,推荐平时积累,我是累积一年,然后重点准备了半年八股
  • 八股文感觉很抽象怎么办?制作一份简历,看看别人专业技能怎么写的,这个专业技能就是你八股文学习的标准(参考后文怎么写简历)
  • 面试八股文的形式?这里提一下一些常见的八股文出法
  1. 讲讲输入URL到网页显示发生什么? 抛直球的八股题,没有一点拐弯抹角,一面很常见,二面三面如果面试官觉得你基础不错就可能见不到这种问题了。
  2. 你可以讲一下URL到网页显示,每一层具体干了什么吗?高级八股,需要面试者结合整个计算机网络分层协议去回答,考验整体能力,如果是单纯记不理解,很容易这里就被面试官拉扯没的
  3. 把我当做小白,用大白话给我讲讲计算机网络体系是怎么工作的?送分题/送命题 其实这里是考察的就很灵活了,一般我们看的文章其实也是把我们当小白来看的,关键在于你理解后是真理解了还是记住了,如果你理解了,你是能够自己组织语言描述的
  4. 谈一个你觉得你学的最好的技术点。送命题。把八股文选择机会给面试者,你选你背的很熟悉的计算机网络可能格调低了,面试官会怀疑你:就这?如果选择太深有难以达到面试官期望,所以看后文了解如何准备这个问题

讲讲我的学习路线。

之前有小伙伴给我一张学习路线图,问我怎么学,这个我大有感触:望不见底的后端开发路线,小白看了泪目,工程师看了退步。

我结合这篇文章简单讲讲我的看法吧,首先上面的路线学完学懂大厂肯定稳了,但学完和学懂的人很少,因为路线不是合适每一个人,然后路线不能完全一样的学,而是作为参考。

然后讲讲我的学习路线看法(可以具体参考后文)

  • 大一大二基础阶段:计算机基础知识(计网、机组、os、数据结构、算法)初步入门 + 实战开发边开发边学springboot、Mybatis、mysql等
  • 大三八股文阶段:计算机基础知识八股文深入 + 深层次实战开发

面试前复盘准备:计算机网络+操作系统底层 + Mysql底层+Redis底层 + (JVM、多线程、Netty、分布式等选几个系统学)

像上面这种学习路线,我觉得JavaSe、SSM、servlet、jsp这些大坑给初学者也看不出来,初学者对路线本身就不是很清楚的还是多自己探索吧,怎么探索就是基于问题出发去学习,而不是基于路线,你如果对计算机体系很清楚,其实路线还是自己的最好。具体参考下文我是如何准备八股文及路线的。

2. 一定要做笔记!

先讲一下做笔记的重要性。

  1. 首先做笔记可以加深理解,一边动手一边动脑防止你大脑摸鱼,光看不思考,学习时迷迷糊糊就走神或者(。-ω-)zzz睡觉了。
  2. 其次你面试的时候比起标准八股文,你更先回忆起的是你的笔记。
  3. 等你很久没看八股文,你通过你的笔记以及之前的基础可以很快的又找回八股文的感觉

先讲一下笔记类型

  • 博客:不推荐好处就是可以给别人看,但维护成本太高,写一篇成本也高,不满足随笔记,随时更新。博客适合你在一个领域已经很厉害,然后发布一些有深度的内容,我个人觉得不适合记录笔记。
  • 知识库:推荐 什么是知识库,就是类似八股文网站一样构建树形文档结构,然后方便更新维护完善文档,相对于博客,好处就是目录维护简单,内容不是单篇发布。典型的例子就是语雀知识库。我的语雀知识库,我很愿意在这边随笔写内容,方便维护,也可以等内容累积好导出md发博客文章
  • 笔记大纲:推荐这里相对于知识库更适合随笔,文档写少了,难看,写多了臃肿,而笔记大纲(思维导图)就可以随笔记录,分点整理。当时B站看了个双非进字节的视频,我觉得每一个双非同学都有过这个问题,双非进大厂难吗,知乎百度的解答再好看也没有一个实际的例子好,所以当时我就找那个学长要了他的笔记。这份资料让我感受到思维上面的差异,我之前写这么多文章还不如简简单单用大纲自己总结,如果你被写文章束缚,那么赶快试一下幕布吧!

"这是我要的一位字节大佬的笔记,最后也如他所说成功进入了大厂,我很喜欢他的笔记方式,条理清楚,每个点想补充就补充很方便,不必要像文章那样写一堆废话来填充幅度,也给了我很大的启发。后面自己很多文章也是这种类型走。"

最后讲讲我综合很多思想整理出的我自己的记录八股文的方法:推荐大概思路就是每次遇到不会的,或者八股就创建小记,这时候可以不去完善,它是出于未完成状态在那里,每次遇到合适的答案就慢慢补充内容,然后等篇幅合适的时候就去参考一些高质量的文章(比如下面TCP和UPD我先自己总结+八股文网站总结,然后我去掘金或者公众号找类似网站,看下别的大佬怎么写的修正我里面的思路,然后再归档,这样一个八股文就搞定了,也可以随时在语雀其它网站内插入小记,方便我后面整理汇总)

讲一下做笔记要点

  • 一定要自己总结!!千万不要为了让内容漂亮,就直接搬运粘贴别八股文仓库里面的东西。
  • 怎么写笔记方便怎么来,别被各种条条框框束缚。你要愿意写,才有用,但同时最好做好可行性规划,比如我笔记能不能方便保存,如果丢失能不能找回,可不可以公开分享访问,可不可以多个平台编写(像typora就只能在电脑上拉仓库才能同步,而语雀多平台云同步就很方便)

3. 基础八股文组成

首先要了解八股文的组成,这样学习的时候就清楚自己目前在学那一块了

后面学习步骤那边也会提供下面模块对应的八股文网站以及资料学习

  • 计算机基础知识:计算机网络、操作系统、数据结构、算法。
  • Java基础八股文:Java基础、Java多线程、Java JUC、JVM虚拟机、java容器、Java 8
  • Java高级八股文:SpringMVC、SpringBoot
  • 数据库八股文:Mysql、Redis
  • 中间件八股文:消息队列MQ(任意一种推荐RabbitMQ)
  • 场景问题八股文:缓存一致性解决、4G数据找系统记录(大数据题)

-------------------上面是必要,下面是加分项---------------

  • 微服务分布式:分布式、微服务、、高性能、高可用等

4. 方法的要点

首先,你要有一个做笔记的软件,你需要通过很长的时间去慢慢完善它,所以一定要满足既能清晰构建框架,又能随时更新维护的软件。其次是你要明白你要学哪些[参考上面八股文组成],然后可以构建从零开始的知识框架,这个框架不是给别人看的,不必要做的很好看,满足一些基础markdown语法自己写着舒服就行。

其次,完成初始准备你的知识库应该是空的,这时候你可以试着去参考一下一些八股文网站他们怎么归类的来构建你的知识库框架,很显然分类是有规律的,你如果自己试着去多看一些

学习步骤(待更新)

这里讲一下我是如何去逐层递进去完善我的八股文体系的

① 基于场景去学

这个阶段是处于萌新阶段,大概是大一大二刚刚学完基础语言,对于计算机体系还是一脸茫然的情况,这里可以按照我下面的几个问题或者几个场景去初步接触一些知识,大概对计算机网络、操作系统、数据库、javaweb有一个初步的概念。

  • **计算机基础知识探索阶段**:(这个阶段学习计算机基础知识,对计算机框架有一个基础概念)
  • 了解输入url到网站显示过程中发生了什么?可以通过各种技术博客视频去学习,对计算机网络建立一个最基本的印象,清楚一下计算机网络其实就是两台主机通信,细致一点是进程通信,通过多层计算机网络保证这一个实现。然后学习中把不懂的内容记录到你的笔记中,待后续去完善
  • 了解你的笔记本的组成?了解什么是CPU,什么是显卡,IO设备、内存、硬盘等,电脑加内存条和加硬盘分别是提升电脑哪些性能。
  • 了解一下你是怎么和笔记本进行交互的?一条执行是怎么被操作系统执行又反馈的。这里对应操作系统课程,可以先简单了解一下进程线程、内核态、用户态,大概清楚指令是用户发出,通过IO设备被操作系统内核读取然后执行相应的操作,进程进行相应的通信交互,然后通过用户界面反馈给用户的。
  • 了解一下数据结构,这里的场景就是实战,去写代码,完全不需要先上课。推荐就是[代码随想录](https://www.programmercarl.com/),把每一章的第一小节(基础知识) 看一遍,很直观的了解到 链表、二叉树、栈、队列、堆、hash表这些常见数据结构都是干什么的,并且配套训练,很快你就对这些内容很熟悉了,然后就深入去了解各类数据结构优缺点,时间复杂度等。
  • 了解一下算法,算法和数据结构都分不开的,也是去刷题学算法路线去学习,也不需要等老师上课再学。在线学习推荐[代码随想录](https://www.programmercarl.com/),或者[labuladong](https://labuladong.gitee.io/algo/)。书籍的话推荐《啊哈算法》该书很通俗易懂的把各种算法讲述了一遍。参考上面,去了解算法种类基本思想,动态规划,贪心算法,回溯,搜索,排序算法等都要基础学习的。
  • **动手实际操作探索阶段**:(这个阶段需要动手去实际操作,基于已有的基础去探索更多领域)
  • 开始使用任意语言,通过一些博客教程去搭建一个可以登录注册的在线网页。这个场景我是大一寒假做的,显然C语言我可以很轻松实现这个程序,唯一要解决的是怎么存储已注册信息在下一次重新打开程序能字节登录而不是清空,显然C语言可以存本地文件,但这时候需要去搭建一个网页,就需要动脑筋去想怎么写网页(学习html css js),怎么访问网页(简单了解一下网页是怎么被通过端口访问的),登录注册发送的请求的数据在哪处理(了解post get请求的发送和处理),这时候就会有基础的前后台概念了(我第一次后端是php写的按照教程来的,虽然代码没太懂,但流程就有个大概印象了),前台是页面,后台是处理前台提交请求的地方,这时候后端需要存数据就需要数据库,如果数据可以存数据库,这时候这个登录注册的网页就可以简单投入使用了。
  • 购买一台服务器,搭建个人博客。这个阶段可以学习linux服务器基本命令,同时折腾博客可以提高兴趣,进阶的可以买域名让你的博客更容易访问,使用nginx让你网站可以不需要通过端口号访问(默认80),你可以在你服务器上搭建mysql云服务器,就不会局限于本地了。还能进行更多探索,如果是偏向硬件的同学还建议购买树莓派折腾一下,做一些更好玩的内容。
  • 开始学习游戏制作,unity,虚幻3.做游戏可以让你更熟悉面向对象的概念,同时了解多线程等
  • 尝试学习JavaWeb上线一个自己的项目。之前的博客可能都是有详细的教学,而这里可以试着自学写一个简单的登录注册的javaweb项目并且上线到服务器上(传jar包启动/tomcat跑war包服务)
  • 尝试写爬虫完成一些重复性工作。暂时没想到对八股文有啥帮助,哈哈

看到这里其实你已经对 八股文有了大概了解,上面的各种场景都会让你接触到八股文框架,也就是计算机知识框架,除了中间件,微服务,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课程学习路线,笔记,面试等架构资料,私信我【资料】即可获取免费资料!

经验分享 | 我的八股文学习路线及攻略相关推荐

  1. 分布式技术学习路线全攻略

    不管你是高级程序员,还是一名架构师,我想你早已经对分布式这个词耳熟能详了.打开各大招聘网站,不难发现,在招聘JD里,一线互联网公司对于候选人的要求中都有分布式系统设计这一关键词.为什么会这样呢? 我觉 ...

  2. 软件测试学习路线全面攻略,从入门到升华......

    目录:导读 前言 一.入门阶段(入行后3个月-1年) 二.提高阶段(入门后3年-5年) 三.升华阶段(老手后5年-10年) 四.总结 前言 测试工程师的工作:TE的根本使命是保护用户和业务的利益 注意 ...

  3. 自考本科计算机网络怎么过,经验分享:自考计算机网络本科课程通关攻略

    以本人多年自考的经验希望对大家有所裨益: 1.毛概:应该是最简单的一门课,听说有的人看了一个星期的书就过了.注意的地方是考试的时候不要有空的地方就行了.难度:2 时间:3 2.政经:比毛概要难一点,历 ...

  4. 资深前端开发工程师分享:关于前端学习路线的一些建议

    前言 对于刚开始学习前端的伙伴俩说,问得最多的问题就是 --前端技术现在如此繁杂,我到底应该如何学习.这个话题太大了,几句话回答不好:也由于这个问题确实困扰了很多前端开发人员,所以我也就着手系统的输出 ...

  5. DL之AlexNet:AlexNet算法的架构详解、损失函数、网络训练和学习之详细攻略

    DL之AlexNet:AlexNet算法的架构详解.损失函数.网络训练和学习之详细攻略 相关文章 Dataset:数据集集合(CV方向数据集)--常见的计算机视觉图像数据集大集合(建议收藏,持续更新) ...

  6. Auto CAD:CAD软件简介、使用技巧经验总结、基础案例应用之详细攻略

    Auto CAD:CAD软件简介.使用技巧经验总结.基础案例应用之详细攻略 目录 CAD软件简介 1.软件特点 2.软件用途 CAD软件使用技巧经验总结

  7. 程序员经验分享:Android高级工程师系列学习路线介绍,面试必备

    前言 曾听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作.这种观点可能是很多Android开发者最开始入行的原因之一. 在工作初期,工作主要是按照业务需求实 ...

  8. Lazada知识局:lazada运营经验分享,基础知识学习

    相信许多lazada商家入驻平台后最忧愁的就是运营了,因为对电商运营来说,底层思路无非是流量.转化率.客单价.那东哥作为过来人呢,今天就跟lazada新手卖家们来好好聊一下新手lazada商家运营过程 ...

  9. 温州市学习摩托车驾照攻略

    本人于2017年10月31日报考了摩托车E照增驾,做一个分享攻略给后面想学习摩托的朋友. 我只有CSDN的博客,所以方便起见,就记录在这个博客里. 地点:温州市鹿城区 事件:摩托E照增驾攻略(初学) ...

最新文章

  1. numpy append
  2. 2 - Hexo + GitHub 搭建博客
  3. Drupal 关于节点(nodes)的理解
  4. 【Linux进程、线程、任务调度】一 Linux进程生命周期 僵尸进程的含义 停止状态与作业控制 内存泄漏的真实含义 task_struct以及task_struct之间的关系
  5. iOS开发那些事--创建基于故事板的iOS 6的HelloWorld
  6. Php刷新重载id,php 使用 __call重载
  7. 今日头条架构演进之路——高压下的架构演进专题(含PPT)
  8. Java过滤器详细文档,简介,实例,应用
  9. kotlin gradle的修改
  10. Easyui的numberbox无法输入以0开头的数字编号(转载)
  11. FreeMarker 语法教程
  12. 10种软件滤波方法的示例程序
  13. matlab 对称矩阵特征值为负数,MATLAB中对称矩阵的复特征向量
  14. Ext.grid.EditorGridPanel点击单元格改变数据,动态添加列
  15. 联通无线网卡DNS服务器地址,全国各地电信、联通、网通的DNS服务器地址
  16. python头像转卡通_用python将你的头像“卡通化”
  17. 记录对接京东宙斯API -- 同步订单信息到自身系统
  18. Pandoc 安装与使用
  19. java rtmp推流_视频直播生成推流和播放地址的Java代码示例
  20. 淘宝客商品推广图片合成(包含二维码、图片、价格)

热门文章

  1. Cisco路由器重置enable密码步骤
  2. 教你如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题,使用激活 密钥
  3. 关于Windows许可证过期解决方案
  4. python不解压读取zip压缩包图片
  5. 【神经网络与深度学习】 Numpy 实现全连接神经网络
  6. 基于LiDAR里程计和先验地图的定位方法
  7. 测量频率和占空比的几种方法
  8. JAVA实现链接生成二维码
  9. bzoj2565(manacher)
  10. numpy——arry矩阵交换行或者交换列