java金三银四面试题(带答案)

1.如何实现自己的有界队列(类似题目还有顺序打印A,B,C三个线程 循环打印,这里就不重复了,原理一样)

答: 主要利用 线程间的通信,同学们可以用notify 和 wait自己实现 。我的代码采用的Lock的方式实现

2.ZooKeeper和Eureka作为注册中心有什么异同点

答:ZK保证服务的强一致性(CP) Eureka保证服务的高可用性(AP)

可复习CAP,BASE 理论

3.HashMap底层的数据结构?能说说hashCode和equals的作用?能说说jdk1.8底层做了哪些优化?

答:HashMap底层采用 数组+单向链表组成 hashCode计算Key所在的数组索引位置equals判断同索引位置的元素是追加在链表头还是覆盖上次的历史数据

jdk1.8以后 链表中的数据节点超过8时会采用红黑树的数据结构来提高性能

4.Mysql查询过慢怎么定位,怎么优化sql,需要注意哪些地方?

答:Mysql 查询过慢可以查看binlog 慢查询日志,定位到对应sql语句,用Explain 分析sql语句的执行是否使用索引,

索引的使用在经常查询很少修改的字段上,复合索引遵循最左原则,即最左侧的字段一定要使用到索引才有效

5.简述Netty内部工作原理?线程模型?什么是零拷贝?

答:Netty采用IO多路复用的机制, reactor线程模型, boss线程负责端口监听,work线程负责 IO读写.通过selecter轮训事件分发

传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝

Netty中的零拷贝是指 将多个内存区的数据合并等等,自己做了内部的虚拟合并成一个整体的数据区域

 

比如直接缓冲区FileChannel.transferTo 合并区域对象等等CompositeByteBuf

6.高并发环境下订单号的生成?

答:利用Redis队列提前生成需要的一定规模的订单号,需要时候直接取出.一般环境采用雪花算法即可

7.你们生产环境中MQ遇到过什么问题没有?

答:MQ消息延迟导致数据重复处理问题,采用数据库乐观锁或者记录日志方式判断是否重复处理(幂等性)

8.生产环境中如何定位CPU过高的线程?

答: 在linux服务器上采用top命令 找到对应的pid 通过 jdk命令 jstack输出对应的记录,通过内存排查工具定位到死锁或者死循环等等问题

9.你们公司怎么保证Redis和Mysql双写数据库一直的?

答: 采用异步队列查询时候需要等待修改的队列更新redis数据。 或者采用数据库的日志通知,异步更新redis换成数据

10.你们公司如何分布式事务是如何解决的?

答: seata方案

11.redis分布式锁如何防止死锁?如何确保业务时间过长导致锁失效的?

 

答:设置缓存时间

12.Mybatis和Spring整合为什么会一级缓存失效

答: Spring采用的sqlsession会关闭每一次的请求导致的,而Mybatis默认采用的是DefaultSqlsession 不会关闭每次请求的连接

 

更多面试问题:各位可与我讨论,互相学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值