英大泰和财产保险 Java开发外包岗面经
《面试题目》
- SQL效率优化
- 服务器处理高并发
- String str1=“a”与String str2= new String(“a”)分别会创建几个对象?
- shell脚本写法
- 存储过程怎么触发的
- MyBatis-Plus比MyBatis好在哪里?
- Redis分布式锁如何实现?
- Redis分布式锁有什么缺点?
- String为什么要设计成不可变的?
- 多线程的创建方式
- Java1.8新特性
- Stream流的用法
- Spring循环依赖如何解决的?
- 线程池的参数
- 创建线程池用到了哪些类?
- Docker
- Docker拉取镜像与创建容器的命令
- 索引为什么能加快检索速度?
- 多线程如何通信?
- 多个微服务之间如何保持数据一致性?
《参考解析》
- String对象创建:
"a"在字符串常量池中创建一个对象;new String("a")会在堆中创建一个新对象,若常量池中无”a”,则常量池也会创建一个,共2个。 - String不可变原因:为了实现字符串常量池节省内存、保证线程安全(不可变对象天然线程安全)以及作为HashMap键时的安全性(Hash值缓存)。
- Spring循环依赖:通过三级缓存(singletonObjects, earlySingletonObjects, singletonFactories)解决,利用提前暴露代理对象打破闭环。
- Redis分布式锁缺点:主从架构下主节点挂掉可能导致锁丢失(建议用Redlock算法);锁过期时间设置过短可能导致业务未完成锁即释放。
- 微服务数据一致性:分布式事务方案包括2PC/3PC(性能较差)、TCC(补偿型)、本地消息表+MQ、Seata框架(AT/Saga模式)或最终一致性(Seata/RocketMQ事务消息)。