写在前面:
先声明下,这个面试专题,主要是写给自己的,用来在挤公交的时候学习下,顺便做个分享。。。 我就是个小菜鸡。
Spring相关
- SpringMVC的工作原理
MVC一共可以分为3个部分:
Modle层:是内部数据模型;里面最关键的是manager,做业务的逻辑层
Controller层:请求的分发控制层;核心是service控制层:用来对业务进行编排,即将大业务拆分成细小粒度的小业务
View层:视图展示层,就是我们浏览器能够看到的页面,主要用于页面渲染
具体工作流程:
第1步:浏览器发送指定的请求都会交给DispatcherServlet。
第2步:DispatcherServlet会查找到HandleMapping,根据浏览器的请求找到对应的Controller,并将请求交给目标Controller
第3步:目标Controller处理完业务后,返回一个ModelAndView给DispatcherServlet
第4步:DispatcherServlet通过ViewResolver视图解析器找到对应的视图对象View
第5步:视图对象View负责渲染,并返回到浏览器
下面的链接讲解的很详细。
MVC工作原理
2. IOC和AOP的理解
IOC是控制反转,表面上可以理解为将生成和摧毁对象的权力,从程序员手中转交给了我Spring框架,利用了Java的反射机制,在java运行时,可以根据类名生成对象,调用对象的参数,方法等。
AOP是面向切面编程,它是用来处理对业务无关,但是却对多个对象产生影响的公共行为,将其封装为一个模块,例如常用的日志处理,单点登录,授权验证等模块。
还需要考察JDK的动态代理和CGLIB的动态代理的区别:最主要的是一个是接口,一个是类。
3. 常用的设计模式
4. Bean的作用域和生命周期(主要是生命周期)
5. 事务隔离级别
6. 事务传播行为
7. 在SpringBoot中使用过的注释
数据结构相关
- ArrayList和LinkedList的异同
- HashMap的底层实现(所有的HashMap都要考虑1.7和1.8)
- HashMap什么时候扩容,怎么扩容
- 长度为什么是2的幂次方
- HashMap中的链表为什么改成尾插
- ConcurrentHashMap的底层实现(1.7和1.8)
多线程
- 悲观锁和乐观锁
- synchronized和ReenTrantLock的区别
- volatile和synchronized的泣别
- 可重入锁和不可重入锁的区别
- 线程池的参数
- 线程池的类型
- synchronized的底层原理,JDK1.6后底层优化,和ReenTrantLock的对比
- AQS原理
- ReentrantLock的底层原理
JVM
- 内存区域
- 垃圾回收算法
- 垃圾收集器
- jvm内存管理
- jvm调优有没有用过
计算机网络相关
- Web请求页面的过程
- cookie、session和token
- TCP和UDP的区别
- TCP三次握手和四次挥手的过程和原因
- TCP如何实现可靠传输
- 常见的HTTP状态码
- HTTPS和HTTP的区别
- HTTP的首部都有什么
- get和post的区别
其他
其他的问题主要是根据简历上的项目和技能来提问的:例如我的会有雪花算法问题,redis,MySQL,还有简单的Linux和Git命令。手写LRU算法
其中Redis和MySQL是重点的,尤其是大厂特别喜欢考这个。
注: 这里的答案在未来的博客中会进行详细的说明。