腾讯前端怎么准备
腾讯前端面试里,IM 和增长页都很常见。社交场景的难点是输入、未读、弱网和多端,而不是再背一遍 React 调和。
五题覆盖输入性能、红点、重发、多端和体验争议。用你做过的聊天或表单来答。
腾讯怎么面前端
- 可能手写防抖节流,但会追问用在输入还是滚动。
- 状态同步题比组件通信题更像业务。
- 准备「看起来已发送、其实失败」的 UI。
面试阶段与知识点
第一批不把每个阶段拆成独立 URL,避免程序化重复页。阶段对应下面的题,练完再用模拟面试串起来。
- 输入与渲染:高频输入不要整页更新。
- 未读与同步:红点和多端。
- 弱网:重发和乱序。
- 体验争议:已读是否可见。
值得开口练的题
每题给考察点、思路、结构化参考答案和追问。参考答案用来组织语言,面试时必须换成你自己的项目事实。
输入框每敲一个字列表就卡,原因可能是什么?
考察点
- 受控输入
- 列表重渲染
- IME
回答思路
高频输入不应触发整棵消息树 reconcile,要把输入状态隔离并兼顾中文输入法组合态。
结构化参考答案
- 输入状态放在输入组件内部或独立 store 切片,避免每键更新导致会话列表全量重渲染。
- 消息列表项用 memo 包裹,比较 props 时只看 messageId 与内容哈希,跳过无关字段。
- compositionstart 到 compositionend 期间不要把中间拼音当作最终消息提交或触发搜索。
- 超长草稿用防抖同步到云端,本地即时响应,减少跨组件广播频率。
面试官可能追问
- 受控和非受控你怎么选?
- 粘贴一万字怎么办?
- 如何测输入延迟?
未读红点在会话列表和桌面角标对不上,你怎么查?
考察点
- 多入口计数
- 已读回执
- 端上缓存
回答思路
红点是多端聚合指标,每个展示入口必须读同一套未读服务并写清聚合公式。
结构化参考答案
- 把会话未读、@ 我、系统通知的聚合公式文档化,并为每个入口写自动化对账用例。
- 已读回执必须等服务端确认成功才减计数,失败时保持原值并稍后重试。
- 端上缓存允许乐观减,但要以服务端定期校准为准,避免长期漂移。
- 抽样真实用户做列表红点与角标一致性巡检,异常自动告警。
面试官可能追问
- 免打扰会话还显不显红点?
- 系统消息是否计入?
- 校准闪烁如何避免?
弱网点发送,如何避免重复消息又让用户感觉没发出去?
考察点
- 本地 id
- 状态机
- 乱序
回答思路
每条消息带客户端本地 id 做幂等,UI 必须呈现发送中、失败、成功三态,禁止静默丢消息。
结构化参考答案
- 用户点击发送后立即插入「发送中」气泡,本地生成唯一 clientMsgId 绑定该条。
- 重试请求携带同一 clientMsgId,服务端据此去重,避免弱网重传产生 duplicate。
- 失败态展示可点击重发,禁止无提示自动连发,以免用户以为没发出去又狂点。
- 回执按 clientMsgId 对齐更新状态,旧回执不能覆盖新消息的状态机。
面试官可能追问
- 对方已收到但回执丢失?
- 撤回发送中的消息?
- 图片上传和文本如何共用状态机?
手机已读,网页还显示未读,怎么同步?
考察点
- 在线通道
- 冲突
- 读己之写
回答思路
已读进度以服务端为唯一真源,各端订阅变更并处理读己之写与乱序冲突。
结构化参考答案
- 本端标记已读时上报会话 id 与已读水位到服务端,写入成功后本地立即更新 UI。
- 其他端通过 WebSocket 或轮询订阅已读进度变更事件,收到后 merge 到本地状态。
- 本端读己之写:自己刚标记已读时不应再闪未读,即使推送尚未到达。
- 已读水位只允许单调递增,禁止离线旧端把更高进度覆盖回去。
面试官可能追问
- 端时钟不准怎么办?
- 离线很久的端如何追赶?
- 已读回执隐私如何关?
产品要做「已读未读」,隐私同学反对,你怎么推进前端方案?
考察点
- 开关
- 默认
- 范围
回答思路
已读能力应做成可关闭、默认策略经隐私评审、范围可逐步缩小的渐进方案。
结构化参考答案
- 第一期只做单聊已读开关,群聊不展示已读名单,降低隐私暴露面。
- 默认开或关的策略必须走隐私评审,前端按评审结论实现,不自行拍板。
- 用户关闭已读后,前端停止发送已读回执且 UI 不再暗示对方是否已读。
- 小流量实验观察投诉与留存,用数据支撑是否扩大范围。
面试官可能追问
- 关闭后历史已读还展示吗?
- 如何避免假已读?
- 你怎样记录决策?
和岗位、模拟面试一起用
资料管理里保存目标岗位 JD,模拟面试会按简历出题。点题目下的按钮会把本题带进模拟开场,仍需先绑定简历与岗位。