关于Java面试,我的学员都准备了那些面试题
为什么重写equals方法要重写hashcode方法 | √ |
final,finally和finalize区别 | √ |
重载和重写区别 | √ |
String,StringBuffer,StringBuilder区别 | √ |
equals方法和== | √ |
Object中的方法 | √ |
Java异常有哪些? | √ |
java中的泛型作用 | √ |
List的实现类 | √ |
ArrayList,Vector,LinkedList的底层实现,初始大小,是否线程安全,特性 | √ |
hashmap底层实现,是否可以存空值,初始话大小,put过程,如何扩容 | √ |
hashmap不安全的原因 说说bio nio和aio | √ |
JVM |
|
一次编译到处运行是如何实现的 | √ |
为什么jvm不直接把源码解析成机器码去执行 | √ |
类加载机制的生命周期 | √ |
Java的反射机制 | √ |
说说类加载器 | √ |
双亲委派机制,优点 | √ |
loadClass和forName区别 |
|
JVM内存模型 |
|
分别介绍程序计数器,方法区,本地方法栈,虚拟机栈,堆 |
|
元空间和永久的的区别 |
|
JVM调优参数-Xms,-Xmx,-Xss的含义 |
|
堆和栈的区别-内存分配策略等方面 |
|
对象被判定为垃圾的标准,判断算法 |
|
可作为GCROOt的对象 |
|
说说垃圾回收算法 |
|
对象如何晋升老年代 |
|
常用的调优参数XX:survivorRatio:eden和survivor的比值默认8:1 XX:newRatio 老年代和年轻代内存大小的比值 |
|
触发FullGC的条件 |
|
常用的垃圾收集器 |
|
强引用 软引用 弱引用 虚引用 |
|
JAVA多线程 |
|
线程和进程的区别 |
|
run和start的区别 |
|
如何实现处理线程的返回值 |
|
如何给run方法传参 |
|
线程的状态 |
|
sleep和wait的区别 |
|
中断线程的正确方式 |
|
线程状态间的转换 |
|
线程池的参数 |
|
实现线程的方式 |
|
submit和execute的区别 |
|
线程同步的方式 |
|
线程通信的方式 |
|
守护线程的作用 |
|
多线程会带来什么问题 |
|
说一下JMM |
|
happens-before原则 |
|
如何创建线程安全的单例 |
|
notify和notifyall的区别 |
|
主内存和工作内存的关系 |
|
volatile的作用,适用场景 |
|
单例和并发的关系 |
|
volatile和synchronized的异同 |
|
什么是死锁,产生的必要条件,怎么避免死锁 |
|
JUC |
|
线程池增加线程的规则 |
|
线程池线程数量怎么设定 |
|
停止线程池的正确方法 |
|
线程池的状态 |
|
线程池的拒绝策略 |
|
使用线程池的注意点 |
|
ThreadLoacl的作用,原理,get方法过程,应用场景,内存泄露问题,如何避免泄露,空指针异常的原因 |
|
为什么要lock锁,为什么synchronized不够 |
|
介绍下面:乐观锁和悲观锁 |
|
可重入锁和非可重入锁 |
|
自旋锁和阻塞锁 |
|
公平锁和非公平锁 |
|
共享锁和排他锁 |
|
可中断锁 |
|
lock的常用方法, |
|
说说ReentrantLock |
|
读写锁ReentrantReadWriteLock,的作用,规则,插队策略 |
|
琐优化 |
|
原子类的作用 |
|
普通变量升级成原子变量的原理 |
|
什么是CAS,应用场景,缺点,Unsafe类 |
|
final关键字和不变性的关系,final作用,final的用法, |
|
对象逸出,栈封闭 |
|
String中new和直接赋值的区别 |
|
对于String是否相等的问题 |
|
ConcurrentHashMap 的底层原理,put,get过程,初始化大小, 是否能存null |
|
CopyOnWriteArrayList 适用场景,实现原理,缺点 |
|
BlockingQueue介绍,方法,实现类 |
|
CountDownLatch和CyclicBarrier的介绍和区别,作用,方法 |
|
semaphore作用,方法 |
|
condition作用和方法,注意点 |
|
AQS,作用,内部原理解析,结合实现说明 |
|
Runnable的缺点 |
|
Callable和Future的关系 |
|
Future的方法,使用过程,注意点 |
|
Linux |
|
linux的体系结构分为 |
|
常用指令怎么用,find ,grep,管道操作符,awk,sed |
|
Redis |
|
为什么redis这么快 |
|
redis的基本数据类型,底层实现 |
|
如何从海量key查询出某一固定前缀的key |
|
如何实现分布式锁 |
|
redis如何做持久化 |
|
自动触发RDB的方式 |
|
redis BGSAVE的原理 |
|
AOF持久化过程 |
|
Redis数据恢复的过程 |
|
RDB和AOF的优缺点 |
|
redis全同步和增量同步的过程 |
|
redis哨兵机制 |
|
redis集群原理 |
|
Redis的穿透,击穿,雪崩问题,解决办法 |
|
数据库 |
|
一条SQL查询语句是如何执行的? |
|
一条SQL更新语句是如何执行的? |
|
事务的隔离级别 |
|
怎么解决幻读 |
|
怎么解决不可重复读 |
|
普通索引和唯一索引区别 |
|
索引失效场景 |
|
什么是联合索引 |
|
什么是覆盖索引 |
|
什么是最左匹配原则 |
|
说一下两阶段提交 |
|
什么是WAL机制 |
|
怎么让数据库恢复到任意时刻 |
|
先写redolog在写binlog 和先写binlog在写redolog会有什么问题 |
|
什么是redolog ,binlog undolog |
|
MVCC是怎么实现的? |
|
事务隔离是怎么实现的(可重复读) |
|
事务的启动方式 |
|
innodb为什么使用b+树 |
|
主键索引和普通索引区别 |
|
什么是索引下推 |
|
mysql的锁分为哪三类 |
|
全局锁命令 |
|
表锁命令 |
|
行锁命令 |
|
什么是两阶段锁 |
|
怎么减少锁冲突 |
|
mysql为什么会选错索引? |
|
怎么给字符串字段加索引 |
|
什么情况会导致数据库的flush |
|
为什么表数据删掉一半表文件大小不变? |
|
count的问题,count*慢应该怎么做 |
|
在两阶段提交的不同时刻,mysql异常重启会怎么办 |
|
order by 的执行流程 |
|
说说全字段排序和rowid排序 |
|
为什么只查询一行数据执行也很慢 |
|
加锁规则 |
|
innodb和myisam的区别 |
|
如何定位优化慢sql |
|
如何设计一个数据库 |
|
为什么要使用索引 |
|
索引的数据结构有哪些 |
|
什么样的数据可以成为索引 |
|
spring |
|
spring bean的生命周期 |
|
springboot的常用注解 |
|
spring di和aop |
|
autoware和resource的区别 |
|
sping的事务 |
|
bean的作用域 |
|
说一下springmvc的执行流程 |
|
分布式 |
|
说说单点登录 |
|
说说分布式会话 |
|
rabbitmq的常用模式 |
|
如何保证rabbitmq消息不丢失 提供可靠的confirm模式和return模式 |
|
幂等性怎么做 |
|
kafka的特点,高性能的原因 |
|
|
|
|
针对Java简历中项目的功能进行提问,大家可以在评论区中解答/讨论;同时提供八股文