6.22 小红书 Product Engineer-产品工程师(AI与全栈方向)一面
《面试题目》
- 线程和进程之间是什么关系?
- 它们在内存和资源管理上有什么区别?
- 假设线程 A 依赖某个共享资源,线程 B 只依赖线程 A,并不存在交叉资源依赖,这种情况下会发生死锁吗?
- 上述情况下,是否可能导致线程运行缓慢?
- 是否可能出现某个后来的线程长期拿不到资源,也就是线程饥饿?
- 你在项目中有没有遇到过接口突然变慢、请求耗时增加之类的问题?
- 如果让你排查接口变慢的问题,你有哪些排查思路?
- 你熟悉 TCP 和 UDP 吗?
- 它们之间有什么区别?
- TCP 建立连接为什么需要三次握手,为什么不能只进行两次握手?
- 在弱网环境下进行通信,你认为应该使用 TCP 还是 UDP?
- 为什么?
- 如果选择 UDP,可能会遇到哪些问题?
- 应该如何解决?
- TCP 的队头阻塞是什么?
- HTTP 中常见的状态码分别表示什么?
- 例如 200、4xx 和 5xx。
- 客户端请求服务端接口时,如果频繁收到 5xx 状态码或者经常发生超时,客户端或调用方应该如何处理?
- 大营销抽奖平台中的高并发库存扣减是如何实现和优化的?
- 抽奖概率是如何转换成查找表的?
- 使用概率查找表后,系统具体如何完成一次随机抽奖?
- 系统如何支持根据用户积分档位配置不同的权重奖池?
- 不同积分档位对应的奖池和奖品权重是如何存储、装配和使用的?
- 在责任链执行过程中,如果某个节点失败,例如库存扣减失败,前面已经执行的节点是否需要回滚?
- 如果需要回滚,应该采用什么方式实现?
- 如果不回滚,如何保证数据一致性?
- 现在有一个客户端稳定性监控场景,会收集客户端上报的崩溃和卡顿堆栈。如果由你设计,你会如何实现问题定位、负责人分配和修复建议生成?
- 如何根据崩溃或卡顿堆栈判断问题是由哪个模块、业务或负责人引发的?
- 如何建立代码、模块、业务和负责人之间的映射关系?
- 当一个堆栈涉及多个模块或多个负责人时,应该如何确定主要负责人?
- 如何根据堆栈信息生成一个简短、基本可用的修复方案?
- 如何保证生成的修复建议具有针对性,而不是向业务方提供无效或泛化的建议?
《参考解析》
- AI产品与 Agent 项目:回答这类问题要先讲清目标用户和业务场景,再说明模型、数据、工作流、评测指标和上线后的真实使用效果。面试官通常更看重你能否把 AI 能力转成可落地的产品闭环,而不是只罗列模型名。
- 进程与线程:进程是资源分配单位,线程是 CPU 调度单位。同一进程内线程共享地址空间和文件句柄,但各自拥有栈和执行上下文;回答时可结合通信方式、上下文切换成本和故障隔离展开。
- TCP/UDP 与 HTTP:TCP 强调可靠、有序和拥塞控制,UDP 强调低延迟和应用层自定义可靠性。弱网场景选择协议时要结合业务是否允许丢包、是否需要重传、延迟预算和客户端降级策略。
- 高并发库存扣减:高并发扣减要避免超卖,常见方案是 Redis 原子扣减、数据库乐观锁或消息队列削峰。抽奖和库存链路必须保证幂等,并对失败节点设计补偿或最终一致性处理。
- 用户研究:用研回答要覆盖样本选择、访谈或问卷方法、洞察提炼和需求转化。面试官会追问研究结论是否真正影响产品决策,因此最好用指标或后续迭代结果闭环。
- 项目深挖:项目深挖的核心是讲清背景、目标、你的职责、关键决策、难点和结果。遇到追问时优先用数据、取舍理由和复盘说明自己的判断,而不是只描述流程。