校招 未知部门 / 算法 / 一面

[面试日期] 2026-03-17 [面试时长] 未知
[学校背景] 河北大学 | 双非 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>TCL鸿鹄实验室一面:AI语音项目被问麻了</h2> <p>话不多说,上面经(一面已过)。</p><h2>一、面试背景</h2><p>岗位:TCL鸿鹄实验室 - AI语音。相关时长:约35分钟。形式:技术一面</p><p>我这边背景:百度高级研发,6年经验,主做AI语音项目(商机智能平台),之前华为待过,算是从大厂跳大厂的节奏。</p><p>面试官很专业,问的问题基本都是围绕我的项目深度展开,没问八股,全是场景题和设计题。我只能说——<strong>干得漂亮</strong><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43">。</p><p><strong><em>(那也就是说,刷的算法,背的八股,基本上是没用了,而且不只这一个面,很多面试都不考算法和基础八股了,这难道只是我的幸存者偏差吗)</em></strong></p><h2></h2><h2>二、核心问题复盘</h2><h3>1️⃣ 自我介绍(2分钟)</h3><p><strong>标准流程,我简单说了下三段经历:</strong></p><ul><li><strong>百度</strong>:商机智能平台,面向广告主的智能营销系统,融合文心大模型</li><li><strong>华为</strong>:政务审批与执法平台,流程引擎那一套</li><li><strong>之前</strong>:互联网营销系统</li></ul><p>面试官听完直接切入项目细节,没有废话。</p><h3></h3><h3>2️⃣ 多租户智能对话引擎设计</h3><p><strong>问题</strong>:<strong>你们的多租户对话引擎怎么设计的?WebSocket连接层怎么做的?</strong></p><p><strong>我的回答</strong>:</p><p>这块我负责三个核心模块:</p><ol><li>核心业务服务设计</li><li>实时数据链路</li><li>结构化入仓</li></ol><p><strong>连接层架构</strong>:</p><pre> 用户 → 外部WebSocket接入层(Gateway) → Netty服务 → Kafka → 对话服务(UFO) </pre><p><strong>关键设计</strong>:</p><p><strong>第一层:接入层</strong></p><ul><li>不让业务服务直接暴露WebSocket,单独做了一层Gateway</li><li><strong>WebSocket连接建立时带Token,解析出租户ID、用户ID等,存到Redis</strong></li><li>后续消息根据UID路由到正确节点</li></ul><p></p><p><strong>第二层:WebSocket实现</strong></p><ul><li>没用Spring自带的WebSocket(太重)</li><li>用Netty自己实现了一套,更轻更稳定</li><li>Netty的线程模型天然适合这种I/O密集场景</li></ul><p></p><p><strong>第三层:消息路由</strong></p><ul><li>前端发消息 → Netty → Kafka → 对话服务</li><li>对话服务无状态,不知道客户端在哪个节点</li><li><strong>通过Redis查SessionID → 本地Map找节点 → 写回WebSocket</strong></li></ul><p></p><p>面试官追问:<strong>为什么Netty比Spring WebSocket好?</strong></p><p>我说:本质上是Reactor多线程模型,一个线程监听多个连接,避免&quot;一连接一线程&quot;的高开销。Netty在此基础上做了一层抽象,EventLoop绑定多个Channel,同一Channel的所有I/O事件永远在同一个线程处理,避免线程切换开销。</p><h3></h3><h3>3️⃣ Kafka消息顺序性与不丢消息</h3><p><strong>问题</strong>:Kafka怎么保证消息顺序?怎么保证不丢消息?<strong><em>(这倒是老一套了,感觉例行公事,消息丢失,顺序消费这玩意)</em></strong></p><p><strong>我的回答</strong>:</p><p>这块分两套策略,顺序消费和不丢消息是两个问题。</p><p><strong>顺序性保证</strong>:</p><p>Kafka本身只能保证单Partition有序,所以我们做了两层约束:</p><p><strong>生产端</strong>:</p><ul><li>按业务Key(用户ID)做分区</li><li>通过Hash指定Partition</li><li>同一用户的消息一定在同一分区</li></ul><p><strong>消费端</strong>:</p><ul><li>一个Partition对应一个消费线程</li><li>业务处理必须串行</li><li>要提升并发就加Partition数量</li></ul><p><strong>不丢消息保证</strong>:</p><p>分三层:生产端、Broker、消费端</p><p><strong>生产端</strong>:</p><ul><li><code>acks=all</code>(所有副本确认)</li><li>重试机制</li><li>幂等生产配置</li></ul><p><strong>Broker</strong>:</p><ul><li>多副本机制</li><li>Leader + Follower复制</li><li>极端情况:多节点同时挂了才丢数据(概率极低)</li></ul><p><strong>消费端</strong>:</p><ul><li>关闭自动提交</li><li>先处理业务,再手动commit</li><li>处理失败不提交,重新消费</li></ul><h3></h3><h3>4️⃣ ThreadPoolExecutor参数配置</h3><p><strong>问题</strong>:IO密集型的线程池怎么配?(线程池,线程池,还是线程池)</p><p><strong>我的回答</strong>:</p><p>核心公式:</p><pre> 线程数 ≈ CPU核心数 × (1 + 等待时间/计算时间) </pre><p>IO密集型特点:大部分线程在等待,等待时间 &gt; 计算时间,所以线程数可以远大于CPU核心数。</p><p><strong>我的经验值</strong>(8核机器):</p><ul><li><strong>核心线程数</strong>:16-32(CPU核数 × 2-4)</li><li><strong>最大线程数</strong>:64-96(核心线程 × 2-3)</li><li><strong>队列</strong>: 短任务(如RPC调用):有界队列,容量1000左右长任务(如WebSocket消息):小队列或不排队</li><li><strong>拒绝策略</strong>:CallerRunsPolicy,让调用线程自己执行,天然限流</li></ul><p><strong>但</strong>这是经验值,具体要看压测结果。核心指标是CPU利用率、队列长度、拒绝次数。</p><h3></h3><h3>5️⃣ 语音实时通信的首包延迟优化(重点来了!)</h3><p><strong>问题</strong>:如果场景是语音实时双向通信,首包延迟怎么优化?网络抖动丢包怎么办?</p><p><strong>我的回答</strong>:<strong>(我说实话,这块最开始卡壳了,后来面试官正好接了个电话,我赶紧重整思路,最后还是说出来了)</strong></p><p>这块核心是<strong>低延迟流式通信 + 弱网环境</strong>的问题。</p><p><strong>首包延迟优化</strong>:</p><p>我分三层来答:</p><p><strong>第一层:连接建立</strong></p><ul><li>WebSocket预连接:用户进入页面就建立连接,不等点击通话</li><li>用WSS不用WS,避免重定向</li><li>TCP Fast Open(TFO):跳过三次握手</li><li>就近接入:CDN或加速节点,连接最近的网关</li></ul><p></p><p><strong>第二层:协议层</strong></p><ul><li>不带冗余心跳,首次只传关键数据</li><li>用Protobuf替代JSON,减少传输量</li><li>WebSocket消息头优化,减少边界等待</li></ul><p></p><p><strong>第三层:服务端</strong></p><ul><li>预热进程池</li><li>首帧优先级最高,优先转发</li></ul><p><strong>网络抖动丢包</strong>:</p><p><strong>应用层</strong>:</p><ul><li>前向纠错(FEC)</li><li>丢包重传(NACK)</li><li>包合并 + 抖动缓冲</li><li>动态调整发送频率</li></ul><p><strong>策略层</strong>:</p><ul><li>客户端 + 网关做抗抖动缓冲</li><li>网络好时多缓冲,差时少缓冲</li><li>严重时降码率、静音检测(没声音不发包)</li><li>极端情况:错误隐藏(用前一帧插值)</li></ul><p>这块我说得比较细,面试官点头表示认可。</p><h3></h3><h3>6️⃣ 大模型幻觉对抗(AI时代经典问题!)</h3><p><strong>问题</strong>:大模型幻觉怎么解决?输出JSON格式怎么保证?</p><p><strong>我的回答</strong>:</p><p>这块我们分三层:<strong>数据层、生成层、结果层</strong>。</p><p><strong>数据层</strong>:</p><ul><li>不让模型自由发挥,通过<strong>用户问题 → 检索企业数据 → 拼进Prompt</strong></li><li>多路召回(关键词 + 向量),再做一次排序过滤</li><li>上下文精简:<strong>只保留相关对话,减少干扰</strong></li></ul><p><strong>生成层</strong>:</p><ul><li>强规则Prompt:&quot;只能基于提供的数据回答,数据中没有不允许编造&quot;</li><li>结构化输出:让模型输出JSON(商机名称、推荐理由、数据来源),限制表达范围</li><li>降低温度(0.5左右),减少随机性</li><li><strong>多轮对话拆成两步:先理解意图,再生成结果</strong></li></ul><p><strong>结果层</strong>:</p><ul><li>规则校验:字段完整、类型正确</li><li>数据一致性检查:查库确认数据存在</li><li>自我修复:模型输出格式错误时,把错误内容喂回去,让模型修正(成功率95%+)</li><li>兜底策略:重试3次失败 → 返回模板回答</li></ul><p></p><h2>三、面试感受</h2><p>整场面试没有八股文,也没有算法,全是围绕项目的深度挖掘,整的我全白学了,不过也没关系,这样挺好的。</p><p>面试官问得很细,但都是在考察我的<strong>系统设计能力</strong><span>和</span><strong>工程落地能力</strong><span>。</span></p><p>我的感觉:</p><ol><li><strong>项目要熟</strong>:每个技术选型要能说清楚为什么</li><li><strong>要有深度</strong>:不能停留在&quot;怎么用&quot;,要讲&quot;为什么这么设计&quot;</li><li><strong>要能拆解</strong>:复杂问题分层次回答,一层一层剥</li></ol><p></p><p>最后我问了面试官三个问题:</p><ul><li>公司技术栈是什么?</li><li>多久出结果?</li><li>这个岗位具体做什么?</li></ul><p>面试官说:&quot;语音相关,AI方向,后面还有二面。<strong>暗示过了</strong>。</p><p></p><h2>四、总结</h2><p>这场面试问的核心点:</p><ol><li>WebSocket架构设计</li><li>消息中间件(Kafka顺序性 + 可靠性)</li><li>并发编程(线程池配置)</li><li>实时音视频(首包延迟 + 抗抖动)</li><li>AI工程化(幻觉对抗 + 结构化输出)</li></ol><p></p><p><strong>全是实打实的场景题,没有虚的,这多亏我之前自己搞了一个全双工语音项目</strong><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763434/7A0C3C39D0D8037360A2B600921D52C5"><strong></strong><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763434/7A0C3C39D0D8037360A2B600921D52C5"><strong></strong><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763434/7A0C3C39D0D8037360A2B600921D52C5"><strong>。</strong></p><p><strong>建议</strong>:<span>如果你也面AI语音岗,把上面这几个点吃透,尤其是实时通信和大模型应用这两块,问的概率很高。</span></p><p><span></span><img src="https://uploadfiles.nowcoder.com/images/20260317/630210254_1773741945498/D2B5CA33BD970F64A6301FA75AE2EB22"></p><p></p><a>#AI求职实录#</a>
AI 推荐面试题