自我介绍
回答思路: 采用“总-分-总”结构。我是谁(学校/专业)+ 核心竞争力(技术栈/实习经验)+ 为什么匹配这个岗位(对测试的热情)。 回答示例: 面试官好,我是[你的名字],是[你的大学]计算机专业的26届应届毕业生。在校期间,我系统学习了Java基础、数据库原理及软件测试理论,并能熟练使用Spring Boot、MyBatis等框架进行开发。为了提升实践能力,我曾在[某公司]担任测试开发实习生,主要负责[某模块]的功能测试和自动化脚本编写。这段经历让我深刻理解了保障代码质量的重要性,也熟练掌握了Linux和Git等工具。我非常认可飞猪的技术氛围,希望能加入团队,从基础的测试做起,逐步向测试开发工程师转型。
介绍一下你做的项目
回答思路: 不要面面俱到,挑选技术栈最匹配、你最熟悉的一个。采用“STAR法则”:背景(项目干嘛的)+ 任务(你负责什么)+ 行动(用了什么技术/工具)+ 结果(上线了/发现了多少Bug)。 回答示例: 我主要负责的是一个电商后台管理系统。该项目主要为了解决商家订单管理效率低的问题,技术栈使用的是Spring Boot + MySQL + Vue。我的职责是负责用户模块和订单模块的接口测试。我使用了Postman进行接口联调,利用JUnit编写了单元测试用例,覆盖率达到了80%以上。同时,我也参与了部分Bug的修复工作,确保了项目按时上线,上线后该模块的线上故障率明显降低。
项目中遇到的最大的问题/困难,如何解决的?
回答思路: 这题考察抗压和解决问题的能力。不要说“太难我不会”,要说“遇到了问题->分析->尝试方案->解决->复盘”。 回答示例: 在项目中我遇到的最大困难是‘偶发性的订单数据不一致’。在压力测试下,偶尔会出现库存扣减但订单未生成的情况。为了解决这个问题,首先我通过查看日志,定位到是并发请求导致的数据竞争问题。然后,我复现了该场景,并查阅资料,了解到可以通过数据库的乐观锁机制来解决。我尝试在SQL更新语句中加上版本号校验,经过反复的并发测试,最终解决了这个问题。这次经历也让我对事务的隔离级别和并发控制有了更深的理解。
登陆功能如何实现
回答思路: 从“前端交互 -> 后端验证 -> 令牌生成 -> 数据库交互”整个链路来讲。 回答示例: 登录功能主要分为以下几个步骤: ① 用户在前端输入用户名和密码,密码通常在前端会进行MD5或RSA加密传输。 ② 后端Controller接收请求,调用Service层。 ③ Service层根据用户名查询数据库,如果用户不存在,返回异常;如果存在,则获取数据库中的加密密码。 ④ 使用加密算法(如BCrypt)比对输入密码和数据库密码。 ⑤ 验证通过后,生成一个令牌(Token),可以通过JWT或UUID+Redis来实现。 ⑥ 将Token返回给前端,前端后续请求都在Header中携带该Token,后端通过拦截器验证Token有效性。
购物车如何测试
回答思路: 测试开发岗不仅要会功能测试,最好能提一下性能或自动化。分类回答:功能、性能、兼容性、安全。 回答示例: 对于购物车功能,我会从以下几个维度进行测试: ① 功能测试:添加商品(成功、失败、库存不足)、删除商品、修改数量、勾选/取消勾选、商品总价计算是否准确、登录状态与未登录状态的处理。 ② 性能测试:模拟高并发场景,测试多个用户同时添加商品或结算时的响应时间,以及数据库的并发处理能力。 ③ 兼容性测试:在不同浏览器(Chrome, Firefox)和不同设备端(App, Web)上操作是否正常。 ④ 接口测试:直接调用后端API,测试异常参数(如负数数量、超长字符串)的处理逻辑。 ⑤ 安全性测试:确保金额等敏感数据在后端二次校验,防止通过接口篡改数据。
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上,响应给用户。
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)变得极其简单。
@controller注解底层原理
回答思路: 提到“IOC容器”和“反射机制”。 回答示例: @Controller注解的底层原理主要依赖于Spring的IOC容器和反射机制。 ① 当Spring容器启动时,会通过ClassPathScanningCandidateComponentProvider扫描指定包下的类文件。 ② 如果发现类上有@Controller注解,Spring就知道这是一个Bean的定义,并将其解析为BeanDefinition。 ③ 随后,Spring利用反射机制将该类实例化,并注册到IOC容器中管理。 ④ 同时,适配器会识别到这个Bean是一个处理器,并结合@RequestMapping注解将具体的URL路径映射到该类的方法上,从而处理Web请求。
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两边的字段如果没有同时建立索引,索引也会失效。
- 不等于操作:使用 <> 或 != 有时会导致索引失效(取决于优化器)。