字节云一面 项目拷打(已OC)
《面试题目》
时间:6.8
Base:北京
- 做了一些简化,提取了有借鉴价值的部分
- 自我介绍
- 你在这里面做的那个关键词分析 是属于哪个系统的?
- 所以你这个功能是你一个人开发的是吧,然后你们用的大模型是哪个
- 然后你们这个是你直接申请一个账号,然后自己去通过。Open API去调的吗?还是说你们有专门的那种类似于大模型的一些团队,然后提供一些标准的接口能力去搞的
- 你有去看一下,比如说他运营每操作一次大概消耗多少 Token 吗?
- 所以没去关注他。比如说每次查询查询大概花了多少钱是吧?
- 你有去了解过,比如说你跟他发一段文字是吧?它会转换成多少token吗?它是通过什么算法来搞的?
- 它是根据什么来分的?谁来决定这个到底多少个 token?
- 那你有去看你们在使用那个。DeepSeek的时候,那个cache能利用到多少吗?KV Cache 看过吗?
- 其他非通性的实习拷打问题
- OK OK, 明白了,行。那我们再聊一下你的自己做的的项目吧,好吧。嗯。我看你这里用了。咖啡因加 redis 多级缓存是吧。然后这个是哪方面的缓存?
- 知识库列表跟那个分组绑定,还是跟会话绑定?
- 然后你知识库是有专门的一个管理界面吗?
- 我这里怎么没看到你的知识库的介绍?你知识库是用什么方式去使用呢?
- 那你说一下你的这个 RAG 的标准流程吧?
- 你那个知识库的话,那个录入的流程呢?
- 然后,你开发这个项目用了多长时间?
- 两周 OK,然后 RAG 这一块应该没啥问题,然后你用 Redis Stream 是吧?这边文档异步处理是指你在写知识库的时候异步处理吗?还是啥?
- 你觉得用 Redis stream 和传统的一些MQ中间件的区别或者优势在哪里?
- 分组列表,分组列表为什么需要多级缓存?是很多吗
- 那你用这个的话,为什么插入你是你是单实例部署的吧?对。行吧,那 redis 的话有去了解过它的集群部署方式吗?
- Java是你们应该是主学的是吧,你们大学里面老师教的,go是你们大学里面没学的 是你自学的是吧?
- 算法题:三数之和
《参考解析》
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
消息队列:消息队列解决异步解耦、流量削峰。消息可靠性:生产者confirm确认;Broker持久化;消费者手动ACK。幂等性:消费端通过唯一ID+Redis或DB乐观锁实现。顺序消息:同一业务Key路由到同一分区/Queue,单线程消费。消息积压:扩消费者+增加分区+临时跳过非关键消息。
-
RAG与大模型:RAG(检索增强生成)流程:文档切片→向量化(Embedding)→存向量数据库→检索时将query向量化→TopK语义检索→将相关文档拼入prompt→LLM生成。优化:混合检索(语义+关键词)、重排序Rerank、查询改写、上下文压缩。评估:召回率(relevant docs retrieved/total relevant)、精确率、Answer相关性。
-
算法题解析:常用算法思路:动态规划(状态转移方程,自底向上);BFS/DFS(图遍历,BFS找最短路,DFS回溯);双指针(有序数组去重/两数之和);滑动窗口(子串/子数组问题);二分查找(有序或单调性)。时间复杂度分析:关注最坏情况和平均情况。