导图社区 Java面试要点
想要面试Java开开发岗位的小伙伴速看!作者因本次疫情找工作面试了很多家,因而整理了一份面试会问到的一些要点,赶快收藏学起来吧!
编辑于2019-11-04 02:57:46java面试
Java基础
基本类型
集合
map
list
列表转制
列表去重
java中的list实现你有那些,各自的实现原理是什么?使用场景是什么
ArrayLIst 数组实现,查询快,增删慢,轻量级(线程不安全)
数组扩容策略
添加时将判断内部数据是否需要扩容 1. 获取最小要满足的大小 2.
LinkedLIst 双向循环列表,增删快,查询慢(线程不安全)
实现原理
1. 定义了Node节点,每个节点前后节点,构建为双向列表的节点
2. LinkedList 有三个全局变量,分别是 size first last 用于记录列表的长度和起始点级结束点
3. add方法 默认是向后添加,如果需要先前可以用addFirst
4. get方法,通过节点后移定位,大于size的时候会进行从头开始查询,应为LInkedList是双向循环列表,但因为前置做了 index的判断,也会出现数组下标越界的错误
作用
实现栈
实现队列
实现双向队列
Vector 数组实现,重量级(线程安全,使用少)
set
线程
线程之间的通讯
锁(lock+synchronized)
lock 和 synchronized 之间的区别
lock 有那些实现(JDK)
equals 与 == 的比较
Integer
equals 比较内容,== 智能比较 -128~127
String
equals 比较内容, == 比较地址值常量的是一样的,新建的地址不一样
对象
代理 动态 代理
树
平衡二叉树 如何快速打印
jvm
内存模型
虚拟机栈
Java方法执行的内存模型
每个方法执行时都会创建一个栈帧用于存储局部变量,操作栈,动态链接,方法出口等信息,
每个方法被调用的过程,对应一个栈帧在虚拟机栈中入栈到出栈的过程
局部变量表,在编译器已经确定起内存大小
本地方法栈
本地方法栈与虚拟机栈十分相似,其为 native 方法服务
程序计数器
方法区(永久代)
所有线程共享
常量池
1.7以后 hotspot 将运行时常量池从永久代移除
类加载信息
堆
堆中对象为所有线程共享,目的是存放对象实例。GC主要管理的就是堆,
垃圾回收
判断对象是否存活
引用计数法
可达性分析发
垃圾回收算法
标记-清除法
复制算法
标记-整理法
jvm采用分代收集算法,对不同的区域采用不同的算法
新生代 复制算法
老年代 标记清除/标记整理
垃圾收集器
年轻代收集器 Serial、ParNew、Parallel Scavenge
老年代收集器 Serial Old、Parallel Old、CMS收集器
特殊收集器 G1收集器[新型,不在年轻、老年代范畴内]
查看GC日志
类加载
问题定位
内存溢出
内存消耗过大如何查找
cpu消耗过大如何查找
数据库
mysql
基本类型
索引
事物
读未提交
读已提交
可重复读
串行化
innoDB引擎
实现了标准的4种隔离级别
提供了行级锁级外键约束
适用于处理大容量数据
子主题
sql优化
优化工具
java 链接数据库
架构
微服务架构
spring cloud
dubbo
分布式事物
框架
Spring
Spring boot
Spring MVC
Spring Cloud
IOC
AOP
事物
事物传递机制
默认是:使用当前事物 如果没有则新建(0 REQUIRED)
1 SUPPORTS 支持当前事物,如果没有则不使用事物
2 MANDATORY 支持当前事物,如果没有则报错
3 REQUIRED_NEW 新建一个事物,挂起当前事物
4 NOT_SUPPORTED 以无事物的方式进行,如果有事物则挂起当前事物
5 NEVER 以无事物的方式进行,如果有事物则报错
6 NESTED 如果有事物则在当前事物嵌套一个事物,内部事物的回滚不影响当前事物,如果没有事物则与 REQUIRED 一样 新建事物(当前事物会影响子事物)
事物隔离级别
DEFAULT 默认使用数据库的隔离级别 ORACLE(读已提交) mysql(可重复读)
READ_UNCOMITTED 读未提交(脏读)最低的隔离级别,一切皆有可能。
READ_COMMITED 读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。
REPEATABLE_READ 可重复读,解决不可重复读的隔离级别,但还是有幻读风险。
SERLALIZABLE 串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了
事物的作用
1. 保证 原子性、一致性、隔离性、持久性
事物的原理
其本质是基于数据库对事物的支持进行的操作,标记事物的地方会进行代理打开事物,完成后进行提交事物,spring的事物帮我们进行是事物的开启和事物的提交以及回滚的操作
spring bean的生命周期
参考链接:https://blog.csdn.net/w_linux/article/details/80086950
1. 实例化bean 通过构造方法,或工厂方法
2. 设置对象属性(setter)(依赖注入)
3. 如果实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。
4. 如果实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传人工厂自身
5. 将Bean实例传递给Bean的前置处理器的postProcessBeforeInitalization(Object name , String beanName)方法
6. 调用bean的初始化方法,
7. 将Bean的实例传递给Bean的后置处理器的postProcessAfterInitalization(Object bean,String beanName)方法
8. 使用bean
9. 容器关闭之前,调用bean的销毁方法
spring 自动装配
参考地址:https://www.cnblogs.com/leihuazhe/p/7743479.html
mybatis
dubbo
zookeeper
消息队列
原理
无阶队列
算法
排序
参考地址:https://www.cnblogs.com/Glory-D/p/7884525.html
冒泡排序
快速排序
选择排序
插入排序
希尔排序
归并排序
基数排序
堆排序
桶排序
查找
参考地址:https://www.cnblogs.com/lsqin/p/9342929.html
二分
顺序查找
插值查找
斐波那契查找
树表查找
二叉树查找
平衡二叉树之2-3查找
平衡二叉树之红黑树查找
B树和B+树查找
分块查找
哈希查找