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.工作地点是上海吗?
上海和杭州都有,建议实习地点和工作地点一致。
全部评论
刚刚收到了hr面的通知,晚上狠狠面
1 回复 分享
发布于 06-18 11:13 江苏
非典型测开八股 好文章 Mark
1 回复 分享
发布于 06-17 22:34 北京
mar
点赞 回复 分享
发布于 06-24 20:22 广东
稳了,又一个饿了么测开佬
点赞 回复 分享
发布于 06-18 01:13 上海

相关推荐

06-18 21:31
已编辑
南京航空航天大学 Java
总结:一共半小时,比想象中要长,问了比较多场景题,&nbsp;面试风格和技术面完全不同。提问环节1.你能否先做一个自我介绍,开始今天的面试?2.你的求职意向中,是否考虑除了网络安全方向外,还会考虑java后端、测试开发等其他岗位?3.问:你是否已经确定要去做测试开发方向的工作,还是同步考虑后端岗位?答:我认为都可以考虑,现在还没有限制得很死,还在探索阶段。4.问:你在找实习时,除了测开岗位外,是否也投递了一些后端岗位?答:其实都有在投递,不会限制得很死,前端后端都会考虑。5.问:你目前是否拿到较为满意的offer,为什么可能会优先考虑我们公司?答:确还有一些offer在流程中,我对贵公司的价值观比较认同,所以可能会优先考虑。6.问:能否分享一个你在硕士期间做的相对满意、有成就感或具有挑战性的项目,包括项目背景、目的、你在其中的工作内容以及满意之处?7.问:在项目推进过程中,有哪些比较满意的点,如果重新来过,有哪些层面可以做得更好?8.问:你是否有实习经历,在之前的实习岗位是做什么的?9.问:你在实习期间实习了多久?10.问:在企业实习(如实习神经学、大数据和网络安全等岗位)与学校跟随导师做实验室项目,两者之间有什么核心差异?答:核心差异在于研究生阶段的研究工作更多是探索性的工作,在前人基础上挖掘新的领域;而在企业实习则是针对已有的岗位和明确的工作职责,主要任务是掌握当前的工作岗位,不需要过多的探索性工作。11.问:在之前实习的过程中,遇到的最大挑战是什么?答:最大的挑战是适应体制内工作,学会半文半事,与不同人打交道,包括参加会议并做会议纪要等文书工作。12.问:在实习期间,你在做人和做事能力上有哪些具体的提升?13.问:你是否有设想过如果来到互联网公司实习后可能会遇到哪些困难,并且是否决心从事互联网行业?答:认为人生是探索,虽然了解到互联网行业的差异,但尚未深入了解,打算通过实习期间的探索,尝试进入互联网行业作为未来可能的第一份工作。14.问:如果我给你这样一个暑期实习offer,你过来之后,在上手和工作推进过程中,你觉得会遇到哪些层面的挑战或困难?答:我觉得我的岗位是测试开发,主要挑战包括编写和执行测试文档,以及进行自动化测试和基础平台的研发。这些工作都是我之前没有接触过的,需要在短期内熟悉公司的流程和技术要求,例如学习自动化测试所需的Python语言或基础平台开发能力,以及熟悉测试文档的结构、编写到执行的全流程和缺陷生命周期管理。15.问:做好这个暑期实习岗位的核心能力层面有哪些?答:核心能力层面首先是编码能力,因为进行技术平台开发时编码是必需的。其次,沟通能力也很重要,需要与产品经理、开发人员进行有效沟通。所以提升编码能力和沟通能力都是必要的。16.问:你觉得我们公司或实习岗位对你来说比较好的地方主要在哪些层面?答:我觉得主要优势在于公司的定位,作为阿里系公司,拥有足够大的平台,这对于个人能力是一种很好的背书。此外,工作地点在杭州或上海,这两个地方我都喜欢,并且对测试开发相关工作内容较为熟悉,有助于能力增长。17.问:你能否客观分析一下,觉得自己与其他申请者相比,在哪些方面具有优势和劣势?18.问:你是否可以接受上海和杭州这两个地点作为实习地点?19.问:实习时间上,你最快什么时候能开始,最晚可以实习到什么时候?反问环节1.问:公司主业是否偏向某一地?答:公司没有所谓的主业或总部概念,外卖业务上上海和杭州是双核心定位,而从阿里整体来看,杭州是总部所在地。2.问:上海这边的团队主要负责哪一块业务?答:上海团队主要负责首页APP交易到购物车、下单页的链路测试,同时负责创新型业务如拼团、秒杀、卡券类业务闭环开发,以及营销工具玩法(超级吃货卡、红包、吃货豆等)的设计与测试。3.问:是否可以了解一下工作节奏?答:实习期间,公司对实习生的工作量期望并不高,更关注实习生主动学习能力和对业务的理解深度。正常情况下,正式员工晚上一般在8点至9点半之间下班,但若项目上线节奏紧张时,可能会有所加班。
查看19道真题和解析
点赞 评论 收藏
分享
评论
9
26
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务