06.17饿了么测试岗二面面经
总结:面了一个小时,一道手撕,几个八股,几道业务,还有场景行测题。
手撕环节
1.实现rm -rf path命令。已知3个方法 1.file.isFile()判断是否是文件 2.file.delete()删除文件或目录 3.listFiles()返回这个目录下的所有文件或目录
import java.io.File;
import java.util.List;
public class FileDeleter {
// 方法1: 判断是否是文件
public boolean isFile(String path) {
return new File(path).isFile();
}
// 方法2: 删除文件或目录
public void delete(String path) {
File file = new File(path);
if (file.isDirectory()) {
// 如果是目录,递归删除其内容
deleteDirectory(file);
} else {
// 如果是文件,直接删除
file.delete();
}
}
// 方法3: 返回目录下的所有文件和目录
public List<String> listFiles(String path) {
File directory = new File(path);
File[] files = directory.listFiles();
return Arrays.stream(files)
.map(File::getAbsolutePath)
.collect(Collectors.toList());
}
// 实现rm -rf功能
public void rmrf(String path) {
if (isFile(path)) {
// 如果是文件,直接删除
delete(path);
} else {
// 如果是目录,递归删除
deleteDirectory(new File(path));
}
}
// 递归删除目录及其内容
private void deleteDirectory(File directory) {
// 获取目录下所有文件和子目录
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 递归删除子目录
deleteDirectory(file);
} else {
// 删除文件
file.delete();
}
}
}
// 删除空目录
directory.delete();
}
}
2.追问:针对这个功能,请设计测试用例
1.判断命令行是否为空
2.判断关键字是否正确
3.判断path是否为空
4.判断path是否合法(无效,超过长度)
5.判断path是绝对路径还是相对路径
6.判断是否具有删除权限
7.判断删除的是文件还是路径
8.判断删除的文件类型(二进制,普通)
场景题
1.找出一个10w个元素的数组中,最大的1000个数
使用最小堆,只保留最大的1000个数
(原来思路是对整个数组排序,排成最大堆,这样的方案空间占用很多)
2.请你列出支付宝的转账功能的测试点(系统层级)
八股部分
1.SpringBoot的注解
1.1.启动类注解
●@SpringBootApplication 组合注解,包含以下三个注解:
●@SpringBootConfiguration:标记为配置类
●@EnableAutoConfiguration:启用自动配置(扫描META-INF 的spring.factories,如果有对应的组件,就加载对应的Bean文件)
●@ComponentScan:组件扫描
1.2.条件注解
●@ConditionalOnClass 当类路径下有指定类时生效
●@ConditionalOnMissingBean 当容器中没有指定Bean时生效
●@ConditionalOnProperty 当配置属性满足条件时生效
2.Spring如何管理依赖?
Spring Boot 通过其独特的依赖管理机制,极大地简化了项目依赖配置,解决了传统Spring项目中常见的依赖冲突和版本管理问题。
父项目继承(spring-boot-starter-parent)
Spring Boot 提供了starter-parent作为推荐的基础父POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version> <!-- 使用最新版本 -->
</parent>
优势 :
●自动管理依赖版本(无需指定版本号)
●默认的Maven配置(资源过滤、插件配置等)
●合理的默认配置(Java版本、编码等)
3.SpringBoot依赖注入如何使用
@Autowired,@Resource,@Injected
4.三种注入的方式了解吗
常用方式:
a. 构造器注入(Constructor Injection) - 官方推荐: 通过类的构造方法注入依赖项。
i.优点:依赖项不可变(final),确保在使用对象之前所有依赖都已准备好,完全初始化后的对象是线程安全的(如果依赖项也是线程安全的),强制要求依赖项,便于测试(测试时可以直接传入mock对象)。
b. Setter注入(Setter Injection): 通过类的setter方法注入依赖项。
i.优点:可选依赖项(可以没有Setter调用,依赖可能为null),允许在对象创建后重新配置依赖(但通常不建议)。
c. 字段注入(Field Injection) - 尽量避免: 直接在字段上使用@Autowired注解。
i. 虽然使用简单,但通常不推荐,原因:破坏了封装性(字段变成public或通过反射可访问),难测试(需要反射或启动完整Spring上下文才能设置依赖),可能使类的依赖关系不明确(没有构造器或setter明确声明依赖),不利于声明final字段。
5.Spring如何管理事务?
使用AOP,使用try catch
try:
开始事务
执行方法
提交事务
catch:
回滚事务
项目提问
1.你的项目输入输出是什么?
2.有应用场景嘛?
3.有应用大模型吗?
4.除了实验室课题,你还做过什么项目?
5.这两个学校项目占用了你多少时间?课余时间一般在做什么?(觉得我没有额外学习编程呜呜
行测部分
1.你遇到问题会怎么解决?
2.假如领导交给你一个不能实现,或者你觉得没必要实现的任务,你会怎么做?
3.你人生中最大的困难是什么?
4.你选择测试开发岗位的原因是什么?对未来的职业规划是什么?
反问环节
1.是否可以了解一下目前测试业务范围?
测试业务范围主要是负责饿了么APP点外卖、淘宝闪购以及用户能看到的所有页面和用户使用场景的测试工作。
2.对于实习生来说,可能会负责哪些工作内容?
实习生负责的工作内容取决于所在部门,可能涉及客户端测试或底层算法层的测试,具体要求根据实习生的分配部门和能力所在进行安排。
3.平时的工作节奏是怎样的?
正常上班时间为早上九点半,下班时间为下午六点半,但实际工作时间可以根据项目进度自行调整,周末通常为双休日。工作中会有临时高强度的情况,但并非常态。
4.工作地点是上海吗?
上海和杭州都有,建议实习地点和工作地点一致。
手撕环节
1.实现rm -rf path命令。已知3个方法 1.file.isFile()判断是否是文件 2.file.delete()删除文件或目录 3.listFiles()返回这个目录下的所有文件或目录
import java.io.File;
import java.util.List;
public class FileDeleter {
// 方法1: 判断是否是文件
public boolean isFile(String path) {
return new File(path).isFile();
}
// 方法2: 删除文件或目录
public void delete(String path) {
File file = new File(path);
if (file.isDirectory()) {
// 如果是目录,递归删除其内容
deleteDirectory(file);
} else {
// 如果是文件,直接删除
file.delete();
}
}
// 方法3: 返回目录下的所有文件和目录
public List<String> listFiles(String path) {
File directory = new File(path);
File[] files = directory.listFiles();
return Arrays.stream(files)
.map(File::getAbsolutePath)
.collect(Collectors.toList());
}
// 实现rm -rf功能
public void rmrf(String path) {
if (isFile(path)) {
// 如果是文件,直接删除
delete(path);
} else {
// 如果是目录,递归删除
deleteDirectory(new File(path));
}
}
// 递归删除目录及其内容
private void deleteDirectory(File directory) {
// 获取目录下所有文件和子目录
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 递归删除子目录
deleteDirectory(file);
} else {
// 删除文件
file.delete();
}
}
}
// 删除空目录
directory.delete();
}
}
2.追问:针对这个功能,请设计测试用例
1.判断命令行是否为空
2.判断关键字是否正确
3.判断path是否为空
4.判断path是否合法(无效,超过长度)
5.判断path是绝对路径还是相对路径
6.判断是否具有删除权限
7.判断删除的是文件还是路径
8.判断删除的文件类型(二进制,普通)
场景题
1.找出一个10w个元素的数组中,最大的1000个数
使用最小堆,只保留最大的1000个数
(原来思路是对整个数组排序,排成最大堆,这样的方案空间占用很多)
2.请你列出支付宝的转账功能的测试点(系统层级)
八股部分
1.SpringBoot的注解
1.1.启动类注解
●@SpringBootApplication 组合注解,包含以下三个注解:
●@SpringBootConfiguration:标记为配置类
●@EnableAutoConfiguration:启用自动配置(扫描META-INF 的spring.factories,如果有对应的组件,就加载对应的Bean文件)
●@ComponentScan:组件扫描
1.2.条件注解
●@ConditionalOnClass 当类路径下有指定类时生效
●@ConditionalOnMissingBean 当容器中没有指定Bean时生效
●@ConditionalOnProperty 当配置属性满足条件时生效
2.Spring如何管理依赖?
Spring Boot 通过其独特的依赖管理机制,极大地简化了项目依赖配置,解决了传统Spring项目中常见的依赖冲突和版本管理问题。
父项目继承(spring-boot-starter-parent)
Spring Boot 提供了starter-parent作为推荐的基础父POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version> <!-- 使用最新版本 -->
</parent>
优势 :
●自动管理依赖版本(无需指定版本号)
●默认的Maven配置(资源过滤、插件配置等)
●合理的默认配置(Java版本、编码等)
3.SpringBoot依赖注入如何使用
@Autowired,@Resource,@Injected
4.三种注入的方式了解吗
常用方式:
a. 构造器注入(Constructor Injection) - 官方推荐: 通过类的构造方法注入依赖项。
i.优点:依赖项不可变(final),确保在使用对象之前所有依赖都已准备好,完全初始化后的对象是线程安全的(如果依赖项也是线程安全的),强制要求依赖项,便于测试(测试时可以直接传入mock对象)。
b. Setter注入(Setter Injection): 通过类的setter方法注入依赖项。
i.优点:可选依赖项(可以没有Setter调用,依赖可能为null),允许在对象创建后重新配置依赖(但通常不建议)。
c. 字段注入(Field Injection) - 尽量避免: 直接在字段上使用@Autowired注解。
i. 虽然使用简单,但通常不推荐,原因:破坏了封装性(字段变成public或通过反射可访问),难测试(需要反射或启动完整Spring上下文才能设置依赖),可能使类的依赖关系不明确(没有构造器或setter明确声明依赖),不利于声明final字段。
5.Spring如何管理事务?
使用AOP,使用try catch
try:
开始事务
执行方法
提交事务
catch:
回滚事务
项目提问
1.你的项目输入输出是什么?
2.有应用场景嘛?
3.有应用大模型吗?
4.除了实验室课题,你还做过什么项目?
5.这两个学校项目占用了你多少时间?课余时间一般在做什么?(觉得我没有额外学习编程呜呜
行测部分
1.你遇到问题会怎么解决?
2.假如领导交给你一个不能实现,或者你觉得没必要实现的任务,你会怎么做?
3.你人生中最大的困难是什么?
4.你选择测试开发岗位的原因是什么?对未来的职业规划是什么?
反问环节
1.是否可以了解一下目前测试业务范围?
测试业务范围主要是负责饿了么APP点外卖、淘宝闪购以及用户能看到的所有页面和用户使用场景的测试工作。
2.对于实习生来说,可能会负责哪些工作内容?
实习生负责的工作内容取决于所在部门,可能涉及客户端测试或底层算法层的测试,具体要求根据实习生的分配部门和能力所在进行安排。
3.平时的工作节奏是怎样的?
正常上班时间为早上九点半,下班时间为下午六点半,但实际工作时间可以根据项目进度自行调整,周末通常为双休日。工作中会有临时高强度的情况,但并非常态。
4.工作地点是上海吗?
上海和杭州都有,建议实习地点和工作地点一致。
全部评论
刚刚收到了hr面的通知,晚上狠狠面

非典型测开八股 好文章 Mark
mar
稳了,又一个饿了么测开佬
相关推荐