题目重点:从移动端会话状态和流式响应切入,逐层回答架构追问。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 可辨方向为Gemini Android App;训练限定文本聊天、历史、流式输出和取消,语音/图像作为条件扩展。
- 不假定Google内部架构、私有API、模型规模或SLA。端上只管理UI/缓存,模型推理由服务器提供。
解题路线
- 分层UI→会话状态→Repository→本地DB/网络。conversation/message/clientRequestID形成持久身份,消息状态draft/sending/streaming/complete/failed,用reducer处理事件,旋转屏幕不重发。
- 流事件携带messageID和递增sequence,去重并检测缺口;断网后查询服务器最终状态或从可恢复cursor续流,不把已经显示的局部文本当最终答复。取消是服务请求和本地UI两步,迟到事件以generationID过滤。
- 离线可存草稿/待发意图,恢复后逐条幂等发送。历史分页与本地缓存一致性依版本,不在UI直接共享可变network对象。敏感会话缓存保留、账户切换清理和权限按产品规则定义。
手动走一遍
用户发送后立刻旋转屏幕,View重新订阅同message状态,服务器只收到一个clientRequestID。stream到seq10断开,重连收到seq8..12,8..10去重;若不支持续传则刷新权威消息而不是拼接重复文本。
规模与取舍
训练示例流token速率R、会话总tokenN,逐token全量字符串重拷会累计二次成本,应分块缓冲/节流绘制。移动内存只保留当前窗口,历史落DB分页。
易错点与追问
容易失分的边界
- Activity重新创建不是新请求身份。
- 无限后台重试耗电且可能重复计费,退避/联网条件/幂等都需定义。
继续深挖
- 图片上传断点续传和文本消息事务怎样关联?
- 后台进程被杀后如何恢复一个未完成会话而不再次付费?
