4/1 hr 电话约面的时候问了是否可以转 golang, 同意后约面面试官开头介绍技术栈为 golang面试体验很好, 问答之后基本都有正面回应, 但没怎么挑我的刺, 面试官可能不熟悉 JAVA 或根本就不想要我没录音可能有遗漏Q1 自我介绍Q2 你是怎么构建这个 agent 的 (组装链 + 执行链)Q3 在执行过程中出现问题怎么解决的, 采用了什么降级措施吗 (没有采用, 直接终止)Q4 你项目上说了 RAG, 你来介绍一下 RAG 在你的项目中是怎么使用的 (作为 advisor 角色, 在思考流程时通过知识库的形式组装到 prompt 中)Q5 你项目使用了 sse, 说说 sse 是什么与 websocket 有什么区别? (sse 单向构建简单)Q6 项目中你是怎么使用 sse 时? (在 trigger 层中配置了 sse 的三个参数, 使用 emitter)Q7 你刚才提到了 trigger 层这一 DDD 领域概念, 你知道 DDD 吗? (不太熟悉, 扯了一下分层, VO, 聚合根)Q8 你这个高并发本地服务平台有什么用? (黑马点评)Q8 你第二个项目高并发平台测试过多高并发度吗? (瞎扯了几百并发度, 实际还没测试)Q9 你说实现了 session 共享怎么实现的, redis 的 key 和 value 怎么储存的 (通过 redis 实现的, 将 session id 作为 key 存储到 redis 中, key 和 value 都是 string)Q10 你说能够无感 token 刷新与权限校验是怎么实现的 (这里我忘记了, 就扯 redis 存然后将 token 返回给前端浏览器)Q11 你说返回给前端浏览器, 然后我换一个浏览器是不是 token 就失效了? (是, 因为 token 是存在浏览器中的)Q12 你提到了 cache aside, 它是什么? (redis 未命中则取数据库, 还说了一下另外两种, 说了一种另一种忘记了)Q13 你说用延迟双删实现过期时间补偿, 什么是延迟双删 (先删 redis 后 sleep 再删 redis)Q14 这个 sleep 设置时间是怎么确定的? (由于前面扯了几百并发度, 就说在这个并发度下这个时间最合适)Q15 你提到了互斥锁, 聊聊你项目里的互斥锁? (首先是 setnx 与 ex 手工首先的互斥锁, 但没有过期续费和可重入功能所以还使用了 redisson)Q16 你提到了布隆过滤器? 说说它的原理 (本质是 hash 表 + 多个 hash 函数, 对应槽位为 0 一定不存在, 全为 1 不保证一定存在)Q17 怎么提高布隆过滤器的准确度 (根据准确度的计算公式, 多增加 hash 函数来实现)Q18 你使用了 lua 脚本, 它的原子性是怎么实现的 (这个一点都不知道, 直接回答了不知道)Q19 后面你提到了 rabbitmq 消息队列, 为什么使用它, 它有哪些使用场景 (聊了 redis 自带的三种消息队列各自的缺点, 但使用场景没讲清除)Q20 你使用了 hyperloglog, 你知道它的原理吗 (不熟悉, 回答不知道后面自己补充了 geo 的原理)Q21 你知道 zset 是怎么实现的吗? (skiplist + score / ziplist)手撕:Q1 最大子数组和 (秒后讲一下原理, dp)反问:Q1 组内业务是做什么的? (QQ 浏览器 + 推荐广告)Q2 是推荐算法吗? (不是, 就是根据已经为用户选好的广告来推送)反思:面试之前都是复习第一个 agent 项目和八股去了, 导致后面的点评很多都忘记了, 后面打算改一下简历, 去掉一些没有和业务相关的技术.还要修正一下自己的回答方式, 多从 业务 -> 技术的角度来思考回复