Java高级工程师/架构师 面试题整理

Java基础

  1. HashMap的底层数据结构?HashMap如何扩容?为什么扩容之后的大小是2的幂次方?
  2. ConcurrentHashMap的底层数据结构?谈谈ConcurrentHashMap的分段锁技术?
  3. Volatile能保证可见性吗?Volatile修饰的变量并发更新时是否是线程安全的?Volatile保证可见性的底层原理是什么?
  4. Synchronized是否线程安全的吗?Synchronized实现线程安全的底层原理是什么?
  5. ThreadLocal是什么?一般用在什么场景?
  6. AQS是什么?哪些类是利用AQS保证的线程安全?
  7. CAS是什么?哪些类是利用CAS保证的线程安全?
  8. ThreadPoolExecutor线程池有哪些参数、分别代表什么意思?持续往线程池里加任务,线程数、队列数的增长情况是怎样的?如何根据任务类型确定线程池数量大小、队列长度?

数据库

  1. 为什么分页大了之后,limit会变慢?该怎么优化?
  2. 为什么索引字段类型不匹配,会导致索引失效?
  3. 为什么非最左匹配like查询,会导致索引失效?
  4. 业务高峰期,如果必须需要新增索引,该怎么操作、需要注意什么?
  5. JOIN操作时,数据库内部是怎么实现的?是两层for循环吗,这样效率会不会很慢?
  6. 如何从科目成绩表中查出总分数排名前三的同学(可能会存在总成绩相等的情况,最后的查询记录数可能会大于3)?
  7. 数据库隔离级别有哪些?为什么你们系统选择可重复读隔离级别?各种隔离级别的适用场景,该如何选择?
  8. Mysql中utf8编码占几个字节?utf8和utf8mb4有什么区别?如果存中文时,Java用utf-8、mysql用utf8会不会产生乱码?
  9. Mysql有几种锁?什么是间隙锁?
  10. 说出10种sql优化的建议?

Redis

  1. redis的String和c语言的String有什么区别?
  2. redis的ZSet底层实现是什么?
  3. 如何查看redis集群总共有多少个key?
  4. 如何查看redis集群1小时内即将过期的key?
  5. redis为什么这么快?仅仅是因为数据存在内存里吗?
  6. 为什么GeoHash的地理位置距离计算会很快?
  7. redis有几种部署模式?该怎么选择?
  8. redis实现分布式锁的几种方式?setNX有什么局限性?
  9. redis的哪些命令是原子性的?除了setNX还有哪些?

算法

  1. 手写冒泡排序、插入排序、选择排序?怎么计算他们的时间复杂度、空间复杂度?
  2. 快速排序的思路?时间、空间复杂度是多少?最好能写一边。
  3. 堆排序的思路?时间、空间复杂度是多少?最好能写一边。
  4. 如何判断两个单向链表是否相交?如何找出交点?
  5. 如何找出二叉树上距离最远的两个点(每个节点有一个数值大小,两个节点的距离是指从起点到终点所经过的所有节点的数值和)?

分布式

  1. 如何保证分布式事务?两阶段提交和三阶段提交是什么意思、有什么区别?
  2. 如何实现分布式锁?redis分布式锁的原理、zookeeper分布式锁的原理?
  3. 对比SpringCloud和Dubbo的区别?Dubbo?SpringCloud吗?该如何选择?
  4. Zookeeper和Eurake的区别?为什么说Zookeeper保证了CP、Eurake保证了AP?Eurake是如何保证AP特性的?

其他

  1. 接口优化有哪些思路和手段?
  2. 如何避免商品超卖?数据库乐观锁?
  3. 秒杀系统该怎么设计?需要注意哪些点?能支撑多少的并发量?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值