自我介绍
Java中什么是不可变类,如何设计不可变类?
String是不可变的;
除了string还有哪些不可变类?
所有基本类型的包装类都是不可变类
不可变类:使用private修饰,不提供setter方法
Java中常用的集合?
ArrayList、Vector、LinkedList、HashSet、TreeMap、HashMap、HashTable、ConcurrentHashMap;分别解释各个类的数据结构和区别
LinkedBlockQueue的实现原理?
put和take实现原理?
入队和出队可以同时操作吗?可以。通过出队锁和入队锁实现
线程池几大核心参数?几大组件?
任务和线程池参数的阈值的关系?
线程池的常见的拒绝策略?
new一个线程池,核心线程数多大比较合适?,有没有调过?
io计算型和cpu计算型
volatile有哪些特性?
可见性、有序性
有序性如何保证? 内存屏障
单例模式的懒汉式,如何保证线程安全?
双重检测法如何使用
为什么使用volatile修饰单例对象?
禁止指令重排序找
为什么双重检测法中为什么有两个if?不要第二个if会怎么样?
RenntratLock如何实现?
state和aqs队列 node(线程名、头指针)
Node节点的状态?
公平锁和非公平锁是怎样?
非公平锁中;会进行cas操作,成功持有锁,没有成功,则过一段时间再去cas操作
RenntratLock提供的Condition释放的原理?
线程之间想要通信?
wait、notify(notifyAll)、join、countdownlatch、cyclibarrier
JVM相关:
JVM内存结构
线程私有:虚拟机栈、本地方法栈、程序计数器
线程共享:堆、元空间
元空间比较重要的区域:常量池
常量池的作用?
字符串常量池:String a = new String("a"); 创建几个对象?
参考:Java String字符串比较问题_秒怂_z-CSDN博客_java string 比较
使用常量池的方法:intern方法 和 显示赋值给一个变量
intern方法 在jdk1.7和jdk1.8中区别?
常量池中放一个字符串“a”的常量;在堆中创建一个对象;返回把引用返回。
String s1= "a"
String s2= "b"
String s3 = "ab"
String s4 = s1 + s2 ->相当于new String对象,append(a).append(b).toString()
String s5 = "a" + "b" ->编译时是做的常量池的拼接
s3 == s4 -> false
s3 == s5 -> true
垃圾回收算法?优缺点?
标记清除算法
复制算法
标记整理算法
垃圾回收工作的机制?
堆分为几个区域?年轻区、老年代
区域比例?
年轻代使用什么算法?
创建的对象首先放到哪个区域?什么时候会放入到老年代?什么时候触发垃圾回收?
晋升年龄默认最大是15
cms默认是多少?cms是老年代回收器和阈值没有关系;年轻代晋升到老年代,默认需要15次;
CMS使用场景和目标?
目标:减少stw
工作原理:初始标记、并发标记、重新标记、并发清理
有STW阶段:初始标记和重新标记
一次会把垃圾清空干净吗?在并发清理阶段会产生浮动垃圾,只能到下次进行清理
cms什么时候退化?
空间不足时,cms使用标记清除算法,会产生很多的碎片,如果老年代没有连续的内存空间,实际上4m放不下,此时触发一次gc,此时会触发失败,此时就会退化成单线程垃圾回收器,垃圾回收时间比较慢
mysql
msql中的索引数据结构
使用b+数
为什么不使用红黑树?
因为红黑数需要平衡、红黑数子节点只有两个节点,深度变深后会进行多次的磁盘io操作,降低性能
为什么不使用b树?
b树每个节点存放索引+数据,b+只有叶子节点才存储数据。--》数据大小一定情况下,存的节点越多,磁盘io次数会越少?
联合索引?
a,b,c建联合索引,此时会建几个索引表?
建立三个索引:a ab abc
分析一下语句会不会走索引?
select * from test where a=? and b =? and c = ?;
select * from test where a =? and c = ? and b = ?;
select * from test where a= ? and b> ? and c=?; -> 走 a、 ab索引
select * from test where a!=?; ->不走索引吗?
select * from test where b=? and c= ?;不走索引吗?
最后推出索引的匹配原则:最左匹配原则
Spring传输特性有哪些?
参考:看完就明白_spring事务的7种传播行为_gnixlee的博客-CSDN博客_事务的传播行为
required:如果存在事务上下文,则加入该事务,否则开启一个新事务
supports:如果存在事务上下文,则加入该事务,否则以非事务执行
mandatory:如果存在事务上下文,则加入该事务,否则抛出异常
requries_new:总是开启一个新事务,如果存在事务上下文,则把这个事务挂起;两个事务互相不影响
not_supported:总是以非事务执行,有事务上下文则被挂起
never:总是以非事务执行,有事务上下文则抛出异常
nested:外层事务失败,则内层事务也会回滚;但是内层事务失败不会影响外层事务,只会回到外层事务的保存点
Spring的事务隔离级别?
参考:Spring事务传播属性和隔离级别 - Eunice_Sun - 博客园
默认级别:使用数据库默认隔离级别:mysql使用可重复读级别
读未提交:产生【脏读】
读已提交:解决【脏读】
可重复读:解决【不可重复读】
序列化:解决【脏读】
mysql事务的四个特性:
原子性、一致性、隔离性、持久性
cap理论、base理论?
https://www.cnblogs.com/stateis0/p/9062123.html
项目中使用:ap和最终一致性
设计题:
使用redis实现消息队列?
https://www.cnblogs.com/-wenli/p/12777703.html