面灵AI

8.30去哪旅行ai应用开发 ai面试

时间
2026-08
来源
牛客网

《面试题目》

  1. 排查线上JVM的CPU过高,内存泄露问题时,你会用到哪些核心工具和命令?
  2. 追问:如果用top命令定位到某个java进程cpu占用持续超过100%,你接下来会执行哪些具体命令一步步定位到具体的问题代码行?
  3. java中主线程需要感知多个子线程全部执行结束后再继续执行,有哪些实现方式?
  4. 追问:你提到用等待的方式实现,那如果子线程是提交到线程池执行的,你用什么方式感知所有提交的任务都执行完成?
  5. 追问:你刚才提到用队列感知任务完成,那么CountDownLatch和CyclicBarrier在实现多线程等待场景时核心的原理差异是什么?
  6. 现在要用redis实现一个基础分布式锁,你用什么核心命令,关键参数如何设计?
  7. 追问:你提到用SET命令实现锁,那如果持有锁的客户端在释放锁之前突然宕机了,你设计的锁要怎么避免永久死锁的问题?
  8. 追问:如果锁的超时时间到了被自动释放,但此时原来持有锁的客户端还没执行完业务,后续又要其它客户端拿到了这把锁,你会怎么解决两个客户端同时操作共享资源的并发问题?
  9. HTTP3基于QUIC协议实现,请说明QUIC相对于TCP的核心优势是什么?
  10. 追问:你提到QUIC可以提升连接速度,那么在跨网络切换比如从wifi切换到移动数据的场景下,QUIC相比TCP能保持连接不中断的核心原因是什么?
  11. 设计机票查询报价系统,有大量基础运价和供应商调价规则,要求用户查询1秒内返回最低报价,你怎么设计?
  12. 追问:除了查询语句的优化,你在系统架构,数据预处理层面做哪些设计来满足这个功能?
  13. 追问:你提到会把最低报价的热点机票预热到redis里,这些缓存的数据怎么和基础运价更新,供应商调价规则的变更保持一致?
  14. 请你分享一个你做过的最具有技术挑战,最值得深入探讨的后端开发项目,它要解决什么问题,核心难点在哪里,你如何去攻克?
  15. 请分享一段你最近半年内,主动学习AI工具或大模型相关技术并尝试落地到实际开发场景的真实经历,包括你做了什么,最终落地效果如何?

《参考解析》

  1. 排查线上JVM的CPU过高,内存泄露问题时,你会用到哪些核心工具和命令 先用 top/pidstat 确认进程,再用 top -H -p PID 找到高 CPU 线程,将线程 ID 转十六进制后用 jstack PID 定位堆栈。内存问题结合 jstat -gcutil、GC 日志和 jmap -histo/堆转储分析对象增长与引用链。
  2. 追问:如果用top命令定位到某个java进程cpu占用持续超过100%,你接下来会执行哪些具体命令一步步定位到具体的问题代码行 记录高 CPU 线程的十进制 TID,执行 printf '%x\n' TID 转为 nid,再运行 jstack PID | grep -A ... nid 查看对应栈帧;必要时连续采样多次确认热点,修复后用同样指标复测。
  3. java中主线程需要感知多个子线程全部执行结束后再继续执行,有哪些实现方式 少量线程可调用 Thread.join();固定数量任务适合 CountDownLatch;需要返回值时收集 Future 并调用 get();批量异步编排可用 CompletableFuture.allOf()。应设置超时并处理异常,避免无限等待。
  4. 追问:你提到用等待的方式实现,那如果子线程是提交到线程池执行的,你用什么方式感知所有提交的任务都执行完成 提交任务时保存每个 Future,主线程逐个 get 或使用 CompletableFuture.allOf;若任务数量动态变化,用受控计数器在任务 finally 中递减,并在计数归零时发出完成信号。
  5. 追问:你刚才提到用队列感知任务完成,那么CountDownLatch和CyclicBarrier在实现多线程等待场景时核心的原理差异是什么 CountDownLatch 是一次性倒计数器,任务完成调用 countDown,等待方 await,计数归零后不可复用;CyclicBarrier 等待固定数量线程到达同一屏障,可重复使用并支持 barrier action,适合分阶段协作。
  6. 现在要用redis实现一个基础分布式锁,你用什么核心命令,关键参数如何设计 使用 SET lock-key token NX PX ttl 原子加锁,token 用随机唯一值。释放时用 Lua 脚本校验 value 等于 token 后再 DEL,避免误删他人锁;业务耗时可能超过 ttl 时续期,并通过超时和监控处理异常。
  7. 追问:你提到用SET命令实现锁,那如果持有锁的客户端在释放锁之前突然宕机了,你设计的锁要怎么避免永久死锁的问题 通过 PX 设置租约,客户端宕机后锁自动过期;续期只在客户端仍持有 token 时进行,续期失败应停止执行并告警。
  8. 追问:如果锁的超时时间到了被自动释放,但此时原来持有锁的客户端还没执行完业务,后续又要其它客户端拿到了这把锁,你会怎么解决两个客户端同时操作共享资源的并发问题 采用带 fencing token 的锁:每次成功加锁递增序列号,写入共享存储时由服务端校验 token 新旧,旧持有者即使迟到也会被拒绝;同时合理设置 ttl、续期和幂等校验。
  9. HTTP3基于QUIC协议实现,请说明QUIC相对于TCP的核心优势是什么 QUIC 基于 UDP,内置 TLS 1.3,减少握手往返;采用独立 stream,单个丢包不会阻塞其他流;连接以 connection ID 标识,网络从 Wi-Fi 切到移动数据时可迁移,避免 TCP 四元组变化导致断连。