├── README.md ├── 八股文骚套路之JVM.md ├── 八股文骚套路之Java基础.md ├── 八股文骚套路之Java并发.md ├── 八股文骚套路之MySQL.md ├── 八股文骚套路之Redis.md ├── 八股文骚套路之操作系统.md ├── 八股文骚套路之数据结构.md ├── 八股文骚套路之算法.md ├── 八股文骚套路之计算机网络.md ├── 我的秋招规划.md ├── 校招全流程注意事项.md └── 面试小技巧汇总.md /README.md: -------------------------------------------------------------------------------- 1 | # 面试八股文系列 2 | 3 | > [为了以后便于大家的阅读,我把上述文章整理成了 pdf 格式的小册子,点此链接即可领取。](https://mp.weixin.qq.com/s/1gXVd_6BEmaocu1NA4YToQ) 4 | 5 | img 6 | 7 | 近年来后端岗位越来越卷,毕业生的压力也越来越大。个人感觉目前各个大中厂校招面试不好的地方是,都在朝着背面试八股文的方向发展(曾经面试某二线厂,对着面试官纯背了 40 分钟概念),但不得不承认这也是企业在短时间内筛选面试者的一个重要手段。 8 | 9 | 为了帮助准备参加校招的同学快速抓住面试重点,特此推出面试八股文画重点系列(包含的内容有 **Java 基础** 、**JVM** 、**MySQL**、**Redis**、**操作系统**、**计算机网络**、**设计模式**、**数据结构和算法**)。希望大家背好面试八股文以后,还是要对底层原理多理解,如果在面试中你能自然的根据面试官的问题抛出一些你对相关底层原理的理解,面试官会特别惊喜的。 10 | 11 | 我写这个系列是为了给马上进行秋招的同学救急用的,目的是帮助他们节省复习的时间。不是今年就秋招的同学可以浏览下文章大致了解下秋招的需求,然后去我公众号后台回复计算机基础领点相关资料打好基础,也要多做点项目提升自己的动手能力。要是你才刚上大一你天天就跟着我背面试八股文,你可废了,我跟你说。 12 | 13 | 如果有什么不清楚的,欢迎加我微信**dabai0016** 与我联系。 14 | 15 | - [校招全流程注意事项](./校招全流程注意事项.md) 16 | - [我的秋招规划](./我的秋招规划.md) 17 | - [面试小技巧汇总](./面试小技巧汇总.md) 18 | - [八股文骚套路之Java基础](./八股文骚套路之Java基础.md) 19 | - [八股文骚套路之Java并发](./八股文骚套路之Java并发.md) 20 | - [八股文骚套路之 JVM](./八股文骚套路之JVM.md) 21 | - [八股文骚套路之MySQL ](./八股文骚套路之MySQL.md) 22 | - [八股文骚套路之Redis ](./八股文骚套路之Redis.md) 23 | - [八股文骚套路之算法](./八股文骚套路之算法.md) 24 | - [八股文骚套路之数据结构](./八股文骚套路之数据结构.md) 25 | - [八股文骚套路之计算机网络](./八股文骚套路之计算机网络.md) 26 | - [八股文骚套路之操作系统](./八股文骚套路之计算机网络.md) 27 | 28 | ## 面试资料 29 | 30 | ### 图解计算机基础 31 | 32 | 我在准备CS面试的时候整理的一些图解计算机基础资料:[图解操作系统、网络、计算机组成PDF下载!](https://mp.weixin.qq.com/s?__biz=MzIxNDM1NjAyMQ==&mid=2247484156&idx=1&sn=d2af818f9cc40a5edca61431c82aca83&chksm=97a99ba6a0de12b0a28dde1844919a522543d2362e15fd187f48dbc580a2208fc14b5b8acbde&token=1844387414&lang=zh_CN#rd) 。 33 | 34 | ### Leetcode 35 | 36 | 国内现在的校招面试开始越来越重视算法了,尤其是像字节跳动、腾讯这类大公司。绝大部分公司的校招笔试是有算法题的,如果 AC 率比较低的话,基本就挂掉了。 37 | 38 | 一定要多多刷Leetcode,这是我整理的一些 Leetcode 相关的资料:[阿里ACM大佬开源的学习笔记!TQL!](http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzIxNDM1NjAyMQ%3D%3D%26mid%3D2247484183%26idx%3D1%26sn%3D3bfdcbd35649eecbc047269dc9b045d3%26chksm%3D97a99a4da0de135b4a23df0b106200d09e5a52c0720fd3f138771cb785ab1bdd6fe8d8b48f82%26token%3D711623521%26lang%3Dzh_CN%23rd)(整理不易,有帮助的话欢迎点赞!)。 39 | 40 | ### 学习路线 41 | 42 | 我整理了一系列开源的技术学习路线图,涵盖 Java、Go、Rust、Android、iOS、Web......。这些学习路线我已经下载到了本地。 43 | 44 | ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/149de14bf0a048feabffb211dc50125a~tplv-k3u1fbpfcp-watermark.image) 45 | 46 | 获取的方式如下,没有任何套路。 47 | 48 | 公众号“**「CS 指南」**”后台回复 “**「学习路线」**” 即可获取下载链接。 49 | 50 | ![](https://img-blog.csdnimg.cn/2021060517454068.png) 51 | -------------------------------------------------------------------------------- /八股文骚套路之JVM.md: -------------------------------------------------------------------------------- 1 | 近几年 Java 后端面试中,对 JVM 的考察越来越严格,这也给还没工作经验的应届生带来很大的难度。本期我们就给 JVM 知识部分画一画重点,给大家讲讲如何应付面试官对 JVM 的考察。 2 | 3 | ## 救急准备 4 | 5 | 下面这些问题都是面试互联网大厂后端岗位时的常问问题,我希望你都能熟练的答出来呀!暂时没记牢也不用太担心,我建议你在投简历和约面时,把最想去的公司的面试稍微往后推一推,先面几家自己拿不到 offer 也不会难过的公司。上面这些八股文就是通过我 平时+面试 记熟的,去年 7 月 初第一次我面一家中小厂,这些都磕磕绊绊的答不出来,但是到后期 8 月底 9 月初完全能轻松应对各大厂面试官了。 6 | 7 | 另外,我通过打星与加粗的方式对下面面试题的重要性进行评级!难度是针对互联网大厂的。 8 | 9 | - ⭐ :面试中不常问到,如果面试官问到尽量能答出来,答不出来也没关系。 10 | - ⭐⭐ :面试中不常问到,但是如果面试官问到的话,答不出来对你的印象会减分。 11 | - ⭐⭐⭐:面试中会问到,答不出来面试有点悬。面试官会惊讶为什么你这也不会。 12 | - ⭐⭐⭐⭐:面试高频考点。 13 | - ⭐⭐⭐⭐⭐:面试超高频考点。四星考点和五星考点是参加十场面试,至少能有五场面试问到这些的。大家在准备面试过程中尽量把这些知识点的回答条理梳理清楚,面试官一问就开背。 14 | 15 | **JVM 基础常见面试题汇总** : 16 | 17 | 1. 运行时数据区中包含哪些区域?哪些线程共享?哪些线程独享?【⭐⭐⭐⭐⭐】 18 | 2. 说一下方法区和永久代的关系。【⭐⭐⭐】 19 | 3. 讲一下 Java 创建一个对象的过程。【⭐⭐⭐⭐】 20 | 4. 对象的访问定位的两种方式(句柄和直接指针两种方式)。【⭐⭐⭐⭐⭐】 21 | 5. 你了解分代理论吗?讲一下 Minor GC、还有 Full GC。【⭐⭐⭐⭐⭐】 22 | 6. Java 用什么方法确定哪些对象该被清理? 讲一下可达性分析算法的流程。【⭐⭐⭐⭐】 23 | 7. JDK 中有几种引用类型?分别的特点是什么?【⭐⭐】 24 | 8. 如何回收方法区?【⭐⭐⭐】 25 | 9. 标记清楚、标记复制、标记整理分别是怎样清理垃圾的?各有什么优缺点?【⭐⭐⭐⭐⭐】 26 | 10. JVM 中的安全点和安全区各代表什么?写屏障你了解吗?【⭐⭐⭐⭐】 27 | 11. 并发标记要解决什么问题?并发标记带来了什么问题?如何解决并发扫描时对象消失问题?【⭐⭐⭐⭐】相关阅读:[面试官:你说你熟悉 jvm?那你讲一下并发的可达性分析](https://juejin.cn/post/6844904070788939790) 。 28 | 12. 对于 JVM 的垃圾收集器你有什么了解的?【⭐⭐⭐⭐】有时候面试官会问出这种十分开放性的问题,你需要脑子里过一下你对这个大问题下的哪些知识熟悉哪些不熟悉,不熟悉的点一下就过,熟悉的展开讲。在准备校招时,我的一个是阿里 P7 的学姐,给我做过一次模拟面试,问出这个问题时让我有点懵,那么多东西我不知道从哪开始回答呀,就答得很凌乱。模拟面试完我问她这种问题应该从哪开始回答? 她说她因为不知道我的掌握情况,所以就先问一个大问题,根据我的回答再追问,以后遇到这种问题主要从自己熟悉得方面切入就可以了。后来的面试还真遇到过好几次这种情况,我就答,垃圾收集器的种类有以下几种 Serial,ParNew...现在用的多的还是 CMS 和 G1,CMS 的垃圾收集流程是 xxx,G1 的垃圾收集流程是 xxx,他们特点是...就这样把话题引到 CMS 和 G1 了,只 CMS 和 G1 这部分和面试官讨论十几分钟完全没问题。 29 | 13. 新生代垃圾收集器有哪些?老年代垃圾收集器有哪些?哪些是单线程垃圾收集器,哪些是多线程垃圾收集器?各有什么特点?各基于哪一种垃圾收集算法?【⭐⭐⭐⭐】 30 | 14. 讲一下 CMS 垃圾收集器的四个步骤。CMS 有什么缺点?【⭐⭐⭐⭐】 31 | 15. G1 垃圾收集器的步骤。有什么缺点?【⭐⭐⭐⭐】 32 | 16. 讲一下内存分配策略?【⭐⭐⭐⭐】 33 | 17. 虚拟机基础故障处理工具有哪些?【⭐⭐⭐】 34 | 18. 什么是字节码?类文件结构的组成了解吗?【⭐⭐⭐⭐】 35 | 19. 类的生命周期?类加载的过程了解么?加载这一步主要做了什么事情?初始化阶段中哪几种情况必须对类初始化?【⭐⭐⭐⭐⭐】 36 | 20. 讲一下双亲委派模型。【⭐⭐⭐⭐⭐】 37 | 38 | 由于篇幅问题,我并没有写上面这些问题的答案。你可以自行查阅,你也可以参考 JavaGuide 这个开源项目,涵盖了大部分 Java 程序员所需要掌握的核心知识。背面试八股文,这是一个必看的开源项目(学 Java 基础以及实战也推荐看这个项目)。 39 | 40 | - Github 地址:https://github.com/Snailclimb/JavaGuide 41 | - Gitee 地址:https://gitee.com/SnailClimb/JavaGuide(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) 42 | - 在线阅读地址: https://javaguide.cn/ 43 | 44 | ![](https://img-blog.csdnimg.cn/1eae417991c14035b13ff5b696a27d78.png) 45 | 46 | ## 系统学习 47 | 48 | 如果想要看书学习 JVM 和准备 JVM 面试的话,我建推荐两本书:一本是准备后端面试时人手一本的《深入理解 Java 虚拟机》,另一本是《实战 Java 虚拟机》。 49 | 50 | ![](https://img-blog.csdnimg.cn/20210708225059919.png) 51 | 52 | ![](https://img-blog.csdnimg.cn/20210708225153247.png) 53 | 54 | 《深入理解 Java 虚拟机》 这本书的推荐理由不用多说,面试官的 JVM 知识也是从这本书上学的。推荐实战 Java 虚拟机这本书的理由呢,是因为深入理解 Java 虚拟机这本书初学者看起来有点困难。如果你一点 JVM 虚拟机基础都没有,那么我建议你先快速过一遍实战 Java 虚拟机,然后再去啃深入理解 Java 虚拟机这本书。我的理念一直是先易后难,先做到上手再做到深挖。深入理解 Java 虚拟机这本书很厚,但是通过我的划重点,能把书变薄。大家先把我划重点的部分学会,就完全够应付面试了,剩下的部分有时间再看就好了。 55 | 56 | 这里我们以 《深入理解 Java 虚拟机》 这本书为例来介绍如何准备 JVM 面试八股文。 57 | 58 | **第 2 章 Java 内存区域与内存溢出异常** 59 | 60 | 第 2 章属于第二部分的一个总概括,也是 JVM 八股文面试中的一大考点。首先,`运行时数据区` 是面试官特别爱问的一个问题。下面这张图大家一定要记牢。 61 | 62 | ![img](https://img-blog.csdnimg.cn/20210708225236100.png) 63 | 64 | 面试官在考察 JVM 部分时,起始问题一般就是运行时数据区中包含哪些区域?哪些区域时线程共享?哪些区域线程隔离?然后以此再问你各个部分的细节。这几个区域中,堆和方法区又是考察的重点。另外虚拟机在 Java 堆中 `对象的创建` 、`内存布局` 、`对象访问` 定位这几个过程也是面试八股文的一大考点。如果有时间的话把 2.4 节 OutOfMemoryError 异常的实例了解一下也是挺好的。 65 | 66 | **第 3 章 垃圾收集器与内存分配策略** 67 | 68 | 垃圾收集器是面试中重点的重点。首先 `引用计数法` 和 `可达性分析算法` 必须充分理解,然后`强引用` 、`软引用` 、 `弱引用` 、`虚引用` 四种类型必须理解并且记牢,面试官特别爱问四种引用的区别。垃圾收集算法中的分代收集理论要充分理解并且记熟,`标记-清楚算法` 、`标记复制算法` 、`标记整理算法` 要充分理解并且记熟,并比较各自的优缺点。`根节点枚举` 、`安全点` 、`安全区域` 、`记忆集与卡表` 、`写屏障` 、`并发的可达性分析` 要充分理解并能大致复述出来。 经典垃圾收集器 `CMS` 和 `G1` 相关知识点要充分理解并且记熟(这是超高频考点),`Serial`、`ParNew` 等了解就好,新生代的垃圾收集器暂时就别看了,你不说面试官不会问的。3.8 节的内存分配与回收策略的实战要好好看下,对象优先在 `Eden` 分配、`大对象直接进入老年代`、`长期存活的对象进入老年代`、`动态对象年龄判定`、`空间分配担保` 这些技术做了什么要记清楚。这些技术使用的常见参数有哪些? 69 | 70 | **第 4 章 虚拟机性能监控、故障处理工具** 71 | 72 | 这一章有时间看下,把几个常用的工具记一下,没时间就别看了。当时有个面试官问我虚拟机怎么做性能监控,我说我知道有工具可以监控虚拟机性能,但名字我记不清了,面试官说你知道有工具就行。 73 | 74 | **第 5 章 调优案例分析与实战** 75 | 76 | 在这一章可以学一两个实例套到自己项目中给面试官讲,但是如果你感觉自己给面试官讲不清楚,那么千万别勉强。你别说你有 JVM 调优经验,面试官一般也不会问你。 77 | 78 | **第 6 章 类文件结构** 79 | 80 | 大致扫读一遍就可以了,了解就行,面试官基本不问。 81 | 82 | **第七章 虚拟机类加载机制** 83 | 84 | `类的生命周期` 一定要记牢,就是下面这张图。 85 | 86 | ![img](https://img-blog.csdnimg.cn/20210708225312369.png) 87 | 88 | 上述环节的顺序要记清楚,每个环节做了什么也要记清楚。比如 `加载` 阶段做了三件事: 89 | 90 | (1)通过类的全限定名获取定义此类的二进制字节流。 91 | 92 | (2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构。 93 | 94 | (3)在内存中生成一个代表这个类的 Class 对象作为方法区这个类的各种数据访问入口。其它几个环节同样,不需要记清楚细节,但是做了什么要记清楚。 95 | 96 | 类加载器中的 `双亲委派模型` 是八股文考试中重点的重点,被问到的频率特别高,一定要充分理解,并且记熟。 97 | 98 | 说到类加载,`Java创建对象` 的过程也一定要记熟呀,类加载检查 -> 分配内存 -> 初始化零值 -> 设置对象头 ->执行 init 方法,这个顺序一定要记牢,细节也要记清。 99 | 100 | **第八章 虚拟机字节码执行引擎** 101 | 102 | 这一章把 `栈帧的结构` 弄清楚就差不多了,其它的就扫一眼就好了。 103 | 104 | **第九章 类加载及执行子系统的案例与实战** 105 | 106 | 了解一下就可以了,不了解也没事。 107 | 108 | **第十二章 Java 内存模型与线程** 109 | 110 | 这一章也是八股文面试考察中的重点、`Java内存模型的定义`、`内存间交互操作` 要记清楚。`volatile` 这个关键字是面试考察的重点,他的作用要彻彻底底的掌握,面试中经常问。Java 内存模型的三大特征 `原子性、可见性和有序性` 也一定要理解。Java `线程的状态转换` 也是一个常考问题。协程了解一下就好了。 111 | 112 | **第十三章 线程安全与锁优化** 113 | 114 | 这部分绝对是面试中考察的重点中的重点。首先你需要理解并记牢线程安全的几种实现方法,比如`互斥同步`、`非阻塞同步` 等。互斥同步中有两个重要的同步手段一定要重视,一个是 `synchronized`,另一个是 `ReentrantLock` 。非阻塞同步中一个重要手段 `CAS` 一定要充分理解。 115 | 116 | 锁优化也是考察的重点,`适应性自旋`、`锁消除`、`锁碰撞`、`轻量级锁`、`偏向锁` 这些技术一定要充分理解和记熟。 117 | 118 | 好了,如果只是为了通过 JVM 的八股文面试的话,把上面我划重点的内容掌握应付校招足够了。这样看,深入理解 Java 虚拟机这本书是不是变薄了很多了? 但是如果有时间的话,我还是建议你能够把整本书都好好看下呀。嗯...我知道你们应该学累了。 119 | 120 | ![](https://img-blog.csdnimg.cn/2021070822534311.png) 121 | 122 | 下面我出一些问题,把我上面说的学完以后,你可以用来自测一下你 JVM 准备的怎么样了,可以收藏了等面试前再过一遍。答案都在深入理解 Java 虚拟机这本书中。 123 | 124 | 如果你比较喜欢看视频学习的话,推荐你看一下尚硅谷的尚硅谷的宋红康老师的《JVM 全套教程》。这个课程的内容非常硬,一共有接近 400 小节。 125 | 126 | ![](https://img-blog.csdnimg.cn/20210409181534319.png) 127 | 128 | 这门课程主要讲的是 JVM 理论相关的内容,不过也会结合部分实践来加深理解。 129 | 130 | 讲真,宋红康老师讲解的非常通俗易懂,配合大量的图解非常容易让人理解。宋老师 YYDS! 131 | 132 | 课程的内容分为 3 部分,基本把 JVM 中重要的知识点都涵盖到了! 133 | 134 | 1. 《内存与垃圾回收篇》 135 | 2. 《字节码与类的加载篇》 136 | 3. 《性能监控与调优篇》 137 | 138 | 我知道有很多小伙伴学习 JVM 主要是为了应付面试,毕竟很多大厂在招聘 Java 开发的时候,JVM 基本是必问。 139 | 140 | 为了节省本就宝贵的面试复习时间,对于找工作面试的同学,看 p01-p203 ,p266-p301 就可以了。 141 | 142 | 尚硅谷算得上是比价良心的培训机构了,免费开源了很多免费且高质量的教学视频,帮助了很多小伙伴学习编程。 143 | 144 | 公众号“**CS 指南**”后台回复“**尚硅谷**”可以领取尚硅谷这个系列完整的视频教程。 145 | 146 | ![](https://img-blog.csdnimg.cn/3da401c8c8c74e29884d8e39b5d5e378.png) 147 | 148 | ![](https://img-blog.csdnimg.cn/2021060517454068.png) -------------------------------------------------------------------------------- /八股文骚套路之Java基础.md: -------------------------------------------------------------------------------- 1 | ## Java 基础面试准备 2 | 3 | ### 救急准备 4 | 5 | 下面这些问题都是面试互联网大厂后端岗位时的常问问题,我希望你都能熟练的答出来呀!暂时没记牢也不用太担心,我建议你在投简历和约面时,把最想去的公司的面试稍微往后推一推,先面几家自己拿不到 offer 也不会难过的公司。上面这些八股文就是通过我 平时+面试 记熟的,去年 7月 初第一次我面一家中小厂,这些都磕磕绊绊的答不出来,但是到后期 8月底 9月初完全能轻松应对各大厂面试官了。 6 | 7 | 另外,我通过打星与加粗的方式对下面面试题的重要性进行评级!难度是针对互联网大厂的。 8 | 9 | - ⭐ :面试中不常问到,如果面试官问到尽量能答出来,答不出来也没关系。 10 | - ⭐⭐ :面试中不常问到,但是如果面试官问到的话,答不出来对你的印象会减分。 11 | - ⭐⭐⭐:面试中会问到,答不出来面试有点悬。面试官会惊讶为什么你这也不会。 12 | - ⭐⭐⭐⭐:面试高频考点。 13 | - ⭐⭐⭐⭐⭐:面试超高频考点。四星考点和五星考点是参加十场面试,至少能有五场面试问到这些的。大家在准备面试过程中尽量把这些知识点的回答条理梳理清楚,面试官一问就开背。 14 | 15 | **Java 基础常见面试题汇总** : 16 | 17 | 1. Java 语言的特点(如果你简历上有提到 C++ 可能还会问你 Java 和 C++ 的区别)。【⭐⭐】 18 | 2. 比较 JVM 和 JDK 以及 JRE 。【⭐⭐⭐】非常非常基础的一个问题!学了 Java 之后还不知这个问题如何回答的小伙伴自觉去面壁吧! 19 | 3. 为什么说 Java 语言“解释与编译并存”。【⭐⭐】 20 | 4. Java 基本类型有哪几种,各占多少位?【⭐⭐】前些年面试常问的一个问题,去年面试过程中只京东问我了 21 | 5. Java 泛型,类型擦除。【⭐⭐⭐】 22 | 6. `==` 和 `equals()` 的区别。【⭐⭐⭐】:这个问题在 2018 年之前几乎是面试必问的问题,但是现在大厂以及比较少问了,现在小厂中厂问的多。 23 | 7. **`hashCode()` 和 `equals()`** 【⭐⭐⭐⭐】:这个问题经常问,面试官经常问为什么重写 `equals()` 时要重写 `hashCode()` 方法?另外,这个问题经常结合着 `HashSet` 问。 24 | 8. **重载和重写的区别。** 【⭐⭐⭐⭐】 25 | 9. 深拷贝和浅拷贝。【⭐】 26 | 10. 面向对象和面向过程的区别。【⭐⭐⭐】 27 | 11. 成员变量与局部变量的区别。【⭐⭐⭐】 28 | 12. 面向对象三大特性是什么。并解释这三大特性。【⭐⭐⭐⭐】 29 | 13. **`String`、`StringBuffer` 和 `StringBuilder` 的区别。** 【⭐⭐⭐⭐】 30 | 14. Java 异常。【⭐⭐⭐】:不会问的特别细。经常的问法是异常可以分为哪几种,然后你答了可检查异常和不可检查异常以后,会让你举例可检查异常有哪些,不可检查有哪些。然后,异常的代码要会写,有一场字节的面试,直接让我写一个把异常捕获了然后抛出去的代码。 31 | 15. 序列化和反序列化【⭐⭐】 32 | 16. 反射【⭐⭐】面试官可能会问你什么是反射,它的优缺点是什么,有哪些应用场景。 33 | 17. `List`、Set`、` `Map` 的区别。【⭐⭐】 34 | 18. **`ArrayList` 和 `LinkedList` 的区别。**【⭐⭐⭐⭐】:答清楚每个分别采用什么数据结构,对比相应的优点和缺点。 35 | 19. 比较 `HashSet`、`LinkedHashSet` 和 `TreeSet` 三者的异同。【⭐⭐⭐】 36 | 20. HashMap 多线程操作导致死循环问题。【⭐⭐⭐】jdk 1.8 后解决了这个问题,但是还是不建议在多线程下使用 `HashMap`,因为多线程下使用 `HashMap` 还是会存在其他问题比如数据丢失。并发环境下推荐使用 `ConcurrentHashMap` 。 37 | 21. HashMap 的长度为什么是 2 的幂次方。【⭐⭐⭐】主要是考虑到了对运算效率的提升。 38 | 22. **`HashMap`、`HashTable`、以及 `ConcurrentHashMap` 的区别。**【⭐⭐⭐⭐⭐】:现在面试的超高频考点。当面试官问到这个问题的时候,展现你背面试八股文能力的机会来了。你可以展开去讲在 Java7 和 Java8 中 `HashMap` 分别采用什么数据结构,为什么 Java8 把之前的`头插法`改成了`尾插法`,怎样实现`扩容`,为什么`负载因子`是 `0.75`,为什么要用`红黑树`等等一系列的东西。只要面试官不打断我,我在这个知识点上能背到面试官下班。 39 | 40 | 由于篇幅问题,我并没有写上面这些问题的答案。你可以自行查阅,你也可以参考 JavaGuide 这个开源项目,涵盖了大部分 Java 程序员所需要掌握的核心知识。背面试八股文,这是一个必看的开源项目(学 Java 基础以及实战也推荐看这个项目)。 41 | 42 | - Github 地址:https://github.com/Snailclimb/JavaGuide 43 | - Gitee 地址:https://gitee.com/SnailClimb/JavaGuide(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) 44 | - 在线阅读地址: https://javaguide.cn/ 45 | 46 | ![JavaGuide 首页](https://img-blog.csdnimg.cn/3852d193dea7498db3eb6d73ff38128c.png) 47 | 48 | ### 系统学习 49 | 50 | 推荐大家跟着[《Java 编程的逻辑》](https://book.douban.com/subject/30133440/)来学习 Java 基础知识。这个阶段 Java 基础弱的同学应该好好把握住。趁还有时间,边看书边把书中的实例跟着敲一敲,把书中的技术都用一用,体会一下 Java 的编程思想。 51 | 52 | 这本书真正做到了深入浅出的讲解 Java 知识,内容有深度,但描述通俗易懂。极力推荐。 53 | 54 | ![](https://img-blog.csdnimg.cn/20210602212959918.png) 55 | 56 | 学习内容按照《Java 编程逻辑》的目录进行介绍: 57 | 58 | - **第 1 章:编程基础** : 这一章的学习内容有,数据类型和变量、赋值、基本运算、条件执行、循环、函数用法、函数调用基本原理。这些都是 Java 最基础的,肯定要会。 59 | - **第 2 章:理解数据背后的二进制** : 主要讲了二进制、字符的编码与乱码等计算机领域必备的基础知识。 60 | - **第 3 章->第 5 章 类** : 这里是面试的高频考点。封装、继承、多态三大特性,重载、重写,哪些可以被继承、哪些不可以被继承等等经常会被面试官问到。所以这三章要认真的学习。多体会面向对象的编程思想,也能帮助大家写出高质量的代码。 61 | - **第 6 章 异常** :这块不用学的太细,但是基础的把异常捕获抛出是要学会的,写代码也经常要用。对常见异常类型要掌握。 62 | - **第 7 章 常用基础类** :`String` 相关的好好看一下,不止对 `String` 的概念要熟,对 `String` 的操作也要熟。虽然面试的手撕代码过程中大部分面试官是允许你查 API 的,但是涉及到 `String` 的操作还是尽量别查了,面试官可能会觉得你平常的代码量太少了。其它的常用基础类基本了解就好。 63 | - **第 9 章->第 12 章 集合部分** :集合部分是 Java 后端面试的一个超高频考点。`ArrayList`、`LinkedList`、`HashMap`、队列的操作要熟练,写代码题时经常要用到这几个容器。另外对上述几个集合的实现原理,所采用的数据结构要了解清楚,也要体会一下这些集合设计的好在哪里。 64 | - **第 15 章->第 20 章 并发部分** :并发部分是各个大厂面试的超高频考点。常问的考点有线程的基本概念、`Synchronized`、线程的协作机制、`CAS`、`ReentrantLock`、`ConcurrentHashMap`、线程池。要充分理解上述知识点的实现思想,并且记牢这些知识点的工作流程。另外最好能看一些上述考点在实际场景中的应用。如果能把这些技术恰当的应用在你的项目里,并解决了实际问题,面试官会比较惊喜的。并发这部分内容会在后面单独抽一篇文章详细介绍。 65 | - **第 21 章 -> 第 24 章** :反射、注解、动态代理、类加载机制这快如果有时间的话学一下,然后结合着 `Spring` 的实现原理进行回答,可以当作你面试的亮点。 66 | 67 | 如果你比较喜欢看视频的话,推荐你看一下尚硅谷的《Java 基础教程系列》。 68 | 69 | 这应该是我看过最全的 Java 基础课程之一了,内容不光涵盖 Java 方方面面,还涉及到数据结构、设计模式、JVM 内存结构等知识。 70 | 71 | 如果你的 Java 基础没有打好的话,也可以选择对应的章节进行学习。 72 | 73 | ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/41d7cc284b16430c92e76c4bba410877~tplv-k3u1fbpfcp-watermark.image) 74 | 75 | 看看这个点赞、投币、收藏、转发量是多么恐怖! 76 | 77 | 尚硅谷算得上是比价良心的培训机构了,免费开源了很多免费且高质量的教学视频,帮助了很多小伙伴学习编程。 78 | 79 | 公众号“**CS 指南**”后台回复“**尚硅谷**”可以领取尚硅谷这个系列完整的视频教程。 80 | 81 | ![](https://img-blog.csdnimg.cn/3da401c8c8c74e29884d8e39b5d5e378.png) 82 | 83 | ![](https://img-blog.csdnimg.cn/2021060517454068.png) 84 | -------------------------------------------------------------------------------- /八股文骚套路之Java并发.md: -------------------------------------------------------------------------------- 1 | 并发这部分内容相对来说还是有一些难度的,并且,对于初学者来说最难的就是在项目中去实践。 2 | 3 | 如果你刚学完 Java 基础的话,我建议你学习并发这部分内容的时候,可以先简单地了解一下基础知识比如线程和进程的对比。到了后面,你对于 Java 了解的更深了之后,再回来仔细看看这部分的内容。 4 | 5 | ### 救急准备 6 | 7 | 下面的知识点都是要看的,我通过打星与加粗的方式对知识点的重要性进行评级!难度是针对互联网大厂的。 8 | 9 | - ⭐ :面试中不常问到,如果面试官问到尽量能答出来,答不出来也没关系。 10 | - ⭐⭐ :面试中不常问到,但是如果面试官问到的话,答不出来对你的印象会减分。 11 | - ⭐⭐⭐:面试中会问到,答不出来面试有点悬。面试官会惊讶为什么你这也不会。 12 | - ⭐⭐⭐⭐:面试高频考点。 13 | - ⭐⭐⭐⭐⭐:面试超高频考点。四星考点和五星考点是参加十场面试,至少能有五场面试问到这些的。大家在准备面试过程中尽量把这些知识点的回答条理梳理清楚,面试官一问就开背。 14 | 15 | **Java 并发常见面试题汇总** : 16 | 17 | 1. 进程和线程的区别。【⭐⭐⭐⭐⭐】这是一个超高频考点,面试回答时别一句一个进程包含很多线程就没了。要答清楚什么是线程什么是进程,线程和进程各自的`运行状态`、线程的`通信方式`和进程的`通信方式`。 18 | 2. 创建线程的方式。【⭐⭐⭐⭐】不仅要把创建线程的方式记熟、记住各种方式的优缺点,还要能写出代码来。有的面试官是会让你写代码创建两个线程然后执行一些操作的,比如两个线程交替输出数字。 19 | 3. 什么是死锁,死锁如何产生,死锁如何避免。【⭐⭐⭐⭐⭐】超高频问题,几乎大厂的一面和二面都会问到。 20 | 4. 并发编程的三大特性(原子性、可见性以及有序性)。【⭐⭐⭐⭐】 21 | 5. `synchronized` 锁升级流程。【⭐⭐⭐⭐⭐】这又是面试八股文的一大考点,锁升级流程记清楚。 22 | 6. `volatile` 关键字。【⭐⭐⭐⭐⭐】对比和 `synchronized` 的区别。 23 | 7. `JMM`(Java Memory Model,Java 内存模型)和 `happens-before` 原则。【⭐⭐⭐⭐⭐】面试中重点!几乎必问。 24 | 8. `ThreadLocal`。【⭐⭐⭐⭐】这也是面试八股文的一个高频考点。我面试到后面不想背这里了,面试过程中就尽可能躲着这个知识点,不提到和这相关的,竟然真的苟过去了。 25 | 9. 线程池。【⭐⭐⭐⭐⭐】超高频考点。需要答出线程池有哪几种,各种线程池的优缺点,线程池的重要参数、线程池的`执行流程`、线程池的饱和策略、如何设置线程池的大小等等。这里也能背十几分钟。 26 | 10. `ReentrantLock` 和 `AQS`。【⭐⭐⭐⭐⭐】其实我在面试的时候对这里不是很熟,我面试的时候尽量不提到这里,也苟过去了。大家如果时间充足的话还是把这块好好理解一下。如果这里理解透彻了,也能在这里和面试官聊很久。 27 | 11. 乐观锁和悲观锁的区别。【⭐⭐⭐⭐⭐】 28 | 12. `CAS` 了解么?原理?什么是 ABA 问题?ABA 问题怎么解决?【⭐⭐⭐⭐⭐】`CAS`(Compare-and-Swap)绝对是面试中的高频中的高频,很多地方都用到了 `CAS` 比如 `ConcurrentHashMap` 采用 `CAS` 和 `synchronized` 来保证并发安全,再比如`java.util.concurrent.atomic`包中的类通过 `volatile+CAS` 重试保证线程安全性。和面试官聊 `CAS` 的时候,你可以结合 `CAS` 的一些实际应用来说。 29 | 13. `Atomic` 原子类【⭐⭐】 30 | 15. ...... 31 | 32 | 由于篇幅问题,我并没有写上面这些问题的答案。你可以自行查阅,你也可以参考 JavaGuide 这个开源项目,涵盖了大部分 Java 程序员所需要掌握的核心知识。背面试八股文,这是一个必看的开源项目(学 Java 基础以及实战也推荐看这个项目)。 33 | 34 | - Github 地址:https://github.com/Snailclimb/JavaGuide 35 | - Gitee 地址:https://gitee.com/SnailClimb/JavaGuide(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) 36 | - 在线阅读地址: https://snailclimb.gitee.io/javaguide/#/ 37 | 38 | ![](https://img-blog.csdnimg.cn/4673f6acf9ce45b6900d93a316bc884e.png) 39 | 40 | ## 系统学习 41 | 42 | 推荐大家跟着 **[《Java 并发实现原理:JDK 源码剖析》](https://book.douban.com/subject/35013531/)** 这部分来学习 Java 并发相关的知识。 43 | 44 | ![](https://img-blog.csdnimg.cn/b441699291684d0bbac0637822e1c1f3.png) 45 | 46 | 总体来说,市面上关于 Java 并发的书籍非常多,但是,大部分都是一些基础入门读物,真正讲原理的很少。然而,真正重要的就是这些原理知识。 47 | 48 | 这本书的整体内容如下,我简单概括一下: 49 | 50 | - **第 1 章 多线程基础** :讲了 Java 并发中比较重要的一些基础概念比如 `synchronized` 关键、`volatile` 关键字、JMM(Java Memory Model,Java 内存模型)和 happens-before 原则、 内存屏障、final 关键字、无锁编程。都是一些非常重要的概念,不论是对于你学习并发编程,还是说准备 Java 面试。 51 | - **第 2 章 Atomic 类** :不光讲了 `Atomic` 类(`AtomicInteger`、`AtomicLong` 、 `AtomicBoolean`、`AtomicReference` 、`AtomicStampedReference`、`AtomicMarkable` `Reference` 等等),还提到了悲观锁与乐观锁、Unsafe 的 CAS、自旋与阻塞、ABA 问题与解决办法等等比较重要的并发知识点。 52 | - **第 3 章 Lock 与 Condition** :主要讲了互斥锁(实现原理、源码分析)、读写锁 (实现原理、AQS、`WriteLock`、`ReadLock`)、`Condition`(使用场景、实现原理、源码分析) 。 53 | - **第 4 章 同步工具类** :这一张主要介绍了四个非常重要的并发类`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Exchanger`(用于线程间进行通信、数据交换的多线程交互工)、`Phaser`(和 `CyclicBarrier` 以及 `CountDownLatch` 很像,但是使用上更加的灵活。相关阅读:[Phaser 使用介绍](https://javadoop.com/post/phaser-tutorial))。 54 | - **第 5 章 并发容器** : 介绍了并发环境下使用的集合,包括 `BlockingQueue`、`BlockingDeque`、`CopyOnWrite`、 `ConcurrentLinkedQueue/ Deque`、`ConcurrentHashMap` 。 55 | - **第 6 章 线程池与 Future** : 从原理出发来讲解线程池! 56 | - **第 7 章 ForkJoinPool** :从原理出发来讲解 `ForkJoinPool` (JDK7 引入的线程池,支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合成总的计算结果)。 57 | - **第 8 章 CompletableFuture** :介绍了 `CompletableFuture` 的常见用法以及原理。 58 | 59 | 如果你比较喜欢看视频的话,首推尚硅谷 2021 最新的**《JUC 并发编程系列》**。 60 | 61 | ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bf96aed069614714bc4a7048a8f0bfc1~tplv-k3u1fbpfcp-watermark.image) 62 | 63 | 这门课是我在网上看到的讲解并发编程的课程中最棒的一个! 64 | 65 | 老师将理论和实践结合,在实践中带你真正搞懂并发编程中的各种知识点。 66 | 67 | 公众号“**CS 指南**”后台回复“**尚硅谷**”可以领取尚硅谷这个系列完整的视频教程。 68 | 69 | ![](https://img-blog.csdnimg.cn/3da401c8c8c74e29884d8e39b5d5e378.png) 70 | 71 | ![](https://img-blog.csdnimg.cn/2021060517454068.png) -------------------------------------------------------------------------------- /八股文骚套路之MySQL.md: -------------------------------------------------------------------------------- 1 | 本文主要讲解如何应对面试过程中` MySQL` 的相关问题。另外我在这个系列,也会逐渐将自己在准备秋招面试过程中的一些心得,以及一些技巧穿插的进行讲述,希望对大家有帮助。 2 | 3 | ![](https://img-blog.csdnimg.cn/20210620170646392.png) 4 | 5 | 在前面的文章中,我提到说面试大厂后端需要掌握的 Java 基础、JVM、Redis、MySQL、框架、设计模式、数据结够、计算机网络等要有两到三个要做到熟悉,能跟面试官进行深度交流,做为面试亮点。我在制定秋招准备计划时把 `Redis`、`MySQL` 以及 `Spring` 框架做为自己的面试亮点。为了准备 MySQL,我在准备 MySQL 上大约花费4周左右时间(在校招面试过程中也花了点时间对这方面知识进行反复学习),当然这段时间除了准备 MySQL ,每天一道的 LeetCode 代码题我是没有断的,中间也花少量时间穿插看了别的东西。如果大家不准备把 MySQL 当做面试亮点,只想应付面试官的常规问题的话,时间不需要用太长,然后隔一段时间反复背一下。 6 | 7 | 说明:我在本科时主要学习做 Java Web 开发的,但是读研时做了自然语言处理,整整两年没碰开发。我的基础是 MySQL 的基础操作还算熟悉,也在本科项目中实际用过 MySQL, 但是对 MySQL 的底层原理并不清楚。大家可以参考我的基础并和自己的基础做对比,来制定自己的学习计划。 8 | 9 | ![img](https://img-blog.csdnimg.cn/20210620170814345.png) 10 | 11 | 准备 MySQL 的过程中,我完成了以下几个任务: 12 | 13 | (1)记住了 MySQL 面试常问的一些基础概念(后续在准备面试的过程中还会反复记)。 14 | 15 | (2)对于 SQL 优化有了一些自己的理解。并把一部分理解应用在自己的秒杀系统项目中,具体怎么做我就不说了,希望大家在学完后也能自己思考下,比如怎样根据行锁的特性优化自己项目的 MySQL 的事务、比如怎样根据自己项目的实际场景去选择索引,诸如此类。大家能把八股文中的东西应用在自己的项目中,还是能让面试官提起兴趣的。 16 | 17 | (3)对于 SQL 代码题也进行了一些训练,面试中有的面试官也会考。 18 | 19 | 如果大家不把 MySQL 当作准备面试的重点,做到(1)和(3)就可以了。另外如果把 MySQL 当成面试的重点,也要先准备(1)和(3),时间允许的话再去深入优化部分。 20 | 21 | ## 如何准备MySQL面试八股文 22 | 23 | 好了,现在正式进入 MySQL 面试八股文的划重点流程。在这里要推荐一本书籍《深入浅出 MySQL 》。 24 | 25 | ![img](https://img-blog.csdnimg.cn/20210620170853137.png) 26 | 27 | - **推荐理由** :《深入浅出 MySQL》这本书是网易的数据库专家写的,从数据库的基础、开发、优化、管理维护、架构,五个层面讲述了 MySQL(大家面试后端的话管理维护篇就不用看了),内容层层递进。并且每讲解一个小的知识点都会相应的配有实例,更容易读者理解。 28 | - **学习内容** :学习内容按照《深入浅出 MySQL》的目录进行介绍。根据章节内容列出的问题我就不附上答案了,大家根据我的问题自己总结下会有更好的学校效果。在补充篇的问题我会给出答案。 29 | 30 | **基础篇第2章 SQL 基础** 31 | 32 | 基础的SQL语句肯定要会,并且要熟练,这是最基础的。 33 | 34 | 针对本章内容的面试问题: 35 | 36 | (1)增删改查这些问题面试官一般不会问的。不过万一问出来,比如“查询用哪个关键字”,你要是不知道你就惨了哈。 37 | 38 | (2)ORDER BY、LIMIT、GROUP BY、HAVING 这些关键字分别是做什么用的。 39 | 40 | (3)讲一下左链接和右链接的区别。 41 | 42 | **基础篇第3章、第4章、第5章** 43 | 44 | 这三章分别是MySQL的数据类型、运算符、常用函数。简单过一遍,了解就行,这三章在面试中很少会被问到。 45 | 46 | **开发篇第7章 表类型(存储引擎)的选择** 47 | 48 | InnoDB是面试考察的重点,相关知识都要详细看。另外要拿 InnoDB 对比 MyISAM、MEMORY 去体会 InnoDB 引擎的特点。 49 | 50 | 针对本章内容的面试问题: 51 | 52 | InnoDB 和 MyISM、MEMORY 的区别是什么。 53 | 54 | **开发篇第10章 索引的设计和使用** 55 | 56 | 索引是 MySQL 面试考察的重点,BTree 索引和 Hash 索引要对比着进行学习。 57 | 58 | 针对本章内容的面试问题: 59 | 60 | (1)索引所采用的数据结构,以及为什么要这样设计。 61 | 62 | (1)在数据库中创建索引的原则。 63 | 64 | (2)BTree 索引和 Hash 索引的适用范围。 65 | 66 | **开发篇第11章 视图** 67 | 68 | 本章做到基本了解,面试过程中问的少。 69 | 70 | **开发篇第14章 事务控制和锁定语句** 71 | 72 | InnoDB 是行锁,MyISAM、MEMORY 是表锁面试过程中经常会问到。本章的事务控制实例值得好好的体会一下,有利于加深对数据库锁的理解。 73 | 74 | **优化篇第18章 SQL优化** 75 | 76 | 如果你在简历中和开头的自我介绍中强调了你对 MySQL 熟悉,那么你这一章一定要好好看。面试官想考察你在 MySQL 方面的能力是否和你之前说的相符,会倾向于出一道场景问题,让你去设计并优化(当然只是好好看这一章并不能完全解决问题,一会我做一点补充)。 77 | 78 | 针对本章内容的面试问题: 79 | 80 | (1)优化 SQL 语句的步骤有哪些。 81 | 82 | (2)哪些场景可以使用索引。 83 | 84 | (3)索引在哪些情况会失效。 85 | 86 | 虽然面试官不会直接问你在优化 SQL 语句时候有哪些技巧?比如怎样优化 Insert 语句,怎样优化 order by语句。但是可以在这一章学一些常用的优化 SQL 语句的技巧,在面试官问一个具体问题时,顺带说一下自己平时会采用这些技巧去优化。 87 | 88 | **优化篇第20章 锁问题** 89 | 90 | 这一章属于第14章的拔高,大家主要看表锁和行锁,页锁被问到的比较少。 91 | 92 | 针对本章内容的面试问题: 93 | 94 | (1)事务四大特性,并解释这四大特性的含义。 95 | 96 | (2)并发事务处理会带来哪些问题? 97 | 98 | (3)事务隔离级别。 99 | 100 | (4)InnoDB 行锁实现方式 101 | 102 | (5)你了解 Next-key 锁吗? 103 | 104 | (6)如何避免 InnoDB 中的死锁。 105 | 106 | (7)数据库多版本并发控制(MVCC 机制) 107 | 108 | **优化篇第21章 优化 MySQL Server** 109 | 110 | 这一章在校招面试中是不会问到的,不过我把这里的相关知识学了去给面试官讲,效果还不错。大家根据自己的情况酌情选择看还是不看哈。 111 | 112 | 可以和面试官展开聊的知识点: 113 | 114 | (1)MySQL 的内存管理及优化。 115 | 116 | (2)InnoDB 重做日志的内部机制,这个可以和事务联系起来给面试官讲。 117 | 118 | **架构篇第31章 MySQL 复制** 119 | 120 | 这一章的内容如果你不刻意提到,面试官一般很少主动问。如果大家不打算在 MySQL 这里和面试官多聊,那么这里就可以不看了。如果大家打算在 MySQL 这个环节和面试官展开聊,那么在这里和面试官展开聊是一个不错的选择。 121 | 122 | 可以和面试官展开聊的知识点: 123 | 124 | (1)MySQL 的主从复制原理。 125 | 126 | (2)MySQL 的三种复制方式。 127 | 128 | (3)MySQL 的异步复制和半同步复制。 129 | 130 | (4)如何提高复制的性能。 131 | 132 | ## 补充 133 | 134 | 接下来我再给大家补充一点知识,是我在学习林晓斌的《MySQL 实战45讲》时的笔记,这个课真心不错。这个知识在《深入浅出 MySQL》这本书中没有,但是学会以后在面试过程中还是挺有用的(面试官有时会问),在实践中也挺有帮助的。 135 | 136 | **MySQL的基础架构** 137 | 138 | ![img](https://img-blog.csdnimg.cn/20210620170522346.png) 139 | 140 | MySQL 的基础架构可分为 Server 层和存储引擎层两部分,Server 层包含 MySQL 的大多数核心服务功能,存储引擎层负责数据的存储和提取。各模块功能如下: 141 | 142 | 连接器:负责跟客户端建立连接。 143 | 144 | 查询缓存:之前执行过的查询语句会以 key-value 的形式存在缓存中,MySQL 收到一条查询语句会先去查一下缓存中是否有相同的 key,如果有直接把 value 返回。但是这个功能在表更新比较频繁的场景中别用,因为每次表更新都会刷新缓存。 145 | 146 | 分析器:会对输入的 SQL 语句进行词法分析和语法分析。 147 | 148 | 优化器:优化器制定SQL语句的执行方案,比如会从表里的多个索引中选择一个最合适的索引,或者在一个语句有多表关联的时候,决定表的连接顺序。 149 | 150 | 执行器:根据优化器定制的执行计划进行操作,返回结果。 151 | 152 | 存储引擎:存储数据,提供读写接口。 153 | 154 | ## MySQL代码练习 155 | 156 | 出 SQL 代码题在面试中不是很多,我在参加的几十场面试中仅有四五次让我写 SQL 代码题。不过还是要适当准备,这里不用花太多时间,把 LeetCode 上免费的代码题中简单题和中等题好好练一下就好,完全能应付了面试中的 SQL 代码题。 157 | 158 | ![](https://img-blog.csdnimg.cn/20210620170945429.png) 159 | 160 | 好了,上述就是准备秋招过程中全部要学的 MySQL 知识点了,准备的过程中会出现背完就忘的情况,大家要时常对知识点进行反复的记。下一篇来跟我一起背 Redis 八股文呀。 161 | -------------------------------------------------------------------------------- /八股文骚套路之Redis.md: -------------------------------------------------------------------------------- 1 | 目前 Redis 也是后端技术栈中的一员大将,后端面试过程中对 Redis 的考察也越来越多。不过在后端面试过程中对 Redis 的要求没有像 MySQL 那么高(就是面试官问你 Redis,你直接否定三连,这是啥?没听说过!我不会!问题也不是太大)。不过还是我在之前面试八股文系列的文章中所提到的,大家在准备后端面试时,后端技术栈中除了 Java 基础外至少还要有两到三项做到熟悉,作为面试亮点,这样在面试大厂时才和面试官有的聊。我在准备秋招的过程中就把 Redis 部分详细准备,当作我面试的亮点了。 2 | 3 | ![](https://img-blog.csdnimg.cn/20210628211422747.png) 4 | 5 | ## 救急准备 6 | 7 | 对于没有太多时间准备 Redis 的同学,我在这里给大家准备一些面试常问的八股问题。你在面试大厂时,只要别给面试官对你 Redis 部分太高的期望,你把下面这些问题能回答清楚就算过关了。 8 | 9 | 1. 什么是 Redis?【⭐⭐】 10 | 2. Redis 除了做缓存,还能做什么?【⭐⭐⭐⭐】 11 | 3. Redis 有哪些数据类型?这些数据类型的应用场景分别是什么?你在项目中用到了吗?【⭐⭐⭐⭐⭐】 12 | 4. Redis6.0 之后为何引入了多线程?【⭐⭐⭐】 13 | 5. Redis 过期数据删除策略讲一下。【⭐⭐⭐】 14 | 6. Redis 的持久化策略了解嘛?分别介绍下 RDB 和 AOF。【⭐⭐⭐⭐】 15 | 7. 什么是缓存穿透?什么是缓存击穿?什么是缓存雪崩?怎么解决(最高频问题) 16 | 8. 设计一个分布式锁?【⭐⭐】 17 | 9. Redis 内存淘汰机制了解么?类似问题:MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?【⭐⭐⭐⭐】 18 | 10. Redis 事务你了解嘛?【⭐⭐】 19 | 11. 如何保证 Redis 和 MySQL 的数据一致性?(如果项目同时用到 Redis 和 MySQL,这个问题特别容易被问)【⭐⭐⭐⭐】 20 | 21 | 由于篇幅问题,我并没有写上面这些问题的答案。你可以自行查阅,你也可以参考 JavaGuide 这个开源项目,涵盖了大部分 Java 程序员所需要掌握的核心知识。背面试八股文,这是一个必看的开源项目(学 Java 基础以及实战也推荐看这个项目)。 22 | 23 | - Github 地址:https://github.com/Snailclimb/JavaGuide 24 | - Gitee 地址:https://gitee.com/SnailClimb/JavaGuide(Github 无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) 25 | - 在线阅读地址(推荐 👍 阅读体验非常赞!): https://javaguide.cn/ 26 | 27 | ![JavaGuide在线阅读网站首页](https://img-blog.csdnimg.cn/adc8342fef88498f97de08c41ba5a6a4.png) 28 | 29 | 当然了,你也可以直接百度/Google 搜索,篇幅有限,我就不贴答案了。 30 | 31 | ## 系统学习 32 | 33 | 我在准备 Redis 前没任何 Redis 经验,我集中准备 Redis 用了差不多三周的时间,每天看四个小时左右。后期每次在重要面试前也会花一两个小时进行复习。这是我在 Redis 上花的时间,供大家参考。 34 | 35 | 学 Redis 我推荐这本书《Redis 的设计与实现》,我先声明,我可不是卖书的哈。我推荐的是我实际看过的书,没书的大家自己想办法呀~不过还是尽可能支持一下作者噢。 36 | 37 | ![img](https://img-blog.csdnimg.cn/20210628211613472.png) 38 | 39 | 推荐理由:这本书讲的特别特别详细,又有概念讲解,又有实际例子。十分通俗易懂。 40 | 41 | ### 学习内容 42 | 43 | #### 第一部分 数据结构与对象 44 | 45 | Redis 的数据结构设计十分巧妙,我也是在看这部分时决定详细学习 Redis 的。大家千万不要去背这些数据结构的代码是怎么写的,这么多你肯定记不住。大家主要体会一下 Redis 的这些 `数据结构设计好在哪`,面试的时候如果面试官问到这些数据结构,可以相应的抛出一些我觉得 xxx 这样设计的很不错,他用 xxx 优化了什么问题的观点,也是不错的。另外在这本书上没有,但是一个挺重要的数据结构叫 `布隆过滤器` 强烈建议大家看一下,这个数据结构在解决许多面试官提出的场景题时都是很管用的。 46 | 47 | #### 第二部分 单机数据库的实现 48 | 49 | 面试官特别喜欢从这一部分出问题,所以是需要花点功夫把这些八股文背熟的。 50 | 51 | **第 9 章 数据库** 52 | 53 | 这一章要记牢 Redis 的`过期删除策略`、以及 AOF、RDB 和复制功能对`过期键的处理`。其它的内容做到理解就好。 54 | 55 | **第 10 章 RDB 持久化** 56 | 57 | 记熟`Redis 服务器保存和载入 RDB 文件的方法`,要辨别出`SAVE 命令`和 `BGSAVE` 的区别。把`自动保存功能`的实现原理也尽可能记熟。RDB 的文件结构了解就好。 58 | 59 | **第 11 章 AOF 持久化** 60 | 61 | 记熟 `AOF 持久化` 的实现方式,记熟 `AOF 文件载入与数据还原`的流程,记熟 `AOF 重写方式`。这一章学习过程中要与 RDB 去做对比。 62 | 63 | **第 12 章 事件** 64 | 65 | Redis `文件事件处理器` 的组成部分要记熟,特别是 `I/O 多路复用`要充分理解,这里在面试官问 I/O 相关的时候可以给面试官讲,并且可以很自然的把话题扯到 Redis~ 66 | 67 | 时间事件理解就好了。 68 | 69 | **第 13 章 客户端** 70 | 71 | 这一章理解就好 72 | 73 | **第 14 章 服务器** 74 | 75 | 把一个命令请求从发送到获得回复的过程理解,不用硬背,不过要大概能复述出来。`serverCron 函数`负责管理服务器的资源,把这个函数理解了给面试官讲也是不错的。 76 | 77 | #### 第三部分 多机数据库的实现 78 | 79 | 这一部分如果你不主动提,面试官一搬不会主动问。不过把这里理解清楚以后融合到项目中主动给面试官讲还是挺不错的。我就把这部分融合到我的秒杀系统中了,给面试官讲完以后感觉效果还不错。 80 | 81 | **第 15 章 复制** 82 | 83 | `主从复制的流程`要尽可能记熟呀,把这里记熟给面试官讲还是挺不错的。注意区分新旧版本的 Redis 在主从复制上的差异。 84 | 85 | **第 16 章 哨兵** 86 | 87 | 记牢 `Sentinel` 的初始化过程,记牢 Sentinel 监视服务器的方法和原理,记牢 Sentinel 系统对主服务器执行故障转移的过程。 88 | 89 | **第 17 章 集群** 90 | 91 | 我把 Redis 集群用在我的秒杀系统上了,所以集群的`节点`、`槽指派`、`命令执行`、`重新分片`、`转向`、`故障转移`、`消息`都背的很熟了。讲项目的时候也能用上这些。 92 | 93 | #### 第四部分 独立功能的实现 94 | 95 | 这一部分,我就重点看了`发布与订阅`、看了 `Lua 脚本`,其它的就没怎么看了。大家感兴趣可以多看一下。 96 | 97 | 好了,经过上面的学习,Redis 的基础就打的很牢了。不过我在这里还要给大家多推荐一本书,它就是《Redis 深度历险》。《Redis 设计与实现》偏向与 Redis 的原理,而《Redis 深度历险》偏向于实际场景的应用。大家在学完我上述讲的知识点以后,再选择性的学习两三个《Redis 深度历险》中的实例。在校招面试中就不用担心面试官的发难了。 98 | 99 | ![img](https://img-blog.csdnimg.cn/20210628211640710.png) 100 | 101 | 如果你比较喜欢看视频的话,推荐你看一下尚硅谷的 《Redis 入门到精通》。 102 | 103 | 这套课程采用的是 Redis 6.2.1 版本,从 Redis 的基本概念开始讲解一直到 Redis 持久化 RDB 和 AOF、Redis 主从复制和集群、Redis 应用中的问题和解决方案(缓存穿透、击穿、雪崩、分布式锁)、Redis 的新数据类型以及 Redis 6 的新特性等 Redis 进阶内容。 104 | 105 | ![](https://img-blog.csdnimg.cn/7a4dcffe70c542afb8dc80b40ed777d1.png) 106 | 107 | 看看这个点赞、投币、收藏、转发量是多么恐怖! 108 | 109 | 尚硅谷算得上是比价良心的培训机构了,免费开源了很多免费且高质量的教学视频,帮助了很多小伙伴学习编程。 110 | 111 | 公众号“**CS 指南**”后台回复“**尚硅谷**”可以领取尚硅谷这个系列完整的视频教程。 112 | 113 | ![](https://img-blog.csdnimg.cn/2021060517454068.png) 114 | 115 | ![](https://img-blog.csdnimg.cn/3da401c8c8c74e29884d8e39b5d5e378.png) 116 | 117 | ![](https://img-blog.csdnimg.cn/cdd277dc88fd4c55b0881cf3cdbc1fa4.png) 118 | 119 | 好了,这就是 Redis 部分的全部内容了,这份讲解可真的是保姆级的面试指导了,希望大家能一键三连呀! 120 | -------------------------------------------------------------------------------- /八股文骚套路之操作系统.md: -------------------------------------------------------------------------------- 1 | 八股文骚套路系列之计算机基础来啦!✌️ 今天带来的是操作系统相关的内容。 2 | 3 | 这篇文章,我主要会介绍如何准备操作系统面试,推荐一些不错的书籍以及视频。并且,我还会总结出最常见的一些操作系统面试问题,以方便大家把握重点,有的放矢! 4 | 5 | 另外,我在这个系列,也会逐渐将自己在准备秋招面试过程中的一些心得,以及一些技巧穿插的进行讲述,希望对大家有帮助! 6 | 7 | 计算机基础这块一般是中大厂面试问的比较多,并且不同的大厂面试之间对其重视程度也不一样。比如说字节、腾讯面试就非常重视计算机基础比如操作系统和计算机网络这块,他们会问很多相关的问题。而阿里、京东的面试偏向 Java 生态,像常用的一些中间件、框架经常会成为面试的重点。像阿里、京东的面试当然也会问计算机基础比如操作系统和计算机网络,不过问的深度相对来说比较一般。 8 | 9 | ## 操作系统面试准备 10 | 11 | ### 救急准备 12 | 13 | 由于篇幅问题,我并没有写下面涉及到的知识点的答案。你可以自行查阅,你也可以参考下面这两个开源仓库: 14 | 15 | - [CS-Notes](https://github.com/CyC2018/CS-Notes "CS-Notes") :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 16 | - [JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide") : 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 17 | 18 | **操作系统基础概念** 19 | 20 | 操作系统基础相关的概念在面试中也会遇到,不过,这部分内容比较简单,花不了太多时间。 21 | 22 | 我简单总结了操作系统基础概念中比较重要的知识点: 23 | 24 | - 操作系统的作用、特点、分类、发展 25 | - 操作系统的结构 26 | - 内核态和用户态、系统调用 27 | 28 | **进程和线程(重要)** 29 | 30 | 这个是非常高频的考点了!面试官在面试的时候可能会先让你介绍一下进程和线程的基本定义,然后再让你对比一下两者。 31 | 32 | 问了这些比较基础的内容之后,有些面试官还会顺带问你进程和线程的状态以及各种状态之间的转换。 33 | 34 | 如果还要继续深入挖的话,面试官可能还会问你 : 35 | 36 | - 进程的通信方式 : 进程与进程之前是如何进行通信的。 37 | - 进程调度算法 : CPU 如何应用不同的调度算法来调度进程。 38 | 39 | **内存管理(重要)** 40 | 41 | 面试官可能会先问一些比较简单的问题比如内存管理的目的、逻辑和物理地址。 42 | 43 | 比较核心一些的问题还是内存管理机制和内存管理相关的一些概念。 44 | 45 | - 内存管理机制 :像内存管理机制简单分为连续分配管理方式和非连续分配管理方式这两种。非连续分配管理方式比较重要,像分页机制、分段机制、段页式机制都属于非连续分配管理。 46 | - 内存管理相关概念 : 快表和多级页表。 47 | 48 | 除此之外,虚拟内存和请求分页也非常重要,面试中也经常会遇到。 49 | 50 | - 虚拟内存 :虚拟内存介绍、局部性原理、虚拟内存的实现机制 51 | - 请求分页 : 页表机制、缺页中断、页面置换算法 52 | 53 | 最后就是死锁相关的内容了,你需要掌握: 54 | 55 | - 死锁的必要条件 56 | - 死锁预防、避免、检测与解除 57 | 58 | **CPU 调度** 59 | 60 | CPU 调度这块最重要的就是搞懂几种常见的 CPU 调度算法: 61 | 62 | - 先到先服务调度(First-Come First-Served Scheduling,FCFS) 63 | - 最短作业优先调度(Shortest Job First,SJF) 64 | - 优先级调度(Priority Scheduling) 65 | - 轮转法调度(Round Robin,RR) 66 | - ...... 67 | 68 | 上面这几种调度算法,大家通过名字应该就能猜出个大概意义了。这些调度算法各有优劣,没有银弹,只能根据具体场景选择具体的调度算法。 69 | 70 | 因此,多级队列调度(Multilevel Queue) 就诞生了。简单来说就是把就绪队列(存放有待执行进程)分成多个独立队列,每个队列都有自己的调度算法。 71 | 72 | **Linux 相关(重要)** 73 | 74 | 另外的话,操作系统这块还需要对 Linux 相关的知识有所了解: 75 | 76 | - Linux 常用命令 :比如说创建文件相关的命令、搜索相关的命令 77 | - Linux 文件系统 : 文件系统原理、硬链接与软链接、目录结构 78 | - 僵尸进程和孤儿进程 79 | 80 | ### 系统学习 81 | 82 | 如果你要系统地学习操作系统的话,最硬核最权威的书籍是 **[《操作系统导论》](https://book.douban.com/subject/33463930/)** 。 83 | 84 | 这本书是是国外经典教材《[Operating Systems:Three Easy Pieces](https://link.zhihu.com/?target=http%3A//pages.cs.wisc.edu/~remzi/OSTEP/)》的中文版,还入选了[国外著名高等院校信息科学与技术优秀教材](https://book.douban.com/series/47813) 。目前,国内很多高校的教材都是用的这本书。 85 | 86 | ![操作系统导论](https://img-blog.csdnimg.cn/img_convert/3cea41c2c9fa458bc17b0c4d75973ec9.png) 87 | 88 | 这本书的作者还在 Github 分享了中文翻译版,地址:https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese 。 89 | 90 | ![](https://img-blog.csdnimg.cn/4518fc37a3af4d19b361e95bf0c31091.png) 91 | 92 | 你可以再配套一个 **[《深入理解计算机系统》](https://book.douban.com/subject/1230413/)** 加深你对计算机系统本质的认识,美滋滋! 93 | 94 | 如果你觉得看书比较枯燥的话,还可以搭配一个视频来学习。推荐你看看哈工大的李治军老师的操作系统慕课,课程地址:https://www.icourse163.org/course/HIT-1002531008#/info 。 95 | 96 | ![](https://img-blog.csdnimg.cn/f08ff2ffd7b04290bd912537f70821a2.png) 97 | 98 | 整个课程一共分为 4 大节,每一大节的最后还有一些小实验。 99 | 100 | - 操作系统基础 101 | - 进程与线程 102 | - 内存管理 103 | - 设备驱动与文件系统 104 | 105 | 这个课程把操作系统中最重要的几个模块都涵盖到了 : CPU 管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块。 106 | 107 | 另外,如果你仅仅是为了准备操作系统面试的话,我更推荐去年新出的一本国产的操作系统书籍:**[《现代操作系统:原理与实现》](https://book.douban.com/subject/35208251/)** (夏老师和陈老师团队的力作,值得推荐)。 108 | 109 | ![](https://img-blog.csdnimg.cn/20210406132050845.png) 110 | 111 | 这本书分为 3 部分,主要看第 1 部分就足够了: 112 | 113 | - **操作系统概述** :主要讲了操作系统相关基础概念及简史。 114 | - **硬件结构** :主要讲了计算机硬件结构包括 CPU 与指令集架构、物理内存与 CPU 缓存等内容。 115 | - **操作系统结构** :主要讲了操作系统内核架构、操作系统复杂度管理方法等内容。 116 | - **内存管理** : 主要讲了虚拟地址、物理地址、虚拟内存、物理内存的分配与管理等内容。 117 | - **进程与线程** : 主要讲了进程和线程相关的概念。 118 | - **操作系统调度** :主要讲了操作系统的调度机制。 119 | - **进程间通信** : 主要讲了进程间的通信机制。 120 | - **同步原语** :主要讲了解决并发访问共享资源出现的同步问题的解决方案比如互斥锁、信号量、读写锁。 121 | - **文件系统** :主要讲了文件存储相关的概念。 122 | - **系统虚拟化** : 主要讲了 CPU 虚拟化、内存虚拟化、I/O 虚拟化等内容。 123 | 124 | 另外,《现代操作系统:原理与实现》这本书还有配套的视频教程,地址:https://cnmooc.org/portal/course/5610/14956.mooc 。 125 | 126 | ![](https://img-blog.csdnimg.cn/f8b53c4e930b401e9c414e5d20302974.png) 127 | 128 | 最后,我再推荐一个国外学习编程的网站 [studytonight](https://www.studytonight.com/) ,上面也有计算机基础相关的学习资源。 129 | 130 | ![](https://img-blog.csdnimg.cn/0fee3e0a80d545c797814a70b3a0e0b3.png) -------------------------------------------------------------------------------- /八股文骚套路之数据结构.md: -------------------------------------------------------------------------------- 1 | 数据结构和算法密不可分,算法+数据结构=程序。 2 | 3 | 国内现在的面试非常重视数据结构相关问题,尤其是像字节跳动、腾讯这类大公司。 4 | 5 | 数据结构相关的考察通常会以算法题的形式出现,比如面试官让你反转一个链表。面试官也会在面试中穿插提问一些数据结构相关的概念,比如在询问 MySQL 索引的时候,面试官大概率就会问你 B 树& B+树相关的问题。 6 | 7 | 上一篇八股文中我们总结了算法相关的内容,详见[八股文骚套路之算法](https://mp.weixin.qq.com/s/DQlcayww9RIEf37I5Q1DOA) 。这篇文章我们简单来聊聊如何准备数据结构面试。 8 | 9 | ## 数据结构面试准备 10 | 11 | 数据结构的种类非常多,不过最常用同时也是面试最常问的数据结构主要就是下面这些: 12 | 13 | - **线性数据结构**: 14 | - **数组** :数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 15 | - **链表** :链表(LinkedList) 虽然是一种线性表,但是并不会按线性的顺序存储数据,使用的不是连续的内存空间来存储数据。链表的插入和删除操作的复杂度为 O(1) ,只需要知道目标位置元素的上一个元素即可。但是,在查找一个节点或者访问特定位置的节点的时候复杂度为 O(n) 。 16 | - **栈** :栈 (Stack)只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照 后进先出(LIFO, Last In First Out) 的原理运作。在栈中,push 和 pop 的操作都发生在栈顶。栈常用一维数组或链表来实现,用数组实现的栈叫作 顺序栈 ,用链表实现的栈叫作 链式栈 。 17 | - **队列** : 队列(Queue)是 先进先出( FIFO,First In, First Out) 的线性表。在具体应用中通常用链表或者数组来实现,用数组实现的队列叫作 顺序队列 ,用链表实现的队列叫作 链式队列 。队列只允许在后端(rear)进行插入操作也就是 入队 enqueue,在前端(front)进行删除操作也就是出队 dequeue。队列的操作方式和堆类似,唯一的区别在于队列只允许新数据在后端进行添加。 18 | - **图** :图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:**G(V,E)**,其中,G 表示一个图,V 表示顶点的集合,E 表示边的集合。图可以被简单的分为:无向图和有向图,无权图和带权图。 19 | - **树** : 树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。常见的树的种类有:平衡树、二叉搜索树、平衡二叉树、红黑树、B 树、LSM 树、字典树(Trie 树) 20 | - **堆** :堆是一种满足特定条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。堆分为最大堆和最小堆。 21 | - **哈希表** :也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构,通过 key 就能获取到指定的 value ,速度非常快。 22 | - **跳表** :跳表(Skip List)是由 William Pugh 发明的一种查找数据结构,支持对数据的快速查找,插入和删除。跳表的查询,插入和删除操作的期望时间复杂度都为 O(log n)。 23 | 24 | **常见问题总结** : 25 | 26 | - **通用常识**:像数据结构的定义,查找、插入、删除元素的时间复杂度,应用场景是每一个数据结构都应该掌握的最基本的点。 27 | - **线性数据结构** : 28 | - 数组 vs 链表 29 | - 栈 vs 队列 30 | - 实现一个栈/队列 31 | - 翻转链表、返回链表中倒数第 n 个节点、链表合并...... 32 | - **图** : 33 | - 图的常见概念比如顶点的度 34 | - 图的遍历算法(广度优先搜索和深度优先搜索) 35 | - 拓扑排序 36 | - 欧拉回路 37 | - 迪杰斯特拉(Dijikstra)算法(最短路径问题) 38 | - **树** : 39 | - 二叉树的前序遍历、中序遍历、后序遍历 40 | - 二叉查找树的出插入、查找、删除 41 | - 二叉树的高度计算 42 | - 红黑树 vs 二叉查找树 43 | - **堆** : 44 | - 堆中插入数据 45 | - 如何删除堆顶元素 46 | - 堆排序 47 | - **哈希表** : 48 | - 哈希冲突是什么?如何解决? 49 | - 键值的映射关系如何维护?哈希函数如何设计? 50 | - **跳表**: 51 | - 为什么 Redis 选择使用跳表而不是红黑树来实现有序集合? 52 | - 跳表的查找、插入、删除元素的流程 53 | - 跳表插入元素时,如何动态维护索引? 54 | 55 | ## 数据结构系统学习 56 | 57 | Github 上有一个叫做 [OI-wiki](https://github.com/OI-wiki/OI-wiki)总结了编程竞赛相关的知识点,其中就包含了数据结构、算法、编程语言等等知识点。并且,数据结构部分基本把最常用的数据结构都总结到了。 58 | 59 | ![](https://img-blog.csdnimg.cn/31c97303d778469cb9bee7d87ce975e3.png) 60 | 61 | 在线阅读地址:https://oi-wiki.org/ds/ 。 62 | 63 | 数据结构和算法是不分家的,因为,大部分书籍都是同时讲数据结构和算法。比如我们在[八股文骚套路之算法](https://mp.weixin.qq.com/s/DQlcayww9RIEf37I5Q1DOA) 这篇文章中推荐的算法和数据结构入门书籍 **[《我的第一本算法书》](https://book.douban.com/subject/30357170/)** 以及算法和数据结构进阶学习书籍 **[《算法》](https://book.douban.com/subject/19952400/)** 。 64 | 65 | ![](https://img-blog.csdnimg.cn/67280832dc30411d9e12fe79c5e3678f.png) 66 | 67 | 我在[八股文骚套路之算法](https://mp.weixin.qq.com/s/DQlcayww9RIEf37I5Q1DOA) 较为详细地介绍了这两本书,并且,还给出了《算法》这本书的配套学习教程和网站。我这里就不在花费额外的篇幅来介绍这两本书了。 68 | 69 | 强烈安利 3 个可以可视化数据结构和算法的网站,超级顶!非常非常有助于帮助我们理解常见的算法以及数据结构。 70 | 71 | 第一个网站是 Data Structure Visualizations。地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 。 72 | 73 | 这个网站已经有很多常用的数据结构与算法的可视化,例如常见的栈,队列,递归,二叉树、B 树等等。 74 | 75 | ![](https://img-blog.csdnimg.cn/724795ce5483435399f0a987e9e5626e.png) 76 | 77 | 可视化效果如下: 78 | 79 | ![](https://img-blog.csdnimg.cn/aca2512d6aaa4bddb10b802d6abbd33a.gif#pic_center) 80 | 81 | 第二个网站是 VisuAlgo,一个非常精致的数据结构和算法可视化网站。地址:https://visualgo.net/zh 。这个网站支持搜索功能, 82 | 83 | ![](https://img-blog.csdnimg.cn/69668f62b50f4bfeab66f217c45f3f33.png) 84 | 85 | 可视化效果如下: 86 | 87 | ![](https://img-blog.csdnimg.cn/ec111b9629464bd4a592be4bb04157ef.gif#pic_center) 88 | 89 | -------------------------------------------------------------------------------- /八股文骚套路之算法.md: -------------------------------------------------------------------------------- 1 | 话说,大家有没有被手撕算法给整抑郁过?我当初第一次做字节的算法题,直呼变态,确实比较难。 2 | 3 | 可能很多还没有参加过面试的同学还不知道手撕算法是什么,我这里简单解释一下:手撕算法简单来说就是完成面试官给你布置的算法题(有些公司提供思路即可)。 4 | 5 | 国内现在的校招面试开始越来越重视算法了,尤其是像字节跳动、腾讯这类大公司。绝大部分公司的校招笔试是有算法题的,如果 AC 率比较低的话,基本就挂掉了。 6 | 7 | ## 算法面试准备 8 | 9 | 和框架应用类知识不同,算法仅仅通过一周甚至是一个月的突击是完全没办法快速上手的! 10 | 11 | 想要在算法面试中如鱼得水,就必须持之以恒地坚持刷题-> 总结->再刷题 -> 再总结。 12 | 13 | 你需要做的就是提前半年甚至是一年来刷 Leetcode,并总结一些常见题目类型的套路! 14 | 15 | **那我们应该怎么更高效低刷题呢?** 给几点自己的刷题建议: 16 | 17 | - **按照类型来刷** :一般情况下,一个类型的题目刷 5~10 道左右就够了! 18 | - **由简入难** :刷算法是一个循序渐进的过程,如果你不是 ACM 大佬这种级别的人物的话,还是建议先从简单开始刷起,慢慢积累经验。不过,要说明的一点是:很多简单类型的题目甚至还要比中等类型的题目还要难!所以,如果你没办法解决一些简单的算法题,也不要太纠结,不要因此失去信心。 19 | - **重点关注面试高频题目/题型** :如果你的时间不是很充足的话,建议可以从高频面试题入手。像 Leetcode 上面就专门把一些最热门的算法面试题给单独整理了出来。 20 | - **多思考** :一定不要遇到不会的算法题就直接看别人的答案,这样会让自己形成依赖心理。一定要先思考,一定要多思考! 21 | - ...... 22 | 23 | 刷题之前,我建议你应该具有基本的算法基础。比如你应该搞清楚常见的算法思想(递归、动态规划、二分查找、贪心、分治、回溯、DFS、BFS、KMP、树的广度和深度优先搜索);再比如你可能还需要一点点的数学知识(比如位运算、质数)基础。 24 | 25 | 另外, 网上也有很多算法大佬开源了自己的刷题经验,这些经验都是前辈刷题之后得出的,非常具有参考价值。利用得当的话,可以极大减轻自己的刷题压力。推荐你看看我整理的 [《阿里ACM大佬开源的Leetcode刷题指南》](https://mp.weixin.qq.com/s/7b4JDVA_s27wCLQD7SACXg) 。 26 | 27 | ## 算法系统学习 28 | 29 | 没有学习过算法的朋友,建议上来不要看那些非常经典的书籍比如《算法导论》、《编程珠玑》,很可能直接就把你整懵了! 30 | 31 | 推荐你一本算法入门书籍 **[《我的第一本算法书》](https://book.douban.com/subject/30357170/)**。这本书中没有枯燥的理论和代码,取而代之的是大量的配图帮助你理解算法的具体原理和执行过程。即使你是零基础也完全没有关系! 32 | 33 | ![](https://img-blog.csdnimg.cn/d0ae0ae8ee284d24bd738dce17e66eb9.png) 34 | 35 | 书中包含了 26 个基础算法以及 7 个数据结构的详解。非常适合用来快速入门算法和数据结构。 36 | 37 | ![](https://img-blog.csdnimg.cn/67280832dc30411d9e12fe79c5e3678f.png) 38 | 39 | **[《算法》](https://book.douban.com/subject/19952400/)** 这本书也相当经典!嗯,就是下面这本红不溜秋的书。 40 | 41 | ![](https://img-blog.csdnimg.cn/img_convert/7766610b5bdc5cb9ede617c759a84a1c.png) 42 | 43 | 这本书涵盖了近 50 种常用的算法,每一种算法都介绍的非常详细深入!基础而全面! 44 | 45 | 相比于《算法导论》这类经典的书籍来说,《算法》更适合绝大部分人,不仅仅是因为其更加注重实践,更因为其对算法新手的非常友好。 46 | 47 | 《算法》每一章节后面都有对应的练习题,每一道练习题还有对应的答案解析。 48 | 49 | 书中给出了算法的实际代码,而非同类著作常用的伪代码。并且,代码是基于使用比较广泛的 Java 编程语言。 50 | 51 | 你可以在配套网站 https://algs4.cs.princeton.edu/ 上找到本书相关的其他资源比如代码实现、教学课件。 52 | 53 | 很多同学比较喜欢看视频,我这里也推荐几个算法相关的视频。 54 | 55 | B站有UP主更新了 [《算法第四版 - Course课程》](https://www.bilibili.com/video/BV1u441127b5),还是有中文字幕那种!值得一看! 56 | 57 | ![《算法第四版 - Course课程》](https://img-blog.csdnimg.cn/0cb859adbc7941b9ab97954d5914a602.png) 58 | 59 | 对于算法面试突击的话,推荐左神的 **[《程序员代码面试指南(第 2 版)》](https://book.douban.com/subject/30422021/)** 。 60 | 61 | ![《程序员代码面试指南(第 2 版)》](https://img-blog.csdnimg.cn/6d1d157b30104483ab286bfc6be4b974.png) 62 | 63 | 书中有180多道题,每一道题解都写的非常详细。并且,大部分题解都是先给出普通解法然后由浅入深地给出最优解,对常见的算法套路都进行了总结,非常用心。 64 | 65 | 左神在B站也更新了一个算法相关的视频 :[《一周刷爆LeetCode》](https://www.bilibili.com/video/BV13g41157hK?p=32)。 66 | 67 | ![](https://img-blog.csdnimg.cn/3f85e66363b044b5a9af19563d528b8c.png) 68 | 69 | 另外,身边有很多同学都非常推荐的一个算法视频是韩老师讲的[《尚硅谷Java数据结构与算法》](https://www.bilibili.com/video/BV1E4411H73v) 。 70 | 71 | 这个视频的内容非常全面,涵盖了大部分常用的算法以及比较经典的一些算法问题比如排序算法、递归与回溯、迷宫问题、八皇后问题等等。 72 | 73 | 通俗易懂!目前在 B 站已经有接近 200w+ 播放量,2w+ 的点赞。 74 | 75 | ![](https://img-blog.csdnimg.cn/7322f3fea48d453bb18f8276016c4231.png) 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /八股文骚套路之计算机网络.md: -------------------------------------------------------------------------------- 1 | 八股文骚套路系列指计算机基础来啦!✌️ 今天带来的是计算机网络相关的内容。 2 | 3 | 这篇文章,我主要会介绍如何准备计算机网络面试,推荐一些不错的书籍。并且,我还会总结出最常见的一些计算机网络面试问题,以方便大家把握重点。 4 | 5 | 另外,我在这个系列,也会逐渐将自己在准备秋招面试过程中的一些心得,以及一些技巧穿插的进行讲述,希望对大家有帮助! 6 | 7 | 计算机基础这块一般是中大厂面试问的比较多,并且不同的大厂面试之间对其重视程度也不一样。比如说字节、腾讯面试就非常重视计算机基础比如操作系统和计算机网络这块,他们会问很多相关的问题。而阿里、京东的面试偏向 Java 生态,像常用的一些中间件、框架经常会成为面试的重点。像阿里、京东的面试当然也会问计算机基础比如操作系统和计算机网络,不过问的深度相对来说比较一般。另外,如果你面客户端的岗位的话,计算机网络会问的更多一些。 8 | 9 | ## 计算机网络面试准备 10 | 11 | 最近校招已经开始了一段时间了,如果你目前的计算机网络基础不太好,可以先跟着我做救急准备,把下面这些知识点搞明白背清楚应付面试就差不多了,只要你别和面试官吹你熟悉计算机网络。按这篇文章救急准备的话,你对自己的评价应该是计算机网络基本掌握。 12 | 13 | ### 救急准备 14 | 15 | 大家都知道,计算机网络的分层体系有几套不同的标准,如果你考研的话,在天勤和王道上看到更多的是按照OSI的七层网络参考模型来讲(我觉得用天勤和王道来学习计算机网络还不错),但是实际应用的话更多的是按照五层的体系结构来划分。面试过程中偏向与应用,所以问的比较多的也就是应用层、运输层、网络层的协议,物理层和数据链路层的东西面试基本不会被问到,所以准备面试过程中这块就不用看了。 16 | 17 | 我把要准备的问题,以及面试你要答到什么程度列在下面,就按这个准备面试应该差不多了。下面的问题在 JavaGuide 中都能找到解答,我是想在Guide哥的基础上告诉大家这些问题面试官常问的是哪些?一般会怎么问?以及你在回答问题时应该把哪些知识点答出来。 18 | 19 | 项目地址:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide) 。 20 | 21 | ![](https://img-blog.csdnimg.cn/20210727211922715.png)![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==) 22 | 23 | **网络层** 24 | 25 | 网络层面试问的也相对较少,主要就是问IPV4,偶尔问一下ARP地址解析协议的的工作原理。 26 | 27 | 1.首先要记清楚 IPV4 地址是怎么分类的、以及地址的格式。这里经常结合代码题一起问你,我和很多同学都在面试中被面试官要求写一个程序判断给定的字符串是否是 IPV4 地址。 28 | 29 | 2.IPV4 子网划分面试中不怎么问,笔试题时经常有这个问题。 30 | 31 | 3.了解 IP 地址和 Mac 地址的区别,了解 ARP 地址解析协议并了解其工作原理。 32 | 33 | **传输层** 34 | 35 | 面试中计算机网络的问题最常出现在这一章中。 36 | 37 | 1.记清楚 TCP 和 UDP 的区别。 38 | 39 | 2.TCP三次握手和UDP四次挥手。 40 | 41 | 这是面试计算机网络最最最常问的问题!!!你计算机网络就算其它的什么也不会,这个问题你必须要记清楚,如果面试官问出你这个问题你都答不上,面试官估计觉得你连敷衍都不想敷衍他了。 42 | 43 | 当面试官问你三次握手和四次挥手时,你要答出这三个点来。(1)为什么要三次挥手和四次挥手,如果不这样做会有什么影响。(2)三次握手四次挥手的整个流程。(3)有的面试官只要你答出三次握手和四次挥手的大体流程就好了,但是有的面试官会要求你答出三次握手和四次挥手时发送端和接收端分别发了哪些标记。就像下面 Guide哥 画的这张图一样。 44 | 45 | ![](https://img-blog.csdnimg.cn/20210727212425498.png) 46 | 47 | 3.TCP协议如何保证可靠传输 48 | 49 | 把 ARQ 协议、滑动窗口、流量控制、拥塞控制等回答清楚就算到位了。 50 | 51 | 应用层 : 52 | 53 | (1)另一个最最最常问的问题,”在浏览器中输入 URL 地址到浏览器显示网页这个过程中计算机网络做了什么“。 54 | 55 | 这个问题无论时考研还是找工作都是常见的,建议把 JavaGuide 中这个问题的总结熟读并全文背诵。 56 | 57 | (2)HTTP 1.0 和 HTTP 1.1 的主要区别 58 | 59 | 这个也要了解一下。 60 | 61 | (3)HTTP 和 HTTPS 的区别 62 | 63 | 这个也是面试常考问题,这个问题展开以后能问的就比较多了。 64 | 65 | 在回答这个问题时你首先分别介绍一下 HTTP 和 HTTPS 的原理,以及区别。大致就是 HTTP 是通过明文在网络上传输的,HTTPS 是加密的。然后有的面试官问到这也就可以了,有的面试官不讲武德,想搞偷袭,会继续让你讲 HTTPS 建立连接的流程、然后会继续追着你问SSL 的工作流程。建议把这里好好准备一下,面试官一问你就可以展开讲,你就能消耗很多面试时间,这样面试官问其它问题的时间就少了,嘿嘿。 66 | 67 | (4)HTTP请求常见的状态码 68 | 69 | 背几个常用的就好。 70 | 71 | (5)DNS域名系统 72 | 73 | 这里你要可以描述清楚工作原理。也是面试常问问题,当除考研我也重点背过这里。 74 | 75 | **网络接口层** 76 | 77 | 把网卡、网桥、交换机的概念、用途简单了解下就好,一般面试官不会问。 78 | 79 | 好了,把这些问题搞清楚,应付面试官应该就没什么问题了,赶紧去总结下答案然后好好背吧。如果你时间充分,想系统学一下计算机网络,那你就接着往下看。 80 | 81 | ### 系统准备 82 | 83 | 如果想要系统地学习计算机网络相关的知识,首推 **机械工业出版社的《计算机网络——自顶向下方法》** 。 84 | 85 | 这本书的目录清晰,按照 TCP/IP 五层模型逐层讲解,对每层涉及的技术都展开了详细讨论,基本上高校里开设的课程的教学大纲就是这本书的目录了。 86 | 87 | ![](https://img-blog.csdnimg.cn/20210727214954388.jpg) 88 | 89 | 可能有一些小伙伴的学校用的是谢希仁老师的《计算机网络》这本书。其实,我个人是不太推荐这本书的。这本书的内容确实很详细,不过,很多地方有点过于啰嗦了。 90 | 91 | 《计算机网络——自顶向下方法》这本书被分成了 9 章,比较重要的章节及其介绍如下: 92 | 93 | - **第 1 章 计算机网络和因特网** :主要讲了计算机网络相关的一些基础概念比如因特网、协议的定义。 94 | - **第 2 章 应用层** :主要讲了应用层的各种协议比如 HTTP、FTP、SMTP 和 一些重要的概念比如 DNS、P2P 应用。 95 | - **第 3 章 运输层** : 主要讲了运输层的相关协议比如 UDP 、TCP 。 96 | - **第 4,5 章 网络层** :主要讲了网络层相关的各种协议比如 ICMP、IPv4 协议和各种网络层的相关概念比如路由器、防火墙。 97 | - **第 6 章 链路层和局域网** :主要讲了链路层(也叫网络接口层)相关的概念和协议比如差错检测和纠正技术、多路访问链路和协议、MAC 协议。 98 | 99 | 针对 HTTP 这一章节,你还可以结合 《图解 HTTP 》这本比较有趣的书籍来学习。 100 | 101 | ![](https://img-blog.csdnimg.cn/2021072721311389.jpg) -------------------------------------------------------------------------------- /我的秋招规划.md: -------------------------------------------------------------------------------- 1 | 大家在准备面试的时候不是要把网上所有面经的问题都背会,网上那么多问题你也不可能背会。首先你在准备秋招的时候要定一个计划,计划好你哪一部分要准备到什么程度。比如我当时的秋招复习计划就是下面这样: 2 | 3 | 1. Java 基础 4 | 5 | ` Java` 要熟悉,在校招面试中的问题90%要回答上来。将 `HashMap`、`ArrayList` 等集合重点准备,将并发中的 `线程池`、`锁机制` 等重点理解,面试官问的时候我尽量答出点他在其它面试者那不常听到的东西。 6 | 7 | 2. JVM 8 | 9 | `JVM` 调优不学,其它的常见问题都要做到回答清楚。 10 | 11 | 3. MySQL 12 | 13 | `MySQL` 重点准备。除了 MySQL 的常见问题要会,对于 MySQL 的优化要有一定的积累,这里的 MySQL 优化技巧不止局限于面经,要给面试官来点面应届生的时候不常听到的。MySQL 后来也一直是我在面试的时候的爆点,曾经一个大厂的面试官和我聊了一阵 MySQL 以后还问我是怎么把这里学的这么好的。在这里推荐一个课程,是林晓斌的MySQL实战45讲,我从这门课上学到了挺多的东西。因为这个课是收费课程,他们也没找我做广告,就不挂链接了,你们感兴趣的自己找哈~ 14 | 15 | 4. Redis 16 | 17 | `Redis` 重点准备。大家对 Redis 的准备可能就是背 Redis 的几种数据类型、Redis为什么那么快、Redis的持久化机制、什么是缓存击穿、什么是缓存穿透、什么是缓存雪崩、什么是快乐星球?嗯...我比你们多准备了点,我看着`《Redis的设计与实现》`这本书把 Redis 的数据结构充分理解了、充分理解了 Redis 的持久化、也充分理解了 Redis 的集群设计,并且把集群带到了我的项目中,并且利用集群的特性对项目做了一定的优化。这里也是我面试的杀招。 18 | 19 | ![](https://img-blog.csdnimg.cn/20210603204627820.png) 20 | 21 | 22 | 5. 计算机网络、操作系统、组成原理 23 | 24 | 这些上面少花时间。根据自己的一些基础,加上用一两天时间把网上的诸如三次握手四次挥手的面经八股文背了背就好了。面试官问的时候大大方方说这里只懂一些最基础的就好了。 25 | 26 | 6. 项目、设计模式 27 | 28 | 项目我准备了两个,一个是电商项目,一个是实现简化版的Spring框架的项目。电商项目就是通用的 Nginx + Redis + RabbitMQ + MySQL的架构,不过我通过自己对 Redis 和 MySQL 的理解,在这些环节做了自己的优化。另一个项目是实现简化版 Spring 框架,反射、注解、设计模式这些都在项目上应用了。面试官问我设计模式的时候,我说我就熟项目里用的几种设计模式。 29 | 30 | 这样,自己的知识体系就准备好了,其实通过上面计划的制订,自己的简历也写出来了。从面试开始,自我介绍这个环节,就要把面试官往自己熟悉的地方去引,一旦面试官问出你预先做个详细准备的问题,我能给他讲到他下班。 31 | 32 | 另外,回答问题前想清楚,在回答一个问题时,千万不要提到另一个你不熟的东西。你一提到另一个东西,就相当于给面试官提了个醒让面试官追问,这个东西如果你又不熟,你不是给自己挖个大坑吗? -------------------------------------------------------------------------------- /校招全流程注意事项.md: -------------------------------------------------------------------------------- 1 | ![](https://img-blog.csdnimg.cn/20210717133023332.png) 2 | 3 | 今天在知乎上看到这么一个问题,如果是其它专业的还好,如果这个读者是计算机相关专业的,你现在问这个问题属实有点太迟了。我发现许多同学因为对校招不了解而错过了很多机会,不过这有时候跟学校的氛围也有关系,我上本科时所在的学校找工作的氛围就不太好,在找工作的时候并没有人在讨论找工作的事情,自然很多人就不知道大四毕业居然大三下学期就要准备找工作了。而在读研时的学校氛围就比较好,从三四月开始就有公司来宣讲,特别到了六七月,电梯里,学校路上,到处能听到有人谈论找工作的事情,这样自然大部分同学早早就开始准备了。 4 | 5 | 可能好多同学的学校和我本科学校的氛围差不多,自己的学长学姐也不太清楚找工作的事情。那么我今天就来给大家十条关于计算机相关专业校招的建议,让大家知道应该怎样前期准备、怎样投简历、拿到 offer 以后怎样筛选、签约时应该注意什么。看了这篇文章,希望大家少踩一些坑。 6 | 7 | **1.首先明确秋招时间** 8 | 9 | ![](https://img-blog.csdnimg.cn/20210717133133222.png) 10 | 11 | 企业对应届毕业生招聘量最大的时候是秋招,说是秋招,但是互联网公司基本上 6 月下旬就陆续开始招聘了。国企和研究所之类的基本上是九月左右开始,稍迟点十月左右开始。春招基本上是秋招的补招,企业招聘的量相比秋招会少很多。 12 | 13 | **2.明确自己所做的方向,并对要做的努力进行评估** 14 | 15 | ![](https://img-blog.csdnimg.cn/20210717133212991.png) 16 | 17 | 首先明确自己要做哪个方向,是前端?后端?还是客户端?其实对于校招生在投简历的时候,你不一定非要投自己目前所做的方向。这一点下一条会讲,但是你必须要把你目前所做的方向做出点东西来,能给面试官证明你的学习能力。 18 | 19 | 在明确自己要做哪个方向以后,你应该了解现在校招对于你这个方向的要求是什么?比如你要做 Java 后端,那么你 Java 基础肯定要过关,Jvm 也要掌握,另外技术栈中的 Redis、MySQL 等等也要会。这些怎么去了解呢?理想情况下你应该有个师兄师姐,经历过校招,然后把这些全都告你。但是如果没有这种条件,你就要去知乎、牛客、公众号等平台上看面经了,另外你还可以直接来问我。 20 | 21 | **3.投简历时方向别卡的特别死** 22 | 23 | ![](https://img-blog.csdnimg.cn/20210717134246287.png) 24 | 25 | 我发现大部分同学有一个误区,就是觉得自己哪个方向有经验才能投哪个的岗位,其实不是的。其实校招主要看重你的基本功,而不过分要求你和岗位的契合度。只要你的基本功过关,并且你平时做的项目能充分证明你对编程的学习能力,那么大部分岗位你都是可以投的。比如你平时做 Java 后端的方向,其实大数据、客户端、测试、SRE 等岗位都是可以去面试的。其实你可能一开始面试的是 Java 后端 开发的岗位,但是面的过程中也可能会推荐你去别的岗位面试。只有后端和算法经验的我甚至还拿到一个不错的公司的数据库内核开发的 offer。 26 | 27 | 我跟你说上面这些不是让你面试时无差别攻击,啥岗位都投,而是说如果你在投简历时发现合适的机会,虽然岗位不匹配但也可以投。比如你有师兄师姐在这个公司这个岗位工作,对部门情况知根知底,这岗位和你目前所做的方向不一样也可以投呀!另外如果你发现某公司某部门某岗位缺人,你也对这个岗位感兴趣,而且现在投简历能快速安排面试,但岗位和你目前所做方向不一样,这种情况果断投呀! 28 | 29 | **4.投简历时尽量走内推**。 30 | 31 | ![](https://img-blog.csdnimg.cn/20210717133250663.png) 32 | 33 | 无效内推:从网上随便找了一个内推码填到系统里,也不认识内推的人是谁,投完想查面试进度都找不到人。 34 | 35 | 有效内推:找到部门职工,职工收了你的简历后能直接送到 hr 或部门 leader 手里 36 | 37 | 超级有效内推:部门直接收简历,组织预面试,面试通过记入系统,面试不通过不计入系统,还可以投别的部门。 38 | 39 | 投简历也是很重要的,如果用错误的方式投简历,直接进入整个集团的大池子里,可能你的简历瞬间就沉下去了。当然有的公司只有往集团大简历池中投简历这种方式,这种你按要求投就好了,都是这样投简历的那么 hr 必须从集团大池子里捞。但是如果简历每天都有送到自己手上的,这些简历都可能看不完,谁有时间再跑去大池子里捞呢。 40 | 41 | **5.投简历讲究策略** 42 | 43 | ![](https://img-blog.csdnimg.cn/20210717134512434.png) 44 | 45 | 根据我自己的经验,以及身边同学的情况。很少有人能通过自己找工作的第一次面试,第二次面试就能通过的也不多。所以别第一次约面就约自己最想去的公司。先面几家自己面试没通过也无所谓的公司,通过面试对自己情况有个评估,并且根据面试的反馈补充自己的知识,感觉自己水平差不多后再去投自己想去的公司。这样安排,你最后能拿到你想去的公司的 offer 的概率要大的多。当然你要注意各个公司投简历的时间,你尽量在中期以前投简历。假如阿里巴巴投简历的时间是 8 月初-9 月底,那么你最好在 9 月初以前就投了简历。这就希望你要早点开始准备秋招了。 46 | 47 | **6.性格测评一定要认真做** 48 | 49 | ![img](https://img-blog.csdnimg.cn/20210717134713356.png) 50 | 51 | 进入面试流程以后,我认为最烦的事情就是性格和智商测评了,比做代码题笔试都烦。问你如果和领导有冲突该怎么做,让你找规律,让你做阅读理解,题还贼多。好多同学因为做的极为烦躁,就随便选了一些答案。但是目前企业又很重视测评结果,如果你测评没通过,直接会被挂掉。我就因为测评乱选被某厂挂了。所以如果你觉得你现在很烦躁,那么就先别开始做测评,一般测评都会给你一个期限,在规定期限内,找一个时间把测评做了就好了。填写性格测评时要以下几个原则,乐观、积极、皮实、善于合作。 52 | 53 | **7.面试官:你还有什么问题吗?** 54 | 55 | ![](https://img-blog.csdnimg.cn/2021071713364537.jpg) 56 | 57 | 如果你想来这家公司,别回答面试官你没什么问题。如果你这样说,在面试官看来只有两种情况。1.你对他们团队不感兴趣。2.你没有自己的思考。 58 | 59 | 那你应该怎么提问呢?首先你要知道,一般情况下,一面是部门员工,二面是组长(有时候二面也是员工),三面是总监,最后是 hr 面。偶尔也有特殊情况,当初面美团,我一直以为我的一面就是普通员工,后来才知道人家管着好几个组长呢。 60 | 61 | 第一面和第二面,如果你感觉自己面的不好,你可以问问面试官他觉得你有哪些方面可以加强,你甚至可以问问他觉得你的项目哪些地方可以继续优化,这样你面试别的公司你就可以给别的面试官讲了呀。如果你觉得自己面的好,你也可以问上述问题,并且可以问一下面试官部门目前主要是在做什么,需要哪些技能等。 62 | 63 | 第三面,总监面。其实总监面最容易根据总监的反应看出自己的面试是否通过。如果总监想要你,那么他会主动的向你介绍他们部门是在做什么,反之,不会。所以如果总监向你释放信号了,那么你一定要多问下他们部门是在做什么?他们会对新人有哪些培养?新人大概到什么程度会接手比较重要的项目?在这个部门以后的发展方向是什么? 64 | 65 | HR 面,可以问 HR 的有工作作息制度,公司对新人有什么保护措施不?比如美团前三个月是 mentor 带,闯祸是 mentor 的锅,三个月以后闯祸就要自己顶着了。 66 | 67 | **8.拿到一家 offer 以后你应该做什么?** 68 | 69 | ![](https://img-blog.csdnimg.cn/20210717133854744.png) 70 | 71 | 当然应该再去拿下一家 offer 了。我不是鼓励大家去当 offer 收割机,各位面霸给其它人留条活路吧!不过你最好拿到两个还不错的 offer 以后再停止面试。因为你在跟 hr 谈薪的时候,你是需要一个对等的 offer 做筹码的。我曾经遇过这样一件事,当时某厂的 hr 跟我谈薪,问我现在有哪些 offer,我说了我现在有的 offer 以后,对面 hr 问我这些公司给我开的薪资是多少。我说这不太方便说吧?(注意,你把薪资和别人说了,如果被人拿到证据举报了,你是会被公司取消 offer 的)但是那个 hr 回了我一句,你不跟我说他们给你开多少钱,我怎么给你报价呢?好嘛,意思是我如果没这些 offer,你就要狠狠压我价钱了是吧?当然我猜这也是她领导要求的。 72 | 73 | **9.两方和三方协议的注意事项** 74 | 75 | ![img](https://img-blog.csdnimg.cn/20210717134903700.png) 76 | 77 | 当拿到 offer,谈好薪资以后,就到了签约的环节了。每个学校下发三方协议的时间不一样,如果你的学校三方协议下发的时间比较迟,有时候公司会想和你先签一个两方。一般情况下两方是没有什么约束效力的,你可以和无限多的公司签署两方协议,违约你完全可以不理会这个两方协议(但是如果你想违约两方,我建议还是按照约定的违约金进行赔偿,大家要有契约精神哈,有难处也可以和公司协商)。注意,我刚才说的是一般情况,有时候也会有一些恶心的事情,比如有的公司会拿着你的两方协议去找学校,请求学校锁了你的三方。而部分学校因为担心这家企业明年不来招人,会按公司的要求办。这就是两方协议的一个坑,大家如果准备签两方协议一定要注意往年的情况。 78 | 79 | 三方协议绝对是要慎重的,签约前一定要想明白,三方协议只能同时和一家公司签。按理来讲三方协议是有一次违约机会的,但是如果你想违约三方,会有一些麻烦。如果你签了三方想违约开出新的三方,那么学校会要求你取得上一家公司的解约函。违约三方的话,大部分公司需要你赔违约金,有的公司办理三方节约会给你拖到下一年的四五月份,这样你等起来就很煎熬了。 80 | 81 | **10.提前实习** 82 | 83 | ![img](https://img-blog.csdnimg.cn/20210717134957287.png) 84 | 85 | 我的建议是趁没毕业提前去公司实习一下,远程实习也可以,体验一下工作环境是否适合你。我有同学就是提前去公司实习,发现加班太多。这个时候他还是应届生,又去找了新的工作,现在工作和生活平衡,相当舒服。大家一定要重视应届生的身份。 86 | 87 | 好了,找工作的坑我基本都提到了,祝大家都能拿到好的 offer 呀。拿到满意的 offer 也要记得回来报喜呀。 88 | -------------------------------------------------------------------------------- /面试小技巧汇总.md: -------------------------------------------------------------------------------- 1 | ## 提高归纳和总结能力 2 | 3 | 在面试过程中,面试官特别注重应聘者的归纳和总结能力。希望大家在回答面试官的问题时,都能把要回答的知识总结成 1,2,3,4 这样,然后一条条的给面试官讲述出来。比如你有一个秒杀系统,你就应该这样给面试官讲。我的秒杀系统的架构为 Nginx + Redis + RabbitMQ + MySQL。首先我在缓存数据库上采用 Cluster 形式的集群,解决了 xxx 问题。在消息中间件上采用什么方式解决了什么问题,最后在 MySQL 部分我针对 xxx 情况进行了 xxx 设计,解决了 xxx 问题。我见过许多应聘者,想起什么说什么,把自己说懵了,也把面试官搞糊了。不管是讲项目,还是背八股文,甚至是参加hr面,在听到问题的时候都应该想一下,把回答条理了再给面试官讲,这样面试官能快速的捕捉到你的重点。 4 | 5 | ## 以面代练 6 | 7 | 推荐大家在准备到一定程度后,多进行面试"以面代练”。因为你在面试的时候,精神注意力是高度集中的,会发现很多你存在的问题,并且能在面试过程中把一些问题记牢。大部分人平时背一段几十字的文字,背好几分钟都背不下来,并且就算背下来隔一会就忘了。但是让他们复述过去一个小时面试官都问了什么问题,这能记得清清楚楚,还能写出一篇面经。另外,通过模拟面试能帮助你梳理回答问题的思路,回答问题条理对于面试也是很加分的。面试的形式可以找几个朋友或者学长学姐进行模拟面试,也可以在秋招前期投几个不太想去的公司进行面试(稍有些不道德,不过也算帮面试官完成面试 KPI 了吧)。 8 | 9 | 大家可以两周左右约一次朋友或者学长学姐进行模拟面试,这样对学习的促进作用也比较大。每天自己看十分容易懈怠,学习效率也不高。代码题也可以几个朋友轮着,每天其中一个人讲一道题,我当时就是这么干的。其实我感觉不管做什么,多合作还是能干成更多的事情。 10 | 11 | ## 项目介绍这样来准备 12 | 13 | 在技术面试中,面试官通常都会让你介绍一下自己所做的项目。 14 | 15 | 你可不要小看这一环节!就是一个简单的项目介绍,求职者之间的差距就特别大。有些小伙伴说了半天就是说不到重点,面试官都着急。而有些小伙伴,不光言简意赅地介绍了项目经历,还顺带把面试官引向自己所擅长的领域。 16 | 17 | 想要做好项目介绍,重要的是自己对于项目非常了解。一般情况下,在面试之前,你至少需要对你所做的项目下面这些信息了如指掌: 18 | 19 | 1. **项目背景** : 这个项目是在什么背景下做的。 20 | 2. **项目架构图** : 通常面试官会让你手绘一下项目架构图。 21 | 3. **项目技术栈** :你需要搞懂项目每个模块所涉及到的技术。 22 | 4. **项目亮点** :这个项目有哪些亮点呢? 23 | 5. **个人职责(重要)** : 面试官更看重的是你为这个项目做了什么贡献。 24 | 25 | 具体介绍项目的时候,你可以这样来(个人历经各种挫折之后所总结的经验,仅供参考): 26 | 27 | 1. 简单几句话介绍项目背景,让面试官对项目有一个大概的认识。 28 | 2. 介绍一下项目所涉及到的一些技术点。介绍这些技术点的时候,顺带可以简单说说用这些技术都干了什么。比如介绍到 ES 的时候,你可以简单说说它在系统中哪些模块(搜索模块?日志模块)被用到。 29 | 3. 介绍自己做了一些什么事情,旨在突出亮点。另外,项目上自己遇到的一些比较有含金量的问题及解决方案也可以顺带说一下。 30 | 31 | 通常我们的简历上都会有至少 2 个项目经历,个人建议你把你自己认为最有价值,最能体现出你个人能力的放在最前面。 32 | 33 | 最后, **一定一定一定要把自己在项目上做过的功能所涉及到的技术给研究透!** 这会是面试中的重中之重。 34 | 35 | ## 获得项目经验的好办法 36 | 37 | 项目经验的重要性,我想不需要我多做强调。如果你没有一个比较有含金量的项目的话,简历关大概率直接就会被 pass 掉!尤其是对于那些没有实习经历以及竞赛获奖经历的小伙伴来说,项目经历可以说是你的救命稻草了。 38 | 39 | 一般情况下,你有下面几种获得项目经验的方法: 40 | 41 | **1、参加竞赛** 42 | 43 | 有很多项目相关的技术竞赛,尤其是在大学的时候。比如中国“互联网+”大学生创新创业大赛、“挑战杯”中国大学生创业计划大赛、“中国软件杯”大学生软件设计大赛。 44 | 45 | 另外,像国内的一些大厂也有一些相关比赛,含金量也比较高。比如阿里的天池、腾讯的各种公益挑战赛。 46 | 47 | 这些参加竞赛所获得的项目经历对于应届生来说是非常有价值的,即使你没有获奖。 48 | 49 | **2、实战项目视频/专栏** 50 | 51 | 这种方式是我身边的大部分同学都在使用的方式。也是比较救急的方式,不过一些好的项目可能会花一些钱。 52 | 53 | 简单来说就是找一个教程来跟着做,不过,千万不要把这个跟着做理解为完全照葫芦画瓢!一定一定一定要多多思考,多多总结,多多改进! 54 | 55 | **3、实习项目** 56 | 57 | 你去公司实习的话,一般情况下也会接触到实际的项目。 58 | 59 | 不要苛求自己把整个项目搞懂,找准一个功能线,然后把它搞懂即可! 60 | 61 | **4、老师的项目** 62 | 63 | 大学老师经常会接一些项目,然后他可能会找一些学生来帮着做。 64 | 65 | 虽然,这种情况下,通常是给老师当苦力,但不失为一个不错的获得项目经验的机会。 66 | 67 | 更多关于项目准备的内容,推荐大家看看大赛的[项目的准备,我想说这些……](https://mp.weixin.qq.com/s/BwpLRV5u8tfNDereQgU0Hw)这篇文章。 68 | 69 | ## 给面试官一个合理的心理预期 70 | 71 | 要学会根据你自身的学习情况,给面试官一个对你各部分知识掌握情况的一个合理的心理预期。 72 | 73 | 其实在校招面试过程中,单论技术栈基础知识考察这方面,你会背负着两个期望值。 74 | 75 | 一个是大厂目前内卷行情对应届生的期望值,根据我的经验,目前对面试后端开发的应届生的期望就是 Java 基础做到熟悉、JVM 基本掌握,然后其它技术栈中有两到三项做到熟悉,比如我熟悉的是 MySQL、Redis、Spring 框架,其它的能做到了解就差不多了,其它部分我准备的时间就很少,Linux 部分我总共用了不到半天时间看了看常用命令,RabbitMQ 也就记熟了通信过程,Mybatis 就看了下最常问的几个问题,计算机基础知识也没花多长时间(不过计算机基础知识我平时学的还不错呀)。 76 | 77 | 另一个是面试官根据你的简历和你开始的自我介绍对你的期望值。写简历过程中大部分人都会适当包装自己,但是做到稍高于目前行情对应届生的期望以后就可以了,切忌让面试官在面试开始之前就给你一个很高的期望。在面试过程中如果你的表现和面试官心理预期相差比较大(俗称你拉了跨),即使你达到了面试官平时通过的水平,你也很可能被刷。另外面试过程中比如面试官准备问你 Redis,一般会先问你一句你 Redis 熟悉不,如果真熟悉你就说你这里学的还可以。如果不熟,你就说这里了解一些基本的概念和操作~ 这样一旦你觉得面试官的问题招架不住,你就说这最近接触的不多,记得不太清楚,这样面试官通常情况下也理解就会换一块内容问了。如果你在简历和自我介绍中就夸下海口,又是精通,又有调优经验的,面试过程中却只能答上几个最常问的八股文问题,那面试官肯定是不会满意的。 78 | 79 | 绝大多数面试官是根据你熟悉的东西展开问,把你会的尽可能挖出来,看你学到一个什么程度。少数面试官会揪着一些他在意但你不了解的东西硬问,这种情况说明你和他没什么缘分,不要在意。 80 | 81 | ![img](https://img-blog.csdnimg.cn/20210628211503882.png) 82 | 83 | 可能有人看着这张图血压已经上来了~ --------------------------------------------------------------------------------