面试简答:
1. sychronize 底层实现:
分两种情况(反编译后字节码文件中):一锁定代码块时,是通过monitorenter和monitorexit来控制,二是当锁定为方法,是有一个ACC_SYCHRONIZE标识。
2. redis 统计日活使用什么结构,签到使用?
该点主要考察redis其他数据类型:bitmap。鉴于之前未接触过这种类型。今网上查到多种:(BitMap、Geo和HyperLogLog),详细自行了解。
3. redis在项目中应用(幂等,其他的呢?)
分布式锁,session共享,保证接口幂等
4. Synchronized与ReentrantLock区别
也可分为功能区别和性能区别,也有共通之处。自查吧
5. springcloud 如何保护上下游服务不会同时崩
hystrix??(此处不懂太多,需后续继续学习)
6. 消息队列如何保证服务发布?保证消费?
confirm机制和ack机制(不够细)
7. 单例模式双检查,volatile关键字作用
禁止指令重排序
8. mysql 查询是否支持多个索引
支持的,执行计划中type为index_merge.索引合并
9. extra 中 using filesort怎么回事
一个排序操作不能通过索引来完成,需要额外的空间用于排序。
10. springboot 原理源码阅读?
11. aqs的理解,实现?
volatile+cas实现。具体待个人理解。
12. join 两表关联操作何时会索引失效
1.关联字段字符集类型不同
2.关联字段长度不同
3.关联字段类型不一致,导致索引失效
等。。。
13. jvm内存模型
14. 线程间切换为何速率慢(内核态用户态)
用户态切内核态一般需执行系统调用,内核的不信任额外检查,切换时需保存寄存器。
15. 元数据区内包含哪些
类元信息:字段,方法,版本,接口,常量池表
运行时常量池
16. git rebase 和 merge
同为合并,区别为合并时日志显示,再者就是如多次commit存在冲突merge能一次合并,rebase需要重复处理多次冲突。
17. 普通索引和聚簇索引哪个快?
聚簇索引会更快,基于inodb实现的mysql,主键为聚组索引,会存储整体数据,减少回表查询。而普通索引则是记录的主键值。
18. 元数据区的内存溢出?哪个区域不会
会,由于元数据区主要受限于本地内存,导致内存溢出大概是加载到内存中的 class 数量太多或者体积太大。解决方案:增加 Metaspace 的大小,或者取消元数据区大小限制。但究根结底需要找到问题代码所在。以免导致服务器不能提供服务。