架构思想以及问题思考

  1. JDK21 虚拟线程"的深度挖掘
  • 虚拟线程(Virtual Thread)和平台线程(Platform Thread)在操作系统层面的映射关系有什么本质区别?(M:N模型)

  • 除了synchronized,在代码中如何处理线程安全的?在虚拟线程环境下,ReentrantLock和synchronized的表现有何不同?

  • 既然虚拟线程这么轻量,是不是以后就不需要线程池了?在重构异步线程池时,如何确定线程池大小的?

  • 虚拟线程在IO密集型场景下表现优异,那如果是CPU密集型任务(比如大报表的复杂计算),使用虚拟线程会有什么问题吗?

  1. 分布式与中间件
  • 如果消息发送到了Broker,但是本地数据库事务提交失败了,或者消费端消费超时了,整个链路是怎么回滚的?有没有可能出现消息丢失或重复消费的场景,如何兜底处理?

  • Redisson的看门狗机制(Watch Dog)是如何工作的?如果锁的持有服务器宕机了,看门狗还会续期吗?

  • 设计一个全局唯一的订单号,要求高性能且不能重复,怎么做?需要考虑时钟回拨的问题吗?

3.数据库与SQL优化

  • 必须查8张表,但又不希望用Join(怕性能差),可以采用什么技术方案?(应用层组装/宽表/ES聚合)

  • 千万级订单表拆分后,如何进行跨分片的聚合查询?比如要查某承运商近三个月的总运费,数据散落在多个库里,有什么好的方案?

  • "DB索引+Redis双重幂等",如果Redis挂了,选择降级还是继续走DB?如果走DB,如何防止并发下的重复写入

  • 遇到过索引失效的场景吗?除了like '%xx',还有哪些情况会导致索引失效?

  1. 高并发与性能调优系统设计
  • 异步报表导出引擎中,对于"流式写Excel"。如果用的是POI,是用的SXSSFWorkbook吗?它是如何实现内存溢出的控制的?

  • 自建独立导出线程池,隔离导出与订单核心业务资源"。如果导出任务堆积非常严重,占满了线程池,这时候核心下单接口也变慢了,有什么熔断或降级策略吗

  • 面对大促峰值流量,除了扩容,还可以做哪些前置的准备或限流措施?(Sentinel/Hystrix的流控规则,如QPS限流、并发线程数限流的区别)

  1. 软技能与架构思维
  • 推动JDK版本升级时,会有哪些阻力?比如老代码兼容性问题、团队习惯问题。

  • 如果对现有的系统(或类似系统)做一次性能诊断,你会从哪些维度入手?会用什么工具?

  • 假设现在有一个接口突然响应变慢,但日志没有报错,CPU也不高,你会怎么排查?(线程Dump分析、等待队列、死锁排查思路)