面经正文
1. 自我介绍
回答思路:
采用“总-分-总”结构。我是谁(学校/专业)+ 核心竞争力(技术栈/实习经验)+ 为什么匹配这个岗位(对测试的热情)。
回答示例:
面试官好,我是[你的名字],是[你的大学]计算机专业的26届应届毕业生。在校期间,我系统学习了Java基础、数据库原理及软件测试理论,并能熟练使用Spring Boot、MyBatis等框架进行开发。
为了提升实践能力,我曾在[某公司]担任测试开发实习生,主要负责[某模块]的功能测试和自动化脚本编写。这段经历让我深刻理解了保障代码质量的重要性,也熟练掌握了Linux和Git等工具。我非常认可飞猪的技术氛围,希望能加入团队,从基础的测试做起,逐步向测试开发工程师转型。
2. 介绍一下你做的项目
回答思路:
不要面面俱到,挑选技术栈最匹配、你最熟悉的一个。采用“STAR法则”:背景(项目干嘛的)+ 任务(你负责什么)+ 行动(用了什么技术/工具)+ 结果(上线了/发现了多少Bug)。
回答示例:
我主要负责的是一个电商后台管理系统。该项目主要为了解决商家订单管理效率低的问题,技术栈使用的是Spring Boot + MySQL + Vue。我的职责是负责用户模块和订单模块的接口测试。我使用了Postman进行接口联调,利用JUnit编写了单元测试用例,覆盖率达到了80%以上。同时,我也参与了部分Bug的修复工作,确保了项目按时上线,上线后该模块的线上故障率明显降低。
3. 项目中遇到的最大的问题/困难,如何解决的?
回答思路:
这题考察抗压和解决问题的能力。不要说“太难我不会”,要说“遇到了问题->分析->尝试方案->解决->复盘”。
回答示例:
在项目中我遇到的最大困难是‘偶发性的订单数据不一致’。在压力测试下,偶尔会出现库存扣减但订单未生成的情况。
为了解决这个问题,首先我通过查看日志,定位到是并发请求导致的数据竞争问题。然后,我复现了该场景,并查阅资料,了解到可以通过数据库的乐观锁机制来解决。
我尝试在SQL更新语句中加上版本号校验,经过反复的并发测试,最终解决了这个问题。这次经历也让我对事务的隔离级别和并发控制有了更深的理解。
4. 登陆功能如何实现
回答思路:
从“前端交互 -> 后端验证 -> 令牌生成 -> 数据库交互”整个链路来讲。
回答示例:
登录功能主要分为以下几个步骤:
- 用户在前端输入用户名和密码,密码通常在前端会进行MD5或RSA加密传输。
- 后端Controller接收请求,调用Service层。
- Service层根据用户名查询数据库,如果用户不存在,返回异常;如果存在,则获取数据库中的加密密码。
- 使用加密算法(如BCrypt)比对输入密码和数据库密码。
- 验证通过后,生成一个令牌(Token),可以通过JWT或UUID+Redis来实现。
- 将Token返回给前端,前端后续请求都在Header中携带该Token,后端通过拦截器验证Token有效性。
5. 购物车如何测试
回答思路:
测试开发岗不仅要会功能测试,最好能提一下性能或自动化。分类回答:功能、性能、兼容性、安全。
回答示例:
对于购物车功能,我会从以下几个维度进行测试:
- 功能测试:添加商品(成功、失败、库存不足)、删除商品、修改数量、勾选/取消勾选、商品总价计算是否准确、登录状态与未登录状态的处理。
- 性能测试:模拟高并发场景,测试多个用户同时添加商品或结算时的响应时间,以及数据库的并发处理能力。
- 兼容性测试:在不同浏览器(Chrome, Firefox)和不同设备端(App, Web)上操作是否正常。
- 接口测试:直接调用后端API,测试异常参数(如负数数量、超长字符串)的处理逻辑。
- 安全性测试:确保金额等敏感数据在后端二次校验,防止通过接口篡改数据。
6. Spring MVC是什么?m是什么,v是什么,c是什么,他们之间怎么驱动的?
回答思路:
标准定义+核心组件职责+工作流程(这是重点)。
回答示例:
Spring MVC是Spring框架的一个模块,用于开发Web应用,它实现了MVC设计模式。
- M(Model,模型):负责数据处理和业务逻辑,通常是JavaBean或Entity实体类。
- V(View,视图):负责数据展示,比如JSP、HTML或Thymeleaf页面。
- C(Controller,控制器):作为核心调度者,接收请求并调用Model,再选择View进行渲染。
驱动流程:
- 用户请求发送到DispatcherServlet(前端控制器)。
- DispatcherServlet调用HandlerMapping(处理器映射器)找到具体的Controller。
- Controller执行业务逻辑,返回ModelAndView对象。
- DispatcherServlet调用ViewResolver(视图解析器)解析视图。
- 最后将Model数据渲染到View上,响应给用户。
7. Spring Boot是什么?和Spring MVC的区别
回答思路:
强调Spring Boot是“约定优于配置”,是Spring MVC的升级/封装。
回答示例:
Spring Boot是基于Spring框架的开发框架,它的核心思想是‘约定优于配置’,旨在简化Spring应用的初始搭建和开发过程,通过自动配置大大减少了XML配置。
区别:
- 配置复杂度:Spring MVC开发需要配置大量的XML(如DispatcherServlet、ViewResolver等),而Spring Boot几乎零配置,内置了Tomcat,开箱即用。
- 集成度:Spring Boot集成了常用的第三方库(如Redis、MongoDB、MQ等),只需引入starter依赖即可自动配置;Spring MVC需要手动整合。
- 关系:Spring Boot通常包含Spring MVC,可以理解为Spring Boot让开发Web应用(基于Spring MVC)变得极其简单。
8. @controller注解底层原理
回答思路:
提到“IOC容器”和“反射机制”。
回答示例:
@Controller注解的底层原理主要依赖于Spring的IOC容器和反射机制。
- 当Spring容器启动时,会通过ClassPathScanningCandidateComponentProvider扫描指定包下的类文件。
- 如果发现类上有@Controller注解,Spring就知道这是一个Bean的定义,并将其解析为BeanDefinition。
- 随后,Spring利用反射机制将该类实例化,并注册到IOC容器中管理。
- 同时,适配器会识别到这个Bean是一个处理器,并结合@RequestMapping注解将具体的URL路径映射到该类的方法上,从而处理Web请求。
9. MySQL怎么建索引?索引失效的情况
回答思路:
语法简单带过,重点讲索引失效(必考点)。
回答示例:
建索引:
通常使用 CREATE INDEX index_name ON table_name(column_name); 语句,或者在创建表时直接指定。常用的索引结构有B+树索引和哈希索引。
索引失效的常见情况:
- 使用函数计算:在WHERE条件中对索引列进行了函数运算,如
WHERE SUBSTR(name,1,3)='abc'。 - 隐式类型转换:例如字段是字符串,查询时用了数字
WHERE phone_num = 138000...,数据库会进行隐式转换导致索引失效。 - 最左前缀原则:对于联合索引,如果查询条件没有包含索引的最左侧字段,索引会失效。
- Like查询:使用
LIKE '%abc'(百分号在左边)会导致全表扫描,而LIKE 'abc%'可以走索引。 - OR连接:OR两边的字段如果没有同时建立索引,索引也会失效。
- 不等于操作:使用
<>或!=有时会导致索引失效(取决于优化器)。
常见问题 FAQ
这篇面经适合准备飞猪测试开发工程师2025届校园招聘面试的同学参考,尤其适合用来了解面试流程、常见问题、岗位考察重点和复盘方向。
通常会结合岗位要求考察专业基础、项目经历、业务理解、沟通表达和解决问题能力。建议结合面经中的题目,把自己的经历整理成可追问的案例。
可以先通读正文了解流程,再整理高频问题和回答思路,最后把答案替换成自己的项目、实习或校园经历,形成更真实的表达。
不建议直接背诵。回答思路更适合用来理解考察点,真正面试时应围绕自己的经历、岗位要求和现场追问灵活组织答案。




