Skip to content

百度测试开发面经(按一二三面拆分 · 可背诵标准回答版)

每题包含:题目 + 标准回答思路 + 加分回答示例,可直接背诵使用。


一、一面(50 分钟左右 · 基础 + 测试思维 + 手撕代码)

一面关键词:基础扎实、能写代码、会从用户角度测试 面试官目的:判断你是不是"合格的候选人"——知识面够不够、手撕能不能写出来


1. 自我介绍

【标准结构 · 1~2 分钟】

面试官好,我叫 XXX,XX 学校 XX 专业硕士在读 / 已毕业。

我有 X 段实习经历,分别在 X 公司做 XX 岗位,主要负责 XXX。

最近一段实习在 X 公司,负责 XX 系统的测试工作,通过 XXX 方式,
将 XX 场景的回归效率提升了 X%。

我对测开这个岗位很感兴趣,也具备一定的编码能力和测试思维,
今天来应聘贵公司的测开岗位,谢谢。

加分点:

  • 提到和目标岗位匹配的技术栈(Python/Java、Linux、数据库)
  • 主动说一个量化结果(比如:自动化覆盖率 80%、回归时间从 2h 缩到 20min)
  • 不要背简历,要说自己真正做过的、印象深刻的事

2. 介绍你做过的项目(最高频必问题 ‼️)

【STAR 法则 · 3~5 分钟】

这个问题几乎 100% 会问,而且会追问细节

我当时负责的是 XX 模块 / 系统,主要背景是 XX(业务场景)。

我具体做了三件事:
1. 针对 XX 场景写了 XX 自动化用例(Python + pytest),
   解决了 XX 问题,最终 XX 场景覆盖率达到 XX%。
2. 参与了 XX 功能的测试用例设计,用 XX 方法(边界值 / 等价类)
   设计了 XX 个用例。
3. 搭建了 XX 工具 / 平台,提升了团队 XX 效率。

遇到的难点是 XX,我是这样解决的:XX。

结果:XX 指标提升了 / 提前 XX 天完成 / Bug 漏测率为 0。

面试官追问方向:

  • "你在这个项目里具体负责什么?"
  • "项目难点是什么?怎么解决的?"
  • "你提到的 XX 技术方案是怎么设计的?"
  • "如果再做一次,你会有什么改进?"

3. 黑盒测试和白盒测试的区别是什么?

【标准回答 · 1 分钟】

黑盒测试:不关心代码内部实现,只看输入和输出。
         从用户角度出发,验证功能是否符合需求。
         优点是容易上手、不需要编程基础,缺点是覆盖率低。

白盒测试:基于代码内部逻辑进行测试,比如语句覆盖、分支覆盖、路径覆盖。
         需要了解代码结构,优点是能找到隐藏的逻辑 Bug,缺点是对测试人员要求高。

灰盒测试:介于两者之间,结合接口或模块的已知部分信息进行测试。

追问 1:如果让你给一个登录功能设计黑盒测试用例,你会从哪些角度考虑?

1. 功能层面:正确账号+正确密码登录成功;错误密码提示"密码错误";
            账号不存在提示"账号未注册";空输入提示"请输入账号/密码"
2. 边界值:账号最短/最长长度、密码最短/最长长度、空格处理
3. 安全:SQL 注入(账号输入 ' or 1=1 --)、XSS 攻击、暴力破解防护
4. 性能:1000 人同时登录响应时间是否 < 2s
5. 兼容性:不同浏览器、不同系统、不同网络环境
6. 用户体验:错误提示是否清晰、不暴露具体是账号错还是密码错(防枚举)

追问 2:测试百度搜索框,你会怎么设计用例?

1. 功能:输入关键词搜索有结果、无结果;搜索特殊字符(<>、表情);空搜索;
         搜索历史记录;搜索建议词点击
2. 边界:超长字符串搜索;多语言搜索;空格处理
3. 相关性:结果排序是否按相关度;搜索结果标题/摘要是否包含关键词
4. 性能:大词搜索 1s 内出结果;翻页响应时间
5. 安全:搜索关键词 XSS;搜索 SQL 注入
6. 兼容性:不同浏览器、手机不同系统
7. 专项:图片搜索、视频搜索的区别;搜索结果屏蔽逻辑

4. SQL:查每个班级的平均成绩前三名

【手撕代码 · 写出来很重要】

sql
-- 方法1:子查询(推荐,逻辑清晰)
SELECT s.name, s.score, s.class_id
FROM student s
WHERE (
    SELECT COUNT(DISTINCT score)
    FROM student s2
    WHERE s2.class_id = s.class_id AND s2.score > s.score
) < 3
ORDER BY s.class_id, s.score DESC;

-- 方法2:窗口函数(如果熟悉)
SELECT name, score, class_id
FROM (
    SELECT name, score, class_id,
           ROW_NUMBER() OVER (PARTITION BY class_id ORDER BY score DESC) as rn
    FROM student
) t
WHERE rn <= 3;

常见追问:

  • GROUP BY + ORDER BY 执行顺序 → GROUP BY 先分组,ORDER BY 后排序
  • WHERE 和 HAVING 的区别 → WHERE 过滤行,HAVING 过滤分组(先 WHERE 后 GROUP BY,再 HAVING)

5. SQL:给 student 表添加一个"父母姓名"字段

sql
ALTER TABLE student ADD COLUMN parent_name VARCHAR(50);

追问:添加字段和删除字段的 SQL 怎么写?

sql
-- 添加
ALTER TABLE student ADD COLUMN age INT;

-- 删除
ALTER TABLE student DROP COLUMN age;

-- 修改字段类型
ALTER TABLE student MODIFY COLUMN age VARCHAR(10);

6. 手撕代码:判断链表是否有环(快慢指针)

【LeetCode 141 · 常见原题】

python
def hasCycle(head):
    if not head or not head.next:
        return False
    slow = head
    fast = head
    while fast and fast.next:
        slow = slow.next        # 走一步
        fast = fast.next.next   # 走两步
        if slow == fast:
            return True
    return False

追问 1:如何找出环的入口?

python
# 相遇后,让一个指针从 head 出发,一个从相遇点出发,都是每次走一步,再次相遇处即为环入口
def detectCycle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow == fast:
            # 找入口
            ptr = head
            while ptr != slow:
                ptr = ptr.next
                slow = slow.next
            return ptr
    return None

追问 2:如何求环的长度?

python
# 找到相遇点后,慢指针继续走一圈,再次回到相遇点即为环长

7. 手撕代码:字符串反转(去除特殊字符)

python
# 保留字母和数字,去除其他字符
def reverse_only_letters(s):
    chars = [c for c in s if c.isalnum()]
    chars.reverse()
    result = []
    idx = 0
    for c in s:
        if c.isalnum():
            result.append(chars[idx])
            idx += 1
        else:
            result.append(c)
    return ''.join(result)

8. 手撕代码:合并两个有序数组

python
def merge(nums1, m, nums2, n):
    # 从后往前填,避免覆盖
    p1, p2, p = m - 1, n - 1, m + n - 1
    while p2 >= 0:
        if p1 >= 0 and nums1[p1] > nums2[p2]:
            nums1[p] = nums1[p1]
            p1 -= 1
        else:
            nums1[p] = nums2[p2]
            p2 -= 1
        p -= 1

9. Linux:查看指定进程;查看端口占用

bash
# 查看进程
ps -ef | grep python
ps aux | grep nginx

# 查看端口占用
lsof -i:8080
netstat -tlnp | grep 8080

追问 1:查找日志中包含 error 和 warning 的行?

bash
grep "error" app.log | grep "warning"
grep -E "error|warning" app.log

追问 2:查看大文件的最后 100 行?

bash
tail -n 100 app.log

追问 3:查找文件中含有关键词,并显示前后 10 行?

bash
grep -C 10 "keyword" app.log
grep -B 10 -A 10 "keyword" app.log

追问 4:把所有文件的 IP1 替换成 IP2?

bash
sed -i 's/IP1/IP2/g' *
find . -name "*" -exec sed -i 's/IP1/IP2/g' {} \;

10. HTTP 和 HTTPS 的区别

1. 加密:HTTP 明文传输,HTTPS 用 SSL/TLS 加密,更安全
2. 端口:HTTP 80,HTTPS 443
3. 证书:HTTPS 需要 CA 证书(防止中间人攻击)
4. 性能:HTTPS 有握手开销,略慢(但可忽略,现在基本都用 HTTPS)
5. 搜索排名:百度/Google 优先收录 HTTPS 网站

追问:从输入 URL 到页面展示,发生了什么?

1. DNS 解析:浏览器缓存 → 系统缓存 → DNS 服务器 → 获取 IP
2. 建立 TCP 连接:三次握手
3. 发起 HTTP/HTTPS 请求
4. 服务器处理请求,返回响应
5. 浏览器渲染页面(解析 HTML → 构建 DOM 树 → 渲染树 → 布局 → 绘制)
6. 四次挥手断开连接

11. TCP 和 UDP 的区别

1. 连接性:TCP 面向连接(三次握手),UDP 无连接
2. 可靠性:TCP 可靠(确认、重传、排序),UDP 不可靠
3. 传输效率:UDP 更快(没有确认和重传开销)
4. 场景:TCP 适合文件传输、网页、邮件;UDP 适合视频通话、直播、DNS

追问:三次握手过程是什么?为什么不能是两次?

1. 客户端发 SYN → 服务端
2. 服务端回 SYN+ACK → 客户端
3. 客户端发 ACK → 服务端

为什么不能两次:
防止历史连接请求被服务端接受(网络延迟的老旧 SYN 包干扰正常连接)

12. 常见网络协议有哪些?

HTTP/HTTPS(应用层):网页请求
TCP(传输层):可靠传输
UDP(传输层):快速传输
DNS(应用层):域名解析
DHCP(应用层):动态 IP 分配
FTP(应用层):文件传输
SSH(应用层):远程登录

13. Java:int 和 Integer 的区别

1. int 是基本类型,Integer 是包装类型(对象)
2. int 默认值 0,Integer 默认值 null
3. Integer 提供了工具方法(如 Integer.parseInt)
4. 自动装箱:int → Integer(Integer.valueOf)
   自动拆箱:Integer → int(intValue)
5. Integer 有缓存:-128~127 之间的值是同一个对象(节省内存)

追问:Java 的四种权限修饰符

1. public:所有地方都能访问
2. protected:同类、同包、不同包的子类能访问
3. default(不写):同类、同包能访问
4. private:只有同类能访问

14. Python:深拷贝和浅拷贝

浅拷贝:只拷贝一层,嵌套对象仍指向原引用
深拷贝:递归拷贝所有层级,完全独立

import copy
a = [[1,2], 3]
b = copy.copy(a)   # 浅拷贝
c = copy.deepcopy(a)  # 深拷贝

追问:Python 的函数传参是传值还是传引用?

Python 既不是严格的传值,也不是严格的传引用。
对于不可变对象(int, str, tuple):像传值
对于可变对象(list, dict):像传引用(但本质是传递了对象的引用)

15. 一万条数据的表,查询很慢,怎么优化?

1. 加索引:给高频查询字段加 B+ 树索引(但不要加太多,影响写入)
2. 优化 SQL:避免 SELECT *、避免全表扫描、用 EXPLAIN 分析执行计划
3. 分页优化: LIMIT offset, size → 用游标分页( WHERE id > last_id LIMIT n)
4. 读写分离:主库写,从库读
5. 分库分表:按时间或业务 ID 分表
6. 加缓存:Redis 缓存热点数据

16. 如何测试一个电梯?

【功能测试】
- 每层楼的上下按钮是否正常
- 到达目标楼层后开门/关门是否正常
- 超载报警功能
- 门夹到人是否自动弹开

【性能测试】
- 满载运行速度是否符合标准
- 同时响应多个楼层的效率

【安全测试】
- 电梯下坠时自动制动
- 紧急通话按钮是否可用
- 停电时是否有应急电源

【压力测试】
- 上下班高峰期所有楼层同时呼叫

【边界测试】
- 超过最大载重
- 楼层超过/低于有效范围

二、二面(45~60 分钟 · 项目深挖 + 编码 + 系统设计)

二面关键词:你到底有没有真正做过事、能不能解决实际问题 面试官目的:判断你有没有"真实能力"


1. 项目深挖:你的自动化测试是怎么做的?

【标准回答】

我主要做了三件事:

1. 框架选型:选 Python + pytest。。。。。。。
2. 数据驱动:用 YAML/Excel 管理测试数据,一个用例可以跑多组数据,维护成本低。
3. 持续集成:流水线,每次代码提交自动跑自动化用例,失败的用例自动发钉钉通知。

核心成果:用例数从 50 条扩到 200 条,核心场景覆盖率 80%,
        回归时间从 4h 缩短到 30min。

2. 项目深挖:你遇到的最大难点是什么?

【STAR 法则】

难点:接口之间有强依赖,A 接口返回的数据是 B 接口的入参,
      线下环境数据不稳定,导致自动化用例经常失败。

解决:
1. 用 unittest.mock 拦截依赖接口,返回预设数据
2. 搭建独立的测试数据准备接口,在用例执行前自动初始化数据

结果:自动化用例稳定性从 60% 提升到 95%。

3. 如何设计一个接口自动化测试框架?

1. 请求封装:统一封装 HTTP 请求,处理 Cookie/Session、Headers、超时
2. 数据驱动:测试数据与用例分离,用例只关心业务逻辑
3. 用例管理:用 pytest + marker 管理用例分类(smoke、regression)
4. 报告生成:allure 报告,失败截图、日志自动上传
5. CI/CD:Jenkins + Webhook,代码提交自动触发
6. 通知:失败自动发钉钉/邮件通知

4. 性能测试怎么做?

1. 确定目标:QPS、响应时间、并发用户数
2. 工具选型:JMeter(最常用)、Locust(Python)、wrk
3. 场景设计:基准测试、峰值测试、稳定性测试(压 8h/24h)
4. 监控:后端用 Arthas/Prometheus,前端用 Chrome DevTools
5. 分析:找瓶颈(CPU/内存/IO/数据库),逐步调优
6. 出报告:TPS 曲线、响应时间分布、错误率

5. Redis 为什么快?

1. 纯内存操作,没有磁盘 IO
2. 单线程(6.0 之前),避免上下文切换和锁竞争
3. IO 多路复用(epoll),一个线程处理大量并发连接
4. 数据结构经过优化(跳表、压缩列表),查询效率高

6. 手撕代码:两数之和

python
def twoSum(nums, target):
    hashmap = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in hashmap:
            return [hashmap[complement], i]
        hashmap[num] = i
    return []

7. 手撕代码:最长回文子串(说思路 + 写核心代码)

python
# 中心扩展法
def longestPalindrome(s):
    if not s:
        return ""
    start, end = 0, 0
    for i in range(len(s)):
        # 单中心
        len1 = expand(i, i, s)
        # 双中心
        len2 = expand(i, i + 1, s)
        maxlen = max(len1, len2)
        if maxlen > end - start + 1:
            start = i - (maxlen - 1) // 2
            end = i + maxlen // 2
    return s[start:end + 1]

def expand(left, right, s):
    while left >= 0 and right < len(s) and s[left] == s[right]:
        left -= 1
        right += 1
    return right - left - 1

8. 手撕代码:最大子序列和

python
def maxSubArray(nums):
    # 贪心:当前和为负数就重新开始
    max_sum = nums[0]
    cur_sum = 0
    for num in nums:
        cur_sum = max(num, cur_sum + num)
        max_sum = max(max_sum, cur_sum)
    return max_sum

9. 手撕代码:相交链表

python
def getIntersectionNode(headA, headB):
    # 长度对齐法:pA 走完 A 再走 B,pB 走完 B 再走 A,相遇即为交点
    if not headA or not headB:
        return None
    pA, pB = headA, headB
    while pA != pB:
        pA = pA.next if pA else headB
        pB = pB.next if pB else headA
    return pA

10. 手撕代码:找出一个数组中出现次数超过一半的数字(摩尔投票)

python
def majorityElement(nums):
    # 摩尔投票:每次删掉两个不同的数,剩下的一定是众数
    candidate, count = None, 0
    for num in nums:
        if count == 0:
            candidate = num
            count = 1
        elif num == candidate:
            count += 1
        else:
            count -= 1
    return candidate

11. 手撕代码:完全二叉树的节点个数

python
def countNodes(root):
    if not root:
        return 0
    # 利用完全二叉树性质:左深度 = 右深度 → 必为满二叉树
    left_depth = getDepth(root.left)
    right_depth = getDepth(root.right)
    if left_depth == right_depth:
        # 满二叉树,直接用公式
        return 2 ** left_depth - 1 + 1  # 左子树节点数 + 根节点 + 右子树递归
    else:
        return countNodes(root.left) + countNodes(root.right) + 1

def getDepth(node):
    d = 0
    while node:
        d += 1
        node = node.left
    return d

12. 场景题:如何测试一个自助贩卖机?

【功能】
- 选择商品、投币/扫码支付、找零、出货是否正常
- 商品卖完后显示缺货提示
- 纸币/硬币识别
- 扫码支付成功但未出货的补偿机制

【性能】
- 连续出货 100 次,机械结构是否正常
- 支付成功到出货的时间是否 < 10s

【安全】
- 恶意退款漏洞
- 机器被撬开的报警

【故障恢复】
- 突然断电后恢复,数据是否正确
- 网络中断时是否能正常出货

13. 场景题:如何测试微信聊天功能?

【功能】
- 发送文字、表情、图片、语音、视频、文件
- 已发送消息撤回(2 分钟内)
- 消息删除
- 已读回执(好友设置开启时)

【兼容性测试(重点追问)】
为什么 App 需要做兼容测试?
→ 不同手机系统版本、不同微信版本、不同分辨率、不同网络环境,
   行为可能有差异。比如 Android 和 iOS 的推送机制就不同。

【边界】
- 发送超长消息(最大字符限制)
- 发送敏感词是否拦截
- 网络中断时消息是否进入发送队列,重连后自动发送

14. 智力题:100 个球,甲乙轮流拿,每次最多拿 5 个,拿到第 100 个赢。

【先拿必胜策略】

关键:每轮"两人拿的总数 = 6" → 100 ÷ 6 = 16 余 4

策略:先拿 4 个,之后每次和对方凑 6(对方拿 X,我拿 6-X)

必胜条件:第一次拿 4 个

【追问:如果拿到第 100 个输呢?

转变为"谁拿到第 99 个就赢"
策略变为凑 6,但起点不同。

15. 场景题:50 个红球 50 个蓝球,放到两个盒子里,摸到红球概率最大。

最优解:
- 第一个盒子放 1 个红球
- 第二个盒子放剩余全部(49 红 + 50 蓝)

摸到红球概率:
P = 1/2 × 1(从盒子1摸到红球)+ 1/2 × 49/99(从盒子2摸到红球)
  = 0.5 + 0.5 × 49/99 ≈ 0.747

16. 场景题:系统容量提升(ABC 三模块各 3 实例)

题目:一个请求先到 A(随机),A 再随机请求 B(1s 超时,最多重试 2 次),
      B 同样最多重试 2 次请求 C,问系统有什么问题?

可能的问题:
1. 雪崩:某一层超时 → 上层重试 → 流量翻倍 → 进一步超时 → 恶性循环
2. 重复请求:重试导致同一个请求被执行多次 → 数据重复(幂等性问题)
3. 资源耗尽:重试期间连接不释放 → 连接池耗尽
4. 延迟累积:A→B→C,每层重试累积延迟,末端超时率很高

解决方案:
- 限流
- 熔断(当某个下游失败率高时快速失败,不重试)
- 重试时加随机延迟(避免所有请求同时重试)
- 保证接口幂等性

三、三面(30~45 分钟 · 主管面 / 综合面)

三面关键词:稳定性、动机、沟通能力、全局思维 面试官目的:判断你是不是"靠谱、值得培养的人"


1. 你对测开的理解是什么?测开需要具备什么能力?

测试开发 = 测试 + 开发,是用工程化手段保障质量。

测开需要的能力:
1. 测试能力:测试用例设计、缺陷定位、质量评估
2. 编码能力:自动化脚本、测试工具、平台开发
3. 工程能力:CI/CD、DevOps、持续交付
4. 软实力:沟通协调(需要和开发、产品频繁对接)、细心耐心

追问:你觉得自己做测开的优势是什么?

1. 我有测试思维,能从用户角度思考问题
2. 我有开发能力,能把测试工作自动化、工程化
3. 我细心、耐心,适合做质量保障工作

2. 你最大的优点和缺点是什么?

【优点】

我做事比较细心、有责任心。
比如我做自动化的时候,会主动考虑边界情况、网络异常,
设计覆盖率较高的用例。

【缺点】

我有时候追求完美,会在一个细节上花较多时间。
但我现在会先用四象限法评估任务优先级,
先把核心功能做好,再优化细节。

3. 你最大的遗憾是什么?

我本科/研究生期间有一段时间,对未来的方向比较迷茫,
没有提前系统学习测试相关的知识和工具。
但后来我明确了自己要走测开这条路,
就主动做了 XXX 项目、XXX 实习,来补足自己的短板。

4. 如果给你一个不熟悉的项目,三天内完成测试,你怎么做?

1. 快速熟悉需求:和产品/开发要文档,1 对 1 沟通,梳理核心流程
2. 识别关键路径:先找核心功能(用户使用频率最高的路径)
3. 设计核心用例:用等价类+边界值,优先覆盖主流程
4. 利用工具:用 Charles/Fiddler 抓包快速定位问题
5. 自动化辅助:对核心路径写简单脚本,快速回归
6. 沟通同步:每天同步进度,有风险及时暴露

5. 如果一个项目 Bug 很多,你怎么办?

1. 分类统计:用 Bug 管理工具(Jira)统计 Bug 类型、严重程度
2. 找根因:是需求不清、开发粗心、还是测试漏测
3. 推动改进:
   - 需求评审更严格(减少需求歧义)
   - 加强开发自测(引入单元测试)
   - 提高自动化覆盖率(减少回归漏测)
4. 风险预警:提前和项目经理沟通,调整上线时间

6. 职业规划是什么?

短期(1~2 年):
- 扎实测试基础,掌握自动化测试、持续集成
- 能独立负责一个模块的测试工作

中期(3~5 年):
- 成为核心测开,具备独立设计测试方案的能力
- 深入某一领域(性能测试/安全测试/测试平台)

长期:
- 测试架构师 or 测试团队负责人
- 能从全局视角设计质量保障体系

7. 你有其他 Offer 吗?你的意向城市是?

【实话实说 + 表达诚意】

目前有 X 个 offer 在推进中,但百度是我最想来的,
因为 XXX(和公司业务/技术栈相关的原因)。

意向城市是 XXX。

8. 你有什么问题要问我?

1. 这个岗位日常主要负责什么业务?
2. 技术栈是什么?(Java 还是 Python?)
3. 测试和开发的比例是多少?
4. 进入后有没有系统的培训?
5. 面试结果什么时候通知?

【三面不要问太技术的问题,重点问团队文化、成长空间】


四、高频手撕代码汇总(百度一面二面必考)

题目难度出现频率
判断链表是否有环★★⭐⭐⭐⭐⭐
两数之和★★⭐⭐⭐⭐⭐
最长回文子串★★★⭐⭐⭐⭐
相交链表★★★⭐⭐⭐⭐
最大子序列和★★⭐⭐⭐⭐
合并有序数组★★⭐⭐⭐
字符串反转(去除特殊字符)★★⭐⭐⭐
完全二叉树节点个数★★★⭐⭐⭐
判断 IP 地址合法性★★⭐⭐
二叉树每层最大数字★★★⭐⭐

五、面试官视角总结

🥇 一面(基础面)→ 你是不是"合格的候选人"
   重点:基础扎实 + 会测试 + 能写简单代码

🥈 二面(技术面)→ 你有没有"真实能力"
   重点:项目真实经历 + 编码能力 + 问题解决思路

🥉 三面(综合面)→ 你是不是"靠谱的人"
   重点:稳定性 + 动机 + 沟通 + 价值观

每题都有标准回答思路,面试时可直接使用。


面经五:百度测开日常实习(牛客 2026)

来源: https://www.nowcoder.com/feed/main/detail/17301103f42941cea5a15a6a371937f8

一面(40min)

  1. 以前的项目经历,开发和测试的 offer 你会怎么选
  2. 具体的项目内容,怎么测试的
  3. 怎么实现自动化测试的?性能测试看哪些指标?QPS 怎么计算的
  4. Java 基本数据类型、Java 反射机制
  5. SpringBoot 使用了哪些设计模式?介绍单例模式
  6. 使用过缓存吗?Redis 的优缺点、缓存雪崩/穿透/击穿三件套
  7. 数据库索引?为什么要使用?怎么判断链表有环
  8. TCP 五层结构、三次握手四次挥手流程
  9. 场景题:设计购物车的测试用例
  10. 反问工作内容和面试流程

二面(40min)

  1. 以前工作的内容,本科到研究生期间在干什么
  2. 介绍之前的项目,有哪些亮点难点
  3. ES 怎么部署的?MySQL 的索引结构
  4. Linux 用得多吗?怎么查端口是否被占用?怎么查包含某个字符的文件
  5. 写两个 SQL(查班级平均分和第二名成绩)
  6. 最常用的语言是什么?讲讲 Java 的多态
  7. 一个复制文件的 Java 程序报错,怎么定位问题
  8. 手撕代码:判断回文串
  9. 场景题:怎么测文心一言和 ChatGPT

面经六:百度测开提前批一二三面(牛客 2026)

来源: https://www.nowcoder.com/feed/main/detail/8fd3f2820d7b470c9ff45b6df154c915

一面

  1. 自我介绍(建议言简意赅,三分钟以内)
  2. 简单介绍项目
  3. 设计一个登录界面的测试用例,安全性测试
  4. 数据库手撕代码:两个表如何关联查询、分组排序、左外连接/右外连接/内连接
  5. 字符串反转、去除特殊字符、判断不符合条件的字符

二面

  1. 自我介绍
  2. 熟悉的语言,JS 与 AngularJS 的区别
  3. Python 运行发现有哪些异常?如何定义异常?
  4. 常用 Linux 语句(打开大文件、解压、关键字查询、查询关键字前后10行)
  5. HTTP 和 HTTPS 的区别、HTTP 的响应流程
  6. 网站错误返回代码的含义
  7. Python3 六个标准数据类型:不可变数据(Number、String、Tuple)vs 可变数据(List、Dictionary、Set)

面经七:百度测试开发一面(牛客 2026)

来源: https://www.nowcoder.com/feed/main/detail/a7b8ee69ecc74fbab4cc730dbf82cf4d

  1. 自我介绍
  2. 实习项目
  3. 实习中测试的流程
  4. 用的什么测试工具
  5. Postman 用来干啥的?Fiddler 用来干啥的?
  6. GET 请求和 POST 请求
  7. 浏览器输入 URL 之后到页面出现发生了什么
  8. 进程与线程的区别
  9. 线程的几种状态
  10. 垃圾回收机制
  11. 输出1-100的质数
  12. Linux 命令
  13. Transformer 了解吗?

面经八:百度技术中台服务端测开一二三面(牛客 518069)

来源: https://ac.nowcoder.com/discuss/518069

一面

  1. 手撕代码(三选二)
    • 字符串翻转
    • 正则表达式替换(字符串中数字乘以2)
    • 将列表中的异位词分组
  2. 手撕 SQL
    • 查找按姓名排序的第5-10行
    • 多表联合查询
  3. 自我介绍
  4. 项目介绍(项目简介、上下游系统、存储系统)
  5. 工作中测试流程介绍
  6. 如何执行性能测试的
  7. 如何进行安全测试的
  8. 用例设计:如何对两部电梯设计测试用例
  9. 反问

二面

  1. 自我介绍
  2. 给现公司创造的最大收益是什么?工作中怎么进行 bug 定位?
  3. 介绍负责的项目
  4. 测试过程中开发说技术层面解决不了,你会怎么办?
  5. 手撕代码:任务调度题
  6. 用例设计:给财务审批流程图,自己设计测试用例

三面

  1. 自我介绍,为什么毕业后就可以做管理?
  2. 最有成就感的事情
  3. 介绍自己搭的框架
  4. 介绍自己写的工具
  5. 应聘该职位的优势和劣势
  6. 用例二次设计(一面中的两部电梯用例设计,考察有无复盘)
  7. 手撕代码:输出最长连续字符串

面经九:百度测开一二三面(牛客 508241)

来源: https://ac.nowcoder.com/discuss/508241

一面

  1. C++:内存溢出和内存泄漏
  2. 操作系统:进程的状态,怎么切换
  3. Linux 指令:查看进程端口号、查看日志
  4. 说说你的三个优点和三个缺点
  5. 编程题:由1,2,3,4组成的不重复且各位不相等的三位数有几个?都是哪些?

二面(小姐姐)

  1. 聊项目,基本不问技术题
  2. 手写 SQL:score表(name,class,score),查出所有成绩大于80的学生名字
  3. 一个电梯怎么测试?测试有哪些方法?
  4. 聊实习、聊对测试的理解、为什么要来测试开发、给你offer在你心里能排第几

三面(部门经理)

  1. 聊实习、聊项目
  2. 遇到了什么问题
  3. 平时在学校参与什么活动
  4. 怎么学习的
  5. 你有什么优点和缺点
  6. 为什么要做测试

百度测开二面面经(4.15)

特点:深挖 AI 问答系统 / RAG 实现细节,适合有 AI 项目经验的候选人


1. 自我介绍

结构:姓名 + 学校/专业 + 核心项目(一句话) + 技术栈 + 求职意向 控制在 1.5-2 分钟,结尾引导面试官问项目


2. AI 问答系统怎么实现的

整体架构(标准回答框架):

用户提问
  → 问题预处理(意图识别、关键词提取)
  → 检索模块(向量检索 / 关键词检索 / 混合检索)
  → 召回排序(Rerank)
  → 提示词组装(Prompt Engineering)
  → 大模型推理(LLM API 调用)
  → 后处理(格式化、过滤、引用标注)
  → 返回答案

技术选型参考:

  • 向量模型:text-embedding-ada-002 / BGE / M3E
  • 向量数据库:Milvus / Chroma / Weaviate / Pinecone
  • LLM:GPT-4 / Claude / DeepSeek
  • 框架:LangChain / LlamaIndex

3. RAG 怎么实现的

RAG(Retrieval-Augmented Generation)完整流程:

离线阶段(文档入库):

  1. 文档加载(PDF/Word/网页)
  2. 文档切片(Chunking):按段落/固定长度/语义切分,chunk_size 通常 256-512 token,overlap 50-100 token
  3. 向量化:调用 Embedding 模型,将每个 chunk 转为向量
  4. 存入向量数据库,附带元数据(文档ID、来源、页码等)

在线阶段(问答):

  1. 用户问题向量化
  2. 向量相似度检索(cosine similarity / ANN)
  3. 召回 Top-K 个 chunk
  4. Rerank 重排序(可选)
  5. 组装 Prompt:[系统提示] + [召回内容] + [用户问题]
  6. 调用 LLM 生成答案

4. 向量数据库多用户隔离:如何防止检索到其他用户文章的内容

核心问题: 多用户共享向量数据库,检索时可能召回其他用户的文章切片

解决方案:元数据过滤(Metadata Filtering)

python
# 存入时附带元数据
collection.insert({
    "vector": embedding,
    "metadata": {
        "user_id": "user_123",
        "doc_id": "doc_456",
        "article_title": "xxx"
    }
})

# 检索时加过滤条件
results = collection.search(
    query_vector=query_embedding,
    filter="user_id == 'user_123' AND doc_id == 'doc_456'",
    top_k=5
)

其他方案:

  • 命名空间隔离(Namespace):Pinecone 支持,每个用户/文档一个 namespace
  • Collection 隔离:每个用户单独一个 Collection(成本高,适合企业级)
  • 混合过滤:先按 user_id 过滤,再做向量相似度排序

5. 为什么要避免全库搜索

原因:

  1. 性能:向量数据库全库扫描是 O(n),百万级向量时延迟不可接受
  2. 精度:全库搜索会引入大量不相关结果,降低召回质量
  3. 成本:计算量大,GPU/CPU 资源消耗高
  4. 安全:多租户场景下,全库搜索可能泄露其他用户数据

向量数据库的 ANN(近似最近邻)索引:

  • HNSW(Hierarchical Navigable Small World):精度高,内存大
  • IVF(Inverted File Index):先聚类,再在簇内搜索,速度快
  • 本质是用少量精度损失换取大幅性能提升

6. 一万篇文章的检索策略

分层检索策略:

第一层:粗召回(快速缩小范围)
  → 关键词过滤(BM25 / Elasticsearch)
  → 元数据过滤(时间、分类、标签)
  → 缩小到 100-500 篇候选

第二层:精排(向量相似度)
  → 对候选集做向量检索
  → 召回 Top-20

第三层:Rerank(精细排序)
  → 用 Cross-Encoder 模型重排序
  → 最终取 Top-5

混合检索(Hybrid Search):

  • 稀疏检索(BM25):擅长关键词精确匹配
  • 稠密检索(向量):擅长语义相似度
  • 融合:RRF(Reciprocal Rank Fusion)加权合并两路结果

7. 一万篇文章都包含关键词,如何排序?排序后 Prompt 组装策略

排序策略(多维度打分):

python
final_score = (
    0.4 * vector_similarity_score +   # 语义相关度
    0.3 * bm25_score +                # 关键词匹配度
    0.2 * recency_score +             # 时效性(越新越好)
    0.1 * popularity_score            # 文章热度/权威性
)

Rerank 模型:

  • Cross-Encoder(如 BGE-Reranker):对 query + passage 联合编码,精度高但慢
  • 适合对 Top-100 结果做精排,最终取 Top-5

Prompt 组装策略:

[System Prompt]
你是一个专业的问答助手,请根据以下参考资料回答用户问题。
如果参考资料中没有相关信息,请如实告知。

[参考资料]
[1] 文章标题:xxx
    内容:{chunk_1}
    
[2] 文章标题:yyy
    内容:{chunk_2}

...(Top-K 个 chunk)

[用户问题]
{user_question}

请基于以上资料回答,并标注引用来源(如[1][2])。

8. 召回十篇文章超出上下文窗口怎么办

方案一:截断(简单粗暴,不推荐)

  • 只取 Top-N 个 chunk,直到不超出窗口

方案二:压缩(Map-Reduce)

对每篇文章单独摘要 → 将摘要拼接 → 再次提问
  • LangChain 的 MapReduceDocumentsChain

方案三:迭代精炼(Refine)

先用第1篇文章回答 → 用第2篇文章补充/修正 → ... → 最终答案

方案四:动态 chunk 压缩

  • 对每个 chunk 用 LLM 提取与问题最相关的句子,压缩后再拼接

方案五:选更大上下文窗口的模型

  • Claude 3.5(200K token)、Gemini 1.5 Pro(1M token)

实际推荐: 方案一(截断)+ 方案二(摘要压缩)结合,先截断到合理数量,再对每篇做摘要


9. 用过 Code Agent 吗

结合自身实际回答,参考方向:

  • Cursor / GitHub Copilot / Claude Code / Devin
  • 用于写测试用例、生成接口测试脚本、代码 Review
  • 实际体验:优点(速度快、样板代码)、局限(上下文理解有限、需要人工 Review)

10. GPT-4.5 和 Claude Opus 有什么区别

维度GPT-4.5Claude Opus
厂商OpenAIAnthropic
上下文窗口128K200K
代码能力强(Claude Code 专项优化)
长文本理解良好更优(更大窗口)
安全性/对齐较好更保守(Constitutional AI)
价格较贵较贵
适用场景通用、代码、多模态长文档分析、复杂推理、写作

11. Claude Code 检索文章,没有走 RAG 对吧

正确理解:

  • Claude Code 是一个 Code Agent,它通过工具调用(读文件、搜索代码库)来获取上下文,本质是 Agent + Tool Use
  • RAG 是预先将文档向量化存入数据库,检索时做相似度搜索
  • Claude Code 直接读取文件系统,不需要预先建向量索引,所以不走 RAG
  • 但如果代码库很大,Claude Code 也会用类似 RAG 的方式做代码检索(如 tree-sitter 解析 + 语义搜索)

12. XHS 问答场景:RAG vs Agent Search,哪个更好

小红书问答场景特点:

  • 内容以 UGC 笔记为主,结构化程度低
  • 用户问题多样(美妆、旅游、美食等垂类)
  • 实时性要求较高(新笔记不断产生)

RAG 优势:

  • 延迟低,适合实时问答
  • 成本可控
  • 适合知识库相对固定的场景

Agent Search 优势:

  • 可以多步推理,处理复杂问题
  • 可以调用多个工具(搜索+计算+API)
  • 适合需要综合多源信息的场景

结论(个人观点):

  • 基础问答 → RAG 更合适(低延迟、低成本)
  • 复杂推理/多跳问题 → Agent Search 更合适
  • 实际落地 → RAG + Agent 混合架构:简单问题走 RAG,复杂问题触发 Agent

13. AI 问答系统尝试过哪些模型?有做过 SFT 吗

模型选型经验(参考):

  • GPT-3.5-turbo:成本低,适合简单问答
  • GPT-4 / GPT-4o:复杂推理,准确率高
  • DeepSeek:中文理解好,成本低,适合国内场景
  • Claude:长文本处理好

SFT(监督微调):

  • 通常在通用模型效果不满足垂类需求时做
  • 需要高质量标注数据(问题-答案对)
  • 成本高,一般先用 Prompt Engineering + RAG 优化,实在不行再做 SFT
  • 替代方案:Few-shot Prompting、RLHF

14. DeepSeek 用的哪个版本

结合自身实际,参考:

  • DeepSeek-V2:MoE 架构,成本极低
  • DeepSeek-V3:2024年底发布,综合能力强,接近 GPT-4
  • DeepSeek-R1:推理模型,类 o1,适合数学/代码/逻辑推理
  • DeepSeek-Coder:代码专项

15. 项目都是开发类,为什么想投测试开发

参考回答思路:

"我在开发项目过程中,发现很多 Bug 其实是可以通过系统化测试提前发现的,这让我对测试工程化产生了浓厚兴趣。测试开发不只是写测试用例,更需要设计测试框架、工具链、自动化体系,这和开发的思维方式是相通的。我希望用开发的视角去做测试,把质量保障做得更系统、更工程化。同时,测试开发岗位能让我更全面地理解整个软件研发流程,对我的长期发展也更有价值。"

关键点:

  • 不要说"测试好找工作"
  • 强调开发背景是优势(能写框架、能看代码、能做 Code Review)
  • 表达对质量工程的真实兴趣

16. 反问建议

  • 团队目前在测试工程化/AI 测试方向有哪些探索?
  • 新人入职后的成长路径是怎样的?
  • 这个岗位日常工作中,开发和测试的比例大概是多少?

百度测开面经(2026.04)


面试问题:

  1. 编程题:轮转数组
  2. SQL题:查询数据库中姓李的李老师数量
  3. 自我介绍
  4. 使用过的工具
  5. 之前的项目介绍
  6. 怎么做性能测试
  7. 在之前的工作中怎么做自动化测试的
  8. 列出Linux命令基本命令
  9. 列出k8s基本命令
  10. 给你一个智能聊天系统,如何测试
  11. 反问环节

参考回答思路:

Q1: 编程题 - 轮转数组(LeetCode 189)

python
# 方法1:三次反转(推荐,O(n)时间,O(1)空间)
def rotate(nums, k):
    n = len(nums)
    k = k % n  # 防止k大于数组长度
    nums.reverse()          # 整体反转
    nums[:k] = nums[:k][::-1]   # 前k个反转
    nums[k:] = nums[k:][::-1]   # 后n-k个反转

# 示例:[1,2,3,4,5,6,7], k=3 → [5,6,7,1,2,3,4]

Q2: SQL - 查询姓李的老师数量

sql
SELECT COUNT(*) AS count
FROM teacher
WHERE name LIKE '李%';

Q4: 常用测试工具

接口测试:Postman、JMeter、RestAssured
自动化:Selenium、Appium、pytest、unittest
性能测试:JMeter、Locust、wrk
抓包:Charles、Fiddler、Wireshark
CI/CD:Jenkins、GitLab CI
缺陷管理:Jira、禅道
监控:Prometheus、Grafana、Arthas

Q6: 性能测试怎么做

1. 确定目标:QPS、响应时间(P99)、并发用户数、错误率
2. 工具选型:JMeter / Locust
3. 场景设计:
   - 基准测试:单用户,确认功能正常
   - 负载测试:逐步加压,找性能拐点
   - 压力测试:超过预期峰值,看系统极限
   - 稳定性测试:持续压测8h/24h
4. 监控:CPU、内存、GC、数据库连接池、线程池
5. 分析瓶颈:慢SQL、线程阻塞、内存泄漏
6. 出报告:TPS曲线、响应时间分布、错误率

Q7: 自动化测试怎么做

1. 框架选型:Python + pytest + requests
2. 用例设计:接口自动化 / UI自动化
3. 数据驱动:YAML/Excel管理测试数据
4. 断言:状态码、响应体字段、数据库验证
5. 报告:Allure报告,失败截图
6. CI集成:Jenkins流水线,代码提交自动触发
7. 通知:失败自动发钉钉/邮件

Q8: Linux基本命令

bash
# 文件操作
ls -la          # 列出文件
cd /path        # 切换目录
cp src dst      # 复制
mv src dst      # 移动/重命名
rm -rf dir      # 删除
mkdir dir       # 创建目录
cat file        # 查看文件
tail -f log     # 实时查看日志
grep "key" file # 搜索内容
find / -name "*.log"  # 查找文件

# 进程/网络
ps -ef | grep java    # 查看进程
kill -9 pid           # 杀进程
netstat -tlnp         # 查看端口
lsof -i:8080          # 查看端口占用
top / htop            # 系统资源

# 权限
chmod 755 file        # 修改权限
chown user:group file # 修改所有者

Q9: k8s基本命令

bash
# Pod操作
kubectl get pods                    # 查看所有pod
kubectl get pods -n namespace       # 指定命名空间
kubectl describe pod pod-name       # 查看pod详情
kubectl logs pod-name               # 查看pod日志
kubectl logs -f pod-name            # 实时查看日志
kubectl exec -it pod-name -- bash   # 进入pod

# 部署操作
kubectl get deployments             # 查看部署
kubectl scale deployment xxx --replicas=3  # 扩缩容
kubectl rollout restart deployment xxx     # 重启部署
kubectl apply -f config.yaml        # 应用配置

# 服务/配置
kubectl get svc                     # 查看服务
kubectl get configmap               # 查看配置
kubectl get secret                  # 查看密钥
kubectl get nodes                   # 查看节点

Q10: 智能聊天系统如何测试

【功能测试】
- 正常对话:输入问题,验证回答是否相关
- 上下文理解:多轮对话,验证是否记住上下文
- 边界输入:空消息、超长消息、特殊字符、emoji
- 敏感词过滤:输入违规内容,验证是否拦截
- 多语言:中英文混合输入

【性能测试】
- 响应时间:单次对话 < 3s
- 并发:100用户同时对话,系统是否稳定
- 长对话:连续对话100轮,内存是否泄漏

【准确性测试】
- 构建标准问答集,验证回答准确率
- 意图识别准确率
- 知识边界:超出范围的问题是否正确拒绝

【安全测试】
- Prompt注入攻击
- 越权访问(A用户能否看到B用户的对话)
- 数据泄露(是否返回训练数据中的敏感信息)

【兼容性测试】
- 不同终端(PC/手机/平板)
- 不同浏览器

百度网盘测试开发一面面经(2026.04)


面试问题:

  1. 自我介绍
  2. 拷打实习,怎么设计的测试用例?需求?业务?异步任务怎么测的?
  3. 如果让你测一个接口的话,你会怎么去考虑?会考虑哪些校验点?
  4. 打开www.baidu.com会发生什么
  5. dns解析过程,是怎么找到北京百度的服务器的,说一下这个过程?
  6. 另一段实习拷打,Java后端,主要做了什么?
  7. redis数据结构,说一说基本数据类型,应用场景
  8. langchain4j框架,大模型和聊天机器人的区别?
  9. 拷打项目,说了一下核心框架
  10. 如果我给你一个IP,让你设计一个接口,只能访问这个IP五次,你会怎么设计,用什么数据结构
  11. 你项目里面的ES主要存储什么?ik分词器的内容?
  12. 链表和普通数组的区别
  13. 算法题,合并两个有序升序链表

参考回答思路:

Q3: 接口测试校验点

1. 功能校验:返回码、返回数据格式、必填字段
2. 边界值:空值、最大长度、特殊字符
3. 异常处理:异常入参、必填字段缺失
4. 性能:响应时间、并发
5. 安全:SQL注入、XSS、越权

Q4: 打开www.baidu.com发生什么

1. 浏览器检查缓存(DNS缓存、cookie)
2. 发起DNS解析请求,获取IP
3. 建立TCP连接(三次握手)
4. 发送HTTP请求
5. 服务器处理请求,返回HTML
6. 浏览器渲染(解析HTML、CSS、JS)

Q5: DNS解析过程

1. 本地hosts文件查找
2. 本地DNS缓存
3. 操作系统DNS缓存
4. 根域名服务器(.)
5. .com顶级域服务器
6. baidu.com权威DNS服务器
7. 返回IP给客户端

Q7: Redis数据结构

- String:缓存、计数器、分布式锁
- Hash:存储对象、购物车
- List:消息队列、热点列表
- Set:去重、标签、好友关系
- ZSet:排行榜、延迟任务队列
- BitMap:签到、UV统计
- HyperLogLog:UV统计
- Geo:地理位置

Q10: IP访问限制5次(设计题)

方案1:HashMap+计数器,key=IP,value=次数
方案2:HashMap+时间戳队列,滑动窗口
方案3:Redis + INCR + EXPIRE

Q12: 链表vs数组

- 链表:动态大小、插入删除O(1)、不支持随机访问、占用额外空间存指针
- 数组:固定大小、查找O(1)、插入删除O(n)、占用连续内存

Q13: 合并两个有序升序链表

python
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def mergeTwoLists(l1, l2):
    dummy = ListNode(-1)
    cur = dummy
    while l1 and l2:
        if l1.val <= l2.val:
            cur.next = l1
            l1 = l1.next
        else:
            cur.next = l2
            l2 = l2.next
        cur = cur.next
    cur.next = l1 or l2
    return dummy.next

Powered by VitePress

🔒 需要口令解锁

关注微信公众号 测开阿Duang
回复关键词 「密码」 获取口令

公众号二维码

解锁后本浏览器长期有效