双非无实习大厂经验分享:如何背八股和不背八股
简介
看见很多人对不背八股和笔记管理及思维方式感兴趣,我稍微分享以下叭。(小破丶
站后续会出视频教程,包括笔记设计,思考方式,资料推荐,可以先关注一波,同名)
先来探讨几个问题?
> 以下均为我自己的看法,知识点部分,用词可能是有不准确,因为重经验分享而不是打磨细节部分。
> 以下是我的真情实感,编出来的。希望觉得有用的朋友们可以点赞收藏关注
注意:
- 我是在网页端编辑的,是我将列表按层级来缩进,但是发现app端看不见缩进!!淦
为什么会出现八股文
- 面试常问
- 面试官的提问神器,面试者的参考手册
我自己虽然说我自己不背,但是我不是不看? 所以我对八股文其实也没有任何恶意。
- 为什么很多大佬,或者面试官可能讨厌八股文?
原因是,很多面试者,他一味的去背八股,但是却没有任何思考(如果你有充裕时间,我觉得不思考那就不能理解了)。作为面试官,每次听到都是一样的答案,没有任何的感觉可能不太行吧。思考很多问题,回答很有深度,但是没感觉到有自己的视角
- 为什么面试官一眼看出你背八股:
- 很多人回答一样
- 你的回答看上去没有纰漏,偶尔几个还好,但是通篇下来,面试官发现,你所有的回答,都没有自己的角度?
- 八股文回答很全面,那些东西如果你思考过,你会发现解释起来是很难的,假设你真正研究过,谈论的时候必然会谈论你的感觉、看法
- 例子: 问: 山顶的景色如何。
- 背八股: 注重讲清楚,云,天空,草木,全部描述的很清楚
- 不背:
- 视角(登顶后,太阳-->云-->蓝天-->远处山-->近处的树-->草)
- 重点(很难都讲出来,但是至少有详有略)
- 观点(自己对哪个最喜欢,或者说的多的肯定就是喜欢呗),拓展比较和关联(黄山、华山、泰山。个人觉得有什么区别);
- 可选(真情实感,爬山太累了,但是看见风景觉得还是值得的)
- 我怎么看待八股
八股其实蛮有用的(很多也就是官网解释,肯定精华)。因为如果你花一段时间去研究一个框架,比较懂了,你会发现,要理解这个框架,这个知识,是有几个关键的问题!,其实是通过这几个关键的问题,你就能讲一个框架的核心流程说明白。我也看过八股,我觉得很多问题都是研究清楚一个知识点的关键。大家如果认真研究哪些,再去拓展思考,是很牛的!!(非广告,我也不知道谁的八股文好)
- 我怎么看八股?
我看八股不太多,但是可能我研究过的短视频、我收藏的资料,也属于八股。谁能不接触八股呢?所以这个问题,其实也就是如何学习的问题,很多八股就是从官网摘录下来的,并且总结的也非常好啊。所以这个问题,我就介绍为"我该怎么学习的?"
学习方式
我用的Obsidian + 若干插件 + 自己不断琢磨自己的学习方式,搞出如下功能
- PDF管理: 如果管理若干本地PDF?如何阅读并管理PDF笔记?
- 图片管理: 对于自己画的图, 全部规范命名,存储在一个文件夹中
- 画图管理、笔记管理
- 脚本管理: 输入内容,快速打开网站,搜索
电子书
、问题等
。毕竟,一个个搜太慢了 - ......
大致的笔记理论就是:
- 将笔记进行拆分!!: 可以参考卡片盒笔记法,将笔记尽量拆分为独立的笔记内容
- 笔记分层: 我将笔记分为三层:
索引笔记
-永久笔记
-子知识笔记
- 类比:B+树,第一层索引,只有叶子节点才存储,搜索知识点的过程,就是B+树的Root Node和非叶子节点进行范围索引,最后到叶子节点,这里是数据
- 索引笔记存储`链接`和`框架的介绍`及`链接的介绍`,索引笔记只链接到永久笔记,永久笔记存储一个独立知识点,如果要对这个独立知识点进行深入研究,那么就先在永久笔记里面创建链接连接到这个子知识笔记。
- 好处就是:解耦,找文件贼快。知识点的粒度非常细
- 画图: 以一个框架的关键线路,进行绘制一张图,然后在你不断研究学习的过程中,将这些笔记串联起来!!!!
- 规范命名
- 类比:联合索引,例如Spring--永久笔记--ApplicationContext。现在来理解联合索引,我们想搜某个文件,可以是`Spring`,可以是 `Spring--永久`,也可以是`Spring--永久笔记--Application`
- 双联思想: 通过卡牌盒进行拆分,通过链接,将耦合的文本内容进行解耦。而画图则是完成一个高内聚的过程,聚焦相关知识点
- 开个玩笑:相当于IDEA用 ctrl + q 跳转,链接很方便。但是总不能把所有类写一个文件中吧
我阅读源码笔记,源码和阅读笔记解耦,只留一个链接拆分笔记: 让每一个笔记都可以被引用,也可以引用其他笔记解耦画图和笔记: 如下图,下划线为链接。从该知识点的视角来看,阅读笔记和源码耦合,源码的不同实际不会影响笔记。
例如下面画图,就是一个架构图啊,但是笔记被我通过链接的形式。将两者解耦同理: 尝试将笔记资料解耦,合理命名,管理。然后再梳理,就异常清晰了
这里打算以一个例子来解释我要学习JVM
- 从JVM:
- 如何调用本类的静态实例方法
- 另一个类的方法
- 另一个接口的方法
- 抽象类?
- 如果用到了静态变量
- 其他对象的变量等
- 又是怎么样执行的?
- 面向对象的底层思想?
上面这些东西,思考费劲嘛
上面那个,就是很多人背八股的感觉,。为什么需要背?只能记住问题,但是没有线路的上下文,问题之间没有关联。但是,假如你研究了一个流程,整理出来后,然后总结的很清楚,熟悉到能口述的地步。回答很多问题就不那么困难了,因为你都研究过,而且很多知识点都有上下文(这样会帮助记忆)
- JVM
- 一个main()方法,其中定义了变量,创建了对象,调用了静态方法、实例方法。用到了抽象类、接口。调用了本地方法。
- 如果学完了JVM,尝试用你学到的知识来解释JVM执行上面这个的过程
我这里没有去强调任何一个组件结构,但是你要解释这些问题,必须要了解各个组件是如何上下承转的。然后,之后,可以尝试去解释一下面对对象思想,在Java中是如何利用JVM来实现的?编译器是如何配合完成这个功能的?
之后,你就发现,你可以串联起来整个流程!!
一个main()方法,其中定义了变量,创建了对象,调用了静态方法、实例方法。用到了抽象类、接口。调用了本地方法。
然后如何编译成字节码(编译器)
然后JVM中的流程
也就是核心方法是,可以先看看一些问题,但是一定要梳理他们之间的流程。然后学完了之后,再拓展自己的思路,将这个线路的上下文也梳理起来,整合成一个大的线路。
我的感觉
就是对于很多框架,都有一个感觉,就是看过原理和一点源码之后,最重要是了解他们的流程。
举个例子发送一条请求,要经过哪些地方?
注意,并非是对每个部分都要研究清清楚楚,而且当你在不同的一个知识储量下,要有不同知识储量下的一条线路!!!
- 浏览器如何发送?
- 操作系统如何接收?(tips: 协议栈的应用层是用户态,其他层是内核态;协议栈解析完了,网卡发送,其中的过程又是怎么样)
- 计算机网络: 路由器等各类网络设备如何处理
- 对方操作系统如何接收?(差不多对称)
当消息达到了对方应用层然后就是Web框架部分:(可选: Tomcat启动也不是也Java代码,也可以解释从Java代码--->编译--->JVM执行的过程)
- Tomcat来接收,他的接收的原理是什么呢?
- 看过源码之后,顺起来执行流程
- SpringMVC的核心是啥? DispatcheServelet
- 有了SpringMVC就没有Tomcat了吗?不是,依旧是Tomcat来处理,那么他俩之间如何承接的。(面向接口编程)SpringMVC也有自己的流程
- 这里其实一般单体就差不多了,BUT,但这也太小瞧我们后端程序员了吧!!
- 咱们继续梳理
- MySQL 连接如何建立的、执行优化器啥的(这些C++的东西,好难啊,搞不懂,还有太多理论知识)后续就是一条SQL如何执行 如果数据不在,是不是还得加载磁盘的数据页?对非索引行的修改操作(非插入),可以缓存嘛? changeBufferBufferPool中的数据如何管理的?
- Select:B+树如何搜索的?如何找到目标的行记录 注意: 这里可以帮助你了解索引如何存储、管理、执行。
- Update:B+树如何更新的? ,如何加锁的?
- Insert:同
- Delete:同
- 如何保证事务?
- ...其他问题
- Redis: 我的Redis,手画了一张图,就是源码结构图。部分参考自《Redis设计与实现》这里不多讲了。
- 微服务/分布式:微服务不也是处理请求吗。也可以解释呀。
就是,你在研究不同知识点的时候,我感觉,在研究如下问题
- JVM优化
- MySQL调优
- 各种优化 例如,我MySQL可以的一条流程梳理的还不错?
- 例如上锁了,我就能在脑子里面梳理,这条SQL语句,在已给的记录集下,如何在B+树上去遍历,然后加锁,最后得到结果的?
- 这里情况很多: 主键索引、辅助索引、for share、for update、limit、order by....可能都会影响结果喔。也包括各类索引失效会咋样
- 这个时候看一些常见SQL技巧,我就知道他是发生在那个位置的,然后去梳理和研究。
我看过很多文档,梳理这些的目的,不是去让看起来懂得很多,我一直感觉我很多反而都不懂(很多知识点还是很难理解的),而是,当一个问题发生了,你在脑子里面是清楚,这个问题是在哪里发生的。甚至晚上如果要想问题,就会有很多流程和架构图浮现在脑子里面,去思考问题
学习的感觉
- 通过上面这种思维方式,结合架构图、手绘流程图
- 最后自己的脑子里面就像印了各种架构图,当我回答一个问题的时候,其实我脑子里面只知道他和哪些框架有关系(我也不是立刻就知道之后要说哪些东西,包括我写上面的部分也是),就是按照一条线的逻辑,到了哪个框架,再去脑子里面搜索(之前我提到了
线头
的概念)。然后在说出来,这也就是为什么我不需要去刻意去背很多东西(也会忘,但是可能花30分钟,就会很熟悉了) - 然后很多问题也是,我就单独把那一段路线上的子路线(子集),说出来,所以我的回答应该很多都不是一般意义上的八股(有参考)
问个问题
问题1 英语
我最近打算看英文技术文档/网站,来帮助学习英语。我已经看过一个全英的正则的练习网站,感觉还不错。大家有没有一些网站,他的东西,我们技术者也需要,例如各类工具啥的。但是不会有特别多的生词,我想练练英语!!。希望英语好的学弟、学妹、大佬。或者给一点建议,我要学英语,目的: 看技术文档、日常交流、可选: 工作交流,我想学,但是这样难度会不会很大,很多计算机词汇我不懂
问题2 提前实习需要准备哪些/提前实习,怎么才能最大化提升自己
我单独出文章又没人回复,这里可能热度会高一些
Tips
我这里不想说的很高级,我多厉害,亦或者我思想多深刻。我就是一个小白,我还有很多要学的。
上面是我脑子里面的草稿
,如果大家没有梳理过,可能会看的迷迷糊糊的。
但是不代表你比我差,同样也不代表我比你厉害,只是你还没学到或者没去研究!!!!因为这些是我花了很久的时间研究适合自己学习的方法,再画了大半年去研究的过程,太累了,不过很有趣。!!
大家可以从其中某个部分去理解一个流程,尝试去梳理?
#晒一晒我的offer##24届软开秋招面试经验大赏##我发现了面试通关密码##没有实习经历,还有机会进大厂吗#