全方位八股文分析(附带资料版本)

介绍


本系列分析了 2022 年最新上千篇真实面经,结合自己这几年对校招的关注,总结了八股文各方面考点,你们可以根据这份分析来进行学习和准备面试。

涉及到的科目:Java全家桶 + Java框架 + JVM + Redis + MySQL + 计算机网络 + 操作系统 + 项目通用问题 + 场景题 + HR面通用问题。

内容:各科目考察占比 + 大小公司准备差别(可以把银行对标进小公司来准备) + 具体每个科目考察出现过哪些题(按照考察次数排序)+ 各个科目具体需要复习的知识点(按照重要性排序) + 项目复习通用框架。

优势:不需要再去看什么面经,网上很多东西都是大杂乱,你可以通过本系列,丝滑进行复习以及检验自己的学习掌握程序。

关于里面的资料

为了让大家更加方便复习,我把咱们训练营各方面的文章+专栏+视频,配套进去了,大家如果不大懂的,就自己看一下对应的资料哈。另外我还是不会给出快问快答的哈,因为我说了,我希望大家自己看资料总结,快问快答那种看了就忘了,不大推荐。

另外,大家有看到好的资料也可以给帅地哦,帅地会补充进去。

总体分析


我大概整理分析了 1000 篇左右的面经,面经都是来自于近些年春秋招,可以算是最新的面经了,并且这 1000 篇面经中,90% 的面经都是知名公司,小部分是来自于比较小的公司,当然,即使是比较小的公司,也算是网上有人讨论过的公司。

我是把这近 1000 篇面经中,进行考点归类,比如 Java 大概出现了多少道题,具体到 Java 中的集合模块,又是出现了多少题,再具体到集合里面,某点考点又是问了几次,比如 Hashmap 相关考点被问了几次。

通过大量数据的归纳 + 大小公司的一些考察区别的观察,总结了这份考点分析,这份考点分析的主要目的就是:你们可以基于它来复习,我会给出需要掌握的知识 + 这些知识在面试中是怎么提问的

基本覆盖 95% 的考察,当然,由于每个面试的不同 + 可能有些面试官基于你的回答进行各种追问,这些无法很好统计到。另外就是,有一些太偏的问题,我也不统计了,我感觉这个问题就是不掌握,也没事。

你们往后复习,可以跟着这个来进行逐一突破

下面的话,我主要先跟大家分析一下,在这么多 八股文科目中,各个科目的考察占比,当然,这个只是总体上的,具体到一家公司,可能又会有所不懂,但是大家在面试的时候,肯定也不是单纯为了某一家公司来准备的是吧,所以还是要看总体的。

各大科目考察占比

从大数据上分析,我觉得有三个科目考察的非常多,分别是 Java,MySQL,计算机网络,可以说比例相当,占比 60%都不止,也就是说,这三个是重中之重。

第二多的就是 redis,JVM,操作系统,这三个出现频率也差不多,操作系统可能稍微要少一点。

框架可以说是最少的,不过这 也和我统计的公司有关,对于银行,一些不怎么有名的公司,框架还是问的不少

至于计算机组成原理,基本不考,另外就是 Linux 也考的很少。

而消息队列,则是基于项目来问了。

总的来说就是:Java+MySQL+计算机网络 =》redis+JVM+操作系统 =〉框架,消息队列,这是我们需要准备的顺序。

不同公司考点分析

这个其实我并没有太去在意公司,不过对于一些国企的,有时候会多注意一些,总的来说就是,像银行这些国企,考的还是比较简单的,像 Java基础 + 框架 + mysql 考的多一些,相对来说,考的偏使用一些,比如问你 springboot 有哪些核心配置文件。

而像互联网中大厂,则喜欢上升到理论层面在问你,具体的东西问的不多,框架也问的很少,更多的还是从理论层面入手,确实是面试造航母的范儿。

复习建议

为了更稳,肯定是都看看,其实有些很简单,看一下就有个印象了,到时候问起,即使具体的忘了,也能扯一扯,我在总结各个具体知识点的时候,是安排考察频率来排列的,你们可以先复习高频 + 简单的,难的先放一放。

具体每个项目分析

具体的各个科目详细分析已经弄好的了,你们需要看哪个,就点进去看哪个就行,另外就是计算机组成原理没整理,因为基本没看到问这个的。

1、Java考点分析与总结


,这个不用说,是我们的主力语言,可以说是八股文各个知识中,问的最多的了,并且也是需要我们花最多时间去复习的,不过又说回来,当你掌握了之后,感觉又没那么多,,也就是那几样。

下面我先给大家分析一下 Java 各个知识点的考点以及大公司和小公司在 Java 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点分布

我这里把考点分为:Java多线程基础 + Java多线程进阶(JUC) + Java集合 + Java基础 + Java线程池 + 其他,一共六个模块。总的来说,绝大部分的考点都分布在集合+多线程,这两个加起来占据了 70% 吧,其次就是 Java 基础 和线程池问的比例差不多,相对比较少,一般线程池可能还会根据项目来问。

所以我们在学习时,重点是拿下集合和多线程,其他的,优先了解概念,可以不研究很深,但是多线程其实很难,就优先拿下比较简单的:多线程基础 + volatile + sychronized + cas。

二、大公司与小公司提问区别

现在的话,说实话,在大公司的话,HashMap 并没有以前问的多了,可能是大家都会了吧,总的来说就是,JUC 这块,大公司才可能问,小公司基本很少问,Java 基础小公司会问的多一些,并且小公司也会问 Java多线程基础,但是大公司多线程基础问的少一些。

而集合的话,大小公司都会问。

大公司:集合/多线程/线程池偏多

小公司:多线程基础/Java基础偏多

三、超详细考点总结(按照出现频率排序)

1.1 Java集合知识点总结

HashMap

  • 底层数据结构 + 为啥选择红黑树 + put/get 到大致执行逻辑
  • 线程安全角度:为啥不安全,得举例子 + 如何让 hashmap 变安全 + 有哪些线程安全的集合
  • Hashcode 取模 + 扩容原理 + 为啥扩容因子选择 0.75
  • 一般就这几个,带着目的去看一些文章分析,之后自己看源码,就会容易很多了

资料

ArrayList和LinkedList:这两个经常一起出现,主要掌握他们的底层数据结构以及应用场景。

资料:看韩顺平这个源码分析即可:

HashSet、Hashtable:掌握他们的底层数据结构,但是不用像 Hashmap 需要掌握的很细。

顶层接口:list 与 map,简单了解

counrrenthashmap:掌握原理以及它和Hashtable的区别(counrrenthashmap深入有点难,没条件的就了解下它是个线程安全的集合就可以了)

LinkedHashMap:了解下底层结构 + 应用场景

对应资料:看韩顺平这个源码分析即可(自己看对应章节哦)

23. HashMap 与 HashTable(超重点)

22. HashSet 与 LinkedHashSet

21. List | ArrayList | Vector

ConcurrentHashMap

1.2 Java集合提问方式

1、HashMap的底层原理

2、HashMap底层为什么要用红黑树呢?为什么不用平衡二叉树?

3、HashMap啥时候扩容,为什么扩容

4、如果两个同样的put相同的key,会发生什么?

5、HashMap是线程安全的吗?为什么呢?

6、HashMap在遇到key冲突的时候是怎么处理的呢?

7、 hashMap put get过程

8 、取模的时候为什么用&(length-1)

9、HashMap的底层数据结构?链表长度大于8就会转化成红黑树吗,没有对数组的插入有要求吗?链表是双向链表还是单向链表?

10 、hashp什么时候退回回链表?为什么不是7

11、HashMap不是线程安全的,如果要保证线程安全怎么办呢?可以用什么?

12、有哪些线程安全的集合类,讲一讲原理(HashTable,ConcurrentHashMap,CopyOnWriteArrayList)

13、hashmap一套 put流程,1.8的改进(红黑树,头插变尾插,扩容等)

14、hashmap,counrrenthashmap的原理以及区别(要求从源码上解释)

15、concurrentHashMap如何保证线程安全?

16、ConcurrentHashMap是不是绝对并发安全的?

17、ArrayList和LinkedList区别

18、讲一讲HashSet、Hashtable

19、list和set有什么区别 只说了特性应该扩展说说

20、集合类的顶级接口

21、Map:只存60个键值对,需要设置初始化容量吗?设置的话设置多少初始化容量:需要 否则需要多次扩容 128 要考虑数组长度是2的幂次方、负载因子

22、容量不是2的整数次幂 还用&(length-1) 影响会怎样?:容量是2的整数次幂,n -1 后,高位为1后的0都变为1,如 16:10000, 16-1=15:1111, 1111 再与 hash 做 & 运算的时候,各个位置的取值取决于 hash;如果不是2的整数次幂,必然会有的0的位,0与任何数&肯定为0,会造成更多的哈希冲突

2.1 Java基础知识点总结

1、记住几个 Object 常用方法

2、equals, hashcode, = = 这两个之前的关系

3、String, StringBuilder, StringBuffer,三者区别

4、异常:异常分类 + 记住几个常见异常

5、重载与重写,抽象类和接口

6、final 和 static 关键词的作用

7、浅克隆与深克隆

课程大纲对应内容

38. = = 与 equals

39. hashCode | toString | finalize

hashCode与equals的联系与区别

16. String 详解

17. StringBuffer 与 StringBuilder

11. 异常

12. try | catch | throws

4. 单例模式与 final

请实现对象浅复制与深复制

2.2 Java基础提问方式

1、Object类有哪些方法?详细说明

2、Java为什么被称为平台无关性语言?

3、讲一下equals()与hashcode(),什么时候重写,为什么重写,怎么重写?

4、= =和equals有什么区别

5、用户自己写一个String类,会发生什么?

6、String、StringBuilder、StringBuffer有什么区别?

7、java的4种引用

8、重载和重写的区别;

9、抽象类和接口的区别;

10、final关键字有什么作用,会用到哪些地方。修饰类,变量,方法。变量可以改变引用值,不能改变引用地址

11、抽象方法能不能加final;

12、sleep()和wait()的区别?

13、throw和throws的区别

14、try catch会影响性能吗?为什么抛出异常的时候会影响性能?

15、说说Java多态

3.1 Java多线基础版知识点总结

1、理解什么是线程安全,能够举例来说明线程不安全

2、能够用 Java 写一个出现死锁的例子。

3、掌握 Java 进程与线程的区别

4、自己用 Thread 和 Runnable 创建下多进程,并且知道他们的区别

5、run() 方法和 start() 的区别,最好自己点进去看看远吗

6、wait,notify,sleep 之间的关系,也要自己用一用

7、掌握线程的几种状态

主要就是上面这些

课程大纲对应资料(面试题角度)

线程的start和run方法的区别

Thread和Runnable的关系

线程的状态.

sleep和wait的区别

notify和notifyall的区别

yield函数

interrupt函数.

前述方法及线程状态总结

下面是韩顺平关于多线程的详解:

31. 多线程详解

3.2 Java多线基础版提问方式

1、Java多线程基础这块,就不总结了,感觉没什么好总结的,直接看下面的提问方式吧,比较杂。

2、进程和线程的区别;

3、创建线程的方式;

4、如何停止一个线程的运行

5、Runnable和Callable创建线程有什么区别?

6、Thread类和Runable接口的最大区别是什么?

7、线程的几种状态,以及状态的转换

8、线程的生命周期 感觉这个应该跟状态区分一下 生命周期说一下过程啥的

9、什么是线程安全?为什么不安全?

10、阻塞状态和等待状态的区别

11、怎么实现线程安全

12、锁怎么实现线程安全

13、 多线程什么场景下会发生死锁 , 有什么具体的办法可以避免死锁

14、wait和sleep的区别,没有说清楚,HR提醒用wait时会释放锁,sleep不会

15、多线程了解吗,为什么要多线程。如何启动一个线程,主动说了start和run的区别

16、多线程环境下为什么要引入同步的机制

17、为什么要线程安全,举例子,说了数据库脏读的例子, Java方面不清楚,面试官给了非元子性的操作 i++的例子怎么实现线程安全

18、Java里面的锁有哪些?

19、java里面的线程和操作系统的线程一样吗?

20、wait-notify、线程的状态

21、notify 和 notifyAll 的区别

4.1 Java多线程进阶版知识点总结

1、轻量级锁 + 重量级锁(自旋锁 + 自适应锁)

2、Volatile 和 synchronized

3、ReentrantLock 底层

4、Lock

5、CAS原理 + 优缺点

6、AQS(比较难)

7、几种常见JUC包:CountDownLatch,Semaphore,CyclicBarrier,FutureTask,记得自己随便写个 demo 用一下

8、几个常见的原子类:AtomicBoolean、AtomicInteger、AtomicReference

9、threadLocal 应用场景 + 原理

这部分的知识比较难了,特别是 JUC,总的来说,其实不懂也问题不大,掌握 1 + 2 其实也差不多了,下面是对应的资料:

一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁

一文搞懂volatile关键字

一文读懂synchronized

CAS 是什么?Java8是如何优化 CAS 的?

上面这几个不算难,得掌握,下面是比较难的,一般需要看好几次才能慢慢领悟(有时间推荐看《Java并发编程艺术对应的章节》)

从ReentrantLock的实现看AQS的原理及应用

Java并发包中最重要的几个同步类

神奇的ThreadLocal

一个故事讲明白线程的私家领地:ThreadLocal

4.2 Java多线程进阶版提问方式

1、synchronized关键字的底层实现

2、synchronized和ReentrantLock区别

3、ReentrantLock底层实现?平时怎么使用的?

4、说说可重入锁、为什么需要可重入锁?

5、ReentrantLock的实现原理?

6、ReentrantLock是怎么实现的,讲到AQS,顺便说了AQS

7、还有哪些基于AQS的同步工具

8、threadlocal是干嘛的?

9、threadLocal介绍,key是什么

10、ThreadLocal的key是哪种引用类型?为啥这么设计?

11、ThreadLocal怎么防止内存泄漏

12、那个CountDownLatch你知道吗?说一下信号量

13、一个轻量级锁怎么变成一个重量级锁的呢?

14、锁升级过程

15、自旋锁会消耗cpu吗,为啥

16、Java 中的锁,乐观锁悲观锁

17、如何实现乐观锁

18、问题一、既然CAS包含了Compare和Swap两个操作,它又如何保证原子性呢?

19、CAS是由CPU支持的原子操作,其原子性是在硬件层面进行保证的。

20、问题二、CAS有哪些缺点?

21、lock底层实现

22、synchronized底层 ,和lock比选用什么锁好?(这里答的是syn,因为1.7后面做了很多的优化,适应自旋锁,锁粗化,锁消除等………)

23、手写多线程生产者消费者(阻塞队列实现、信号量实现)

5.1 线程池知识点总结

1、线程池的优缺点

2、线程池常见参数

3、线程池的大致执行逻辑

4、几种常见的线程池工具类

5、线程池满之后的拒绝策略

6、线程池的两种关闭方式

这个的话,除非你项目用过,否则其实也不用掌握很深入,可以看这篇文章:

图解 | 你管这破玩意叫线程池?

更加详细的,可以看《Java并发编程艺术》对应的章节

5.2 线程池提问方式

1、线程池原理,有什么常用参数?

2、为什么要使用线程池

3、线程池运行中,突然电脑关机了,内存数据都会丢失,开机后怎么办?

4、线程池实际应用及如何设计参数

5、运行的时候,核心线程数能不能修改?(可以修改)

6、核心线程数与最大线程数之间的关系?

7、了解Java的线程池吗?里面有一个ForkJoinPool,有没有用过?说一下

8、ForkJoinPool和其他的线程池有什么不一样的地方吗?比如用到了哪些算法

9、线程池哪几种?分别说一下

10、一个任务进来后,线程池是怎么处理的?

11、线程池的拒绝策略有哪几种?

12、内存池使用过吗

6.1 其他知识总结

1、BIO + NIO + AIO + IO多路复用 + epoll + poll + select

2、零拷贝技术

3、Java8新特性(主要是lambda)

4、反射应用场景(一般反射是结合框架之类的来问)

5、动态代理

一般掌握 1 就可以了,2~4考的少,看这些文章即可:

【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

你管这破玩意叫 IO 多路复用?

还不懂 select, epoll 吗?

什么是Zero-Copy?

Java8的新特性与案例解析(要是问起来,简单介绍几个即可)

6.2 其他知识提问方式

1、BIO和NIO区别

2、I/O多路复用讲一下,epoll优势在哪,为什么,epoll水平触发与边缘触发

3、select和epoll区别知道嘛,它们算同步还是异步io,同步异步区别在哪里

4、反射原理

5、动态代理两种实现方式

6、java8里面新出了一些时间的类,比如比如LocalDate,与Date、 Calendar等其他时间类有什么区别?

7、java你用过的jdk版本,jdk1.8,你知道jdk1.8相较于1.7有什么新特性吗,我说我只知道一些类的底层实现不一样了,lambda表达式你知道吗(随便说了下),stream了解过吗。。。这个不知道

8、在java中如果要申请一块连续的空间,但是没有申请到,怎么办

9、Lambda 表达式解决了什么问题?临时的什么对象?为什么创建了这个对象就可以解决问题?这个对象有什么特点?如果没有 Lambda 你怎么做呢?Lambda 写的那个表达式是干什么用的?Lambda 表达式真正的好处在哪?

2、JVM考点分析与总结


JVM 的考察,不算特别多,感觉和操作系统,redis 这些差不多一样,虽然 JVM 也是属于 Java 的一部分,不过被我拆分出来了。

下面我先给大家分析一下 JVM 各个知识点的考点以及大公司和小公司在 JVM 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点分布

我这里在统计的时候,把 JVM 分成了垃圾回收其他两个部分,我发现问垃圾回收,占据了 60%~70%,并且垃圾回收器基本都是问 CMS 和 G1 这两个回收器,而像其他的知识,就问的很少,剩下的就是问问内存空间分布啊,类加载啊,也都是一些比较简单的知识。

总的来说就是,学习 JVM 时,会觉得很难,但是真正会问的东西,其实不难,很多需要记忆

二、大公司与小公司提问区别

这个的话,大小公司都会提问,具体区别,这个我倒没有太详细去区分,就是没有特别明显感受到吧,唯一有感觉的就是小公司不会问的很细,比如你讲了 G1 算法,小公司可能不会去延伸问很多东西。

另外就是,无论是大公司还是小公司,我觉得 JVM 这块就问的比较简单,更加偏向记忆型

三、超详细考点总结(按照出现频率排序)

1.1 垃圾回收考点总结

1、掌握几种垃圾回收算法(标记-清除、标记-复制、标记-整理)(JVM中有哪些垃圾回收算法,每个算法各自的优劣?

2、知道如何判断一个对象是否死亡(引用计数 + 可达性分析)(垃圾回收之标记算法

3、知道哪些可以作为 GCROOT

4、掌握几种常见垃圾回收器(重点是 CMS + G1)

5、掌握老年代 GC 与年轻代 GC,比如什么时候会发生

6、了解一两个工具,比如 jstack

7、掌握一些 GC 的配置参数

训练营对应章节资料

直接看这个专栏吧,其实很短:0. 图解JVM学习指南

因为我复制了一下对应文章,感觉复制了一堆,不如直接自己看着专栏找了。

1.2 垃圾回收提问方式

1、常用的垃圾回收器有哪些?

2、CMS垃圾回收器介绍

3、知道 G1、CMS 吗(不知道,但是知道GC的3种回收算法:标记-清除、标记-复制、标记-整理

4、CMS什么时候会STW?为什么要STW?

5、如何判断对象死亡

6、垃圾回收中的三色标记法

7、yong GC 的发生时间?发生频繁,发生时间长的原因和解决方案?

8、CMS的过程?怎么标记垃圾的?三色标记法?G1的区别?

9、什么情况下老年代会发生GC?

10、可达性分析

11、判断gcroots的原则是什么

12、哪些可以作为GCROOT(这里太久没看了,没答全)

13、垃圾回收会发生在哪几个区域?

14、说一下垃圾回收?如果GC突然很慢怎么排查,比如原来GC完成只需要1秒,现在要5秒?了解哪些gc相关的工具,比如jstack之类的

15、假设HashMap里面存放100万个对象,那么gc可能会有什么问题?

2.1 其他考点总结

1、JVM 内存空间分布(能够举例子)(JVM中有哪些内存区域?

2、JVM 进程与线程模型

3、JAVA类加载过程

4、能够说出几个常见的类加载器

5、栈和堆的区别,以及什么时候会栈溢出、堆内存溢出

6、知道常量池

7、双亲委派原则

8、了解对象头的一些属性

2.2 其他收提问方式

1、能说一下JVM的模型吗?

2、JVM内存空间分布

3、jvm中那些结构是线程独有和共有的

4、JAVA类加载过程(加载(类加载器问题) 验证 准备 解析 初始化)

5、双亲委派原则

6、类加载器有哪些?

7、怎么打破双亲委派模型?(面试的时候答了不会)(面试官告诉我说Tomcat有)

8、堆是唯⼀可分配对象的地⽅?栈中的对象和堆中的对象内存分布有啥区别

9、为什么 Java 对象占⽤的内存⼤⼩是 8 的整数倍

10、对象头、markword

11、类加载器、类加载机制、准备和初始化在干什么

12、Java为什么被称为平台无关性语言?

13、什么会导致栈溢出、堆内存溢出?

14、怎么排查堆溢出

15、对象在哪个区?

16、Class文件在哪个地方存?

3、MySQL考点分析与总结


我发现在 mysql 问的是真的多,比 redis 这些多太多了,不过问的内容比较集中,可以说,在所有的八股文中, mysql 和 计算机网络 和 Java 语言,这三者可以说是占据了绝大部分,也是所有八股文中,占比最多的三门知识

下面我先给大家分析一下 mysql 各个知识点的考点以及大公司和小公司在 mysql 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点比例分布

我在统计的时候,分成了多个个模块:索引 + 事务 + 锁 + 分库分表 + 其他。总的来说就是,索引和事务考的非常多,这两个占据了 80% 吧,然后索引会比事务多一点点,但是我觉得事务考的更难,其他的话,就是 锁 》其他〉分库分表。除了索引和事务考的比较多样性,其他的还是考的比较单调,主要索引和事务涉及比较多,特别是索引,种类多也多。

所以我觉得,如果要把握好索引,必须要知道原理,死死咬住原理,你才能能说会道,并且不需要去记忆。而要掌握事务,则需要理解,对事务的理解比较重要。

二、大公司与小公司

看了很多份面经,小公司的考察比较简单,问的比较常规,不会问一连串,比如问你索引的创建方式,或者问你索引的底层原理,但并不会问你 B+ 树与 B 树的比较。并且还会让你写一写 sql 语句,证明你是可以干活的。

总的来说就是,小公司对原理的考察比较简单,但是会考查细节,注重实用性,不会给你上升到很难的理论上,对于这些nion /union all 的区别

union和join区别这些实用性的要注意,小公司考察也比较多。

三、超详细考点总结(按照出现频率排序)

1.1 索引知识点总结

1、索引底层结构:选 B+ 树的原因,主要和哈希表,红黑树,B树对比一下。(另外 LSM 树也了解下,也有问到)

2、理解索引的种类(有些其实是同一种索引,但名字不一样):主键索引,非主键索引

3、理解索引下推,覆盖索引,并且可以举例子

4、掌握常见索引失效的情况。

5、创建索引的几种方式

6、掌握下 B 树和 B+ 树存储结构的不同就可以了,B+ 树怎么分裂的也了解下

7、另外还要区分下 innodb 和memory以及MyISAM 不同引擎下索引的不同(简单了解即可)

8、可以研究下,如果给你一个表,在什么情况下你会加索引,自己思考一套逻辑,有时候会问

9、复合索引的使用场景

10、自增ID也了解一下,就是在数据量大的时候,怎么生成 ID 好。

1.2 索引提问方式

1、什么是索引?

2、为什么索引会加快查询的速度?

3、mysql索引的底层实现?

4、为什么数据库索引用B+树,而不用list、map、二叉树或红黑树?

5、为什么不用B树?主要原因是什么?B+ 树,B 树的区别?

6、B+树的数据结构 ,B+树是怎么分裂的

7、索引的分类有哪些

8、加了索引一定会走索引吗?索引失效的情况有哪些?

9、如果我想要强制走某个索引,能实现吗

10、讲一下索引及其底层,非叶子节点存储的是什么,只有b+树索引吗?(MEMORY是hash索引)

11、讲一下Mysql聚集索引与非聚集索引,主键索引使用int与string有啥区别,你刚才说了索引底层b+树的结构,那么使用String会不会影响到这个结构

12、innodb中主键索引和非主键索引都是聚簇索引吗

13、给字段加索引最好怎么加?

14、什么情况下使用复合索引更好?

15、能说说复合索引编程需要注意的点吗

16、为什么使用模糊匹配会失效,你能给我解释一下底层原理吗?(???????)

17、为什么要⽤⾃增的主键?

18、用户id怎么生成?(DB自增不可靠,因为可能有多个机器共用一个DB,自增会溢出。从代码层面解释如何生成)?

19、索引下推是什么?

20、覆盖索引是什么?

21、联合索引,联合索引列(如 where a=,b=,c=)如何确定是 a b c 的顺序

22、组合索引+ like 会不会导致索引失效

23、mysql怎么创建索引

24、数据库优化了解哪些

25、从联合索引出发,要求画出联合索引B+树索引图

26、场景题:一个时间段、年龄 > 50 怎么建立索引

27、有1亿数据,走主键索引,mysql底层 IO次数是多少?

28、高并发的时候,请求量非常大,同时更新数据库的一条数据,这时候应该怎么处理?

2.1 事务知识点总结

1、理解为啥需要事务,以及事务的四大特性(最好能够举例子)

2、MVCC(问的很多)

3、掌握几种常见的隔离级别(主要是可重复读,另外一个就是读提交),并且最好掌握下可重复读的实现原理

4、理解幻读 + 如何解决幻读,最好可以举例子。

5、掌握日志(undo log 和 redo log) 在事务中的作用(事务的实现就是基于这些)

6、binlog和redolog的区别

7、理解两阶段提交,比如为什么需要两阶段提交

2.2 事务提问方式

1、事务隔离了解吗,什么是事务

2、mysql隔离级别有哪些啊,各有什么问题呢

3、不同的隔离级别解决了哪些问题?

4、Mysql了解吗,讲一下事务,那 mysql 是如何保证ACID的呢(答了undo-log,redo-log,加锁,mvcc),那讲一下MVCC

5、Mysql 怎么保证原子性的?(undo log)

6、Mysql 怎么保证持久性的?(redo log),Q:采用redo log的好处?

7、Mysql 怎么保证隔离性的?(锁 和 MVCC 机制)

8、快照读在提交读和可重复读级别下有什么区别?

9、在读提交(RC),可重复读(RR)两个不同的事务的隔离级别下,快照读有什么不同呢?

10、MySQL中为什么要有事务回滚机制?事务回滚的实现

11、幻读举个例子

12、innodb如何解决幻读

13、可重复读有没有解决这个幻读的问题?

14、可重复读是怎么实现的呢?

15、说说binlog和redolog,redolog两阶段提交的过程?

16、cap中的c和acid中的c有区别吗

17、从mysql事务出发,要求画出RC和RR隔离级别下的MVCC

18、从mysql update语句出发, 要求说出binlog 与 redolog一致性问题

19、undolog在宕机时怎么保证原子性

3.1 锁知识总结

1、理解 mysql 里面的乐观锁和悲观锁

2、锁的种类(虽然有很多中,但是记住常见的四五种就差不多了),说的时候最好举例子

3、记住行锁 锁的是索引

相关资料:

6. 全局锁和表锁🌟🌟🌟🌟

7. 行锁功过:怎么减少行锁对性能的影响?

21. 为什么我只改一行的语句,锁这么多?

30. 答疑文章(二):用动态的观点看加锁

3.2 锁 的提问方式

1、mysql有哪些锁?

2、mysql里面的乐观锁和悲观锁熟悉吗

3、mysql是怎么实现乐观锁和悲观锁的?

4、那你了解哪些在SQL语句中可以用的悲观锁?

5、select for update是表锁还是行锁?

6、mysql怎么处理并发访问呢

7、间隙锁的原理?什么时候会加间隙锁?

4.1 其他知识总结

1、一条sql执行的很慢的原因有哪 些

2、掌握 explain 的用法,用来干嘛

3、理解慢查询

4、了解下 inner join, left join, right join 的区别,以及 union 和 join 的区别 + union 和 union all 的区别。

5、视图,游标的概念

6、sql 注入问题

15. 什么是 SQL 注入攻击?

7、数据库三范式

4.2 其他的提问方式

1、mysql的存储引擎了解的有哪些

2、数据库引擎InnoDB与MyISAM的区别

3、看了用了数据库啊,那里觉得数据库有几种啊,mysql和redis比优势劣势呢

4、inner join,left join,right join区别

5、union /union all 的区别

6、union和join区别

7、听说过视图吗?那游标呢?

8、sql优化,说说explain需要关注哪些参数?

9、Explain进行查询性能优化,需要关注哪些字段?

10、慢查询

11、有一条mysql查询很慢,你有什么优化手段,请讲一下

12、mybatis sql语句里写 #和?的区别?

13、SQL注入,mybaits怎么防止SQL注入?

14、SQL语言四大类别

15、数据库三范式

16、雪花算法生成id,为什么不用数据库自增

17、场景题:所在的公司选择MySQL数据库作数据存储,一天五万条以上的增量,预计运维三年,你有哪些优化手段?

5.1 主从/分库分表的知识总结

1、理解为啥需要分库分表

2、垂直分表和水平分表的概念

3、主从的难点在于同步、更新

对应资料:

1. 体验一波分库分表连环炮

2. 聊一聊你们公司是如何玩分库分表

3. 你们当时是如何把系统不停机迁移到分库分表的?

4. 那如何设计可以动态扩容缩容的分库分表方案?

5. 分库分表之后全局id咋生成

6. 说说MySQL读写分离的原理?主从同步延时咋解决?

关于从主这块,我觉得直接看问啥比较好吧

5.2 主从/分库分表等

1、垂直分表和水平分表

2、mysql主从架构

3、mysql双主架构在不分表的情况下保证数据一致性

4、如何避免mysql双主架构出现会循环的数据更新

5、回答:使用一个标志位,来标记请求的来源,如果是来自用户则执行后广播至其他主节点,如果来自其他主节点则执行。

4、redis考点分析与总结


Redis 主要还是会结合项目来考察,比如你项目用到了 Redis,那么就会问你 Redis 相关面试题,比重的话,我感觉和操作系统的比重差不多,大小公司都会考察。

下面我先给大家分析一下 Redis 各个知识点的考点以及大公司和小公司在操作系统上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点比例分布

我这里把 Redis 也是分成两个模块,一个是 Redis 基础知识,一个是 Redis 处理大数据的,比如主从,集群,分布式这些,之所以要这样来分,主要是因为对于后者,如果你不懂,可以直接说不懂,但是对于前者,如果不懂,那就说不过去了,除非简历上没有写过。

总的来说就是,基础 : 高级 = 3 :1,大部分还是问基础,一般都是聊着聊着才问你分布式,集群等相关。所以我们学习的时候,是优先把基础掌握了,再去试着学习分布式,集群的一些理论,其实问来问去也就是问那几个。

二、小公司与大公司的提问区别

总的来说就是,小公司更加偏向实用性,而大公司会问理论性,比方说问你有哪些数据结构,你说了之后,可能小公司就会问你在项目中用过哪些,而很少会问你 zset 的底层原理,但是大公司则会问你 zset 的底层原理,然后问你跳表各种相关的。

也就是说,小公司问的时候,可能会具体一些,主要试探你用过没有,会不会用,而不会从一个简单的点,上升到各种分布式,集群之类的。

三、超详细考点总结(按照出现频率排序)

Redis 基础知识需要掌握的点(按照出现频率排序)

1、redis 五种常见数据结构的特点以及应用场景

2、zset 的底层数据结构 + 掌握跳表的原理

3、redis 的过期删除策略

4、理解缓存穿透 + 缓存雪崩,以及掌握他们的解决方式。

5、掌握布隆过滤器的基本原理

6、redis两种持久化方式以及他们的区别 + redis 默认用的是哪种持久化方式

7、redis 之所以快的原理

8、掌握哈希这种数据结构的扩容原理 + 渐进式 rehash

9、redis事务(简单了解,主要redis的事务还mysql有点不一样)

Redis 基础知识提问方式

1、redis几种常见的结构?(string list hash set zset)

2、zset底层数据结构

3、实际项目中用到了redis哪些数据结构 用list做了什么

4、说一说跳表的具体结构?时间复杂度?

5、Redis除了常用的数据结构外,还熟悉其他的数据结构吗?

6、redis的过期策略?(定时、定期、惰性)

7、redis的缓存穿透?有什么解决办法吗(返回空对象、布隆过滤器)

8、怎么防止缓存击穿的问题?

9、缓存穿透, 缓存击穿, 缓存雪崩基本概念及解决方案。

10、说一说布隆过滤器,布隆过滤器的原理是什么?它的优点是什么?缺陷是什么?

11、redis怎么实现持久化?持久化能保证不丢失数据吗?

12、redis的默认持久化方式

13、RDB fork的子进程干了啥

14、Aof重写Fork的子进程在干嘛Redis为啥快

15、说说redis架构(单线程,io多路复用)

16、对Redis了解多吗?你觉得Redis最核心的功能是什么?

17、Redis存储地图的数据结构,即GEO(地理位置)数据类型,有什么特点呢?有没有用过

18、如果设置热点数据永不过期会出现什么后果

19、说一说哈希的动态扩容

Redis 高级部分知识需要掌握的点(按照出现频率排序)

1、缓存和数据库一致性问题:为啥会出现以及常见的解决方式(上面有给了对应的文章)

2、redis 实现一个分布式锁以及用 redis 的缺点

3、redis 集群的几个理论:哨兵选举/master 选举原理

4、用redis来统一存放 session,实现单点登录问题

Redis 高级部分知识提问方式

1、缓存和数据库怎么保证一致性

2、redis为什么能实现分布式锁?用伪代码实现一个分布式锁

3、除了redis能实现还有其他实现方式吗

4、redis哨兵集群相关问题(怎么主从同步,怎么哨兵选举, 怎么master选举)

5、Redis的集群模式,选举和脑裂

5、计算机网络考点分析与总结


我发现在计算机网络问的是真的多,比操作系统多太多了,而且问的范围也很大,可以说,在所有的八股文中,计算机网络 和 mysql 和 Java 语言,这三者可以说是同样多的,也是所有八股文中,占比最多的三门知识

下面我先给大家分析一下计算机网络 各个知识点的考点以及大公司和小公司在计算机网络 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的(同一个问题有多种提问方式,我也都列出来了)

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点比例分布

我在统计的时候,把知识划分为应用层 + 传输层 + 网络安全 + 其他四个模块,大概 85% 的考点都在应用层 + 传输层,并且应用层和传输层出现的比例差不多一样,15% 在网络安全相,网络层和链路层,基本很少问,所以我们在复习的时候,是优先复习下应用层 + 传输层,其他网络层,链路层充当加深理解吧,就是把知识点了解下,然后掌握几道可能问题的题就差不多了。

二、大公司与小公司

看了很多份面经,小公司基本不考,像一些银行/金融之类的,倒是会问一些,不过问的比较简单,不痛不痒的,比如让你讲一下三次握手,或者问一下 tcp 和 udp 的区别。

总的来说就是,主 C++/Go 的大公司,这块问的最多,而且有些问的很细,可能会连续追问啥的。

三、超详细考点总结(按照出现频率排序)

下面我分模块,按照需要掌握的知识点以及面试官的提问方式来总结,并且会把相对高频的考点放在上面

1.1 应用层需要掌握的知识点(按照出现频率排序)

1、http:

  • http和https的区别,
  • http 常见请求方法(get和post的区别) + http 报文包含的一些属性 + http 常见状态码的含义(3xx额外关注下)
  • http 长连接,开启/关闭
  • http 存在哪些问题
  • 1.0,1.1,2.0,3.0版本区别

2、https:

  • Https 的加密过程(对称/非对称加密 + 摘要 + 数字证书)
  • 理解数字证书的用处
  • https的缺点

3、掌握 DNS 的解析过程 + 用到的协议

4、浏览器输入一个 url 的解析过程

5、理解 arp以及大致的原理 + 存在的安全隐患

6、ping协议的原理 也看下(ping协议不算应用层)

1.2 应用层的提问方式(安排出现频率排序)

1、讲一下https和http的区别

2、http和https的区别?https的加密过程?

3、https加密的机制了解过吗?

4、https为什么是安全的

5、Https连接流程

PS:2,3,4,5这几道可以说都是一道题

6、说说http请求报文包含什么?(追问:Content-Length知道吗?如果Content-Length的长度 大于报文的实际长度,分析下会有什么问题? )

7、Http的请求报文和响应报文各有哪几部分组成

8、HTTP1.0,1.1,2.0,3.0

9、打开一个网页 使用到了哪些其他协议?

10、上来先是 url 解析过程,然后引出了下面一堆问题:

11、涉及到dns的解析过程,如何进行解析的

12、http方法了解哪些

(1) 为什么要有这些不同的方法,post get 不就可以实现了吗
(2) get post 区别是什么

13、数字证书是什么?数字证书包含什么?

14、http,请求头,状态码?

15、http状态码有哪些(1xx-5xx),那讲一下301与302的区别?

16、499和502出现的原因是什么?

17、讲一下dns过程。给一个网址www.google.com,dns服务器如何逐级解析的?

18、DNS解析在网络不好的情况下怎么办

19、DNS解析请求的服务器单机并且响应速度慢怎么办

20、需要ARP解析的原因

21、说一下arp协议,arp协议有什么安全隐患?

22、HTTP如何保持长链接

23、ttp 协议和TCP协议的关系是什么

24、Http TCP 都有保活 keep-alive 机制 两者有什么区别

25、https中传输会经过网关,为什么网关不能知道他们的密钥

2.1 传输层需要掌握的知识点(按照出现频率排序)

1、三次握手

  • 握手流程(包括状态码的变化)以及为啥需要三次

  • 三次握手过程是否可以携带数据

  • seq可以从0开始吗?

2、四次挥手(可以问的问题比三次挥手多的多)

  • 握手流程(包括状态码的变化)以及为啥需要四次

  • Time-wait 和 close-wait 状态码

  • Time-wait 过多应该如何处理

  • 为什么需要等到 2ML

3、TCP与UDP

  • 理解为啥 TCP 是可靠的,采用了什么方法
  • 掌握流量控制和拥塞控制的原理和区别
  • TCP和UDP的区别以及应用场景
  • 如何实现一个可靠的 UDP
  • TCP拆包粘包问题
  • qq登陆/视频会议这些用到了哪些协议
  • 套接字socket

2.2 传输层的提问方式(安排出现频率排序)

TCP的三次握手和四次挥手是重灾区:

1、讲一下四次握手流程,为什么需要四次握手?

2、讲一下tcp四次挥手,time-wait干嘛的,close-wait干嘛的,在哪一个阶段?

3、状态CLOSE_WAIT在什么时候转换成下一个状态呢?

4、我们看到CLOSE_WAIT出现在什么时候呢?

5、为什么要等 2MSL

6、服务端主动发起关闭还是客户端主动发起关闭TCP?(答了客户端,面试官不满意)

7、讲一下三次挥手,为什么是三次?两次不可以吗?

8、三次握手连接阶段,最后一次ACK包丢失,会发生什么?

9、第三次握手是否可携带数据

10、tcp和udp有什么区别?分别应用于哪些场景?

11、TCP协议如何保证可靠性

12、tcp如何保证有序

13、tcp如何保证不会接受重复的报文

14、Tcp粘包拆包问题?

15、TCP拥塞控制与流量控制区别?

16、现在我们视频面试用到哪些协议(DNS,HTTP,HTTPS,TCP,UDP),UDP用在哪里?

17、一台主机可以有多少个端口? (答:65535 ,这个值是可以修改的),为什么会有端口号的限制呢?与哪些因素有关

18、套接字的组成

19、假设一个服务器支持10万个客户端同时进行tcp连接,但是同一时刻,只有二三百的客户端传输数据,属于活跃连接,如何能快速查询哪些是活跃连接呢?

2、用什么数据结构,相当于让你设计一个服务器端的小程序,如何实现?

3.1 其他

1、对称加密和非对称加密,以及常见的加密算法

2、理解什么是sql注入攻击 + xss攻击 + cors 攻击

3、理解以太网协议

4、计算机网络四层模型,五层模型和七层模型都了解下

5、

3.2 其他(安全+其他几层划分在一起)

1、讲一下五层⽹络模型

2、xss攻击、cors攻击原理?

3、讲一下你了解的对称加密算法和非对称加密算法(DES,AES,RSA),非对称加密如何保证它的安全性?

4、数据链路层的作⽤

5、主机A与主机B数据链路层通信的过程

6、一个MTU最大是1500字节,那么最多包含多少的数据(ip头部字节大小为20~60,最多数据即1500-20=1480)

6、操作系统考点分析与总结


我发现在计算机网络和操作系统这两门基础课程的考察中,操作系统问的还是相对比较少,并且问的花样也不多,就那几个问题,总的来说就是比计算机网络少很多,当然,这并不影响我们依然得把操作系统作为重点来学习。

下面我先给大家分析一下操作系统各个知识点的考点以及大公司和小公司在操作系统上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了,并且你后面就围绕这个技术图谱来复习就行。

一、考点比例分布

我在统计的时候,把操作系统分成了进程与线程以及其他两个模块来统计(一般进程和线程会同时出现),统计下来的结果差不多是 1:1 ,也就是说,对于操作系统这门知识,进程和线程 占了一半的考点,并且问的都不难。

二、大公司与小公司

看了很多份面经,小公司基本不考,即使有问你进程和线程的区别,也是问 Java进程和 Java 线程,其实这算是属于 JVM 的东西,JVM 会 Java 线程与进程内存共享的玩意。

所以呢,如果是面试小公司的话,简单了解下就行,主要是了解下可以加深你对某些东西的理解。大公司的会,有时候没问,有时候问的时候,会一连串追着问。

下面我把进程与线程当作一个模块来总结,其他的知识当作一个模块来总结

三、超详细考点总结(按照出现频率排序)

1.1 进程与线程知识点总结

1、掌握进程的几种通信方式 + 线程的几种通信方式 + 进程与线程的区别 + 他们各自的使用场景。

2、掌握进程常见的几种调度算法

3、明白什么时候会发生线程切换,理解什么是上下文切换,切换时大致会保存哪些数据(记住几个核心的就可以了)。

4、掌握进程和线程的内部有哪些属性,记住几个常见的就可以了,比如寄存器是吧,又比如他们的状态啊,ID 啊,是吧,都是他们的属性,最后可以不用记忆,自己推导。

5、还要了解下协程,进程,线程,协程他们之间的区别。

6、理解什么是僵尸进程,怎么产生的,以及如何解决。

一般大部分问来问去就这些,有些太散的其实也不好总结,所以你们等下就看下面是怎么问的就行。

1.2 进程与线程提问方式

1、进程间的通信方式 –> 线程呢(???答了线程会共享进程全局变量),另外的问发:为什么要设计进程间通信这么多种方式?

AB共享内存通信,A new一块内存与B通信,A异常退出,B还能访问那块内存吗 为什么

2、进程和线程的区别?–>多进程和多线程的区别?-> 多进程和多线程的应用场景(答不出来,面试官换了个角度提醒我为什么引入线程)–> 线程如何改善进程的并发性能–> 线程是不是越多越好?–> 为什么要上下文切换?

3、进程与线程区别,进程通信方式,说一下socket,socket在本机和在网络通信区别

4、多进程与多线程的区别以及使用场景?

5、说一下进程(任务)调度算法

6、进程的地址空间里面有什么?

7、线程切换要保存哪些上下文?

8、寄存器有哪些?

9、了解协程吗?

10、线程切换的时机?给线程分配时间片,操作系统怎么知道时间片用完了?线程切换 一定会引起内核态和用户态的切换吗?

11、单核情况下,多线程为什么会比单线程的情况下去使用情况会更好?(面试官提醒后,会了)

看了一堆面经,基本都是这样问,关于进程与线程的提问方式,比较单调,也不算难。

2.1 其他知识点总结

1、了解内核态和用户态的区别以及为啥要区分这样两种状态。

2、理解什么是内存分页,什么是内存分段

3、理解什么是虚拟内存,以及为啥需要用虚拟内存 + 虚拟内存与物理内存的区别

4、系统调用与库函数的区别

4、理解什么是中断 + 什么情况下会发生中断

6、死锁相关问题:其实这个的话,更多的会结合 Java 来问,包括乐观锁,悲观锁这些

7、掌握常见页面调度算法

2.2 其他知识点总结提问方式

1、为什么要设计内核态、用户态两种状态

2、用户态和内核态的区别

3、虚拟内存到物理内存的寻址方式

3、为什么需要引入虚拟内存?

4、讲一讲内存分页、分段

5、页表的作用

6、系统调用与库函数的区别

7、聊聊系统调用,记得具体命令吗?

8、操作系统怎么处理中断的?怎么判断是哪种类型的中断?

9、操作系统读写磁盘,影响磁盘读写时间的因素有哪些?

10、锁:乐观锁与悲观锁、典型锁、死锁相关问题

11、页面调度算法有哪些

12、知不知道公平调度算法

7、Java框架考点分析与总结


框架这部分问的还是比较少,大部分集中在 Spring,我们学习的时候,只需要针对性学就行,不需要看什么系统的教程。

下面我先给大家分析一下框架各个知识点的考点以及大公司和小公司在操作系统上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点比例分布

Spring 考察比其他的多的多,感觉其他几个(Springboot + SpringMVC + MyBatis )加起来都没有 Spring 多,所以我们在学的时候是重点学习 Spring 的

二、大公司与小公司

大公司基本只有 Spring,以及简单问你一下为啥要用 Springboot 之类的,而且问 Spring 时,大部分是问 AOP + IOC,以及问一下 bean 的执行流程,注解啥的,偏原理类,也会问下设计模式。大公司对 MyBatis 这些问的很少很少,而且在问的时候,不会问很具体。

小公司则不一样,问的比较具体,而且 Mybatis 问的也挺多的,主要的目的就是看看你对框架熟不熟悉 ,问的偏使用。

三、超详细考点总结(按照出现频率排序)

1.1 Spring与Spring Boot 知识点总结

1、Spring用到了哪些设计模式,需要记住几个

2、AOP + IOC 原理

3、Bean 生命周期

4、掌握几个常用注解

5、Spring事务管理

6、Spring 用到了哪些设计模式

7、Spring循环依赖问题

8、SpringMVC 的执行流程

9、Spring 与 SpringBoot 的区别。

10、我感觉具体还是看面试题吧

1.2 Spring与Spring Boot提问方式

1、aop的原理?

2、AOP底层通过什么机制来实现的

3、AOP主要用到的Java的哪些技术呢?

4、ioc aop 说说自己的看法?

5、spring aop的实现机制?动态代理的实现机制?

6、spring bean 中的生命周期

7、问一些spring的问题,常用注解

8、spring注入的几种方式;

9、spring 装配bean的方式有哪几种

10、bean加载步骤;

11、如何使用IOC

12、通常如何获取bean

13、bean 扫描路径

14、除了autowire其他获取bean的注解的方法

15、 autowire是按照什么规则来获取bean的?

16、自动配置怎么实现的;

17、Spring事务管理是怎么实现的?

18、反射知道吗 通过反射可以获取到一些什么东西

19、spring 哪里运用到了反射

20、spring如何解决循环依赖

21、spring mvc的使用流程

22、spring mvc这样做有什么好处(说了俩字,解藕 ,给面试官整笑了,似乎回答到了点又似乎没有)

23、spring mvc的基本结构和程序流程

24、spring mvc用过那些注解

25、spring 和 springboot的区别?

26、看过Spring的底层源码吗,说说你知道的

27、Spring boot的核心配置文件是什么

28、Spring Boot实现定时任务有哪些方式?

29、springboot使用那些设计模式(不知道)

30、Spring 内部具体有哪几种代理的方式呢

31、通过注解和xml 进行装配各有什么优缺点

2.1 MyBatis 知识点总结

直接看面试题吧

2.2 Mybatis提问方式

1、mybatis是停留在使用层面还是有更深的理解

2、mybatis #和$的区别

3、mybatis用过什么标签

4、mybatis 中如何传递多个参数

5、mybatis 中如何做分页

6、jdk 和 cglib的区别?

7、Mybatis如何防止SQL注入

8、为什么要使用mybatis,而不是jdbc

9、mybatis的mapper有哪些规则?(名字,返回类型)

19、mybatis的分页插件用过没?

8、项目通用问题


即使是从 1000+ 篇面经中,关于项目的问题也没多少,很多人在记录的时候,都是直接用项目两个字代替过去,很少记录细节,只有一部分人记录的细节,然后我也看到了很多通用问题,所以我也给记录下来了。

总的来说就是,有些知识 99% 是基于项目来提问,并且问的这些知识还是通用的,也就是说,你的项目也极可能被问到这些,所以大家可以看看。

并且在统计的时候,我分成了两种,一种是基于 MQ/Redis 等中间件来提问的,一种是基本每个项目都会存在的基础知识,另外就是,这里我就不严格区分他们的出现频率了,主要数据不那么多,其实不大好区分。

另外就是之前写过一篇如何梳理项目的文章:做项目时需要考虑的几个点

基础通用问题

1、介绍下项目?

2、项目中最大的难点?

3、有多少张表?有哪些表?

4、有哪些服务?

5、项目中token如何使用的

6、你会在token中存在用户的一些基本信息吗,如何存。

7、我说大部分数据还是存在session中,HR顺者问你会去清理session的数据吗?如何做的

8、session和cookie区别,解决了协议的什么问题?

9、Java项目打包成jar包和war包的区别,什么情况打成jar,什么情况打成war

10、你项目的登录功能,输入用户名和密码,用户提交登录请求到服务端,说说处理请求的详细过程,包括网络层面的。(tcp建立连接、断开连接的过程+业务处理请求的过程)

11、自己在项目实现了哪些

12、项目体量有多大(不是很懂怎么衡量项目体量,于是说了实体类有多少个,有多少张表)

13、知道哪些测试工具?

14、平时写代码是如何进行测试的?

基于中间件的通用问题

1、kafka用来干什么?

2、Kafka怎么保证消息可靠传输?

3、Kafka的结构,选举简单说下

4、kafka 如何保证消费者不会重复消费数据

5、offset自动提交还是消费完之后才提交offset

6、kafka有没有什么确认机制保证消息一定写入kafka集群当中

7、kafka最大处理数据能力 为什么能做到

8、mq的作用(异步、削峰、解耦)

9、kafka副本了解吗,讲一下

10、为什么不让一个partition被同组的多个consumer消费

11、为什么用 redis 用来保存验证码

12、保证幂等性的方案

13、幂等性怎么保证?

14、分布式锁怎么实现?

9、常见场景题与智力题


我这里在看大量的面试题的过程中,有时候会看到一些通用型场景题和智力题,发现有很多是一样的,所以这里也进行一下积累,并且和其他知识一样,也是按照频率来排序。

不过场景题还会更新了,一开始我没打算统计场景题 ,后面看到好几道一样的,就统计了一下

场景题提问方式

1、场景题:项目部署到Linux服务器后,cpu飙到100%了,怎么去排查

2、场景题:有1亿用户和1亿短视频,设计一个实时的日排行榜,展示top100个热门视频,热门视频的统计方法为统计视频的实时观看用户数,根据用户数排行。设计方案后还要求计算使用多少内存,没算出来,心态崩了。

3、设计题:设计论坛系统的评论功能。

4、场景提:3台机器怎么可以生成自增ID?

5、网络场景题:A向B发送123456 这6个报文,没有收到4,A和B分别会做什么?(考虑 超时重传与快速重传以及滑动窗口)

智力题提问方式

1、智力题:1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能在24小时后试出那瓶有毒。

2、智力题:一个岛上有三种颜色的兔子,假设是a(红色)、b(蓝色)、c(黄色),两两碰撞会变成第三种颜色,比如 a、b碰撞就会变成c,问:a、b、c满足什么样的数量关系,在经过足够长的时间后,才能使得岛上的兔子只有一种颜色。给6分钟时间思考。

3、8个人乒乓球比赛,A赢B,B赢C,可以默认A赢C。那么最少比赛多少次可以获得冠亚季军(当时没想出来,心态崩了。)

后面我看到在慢慢统计进来

10、项目通用复习框架


下面这篇说了在做项目时,你可以去思考的点。

现在大家应该也陆续做了项目,那关于如何做一个项目,其实一个项目中,有很多的东西,都不会在面试用上,有些人可能做了之后,也不知道自己学习了什么,下面我简单说一下,在我们做一个项目时,需要关注的点。

当然,也不用太关注,最好是一个项目做的差不多了,再来思考这些问题是最好的,后面你们做完一个项目之后,趁着还比较有印象,可以考虑如下一下通用的问题,这些问题有助于我们去捋清楚一个项目 + 面试官有时候为了验证这个项目是否是你做的,也会问你这些问题。

1、为什么要做这个项目?

自己可以找一个合理的理由吧,可以是用来学习,也可以是要参加比赛等等。

2、这个项目整体架构是什么样子的

事实上,很少人做完一个项目会去想整体架构这个事情,反正就那样吗,硬要问说,我也说不出来,不过呢,大家可以捋一捋,比如可以说这个项目由哪些模块组成的,这样你就把项目拆分成更小了,也可以先说一下这个项目涉及到的技术栈,然后说一说这些技术分别用来干嘛,比如你说用到了 redis,主要充当缓存。

3、项目的各个模块是怎么协同工作的?

每个模块应该分工明确,并且每个模糊也都是互补关系,可以想一想他们都是怎么协同工作的

4、表结构是怎么设计的?

这个问题还挺常问的,让你说一说表设计,一般你自己挑熟悉的例子说一说就好了,比如牛客网那个,你可以说一说 评论表 怎么设计的,其实问这个问题也是验证你自己是否做过项目 + 设计表的时候有没有思考过。

5、每个具体的技术,你用到了哪方面的功能,也就是涉及到的一些可能会问的八股文。

我之前说过,很多项目,背后还是问八股文,比如你 redis 用了 字符串 这种数据类型来当缓存,那么就会问缓存相关的,又比如你用了异步、多线程这些来加快响应速度,那么就会问你多线程相关,用了线程池,就会问你线程池,问了消息队列,就会问你消息队列。

所以呢,所有模块可能涉及到的操作系统、数据结构的知识,我们都要捋清楚,不过这是一个比较杂的事情了

6、自己基于项目,加一些自己的东西上去。

我相信大家都是跟着视频做的,如果有时间,做完自己加一些东西上去,相信你可以更加理解项目中各个模块是怎么交互的,而且你在写简历时,也可以强调这一点,问起来你也好回答。

7、为什么要用这个技术,有没有其他的可代替方案呢?

比如你说用 redis 来缓存 xxx,那面试官问你,不这样可以吗?或者说,除此之外,还有哪些方式呢?比如你消息队列选择了 kafka,那么面试官问你,用其他的消息队列可以吗?或者说不使用消息队列会产生什么影响。

当然,我只是举例子,思考这个问题,可以让你理解的更加深刻。

8、基于项目,如果流量大了,有哪些解决方案?

很多东西并不难,但是一旦流量大了,那么就完全不一样了,比如淘宝,比如微博某个明星出轨,比如知乎某个问题成为热榜,都会突然流量猛增。

虽然你是个小项目,但是面试官会因此来跟你谈大流量了,你可以怎么处理,所以你这个也要思考一下,比如加缓存啊,分布式啊,CDN啊,负载均衡啊,等等。

这部分的话,有点类似于场景题了

推荐读物

感觉有空可以看下这本书:大型网站技术核心原理与案例分析 李智慧(书签目录) 百度云下载 提取码:kgbj

11、HR面常见问题


关于 HR,其实问题基本都是那几十个,不过我还是简单做一下统计,毕竟到了 HR 面也非常不容易,还是得好好准备一下,以防问到自己一时之间不知道如何回答到问题。

之前也有写过几个 HR 的问题:主管面 + HR 面 + 自我介绍和反问环节

HR面提问方式

1、为啥不选择读研

2、 实习过程遇到了什么困难,怎么解决

3、人生遇到的最大的挑战是什么?怎么解决的

4 、有什么成就感的事吗

5 、你有什么优势

6 、怎么处理焦虑

7 、你对 本公司 有什么认识 如果来实习了能转正,秋招还会继续面其他公司吗

8、实习为什么没转正?

9、手里有哪些Offer?北京这么远家里没意见吧?

10、期望薪资

11、如何学习语言

12、有没有实习 为什么没有实习

13、实验室负责的事

14、带领师弟师妹做项目学到了什么经验

15、遇到的困难

16、向谁请教

17、未来的规划 行业 地区

18、学的是通信 考虑不考虑通信行业

19、如果你在工作中遇到这样的人你会怎么样?

20、如果你在工作中遇到了就算努力也解决不了的事情怎么办?

21、你觉得你能给公司带来多大的价值呢?

22、你觉得应聘Java工程师这个岗位的必备条件是什么?

23、跟小伙伴合作的时候出现过分歧吗?怎么解决

24、遇到压力大时怎么排解

25、团队协作时最大的困难是什么,怎么解决的

十二、数据结构与算法需要掌握的内容(2023.2.2更)


很多人学了算法 ,忽略了数据结构的一些特性,并且我发现不少人一些基本排序算法都不大清楚它们的特性,最近有几个训练营学员去面试,都在数据结构一些相对简单的问题上吃了亏,特别是快速排序,所以呢,这里简单总结一些数据结构一些注意的点以及需要掌握的点。

PS:下面贴的一些资料,是训练营的内容,非训练营用户,自己找资料哈。

排序算法需要掌握的内容

一般来说,排序算法大部分是问快速排序,有时候也会让你手写归并排序,冒泡有时候也会让你写,不过重灾区还是快速排序,一般需要掌握如下内容:

  • 快速排序:这个是重灾区了,重点中的重点,需要掌握如下

1、采用了什么样的算法思想(分治)

2、区分好最好最差平均时间复杂度,平时我们都采用平均复杂度

3、稳定性:注意,要会举例子证明你是懂稳定性的,而不是背诵的(同时要能掌握稳定性的运用,最好也是能够举例子,比如排行榜系统)

4、加分:看过 JDK 关于快速排序的源码,不需要很懂,但看过,了解大概,就很可以了

5、要会写,并且要熟练,不能出差错,自己记住对应的模版。

6、掌握优化的思路:比如随机数选择,一般问了优化,很大概率会问你有没有看过源码

7、掌握它为啥会比较快,以及使用场景,比如和归并排序对比,使用场景选择

总结:如果你不懂以上,说明你的快速排序掌握的不大行,请看训练营数据结构中关于快速排序的部分呢:

16. 玩转快速排序

17. 多路快速排序

  • 归并排序:这个其实问的也不多,一旦问了,往往会让你写,所以你会写就好了,当然也要掌握它使用了什么样的思想。
  • 冒泡排序:要会写,并且要知道优化版本的写法
  • 插入排序和希尔排序:这两个其实差不多的,希尔排序可以说是插入排序的优化,有可能会让你写希尔排序,但是总的来说,问的比较少,你要掌握它的思想。
  • 计数排序:问的不多,但是它是一个时间复杂度为O(n)的排序算法,所以需要了解一下。

排序算法,一般就这些了,如果你不大懂,那就从 算法与数据结构 挑选关于排序算法的部分去看吧。

二、数据结构部分

一般不会让你手写一个数据结构,一般就是问你一些理论,比如问你链表和数据的区别啊,并且很多时候,也不会单独问你这些,而是在问八股文的时候问你这些,因为很多八股文的底层都会涉及数据结构,比如索引,哈希表等等,下面强调一下需要掌握的:

1、数组与链表的区别:不难,但是你要理解他们的区别,最好是从**内存 **层面分析,因为他们的所有区别,都是因为存储结构的不同导致的。

2、掌握 队列 和 栈 道使用场景:总之你会举几个例子就好了,举例子就是最大的证明。

3、红黑树 和 AVL 树:很多人没学过,但是红黑树也是需要了解的,不需要会写,也不需要去记住那些乱七八糟的规则和特性,你需要掌握如下几个

  • 和 AVL 树对比,红黑树使用哪些场景,各自有缺点(比如 AVL 树查找更快,但是AVL太严格了,如果插入和删除操作频繁的话,红黑树性能更好)
  • 能够举一些例子,比如 HashMap 底层就有用到红黑树

一般会这些就可以了,没学过的,建议花点时间学习一下,看思路就可以了,不需要会写:

35. AVL树

36. 红黑树

4、哈希表:几个解决冲突的方案,另外你可以去了解一下影响哈希表效率的关键 因素,比如 hashcode 的生成,扩容时机。

总结

我也不列太多了,就说这几个比较常见且关键的,大家不懂的可以去掌握一下,当然,没时间的请先完成我说的内容,已经完成的,且要冲击好一点的公司的,再来了解这些。

发表评论

后才能评论