面灵AI→

哔哩哔哩测试开发实习一面:私信功能测试设计与消息没收到怎么排查

轮次
一面
时间
2026-10
来源
牛客网

《面试题目》

开场与项目

  1. 请做一下自我介绍。
  2. 你怎么看测试开发这个岗位?了解 TDD 吗?
  3. 介绍一下你的项目,重点讲你做的优化过程。

场景题

  1. 用过向量数据库吗?它是做什么用的?
  2. 你有没有自己写过测试用例?
  3. B 站两个人私信的功能,让你尽可能全面地测试,你会怎么设计测试?
  4. 用户来反馈,说他发了一条消息后对方没收到。你是员工,你会怎么排查?
  5. 你现在用哪些 AI 工具?
  6. 你了解 JMeter,如果要开发一个新接口、这个接口比较复杂需要压测,测一下性能,你会怎么做?
  7. 自动化测试你有接触吗?

手撕

  1. 环形链表:判断链表是否有环。
  2. 买卖股票的最佳时机:一次买卖能获得的最大利润。

八股

  1. MySQL 左连接和右连接有什么区别?
  2. Redis 缓存穿透是什么概念?
  3. HTTP 请求常见的 header 有哪些?
  4. 状态码 400 是什么?
  5. 随便说几个你知道的状态码。

《参考解析》

私信功能怎么测:按「功能—异常—性能—安全—兼容」五层铺开,最后收敛到消息的一致性和可靠性。功能上覆盖发送、接收、撤回、删除、历史记录、未读数、已读状态,以及文字、图片、表情、语音等消息类型;异常覆盖断网、弱网、发送超时、重复点击、消息乱序、重复发送、被拉黑、账号封禁;性能看大量历史消息的加载、连续发送、高并发下的延迟;安全验证越权(能否看别人私信)、XSS、敏感信息泄露、接口刷屏限流;兼容覆盖浏览器、手机系统、PC 与移动端同步。收尾时点出核心不变量:消息不丢、不重、顺序正确、多端状态一致。

消息没收到怎么排查:先缩小范围——双方账号、发送时间、消息类型、网络环境,能不能复现。再看客户端:发送方是否显示发送成功、有没有超时或失败重试。然后沿服务端链路追:用消息 ID 串起网关日志、落库记录、消息队列的写入与消费位点、消费者是否异常;队列积压和消费失败是两个不同的方向。最后看接收端:WebSocket 长连接是否在线、推送是否到达、有没有被拉黑或消息过滤。定位后修复,并补上断网重试、消息补偿、多端同步的回归用例。

JMeter 压测一个新接口:先明确业务逻辑、请求参数和验收指标(响应时间、TPS、错误率)。脚本上用 CSV 参数化造不同用户数据,用关联/提取处理 Token 等动态参数,配线程组模拟并发。执行时逐步加压,观察 TPS、P95 与错误率的变化拐点,同时盯服务端的 CPU、内存、GC、数据库连接池。压完分析瓶颈(慢 SQL、锁竞争、连接池不足、下游限流),优化后复压对比数据。面试里能讲出「拐点在哪、瓶颈是什么」比背工具参数更加分。

向量数据库:存的是文本、图片等内容的 embedding 向量,核心能力是按相似度做近邻检索,常用于 RAG 知识库召回、语义搜索、推荐和 Agent 的长期记忆。和传统数据库的区别是「按语义相近查」而不是「按字段相等查」,索引结构(HNSW、IVF)决定了召回率与延迟的取舍。

MySQL 左右连接:左连接以左表为基准,保留左表全部记录,右表匹配不到补 NULL;右连接反过来,以右表为基准。实际项目里右连接很少用,改写调换表顺序的左连接更易读。追问常会延伸到「JOIN 的驱动表怎么选、能不能用上索引」。

Redis 缓存穿透:查一个缓存和数据库里都不存在的 key,请求每次都绕过缓存打到数据库,量大时会把库压垮。治理有两类:缓存空值并设较短 TTL;用布隆过滤器在入口挡掉一定不存在的 key。要能和「缓存击穿」(热点 key 过期瞬间大量请求打库)和「缓存雪崩」(大批 key 同时过期)区分开。

HTTP header:Host、Content-Type、Content-Length、Authorization、Cookie、Accept、Accept-Encoding、User-Agent、Referer、Origin、Cache-Control、If-None-Match 等。挑几个说清用途即可,比如 Authorization 承载 Bearer Token,Origin 用于跨域判断,If-None-Match 配合 ETag 做协商缓存。

状态码:400 是客户端请求有误(参数缺失、格式不对),服务端无法按预期处理。常见的一组:200 成功、201 已创建、204 无内容、301 永久重定向、302 临时重定向、304 未修改、400 请求错误、401 未认证、403 无权限、404 不存在、405 方法不允许、409 冲突、429 限流、500 服务端错误、502 网关收到无效响应、503 服务不可用、504 网关超时。

手撕思路:环形链表用快慢指针,慢指针走一步、快指针走两步,相遇即有环;如果要找入口,相遇后一个指针回到头,两指针同速前进再次相遇处就是入环点。买卖股票一次交易用贪心:遍历时维护「到目前为止的最低价格」,每天用当天价格减最低价更新最大利润,时间 O(n)、空间 O(1)。写的时候先讲清边界(空链表、单节点、价格为负或全跌),再落代码。

测试开发岗的准备方向:一面基本围绕「测试设计能力 + 工程能力 + 基础八股」三块。测试设计要练到能对任何一个功能(登录、搜索、支付、私信)现场分层拆解;工程能力指自动化框架(Selenium/Playwright)、接口测试、压测和 CI 集成;八股集中在 MySQL、Redis、HTTP、操作系统和一门语言的底层。项目讲优化时,把「原来什么样、怎么发现问题、改了什么、指标变化多少」说清楚。