下面是我在练习中协助面试 然后在牛客上挑选了一些完整的面试标题借助豆包完成的面经答案思绪汇总
快手(测试开发,一面)
作者:@露西范皮尔特
- 实行室项目:大概问了问方向
- 测试项目:TestNG怎样实现Case
- 如果每个Case前都必要关闭欣赏器的话,怎么做(我说加标签,但是面试官说能不能不在代码中显示,我:???)
- 分层设计的好处,每层的详细内容
- 登录功能的详细实现,怎样验证成功
- 用Jenkins完成了哪些工作
- 八股部分:多线程的创建方法
- 线程池的好处
- 核心线程和最大线程的区别
- 添加线程,核心线程未占满,会创建新的线程吗(我说不会,但是面试官让我下去再想想)
- 饱和策略
- CPU麋集型任务怎样设计线程池的核心线程
- MySQL索引知道哪些(我说了B+树那些,面试官说不是指底层,然后我说了聚簇索引二级索引,还有唯一主键这些)
- 索引是不是越多越好
- 查询慢可能是什么原因
- 测试场景题:一张大表为了优化分别为多个小表,怎么测试小表
- 手撕代码:合并两个有序数组
- 一些谈天:你觉得自己做测开有什么优势;互联网测试和通信测试的区别
- 反问:开发部分做什么工作,会有纯测试的岗位吗。
快手(测试开发,二面)
作者:@露西范皮尔特
- 八股部分:JVM内存模型;
- 垃圾接纳的机制;
- 进入老年代的阈值;
- JVM的可调解的参数;
- server参数;
- 垃圾收集器有哪些,以及gc方式;
- gc调优的工具
- JUC中的类有哪些
- ReentryLock优于sychronized的地方
- 场景标题怎样实现,用什么类;场景:五个人并发买票,竣过后通知。(考了信号量机制,但是不知道用啥类,对AQS不是很熟)
- Linux用什么杀死历程
- Kill命令的参数(我只知道9)
- Kill本质是什么(不知道)
- 测试项目部分:项目怎么实现;
- 运用到selenium的什么接口;
- 元素定位的方法;
- 怎样采用配置文件,为什么要用配置文件;
- 测试场景题部分:对上一面的手撕代码进行测试用例编写;
- 谈天部分:最近看了什么书学了什么;(我说看看测试的书,了解一些测试方法,好比黑盒白盒)
- 黑盒白盒的区别是什么,你更期待做哪个,你的将来规划;
- 反问:实在是面试官问我,juc jvm和测试项目关系不大,为什么还要学习这个。我说,我实在也想问问这个岗位对于这两部分的要求高吗,好像确实关系不大
- 打仗到的面试框架在工作中实用吗;
- 一面中面试官提到的不用代码怎样同一各个case的执行前的状态,面试官说可以用一下配置文件(下次再问就这么答)。
快手(测试开发,三面)
作者:@露西范皮尔特
- 项目相干标题:登录模块测试用例;
- 非常用例补充;
- 项目中遇到标题,你觉得本质是什么;
- 对于项目当初有没有没有思量过的标题;
- 除了功能测试还有其他测试方面吗?(我说了性能 追问并发测试)
- 场景题:开发角度思量一下购买的系统设计;
- 开发角度思量购物系统的容错设计;
- 谈天:测试工尴尬刁难开发工作的开导;
- 有没有应聘别的单元,目前流程;
- 选择工作时思量的标题(我:岗位,公司平台,城市。我:城市喜欢杭州;面试官:我们在北京。直接凉!然后就是长达几分钟的疯狂找补)
- 反问:测开语言;
- 重要业务;(为啥我投的杭州如今你们在北京,然后我再找补几句。。。)
滴滴(自动驾驶测开,一面)
作者:@蔓越莓在星空岛弹钢琴
- 自我介绍一下
- 看你简历做了很多竞赛,简单拿一个角逐介绍一下吧
- 说一下历程和线程的区别
- 历程之间的通讯方法有哪些
- 堆和栈的区别
- 了解计算机网络吗
- 简单说一下五层模型
- 网络层和传输层区别
- TCP工作在哪一层
- 了解TCP的三次握手四次挥手吗(举了打电话的例子)
- 为什么不能两次握手呢,为什么要多挥手四次呢
- 简单介绍一下项目吧(大创的)
- stm32是用的哪个型号的?
- 它的处置惩罚内核是什么?
- 你在项目中用到了stm32的哪些通信协议?
- 用到了哪些传感器,传感器型号是什么?
- 反问
滴滴(自动驾驶测开,二面)
作者:@蔓越莓在星空岛弹钢琴
- 简单自我介绍一下
- 重点介绍一下项目练习吧,练习过程中做了什么
- 了解哪些操作系统
- 练习怎么进行测试的
- 在开发安卓软件过程中重要是兼容性测试吗
- 了解虚拟机吗
- 开发APP过程中有没有在虚拟机上进行测试过?
- 虚拟机和真机会有哪些标题
- 虚拟机上虚拟IP地址,网络情况,设备分辨率兼容性
- 怎样抓包确定是哪个设备(可以根据Mac地址)
- 怎么确定机型是iPhone或者安卓的小米OPPO这种
- apk文件的头文件信息里包罗
- 假设如今有很多机型必要测试,项目打包下载到真机时间很长,怎样
- 保证用虚拟机测试的质量?(订定测试策略,分清轻重缓急,重要功能先测)
- 手撕代码:二叉树路径规划,计算恣意两个二叉树结点的公共子节点
- 对自动驾驶技能有什么见解?
- 了解哪些自动驾驶技能
- 对自动驾驶的技能了解
- 实行室重要研究方向是什么(答雷达激光雷达)
- 如今做了哪些和自动驾驶有关的东西吗
- 激光雷达和计算机视觉区别是什么
- 你还有什么要问我的?
滴滴(自动驾驶测开,三面)
作者:@蔓越莓在星空岛弹钢琴
- 自我介绍
- 对自动驾驶见解
- 有驾照吗
- 开过车吗
- 设计自动驾驶测试用例怎么去设计
- 从哪些角度思量
- 根据等价类原则怎么设计
- 了解哪些编程语言
- 平常怎么去学习
- 实体书籍会看吗
- 将来职业生涯规划
美团(测试开发, 一面)
作者:@wang1999
- linux常用命令并解释
- java多线程的实现方式
- 四种访问修饰符
- 索引的概念,优劣和利用注意
- 对测开的了解
- 数据库查询的左外连接,分组,排序(手写)
- 合并有序数组(手写)
- 负载均衡的实现方式
- MQ利用在哪个功能上
- redis怎么利用的
- 限流熔断
- 反问
美团(测试开发, 二面)
作者:@wang1999
- 介绍科研课题
- 介绍研究方法
- 领域内的顶刊,当前研究方向
- 论文创新点
- 依次问项目难点,亮点,以及不敷
美团(测试开发, HR面)
作者:@wang1999
- 职业规划测开的认识
- 对互联网企业,传统企业,新兴企业的见解,更愿意加入哪个范例
- 项目配景、亮点、难点
- 故乡
- base
- 薪资盼望
- 目前offer情况
- 反问
好的,以下是针对你提供的面试标题,面向校招面试的详细答案输出。这些答案会尽量简便明确,同时涵盖关键知识点,帮助你在面试中更好地展示自己的能力。
1. TestNG怎样实现每个Case前都关闭欣赏器?(面试官要求不在代码中显示)
答案:可以利用TestNG的监听器(Listener)机制来实现。详细来说,可以实现ITestListener接口,在onTestStart方法中关闭欣赏器。这样,每个测试用例开始前都会自动触发关闭欣赏器的操作,而不必要在每个测试用例代码中显式调用。
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
20
1
- import org.testng.ITestListener;
复制代码 2
- import org.testng.ITestResult;
复制代码 3
- import org.openqa.selenium.WebDriver;
复制代码 4
5
- public class CustomListener implements ITestListener {
复制代码 6
- private WebDriver driver;
复制代码 7
8
9
- public void onTestStart(ITestResult result) {
复制代码 10
11
12
13
14
15
- driver = new WebDriver(); // 示例代码,根据实际情况初始化
复制代码 16
17
18
19
20
在testng.xml中注册这个监听器:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
12
1
- <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
复制代码 2
3
4
- <listener class-name="com.example.CustomListener"/>
复制代码 5
6
7
8
- <class name="com.example.TestClass"/>
复制代码 9
10
11
12
2. 分层设计的好处,每层的详细内容
答案:分层设计是一种常见的软件架构设计方法,其重要好处包罗:
- 解耦:各层之间职责明确,相互独立,便于维护和扩展。
- 可复用性:每一层可以独立开发和复用,镌汰重复代码。
- 可测试性:每一层可以独立进行单元测试,进步测试效率。
- 可维护性:代码结构清楚,便于明白和维护。
常见的分层设计包罗以下几层:
- 控制层(Controller):负责接收用户请求,调用服务层处置惩罚业务逻辑,返回结果给用户。
- 服务层(Service):核心业务逻辑处置惩罚层,负责调用数据访问层获取数据,并进行业务逻辑处置惩罚。
- 数据访问层(DAO):负责与数据库交互,封装数据访问逻辑,提供数据操作接口。
- 实体层(Entity/Model):界说数据模型,通常对应数据库表结构。
3. 登录功能的详细实现,怎样验证成功
答案:登录功能的实现通常包罗以下几个步调:
- 前端:用户输入用户名和密码,点击登录按钮。
- 后端: 接收用户输入的用户名和密码。验证用户名和密码是否正确(通常与数据库中存储的用户信息对比)。如果验证成功,生成一个会话标识(如Token或Session ID),返回给前端。如果验证失败,返回错误信息。
验证登录成功的方法:
- 状态码:返回HTTP状态码200表示成功。
- 返回数据:返回包罗用户信息和Token的JSON对象。
- 页面跳转:前端根据返回结果跳转到指定页面。
测试验证:
- 正向测试:输入正确的用户名和密码,验证是否跳转到首页。
- 反向测试:输入错误的用户名或密码,验证是否提示错误信息。
4. 用Jenkins完成了哪些工作
答案:Jenkins是一个连续集成和连续摆设(CI/CD)工具,可以完成以下工作:
- 代码构建:从版本控制系统(如Git)拉取代码,执行编译和打包。
- 自动化测试:运行单元测试、集成测试和自动化测试脚本,生成测试报告。
- 代码质量检查:利用工具(如SonarQube)检查代码质量,生成质量报告。
- 摆设:将构建好的应用摆设到开发环境、测试环境或生产环境。
- 通知:在构建成功或失败时,发送通知给开发团队(如邮件、Slack消息)。
5. 多线程的创建方法
答案:Java中创建多线程有以下几种方法:
- 继续Thread类:
- 实现Runnable接口:
- 实现Callable接口(支持返回值和非常处置惩罚):
- 利用线程池:通过ExecutorService创建线程池,复用线程。
6. 线程池的好处
答案:线程池的好处包罗:
- 资源复用:镌汰线程创建和销毁的开销。
- 进步相应速率:线程池中的线程可以复用,镌汰等候时间。
- 控制线程数量:避免系统因创建过多线程而耗尽资源。
- 线程管理:提供线程管理功能,如任务队列、线程存活时间等。
7. 核心线程和最大线程的区别
答案:
- 核心线程(corePoolSize):线程池在初始化时创建的线程数量。这些线程会不绝存活,纵然没有任务也会生存。
- 最大线程(maximumPoolSize):线程池中允许的最大线程数量。当任务队列满了且核心线程也满了时,线程池会创建新的线程,直到达到最大线程数。
8. 添加线程,核心线程未占满,会创建新的线程吗?
答案:不会。只有当核心线程被占满且任务队列也满了时,线程池才会创建新的线程,直到达到最大线程数。
9. CPU麋集型任务怎样设计线程池的核心线程
答案:对于CPU麋集型任务,线程池的核心线程数通常设计为CPU核心数。由于CPU麋集型任务重要占用CPU资源,过多的线程会导致上下文切换增长开销,降低效率。
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
9
1
- int corePoolSize = Runtime.getRuntime().availableProcessors();
复制代码 2
- ExecutorService executor = new ThreadPoolExecutor(
复制代码 3
4
5
6
7
- new LinkedBlockingQueue<>()
复制代码 8
9
10. MySQL索引的范例和作用
答案:MySQL中常见的索引范例包罗:
- B+树索引:默认的索引范例,适用于范围查询和准确查询。
- 聚簇索引:数据行存储在索引的叶子节点中,通常主键是聚簇索引。
- 二级索引:非聚簇索引,叶子节点存储的是主键值。
- 唯一索引:保证列值的唯一性。
- 全文索引:用于全文搜刮。
索引的作用:
- 加速查询速率:通过索引快速定位数据。
- 保证数据唯一性:如主键和唯一索引。
- 优化排序和分组:索引可以加速ORDER BY和GROUP BY操作。
11. 索引是不是越多越好?
答案:不是。索引虽然可以加速查询速率,但也会带来以下标题:
- 增长存储空间:索引必要额外的存储空间。
- 降低写操作性能:插入、更新和删除操作必要维护索引,增长开销。
- 维护成本:过多的索引会增长数据库的维护成本。
因此,索引的数量必要根据实际需求合理设计。
12. 查询慢可能是什么原因
答案:查询慢的原因可能包罗:
- 缺少索引:查询列没有索引,导致全表扫描。
- 索引失效:查询条件不符合索引利用规则。
- 复杂查询:如多表连接、子查询等。
- 数据量过大:表中数据量过多,查询效率低。
- 服务器性能不敷:CPU、内存或磁盘性能瓶颈。
- 锁竞争:多个事件同时操作同一数据,导致锁等候。
13. 一张大表分别为多个小表后,怎么测试小表
答案:
- 数据完整性测试:确保数据在拆分过程中没有丢失或重复。
- 查询性能测试:对比拆分前后查询速率,验证是否优化。
- 关联查询测试:测试小表之间的关联查询是否正常。
- 界限条件测试:验证数据在小表之间的界限是否正确处置惩罚。
- 并发测试:模拟高并发场景,验证小表的并发性能。
14. 合并两个有序数组
答案:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
23
1
- public int[] merge(int[] nums1, int[] nums2) {
复制代码 2
- int[] result = new int[nums1.length + nums2.length];
复制代码 3
4
5
- while (i < nums1.length && j < nums2.length) {
复制代码 6
- if (nums1[i] < nums2[j]) {
复制代码 7
- result[k++] = nums1[i++];
复制代码 8
9
- result[k++] = nums2[j++];
复制代码 10
11
12
13
- while (i < nums1.length) {
复制代码 14
- result[k++] = nums1[i++];
复制代码 15
16
17
- while (j < nums2.length) {
复制代码 18
- result[k++] = nums2[j++];
复制代码 19
20
21
22
23
15. 你觉得自己做测开有什么优势
答案:
- 技能能力:把握编程语言和测试工具,可以或许快速定位标题。
- 逻辑思维:善于分析标题,设计全面的测试用例。
- 学习能力:可以或许快速把握新技能和新工具。
- 沟通能力:可以或许与开发团队有用沟通,推动标题办理。
16. 互联网测试和通信测试的区别
答案:
- 互联网测试: 重点:用户体验、性能、兼容性。工具:Selenium、JMeter、Postman等。场景:Web应用、移动应用。
- 通信测试: 重点:网络协议、信号传输、设备兼容性。工具:Wireshark、抓包工具、硬件测试设备。场景:通信设备、网络协议、物联网。
17. JVM内存模型(JMM)
答案:JVM内存模型(JMM)界说了线程之间的内存可见性和操作次序。重要特点包罗:
- 主内存与工作内存:线程之间的共享变量存储在主内存中,每个线程有自己的工作内存,线程对变量的操作必须在工作内存中进行。
- 内存操作:包罗读取、写入、锁等操作。
- 内存屏蔽:用于保证操作的次序性和可见性。
18. 垃圾接纳机制(GC)
答案:Java的垃圾接纳机制通过自动接纳无用对象的内存,避免内存泄漏。常见的垃圾接纳算法包罗:
- 标记-扫除算法:标记运动对象,扫除未标记的对象。
- 复制算法:将运动对象复制到另一个内存区域。
- 标记-压缩算法:标记运动对象后,将它们压缩到内存的一端。
19. 进入老年代的阈值
答案:在Java中,对象进入老年代的阈值通常由以下因素决定:
- Eden区空间不敷:当Eden区无法容纳新对象时,触发Minor GC,部分对象会被提升到老年代。
- 对象年龄:对象在新生代中经历多次GC后,达到一定年龄(默认15次GC)会被提升到老年代。
- 大对象:直接分配到老年代的大对象。
20. JVM的可调解参数
答案:常见的JVM参数包罗:
- -Xms:初始堆大小。
- -Xmx:最大堆大小。
- -XX:NewRatio:新生代与老年代比例。
- -XX:MaxPermSize:最大永久代大小。
- -XX:+PrintGCDetails:打印GC详细信息。
21. Server参数
答案:-server参数用于启动JVM的服务器模式,优化服务器性能。服务器模式会启用更多优化策略,如JIT编译器。
22. 垃圾收集器及其GC方式
答案:常见的垃圾收集器包罗:
- Serial GC:单线程垃圾收集器,得当单核CPU。
- Parallel GC:多线程垃圾收集器,得当多核CPU。
- CMS GC:并发标记-扫除收集器,得当低耽误场景。
- G1 GC:分区垃圾收集器,得当大堆内存。
- ZGC:低耽误垃圾收集器,得当超大堆内存。
23. GC调优工具
答案:常用的GC调优工具包罗:
- VisualVM:可视化监控和分析工具。
- JConsole:JMX监控工具。
- GC日记分析工具:如GCEasy。
24. JUC中的类有哪些
答案:java.util.concurrent(JUC)包中提供了丰富的并发工具类,包罗:
- 线程池:ExecutorService、ThreadPoolExecutor。
- 锁:ReentrantLock、ReadWriteLock。
- 并发集合:ConcurrentHashMap、CopyOnWriteArrayList。
- 同步工具类:CountDownLatch、CyclicBarrier、Semaphore。
25. ReentrantLock优于synchronized的地方
答案:ReentrantLock相比synchronized有以下优点:
- 功能更强大:支持公平锁、尝试加锁、停止加锁等。
- 可扩展性:可以联合Condition实现更复杂的线程协作。
- 性能更好:在高并发场景下,ReentrantLock的性能通常优于synchronized。
26. 场景标题:五个人并发买票,竣过后通知
答案:可以利用CountDownLatch来实现。CountDownLatch是一个同步工具类,用于等候多个线程完成某个操作。
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
27
1
- import java.util.concurrent.CountDownLatch;
复制代码 2
3
- public class TicketBooking {
复制代码 4
- private static final int NUM_THREADS = 5;
复制代码 5
- private static final CountDownLatch latch = new CountDownLatch(NUM_THREADS);
复制代码 6
7
- public static void main(String[] args) throws InterruptedException {
复制代码 8
- for (int i = 0; i < NUM_THREADS; i++) {
复制代码 9
10
11
12
- System.out.println(Thread.currentThread().getName() + " is booking a ticket");
复制代码 13
14
- System.out.println(Thread.currentThread().getName() + " has booked a ticket");
复制代码 15
- } catch (InterruptedException e) {
复制代码 16
17
18
- latch.countDown(); // 完成后计数减1
复制代码 19
20
21
22
23
- latch.await(); // 等待所有线程完成
复制代码 24
- System.out.println("All tickets have been booked. Notify everyone.");
复制代码 25
26
27
27. Linux用什么杀死历程
答案:在Linux中,可以利用kill命令杀死历程。
28. Kill命令的参数
答案:常见的kill命令参数包罗:
- -9:强制终止历程。
- -15:默认信号,请求历程正常退出。
29. Kill本质是什么
答案:kill命令的本质是向历程发送信号(如SIGTERM或SIGKILL),通知历程进行相应的操作。
30. 测试项目部分:项目怎么实现,运用到的Selenium接口
答案:项目实现通常包罗以下步调:
- 需求分析:明确测试目标和范围。
- 测试用例设计:根据需求设计测试用例。
- 自动化脚本编写:利用Selenium编写自动化测试脚本。
- 执行测试:运行脚本,生成测试报告。
- 标题跟踪:记载并跟踪标题。
常用的Selenium接口:
- WebDriver:提供欣赏器操作接口。
- WebElement:提供元素操作接口。
- By:用于元素定位。
31. 元素定位的方法
答案:Selenium中常用的元素定位方法包罗:
- ID定位:driver.findElement(By.id("elementId"));
- Class定位:driver.findElement(By.className("elementClass"));
- XPath定位:driver.findElement(By.xpath("//div[@class='elementClass']"));
- CSS定位:driver.findElement(By.cssSelector("div.elementClass"));
- LinkText定位:driver.findElement(By.linkText("Link Text"));
32. 怎样采用配置文件,为什么要用配置文件
答案:可以利用配置文件(如properties文件)来存储测试数据和参数。例如:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
5
1
2
3
4
5
在代码中加载配置文件:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
4
1
- Properties props = new Properties();
复制代码 2
- props.load(new FileInputStream("test.properties"));
复制代码 3
- String url = props.getProperty("url");
复制代码 4
利用配置文件的好处:
- 解耦:将测试数据与代码分离,便于维护。
- 可扩展性:方便扩展测试用例,无需修改代码。
- 环境适配:可以针对不同环境(开发、测试、生产)利用不同的配置文件。
33. 测试场景题:对上一面的手撕代码进行测试用例编写
答案:假设手撕代码是合并两个有序数组,测试用例可以包罗:
- 正常情况: 输入:[1, 3, 5] 和 [2, 4, 6],预期输出:[1, 2, 3, 4, 5, 6]
- 界限情况: 输入:[] 和 [1, 2, 3],预期输出:[1, 2, 3]输入:[1, 2, 3] 和 [],预期输出:[1, 2, 3]
- 非常情况: 输入:null 和 [1, 2, 3],预期抛出非常。输入:[1, 2, 3] 和 null,预期抛出非常。
34. 黑盒测试和白盒测试的区别
答案:
- 黑盒测试: 界说:不关心内部实现,只关注输入和输出。优点:从用户角度出发,发现功能标题。缺点:无法覆盖内部逻辑。
- 白盒测试: 界说:关注内部实现,测试代码逻辑。优点:覆盖内部逻辑,发现隐藏标题。缺点:无法从用户角度发现功能标题。
35. 将来职业生涯规划
答案:
- 短期目标:熟悉公司业务,把握核心技能。
- 中期目标:成为团队核心成员,负责重要项目。
- 长期目标:提升为技能专家或管理岗位,领导团队。
36. 测开语言
答案:常见的测开语言包罗:
- Java:广泛应用于企业级开发和测试。
- Python:简便易用,得当快速开发。
- JavaScript:用于前端测试和自动化。
37. 重要业务
答案:根据公司业务,可能包罗:
- 电商:购物、付出、物流。
- 社交:用户互动、内容保举。
- 金融:交易、风控、数据分析。
38. 测试工尴尬刁难开发工作的开导
答案:
- 质量意识:开发过程中更注重代码质量。
- 需求明白:从测试角度明白需求,避免误解。
- 标题预防:提前发现潜伏标题,镌汰后期修复成本。
39. 是否有驾照,是否开过车
答案:
- 有驾照:可以联合自动驾驶技能谈自己的明白和体验。
- 没驾照:可以夸大对自动驾驶技能的理论研究。
40. 自动驾驶测试用例怎么设计
答案:可以从以下角度设计测试用例:
- 功能测试:验证自动驾驶的根本功能,如车道保持、自动泊车。
- 性能测试:测试系统相应时间和处置惩罚能力。
- 安全测试:模拟紧急情况,验证系统反应。
- 兼容性测试:测试与不同车型和传感器的兼容性。
41. 等价类分别怎么设计测试用例
答案:等价类分别是一种黑盒测试方法,将输入分别为有用等价类和无效等价类。例如:
- 有用等价类:输入符合要求的值。
- 无效等价类:输入超出范围或不符合要求的值。
42. 了解哪些编程语言
答案:
- Java:得当企业级开发和测试。
- Python:得当自动化测试和数据分析。
- C++:得当底层开发和高性能应用。
43. 平常怎么学习
答案:
- 在线课程:如Coursera、LeetCode。
- 书籍:如《Effective Java》、《代码大全》。
- 实践项目:通过实际项目提升技能。
44. 实体书籍会看吗
答案:会看实体书籍,由于实体书籍便于深度阅读和反复查阅。
45. 职业规划
答案:
- 短期目标:熟悉公司业务,把握核心技能。
- 中期目标:成为团队核心成员,负责重要项目。
- 长期目标:提升为技能专家或管理岗位,领导团队。
46. 对互联网企业、传统企业、新兴企业的见解
答案:
- 互联网企业:发展快,创新能力强,得当寻求技能前沿的求职者。
- 传统企业:业务稳定,得当寻求稳定发展的求职者。
- 新兴企业:机会多,但风险也高,得当有创业精神的求职者。
47. 薪资盼望
答案:根据市场行情和个人能力,盼望薪资范围为X-X元。同时,更注重职业发展和学习机会。
48. 目前Offer情况
答案:目前有X家公司的Offer,正在综合思量公司文化、岗位职责和个人发展等因素。
49. 反问环节
答案:
- 岗位职责:能否详细介绍一下这个岗位的重要工作内容?
- 团队文化:这个岗位地点的团队文化是怎样的?
- 职业发展:公司对员工的职业发展有哪些支持?
- 项目挑战:这个岗位目前面对的最大挑战是什么?
1. pytest的用法
Pytest 是一个强大的 Python 测试框架,具有以下特点:
- 自动发现测试用例:默认识别以 test_ 开头的文件、类和方法。
- 简便的断言:直接利用 assert 语句,无需复杂的断言方法。
- 参数化测试:通过 @pytest.mark.parametrize 装饰器实现参数化。
- 丰富的插件支持:如生成测试报告(Allure、HTML报告)。
示例代码:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
7
1
2
3
4
- @pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (4, 5, 9)])
复制代码 5
- def test_add(a, b, expected):
复制代码 6
7
运行命令:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
2
1
- pytest test_file.py --html=report.html
复制代码 2
2. pytest与unittest的区别
安装
| 需手动安装(
pip install pytest
)
| 内置,无需安装
| 用例识别
| 自动识别以
test_
开头的文件、类和方法
| 需继续
unittest.TestCase
| 断言
| 利用
assert
| 利用
self.assertEqual()
等
| 参数化
| 利用
@pytest.mark.parametrize
| 需借助
parameterized
插件
| 插件支持
| 丰富的插件支持(如 Allure 报告)
| 插件较少
| 易用性
| 更简便,得当快速开发
| 更传统,得当大型项目
| 剪切 Ctrl X
复制 Ctrl C
向上插入
行向下插入
行向左插入
列向右插入
列
删除所选行
删除所选列
删除表格
合并单元格
拆分单元格
扫除内容
3. JMeter怎样进行压力测试
JMeter 是一款开源的压力测试工具,重要用于性能测试。以下是根本步调:
- 安装与启动:下载并解压 JMeter。启动 jmeter.bat 或 jmeter.sh。
- 创建测试计划:打开 JMeter,创建一个测试计划。添加线程组(Thread Group),设置并发用户数和循环次数。
- 添加采样器(Sampler):添加 HTTP 请求采样器,配置目标服务器的 URL。
- 添加监听器:添加“查察结果树”或“聚合报告”,用于查察测试结果。
- 运行测试:点击“开始”按钮,运行测试。观察监听器中的性能指标(如相应时间、吞吐量)。
示例:
- 线程数:100
- 循环次数:10
- 目标 URL:http://example.com
4. Postman怎样实现接口关联
在 Postman 中,接口关联通常用于将前一个接口的返回值传递给后一个接口。详细步调如下:
- 提取返回值:在 Postman 的“Tests”选项卡中,利用 pm 对象提取相应中的值。示例代码:
- 利用全局变量:将提取的值生存为全局变量。示例代码:
- 引用全局变量:在后续请求中,通过 {{token}} 引用全局变量。
示例:
- 第一个接口返回 token,生存为全局变量。
- 第二个接口的请求头中利用 Authorization: Bearer {{token}}。
4. 计网标题:输入一个域名,正常加载几秒,但加载了十几秒,可能是什么标题?怎样排查?
可能的原因
- DNS剖析标题: 域名剖析时间过长,可能是DNS服务器相应慢或配置错误。
- 网络耽误: 网络链路不稳定,导致数据传输耽误增长。
- 服务器性能标题: 服务器负载过高,相应慢。
- 页面资源过多: 页面包罗大量图片、脚本或外部资源,加载时间长。
- 安全设备或防火墙限制: 防火墙或安全设备对请求进行了额外检查。
排查方法
- 检查DNS剖析时间: 利用 ping 或 nslookup 命令检查域名剖析时间。示例:
- 检查网络耽误: 利用 ping 或 traceroute 检查网络耽误。示例:
- 检查服务器性能: 利用 curl 或欣赏器开发者工具查察服务器相应时间。示例:
- 检查页面资源加载: 利用欣赏器开发者工具(如 Chrome DevTools)查察页面资源加载时间。
- 检查安全设备: 检查防火墙或安全设备的日记,确认是否有非常拦截。
5. Linux:怎样查察端口并关闭端口?
查察端口
- 利用 netstat 命令:-t:显示TCP端口-u:显示UDP端口-l:显示监听状态的端口-n:显示数字形式的地址和端口-p:显示历程ID和名称
- 利用 ss 命令:
关闭端口
- 通过历程关闭:找到占用端口的历程:杀掉历程:
- 通过防火墙关闭端口:利用 iptables:利用 firewalld:
6. SQL:两个订单表,查询a表中有,b表中没有的订单
SQL查询
假设两个订单表分别为 orders_a 和 orders_b,且主键字段为 order_id,可以利用以下方法查询:
方法1:利用 NOT EXISTS
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
8
1
2
3
4
5
6
- WHERE b.order_id = a.order_id
复制代码 7
8
方法2:利用 LEFT JOIN
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
5
1
2
3
- LEFT JOIN orders_b b ON a.order_id = b.order_id
复制代码 4
- WHERE b.order_id IS NULL;
复制代码 5
7. 手撕代码:力扣169(多数元素)
标题描述
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
解题思绪
- Boyer-Moore投票算法: 初始化计数器为0,候选元素为数组的第一个元素。遍历数组,如果当前元素与候选元素相同,计数器加1;否则减1。如果计数器为0,更换候选元素为当前元素,计数器重置为1。最终的候选元素即为多数元素。
代码实现
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
11
1
- def majorityElement(nums):
复制代码 2
3
4
5
6
7
8
- count += (1 if num == candidate else -1)
复制代码 9
10
11
携程测试岗位面试标题的详细解答,帮助你更好地准备面试:
1. 项目相干的东西问得比较多
答复思绪
- 项目配景:扼要介绍项目标目标、业务场景和技能栈。
- 个人贡献:重点讲述你在项目中的角色和详细贡献,例如开发的模块、优化的流程等。
- 技能挑战:分享在项目中遇到的技能困难及办理方案,展示你的标题办理能力。
- 成果与收益:说明项目上线后的结果,如性能提升、用户体验改善等。
示例答复:
<blockquote id="nc-element-508"> 我参与的项目是一个电商系统的订单管理模块。项目标目标是优化订单处置惩罚流程,提升用户体验。我重要负责后端接口的开发和测试工作。在开发过程中,我们遇到了性能瓶颈标题,通过引入缓存机制和优化数据库查询,最终将接口相应时间从3秒降低到1秒以内。项目上线后,订单处置惩罚效率提升了50%,用户投诉率大幅下降。
2. 自动化稳定性怎么保障的
答复要点
- 代码质量:编写高质量的测试代码,遵照编码规范,镌汰潜伏标题。
- 连续集成(CI):利用工具(如Jenkins)进行连续集成,定期运行自动化测试,及时发现并修复标题。
- 监控与报警:设置监控指标,如测试覆盖率、失败率等,一旦发现标题及时报警。
- 版本管理:合理管理测试脚本的版本,避免因版本辩论导致的稳定性标题。
- 测试环境管理:确保测试环境与生产环境一致,镌汰环境差异带来的标题。
示例答复:
<blockquote id="nc-element-513"> 为了保障自动化测试的稳定性,我们采用了以下措施:首先,严格遵照编码规范,编写高质量的测试脚本;其次,通过Jenkins实现连续集成,每天定时运行自动化测试,及时发现并修复标题;此外,我们设置了监控指标,一旦测试覆盖率或失败率出现非常,会立即报警并进行排查。同时,我们还对测试脚本进行版本管理,避免因版本辩论导致的稳定性标题。最后,我们确保测试环境与生产环境一致,镌汰因环境差异带来的标题。
3. 介绍一下平常测试的项目,服务端测试打仗得多吗?
答复要点
- 项目概述:扼要介绍你参与的项目范例,如Web应用、移动应用或后端服务。
- 服务端测试经验:重点讲述你在服务端测试中的详细工作,如接口测试、性能测试、安全测试等。
- 工具与技能:介绍你利用的测试工具和框架,如Postman、JMeter、Selenium等。
- 成果与优化:分享你在服务端测试中发现的标题及优化措施。
示例答复:
<blockquote id="nc-element-518"> 我参与的项目重要是电商系统的后端服务开发和测试。在服务端测试方面,我重要负责接口测试、性能测试和安全测试。我利用Postman进行接口测试,确保接口的正确性和稳定性;通过JMeter进行性能测试,优化系统性能,将相应时间从5秒降低到2秒以内;同时,我还利用工具进行安全测试,发现并修复了多个潜伏的安全漏洞。通过这些工作,我积聚了丰富的服务端测试经验。
4. 数据库:左连接、数据库的锁有哪些(写一条给数据库加锁的语句)
左连接(LEFT JOIN)
左连接用于返回左表的全部记载,纵然右表中没有匹配的记载。
SQL示例:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
4
1
2
3
- LEFT JOIN table_b b ON a.id = b.id;
复制代码 4
数据库锁
数据库锁用于控制并发访问,防止数据辩论。常见的锁范例包罗:
- 行锁:锁定单行数据,适用于高并发场景。
- 表锁:锁定整个表,适用于批量操作。
- 意向锁:用于表示对表或行的锁定意图。
加锁语句示例:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
6
1
- -- 行锁示例(使用SELECT FOR UPDATE)
复制代码 2
- SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
复制代码 3
4
5
- LOCK TABLES table_name WRITE;
复制代码 6
5. 介绍下Redis、MetaQ、消息队列
Redis
Redis是一个高性能的键值存储系统,支持多种数据结构,如字符串、列表、集合等。它常用于缓存、消息队列和分布式锁。
应用场景:
- 缓存:镌汰数据库压力,提升读取速率。
- 消息队列:实现简单的消息传递。
- 分布式锁:用于分布式系统中的锁机制。
MetaQ(RocketMQ)
MetaQ是阿里巴巴开源的消息中心件,现更名为RocketMQ。它支持高吞吐量、低耽误的消息传递,适用于分布式系统中的异步通信。
特点:
- 高吞吐量:支持高并发消息传递。
- 高可用性:支持集群摆设,保证数据可靠性。
- 次序消息:支持消息的次序消费。
消息队列
消息队列是一种异步通信机制,允许应用程序之间通过消息进行通信。常见的消息队列包罗RabbitMQ、Kafka等。
应用场景:
- 解耦:降低系统模块之间的耦合度。
- 异步处置惩罚:进步系统相应速率。
- 负载均衡:合理分配系统负载。
6. 介绍一下幂等的概念
幂等性
幂等性是指一个操作执行多次与执行一次的结果相同。在分布式系统中,幂等性非常重要,可以防止重复操作导致的数据标题。
示例:
- HTTP方法的幂等性: GET、PUT、DELETE:幂等操作,多次执行结果相同。POST:非幂等操作,多次执行可能导致数据重复。
实现幂等性的方法:
- 唯一标识符:为每个请求生成唯一标识符(如UUID),通过数据库或缓存记载操作状态。
- 状态检查:在执行操作前,检查目标状态是否已存在。
示例代码:
- Plain Text
- C++
- Java
- C
- Python2
- Python3
- Pypy2
- Pypy3
- JavaScript
- PHP
- C#
- R
- Go
- Ruby
- Rust
- Bash
- Shell
- CSS
- HTML
- XML
- ASP/VB
- Perl
- Swift
- Objective-C
- Pascal
- MATLAB
- Scala
- Kotlin
- Groovy
- Typescript
- SQL
- MySQL
- Oracle
- SQLite
- Scheme
- TCL
复制
删除
7
1
- def process_payment(order_id):
复制代码 2
- if is_payment_processed(order_id):
复制代码 3
- return "Payment already processed"
复制代码 4
5
- mark_payment_as_processed(order_id)
复制代码 6
- return "Payment processed"
复制代码 7
7. 英语听说读写怎么样
答复要点
- 自我评估:客观评估自己的英语水平,如CET-4、CET-6结果或雅思、托福结果。
- 实际应用:分享在实际工作或学习中利用英语的经历,如阅读技能文档、与国外团队沟通等。
- 提升计划:如果有不敷,说明你的提升计划。
示例答复:
<blockquote id="nc-element-552"> 我的英语水平还不错,CET-6结果是550分。在实际工作中,我经常阅读英文技能文档,也与国外团队进行过邮件沟通,可以或许熟练利用英语进行一样平常交换和技能讨论。目前我还在通过在线课程进一步提升我的口语和写作能力。
8. 反问
反问标题示例
- 岗位职责:这个岗位的重要工作内容是什么?
- 团队文化:这个岗位地点的团队文化是怎样的?
- 职业发展:公司对员工的职业发展有哪些支持?
- 项目挑战:这个岗位目前面对的最大挑战是什么?
示例反问:
<blockquote id="nc-element-557"> 面试官,我想了解一下这个岗位的重要工作内容是什么?另外,公司对员工的职业发展有哪些支持?
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |