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