感谢大家的莅临,小编在文章末尾为大家准备了一些福利,需要的可以获取哦。

本科毕业于武汉某二本普通院校,本人 16 年开始工作,曾任职上海哔哩哔哩科技有限公司(B 站)高级测试开发,目前在一家云计算公司担任测试工程师,日常工作比较繁杂,主要负责功能测试,自动化测试,性能测试以及测试工具的开发。

工作六年左右,参与大大小小的面试将近 100 多场,拿到过货拉拉、众安保险、得物、网易和百度等公司的 offer,所以在测试工程师日常学习、面试等方面具备丰富的经验,又加上最近 “金三银四”,所以想把最近几年积攒的部分面试题和答案分享给大家,后期看文章热门程度,再陆续分享其他面试题和答案。

一.基础题

1.测试用例你一般是怎么设计的,怎么可以提高覆盖率?

有没有形成自己的 一套方法论?

答:这些都是基础的理论题。

2.电梯、朋友圈、红包、登录功能是怎么测试的?用例设计

答:这些都是基础的用例设计题目,网上一大堆,建议面试前多准备几个,总结其中的规律。

3.假如让你独立负责一个大项目,你是如何开展测试的?

答:可以理解为如何保障产品质量,从需求分析理解、用例设计和评审、测试 bug 提交和跟踪、上线验证、项目复盘等等方面回答。

4.接口测试你是怎么做的?都发现了哪些问题,详细说下定位分析过程。

答:如截图:

遇到问题如截图:

5.测试过程中你遇到最难的一个技术问题是什么?如何解决的?

答:面试前重点准备一个类似的题目,比如开发了测试工具,提高效率,搭建自动化框架或平台,引入了测试覆盖率工具、代码检测工具等等

6.你们整个测试流程是怎样的?

答:大致分为以下几种测试需求分析阶段、测试计划阶段、测试设计阶段、测试执行阶段、测试评估阶段。

二.网络相关

http 和 https ,tcp 和 udp 协议区别,网络七层模型,

答:HTTPS 和 HTTP 的区别主要如下:

tcp 和 udp 协议区别:

网络七层模型:

2.tcp 为啥三次握手,为啥四次挥手,

答:因为当 Server 端收到 Client 端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。但是关闭连接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个 ACK 报文,告诉 Client 端,"你发的 FIN 报文我收到了"。只有等到我 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。故需要四步握手。

3.tcp 拥塞算法、滑动窗口、重传机制、粘包和拆包

答:滑动窗口协议(Sliding Window Protocol)、重传机制详情见

TCP 滑动窗口/快速重传机制Shawei的博客-CSDN 博客_tcp 快速重传机制 。

拆包 :TCP 直接将应用层数据包(可以认为就是一个数组)发给接收方,并且根据 TCP 协议,TCP 会将每个发送的数据包编号(序列号),发送完一个序列号后,接收端收到会回复该序列号,代表已经被接受,but 接收端有自己的 TCP 缓存区,它会将多个包积累在一起再进行处理,这样的结果是导致包与包之间 “无缝连接”,即所谓的” 粘包 “

粘包:针对此问题,就有了一些解决办法:哪每个包长度固定:这样接收端就可以每隔一定长度进行拆包,但缺点是浪费资源,加入头部信息:每个数据包前加入该数据包中数据的长度值,这样接收端从缓存中读取时,通过读该头部信息,知道了每个包的长度,这样就能拆包

4.一些抓包工具如 fidder、tcpdump 的使用,

答:网上都有现成的使用教程,可以选一两篇去操作下。

5.浏览器输入百度网址发生了什么?DNS 解析过程

答:这个问题比较宽泛,整个流程也比较长,涉及到网络 7 层模型、dns 解析、tcp/ip 协议簇,三次握手、负载均衡、集群架构、数据库,linux 系统状态、进程切换等等方面,看你自己对哪块比较熟悉,重点去说

6.说下 cookies,session 鉴权机制?为什么要引入这套机制?

答:

引入原因:HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。

三.数据库重中之重

简单

1、基本的增删改查语句;

答:insert、delete、update、select sql 编写。

2、多表联合查询、左右连接区别、子查询等;

答:网上都有教程,可以自行查找,在这里不做赘述。

3、聚合、分组、排序 sql 语句编写、having 和 where 区别

答:表数据

sql 编写:

SELECT

class 班级名称,

COUNT(*) 每个班级人数,

MAX(grade) 最高分,

MIN(grade) 最低分,

SUM(grade) 班级总分,

AVG(grade) 平均分

FROM

student

where age <20

GROUP BY

class

HAVING SUM(grade) >=34

ORDER BY

最高分 DESC

执行结果:

4、char 和 varchar 区别等

答:varchar;表示变长字符串,char;定长字符串。

5、三范式是什么?

答:第一范式 (确保每列保持原子性)、第二范式 (确保表中的每列都和主键相关)、第三范式 (确保每列都和主键列直接相关,而不是间接相关)

中级

1、说一下 sql 是怎么优化的?

答:show variables like '%quer%'; 查询慢查询日志相关的设置,找出慢查询的 sql ,用 explain 查询 sql 的执行计划,该加索引的加索引(要知道索引正确使用场景如下面试题),尽量少 连接查询、select *、避免类型转换,减少回表次数。

2、索引的概念、类型,优缺点分析、索引应用场景和索引失效场景;

答:索引是帮助 mysql 高效获取数据的数据结构

优点:

a)可以保证数据库表中每一行的数据的唯一性,

b)可以大大加快数据的检索效率,

c)加速表与表之间的连接,

d)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

f)通过使用索引对数据进行排序,降低数据排序的成本,降低 cpu 的消耗,可以在时间查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

a) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

b) 索引会占据磁盘空间。

c) 以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度。

索引类型:

主键索引:索引列中的值是唯一的并且不允许有空值

普通索引:mysql 的基本索引类型,没有什么限制,允许有重复值和空值

唯一索引:索引列中的值是唯一的,但是允许有空值

还有其他索引 譬如全文索引、空间索引、前缀索引等不常见

4、mysql 几个存储引擎,innodb 和 MyISAM 区别

答:MySQL 有多种存储引,MyISAM、InnoDB、MERGE、MEMORY(HEAP) 等

InnoDB 和 MyISAM 区别:

1). InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

2). InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

3). InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针(就是物理地址)。主键索引和辅助索引是独立的 。

注意:MyISAM 无论是主键还是非主键索引 ,data 存储的都是这条数据的物理地址(地址指针),innodb 主键索引的 data 就是这条数据,非主键索引的 data 是主键 id,

高级

1.索引底层机制,B+ 树特性,和其他数据结构(二叉树、红黑树)区别,

答:这个属于高级特性,后续公众号会重点输出数据库相关的知识和面试题

2.mysql 事务隔离级别、MVCC 是什么,

答:

MVCC ,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存

3.数据库锁类型,什么是数据库死锁,如何避免?

答:从数据库系统角度分为三种:排他锁、共享锁、更新锁。
从程序员角度分为两种:一种是悲观锁,一种乐观锁,等等

避免死锁方式:

结构化数据建模:基于范式原则初级建模
热点业务排解:挖出核心业务模型
应用拆解:降低时间片复杂度
提升性能:优化代码,集群、超时机制、回滚机制

4.主从底层数据同步机制、binglog、redolog、undolog 区别,

答:redo log:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性。undo log:回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 binlog:二进制日志作用:用于复制,在主从复制中,从库利用主库上的 binlog 进行重播,实现主从同步。 用于数据库的基于时间点的还原。

四.开发语言,java 这块后续我会陆续推出一些 java 基础专栏,

面对对象三大特性、通俗解释,八大基本数据类型及其大小,循环、判断等语法

2.java 集合 如 arraylist、linkedlist、hashmap 等特性和底层实现原理 ;

3.java 锁类型,线程安全、线程池、juc 并发组件、反射等;

4.Jvm 内存结构,不同版本区别,gc 方法,调优,命令等等;

5.springboot、spring、mybatis 等框架的使用和常见面试题

6.单例、工厂、适配器等设计模式

7.zk、dubbo、springcloud 等相关 java 框架是否接触过?底层原理

8.分布式事务、分布式锁、幂等性等常见分布式问题是否了解?解决方式?

五.自动化,这块是面试官重点去考察的地方,

1.自己开发的自动化框架吗?为啥要开发这么一个框架呢?市面上很多自动化平台为什么不用,却要自己搭建?想过投入产出比吗?

答:自己搭建,主要是项目每次上线之前,回归重复的功能占用大量迭代时间,通过自动化框架可以节约时间,市面上的测试平台得自己部署和维护,出现问题需要自己去查底层代码解决,学习门槛较高,并且很多功能几乎用不到,自己搭建的自动化框架,开发相对简单,上手特别快,特别符合当前的项目需要。

2.说下接口自动化分别用了哪些框架,怎么实现的,你主要负责哪些部分?

答:我的主要是 springboot、testng、mysql、okhttpcilent、mq 那套东西。

3.你们这套框架最难的技术点有哪些?搭建框架过程中遇到哪些问题,怎么解决的?

答:难点技术有很多,譬如失败用例重跑机制,异步接口校验返回结果,场景测试中前置依赖接口怎么处理,涉及到 mq 怎么操作等等

4.流程场景怎么设计用例的?假如流程比较长,你怎么保障前面流程成功?

答:可以引入失败用例重跑机制 testng 有接口实现、简单接口,我们可以直接在数据库造数据。

5.数据放哪的?数据驱动怎么做的?关键字驱动怎么做的?

答:看情况,如果是灵活的数据,建议放在 excel 里面,做数据驱动,如果是账号、密码这种修改很少的数据,可以考虑放在配置文件中,如果是那种一成不变的可以写死(尽量别这么做)。

关键字驱动:测试用例的步骤 (元素) 和用例分离。关键字驱动表示把项目中的一些逻辑封装成关键字 (一个函数名)。例如 login、 register、order 进行设置变量(Set Viriable),调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例执行。

数据驱动:数据和用例步骤分离,通过 excel、yaml 等文件保存数据。数据驱动是把测试用例里面的数据提取到 excel 或者 yam 文件里面,然后通过改变 excel 或 yaml 中的数据驱动测试用例执行。

6.这套框架覆盖了开发多少业务代码,怎么统计出来的?多少用例,跑一次多长时间?

答:主要覆盖所负责业务的主要流程和一些常见的异常流程,通过 jacoco 覆盖率统计工具统计出来的,用例大概有 100+ 个,涉及到 30 多个接口,跑一次将近 2 分钟左右。

7.开发修改接口和你的自动化代码怎么同步修改,以保证自动化测试代码不报错?

答:依靠规范、或者技术手段。

六.性能测试重中之重,内容包罗万象,涉及到性能测试方式、策略、监控、分析调优等方面

1.你们公司性能测试怎么做的,说一下流程?

答:基本流程就是产研测三方开会、一起定下 tps 基准值,测试设计性能测试计划和测试用例、用例评审、进行压测、观测数据找出性能瓶颈,调优持续压测等等

2.TPS 上不去什么原因,怎么排查?响应时间太长怎么分析?

答:通过各种监控技术如 prometheus 、skywalking 等 观测系统瓶颈,基本上分为一下几个方面 带宽、连接池、硬件、垃圾回收机制、数据库等方面去分析。

3.线程阻塞和死锁问题怎么去定位分析,有什么现象?

答:在发生死锁之后,程序卡住没有任何反应,但程序仍在运行,因此需要借助一些命令来排查,用 JDK 自带的命令 jstack -pid 去查看线程信息,jstack 很快就帮我们找到了死锁的位置(在实际运行中,往往 dump 一次信息,还不足以确认问题,建议多 dump 几次,如果每次 dump 都指向同一个问题,那么就可以确定是这个问题导致的线程死锁)

4.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?

答:内存溢出(Out Of Memory):就是申请内存时,JVM 没有足够的内存空间。通俗说法就是去蹲坑发现坑位满了。

内存泄露(Memory Leak):就是申请了内存,但是没有释放,导致内存空间浪费,通俗点就是占着那啥不那啥。

5.数据库是怎么监控的,sql 慢查询怎么监控分析?

答:见数据库 sql 优化面试题。

6.如何进行全链路监控分析,定位性能瓶颈?

答:自行百度

7.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?

答:脏数据影响真实的业务响应和数据,可以考虑落入影子库,mock 对象、或者数据带有明显标识等手段。

8.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?

答:每个人准备的问题不一致,我的就是遇到了 jvm fullgc 频繁导致接口响应时间慢,通过 java 一些命令定位分析发现 jvm 配置不合理。

9.项目架构是怎么样的?简单描述或者画图

答:微服务架构,两个入口、公众号和 web 端,请求先经过 Nginx 做负载均衡、流量均匀的打到项目的 api 网关,后面就是项目的微服务架构(采购单、供应商、库存、仓库物流等等)如果对后端采用的架构熟悉,可以顺带提一下,比如用了 springcloud 全家桶、eureka 做服务注册和发现,mq 实现异步解耦,redis 缓存有效减少数据库交互等等。

七.中间件相关问题,简历如果说了,面试官一般都会顺带问下

1.正向代理和反向代理区别?Nginx 了解吗?负载均衡算法

答:Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

正向代理:服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端需要要进行一些正向代理的设置的。举例:翻墙,正向代理中被代理的是客户端的请求

反向代理:客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

负载均衡算法:轮询、随机、最少连接、hash、加权等,说一下具体使用场景

2.mq 是如何测试的?你项目中怎么应用的?mq 的优缺点?为什么使用 mq?怎么保障 mq 消息的有序性、幂等性、可靠性(不丢失)

答:消息中间件 具备解耦、削峰、异步的作用,具体可自行百度

3.为什么使用 redis,redis 五种数据类型,如何测试 redis 的,项目中如何应用的?

答:基于内存查询效率高,高并发情况下保护数据库,string、hash、list、set、zset 五中数据类型,项目中主要用于请求 token 保存和失效,防重分布式锁,冷数据(改动量小)保存,幂等性校验等等。

4.都发现过哪些缓存方面的 bug,怎么定位的?

答:缓存和数据库数据不一致,缓存穿透,击穿,雪崩等

5.redis 穿透,击穿,雪崩机制,被问了好几次......

答:自行百度

八.算法,一些大厂必问,百度、阿里、字节、腾讯等

1.常见的排序算法,冒泡,快排等

2.数组,字符串的相关算法操作比如找一个字符串中重复最长的字符串、两数之和等

3.简单的数据结构栈,队列,链表的基本的操作等

算法这块没有捷径,需要日积月累,一些常见的算法题,尽量在理解的基础上去默写并记熟,有些网站牛客网、LeetCode 刷刷题加强一下。

九.其他

假如测试任务重,时间紧,但是人手不够你怎么处理?

答:向上反馈真实情况、加派人手、争取更多时间或削减不必要需求,测试中要充分理解需求,设计用例加强评审,需求排优先级等等

2.假如开发不认可你提出 bug,怎么办?

答:自己重新复现一下提出的 bug,如果确实是 bug,可以和开发当面沟通清楚,沟通无效则向上反馈。

3.线上有碰到过漏测的 bug 吗?怎么处理的

答:碰到过,可以说一个不大不小的漏测案例(前提是别人的 bug 才导致的),重点说下防止下次漏测措施。

4.职业规划,离职原因。

答:这个开发性题目,离职原因尽量别说上家公司坏话。

福利

价值 25k 的面试题及其答案分享相关推荐

  1. 常见php面试题,常见的 PHP 面试题和答案分享

    搜索热词 如何直接将输出显示给浏览器? 将输出直接显示给浏览器,我们必须使用特殊标记 . PHP 是否支持多重继承? PHP 只支持单继承.PHP 的类使用关键字 extends 继承另一个类 获取图 ...

  2. 115道Java面试题及答案分享,java程序员赶紧收好

    115道Java经典面试题(面中率最高.最全) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可 ...

  3. 阿里钉钉前端170+道面试题及答案分享

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 前言 最近用团队的账号发了一篇文章专有钉钉前端面试指南[1],初衷是希望给大家传递一些可能没有接触过的知识,其中某些知识可能也超出了前端的 ...

  4. c++输出的值精确到小数点后5位_c/c++linux 2019最新阿里研发类面试题及答案分享...

    问题点总结: 1.1.1 问题:如何实现一个高效的单向链表逆序输出? 1.1.2 题目:已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位. 1.1 ...

  5. 100个常见的php面试题和答案分享,精选php面试题及答案

    精选php面试题及答案 PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.以下是百分网小编搜索整理的一份php面试题及答案,供参考 ...

  6. 他整整复习了三个月,金三成功上岸字节,面试题及答案分享

    相信大多数人都经历过面试,然后面试完就在怀疑人生,发现自己啥也不会,这是绝大多数人都会有的感觉,不单单只是测试开发工程师,因此,这几天抽空将之前朋友面试时遇到的面试题做了个汇总,一方面自己以后回顾学习 ...

  7. 博学谷java题库判断_博学谷Java开发面试基础笔试题及答案分享

    博学谷Java开发面试基础笔试题分享:char 型变量中能不能存贮一个中文汉字?为什么?"=="和 equals 方法究竟有什么区别?静态变量和实例变量的区别?是否可以从一个 st ...

  8. 2021热乎的字节跳动软件测试工程师面试题及答案分享

    开篇 相信大家都有这样一个忧虑就是面试,不管我们要找什么工作,面试都会是必不可少的,下面是整理出来的面试题和我的一些见解觉得不对的在评论区留言! 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答 ...

  9. SSH框架面试题及答案分享!

    SSH框架面试题有哪些?目前常用的Java框架有很多,其中SSH(SpringMVC.Spring.Hibernate)是很多企业在招聘过程中经常提及的,接下来小千就给大家分享一下有关SSH框架的面试 ...

最新文章

  1. novaclient的api调用流程与开发
  2. elastic ik分词搜索_php环境下使用elasticSearch+ik分词器进行全文搜索
  3. 浅析TCP之SACK(选择性确认)
  4. 大数据WEB阶段(四)JavaScript
  5. 从手机App到网点交互请求的日志记录
  6. 前端学习(688):断点调试
  7. 通过这个免费的,由23部分组成的互动课程,学习ES6 +
  8. 一起来玩树莓派--解决This must be accepted explicitly before updates for this repository can be applied问题
  9. json和gson的一些区别
  10. 基于JAVA+Servlet+JSP+MYSQL的酒店管理系统
  11. 局域网带宽控制解决方案 P2P终结者使用详解
  12. Java 游戏手柄 编程
  13. OpenCV C++案例实战十《车牌号识别》
  14. 计算机视觉教程1-3:图解透视几何原理(灭点、灭线)
  15. 数学模型——初步理解马尔可夫链(Markov chain)
  16. Module ‘“xx.vue“‘ has no default export.Vetur(1192)
  17. 学信网的头像下载下来太小的处理方法
  18. VUE的父传子 子传父
  19. EOS竞猜游戏SKR EOS遭黑客攻击,成都链安已于前天发出预警
  20. EditText实现图文混排,保存与解析(墨雪亲测)

热门文章

  1. nm linux 输出含义,nm 命令输出项解析
  2. 在一页纸上打印8页PPT讲义的方法
  3. 什么是Sentinel
  4. Sentinel的学习
  5. 程序员笔记逆波兰表达式计算
  6. 上蔡一高2013年高考录取榜
  7. 雷军兼任小米汽车业务CEO、徐直军任华为轮值董事长 | 高管变动2021年3月29日-4月4日...
  8. 无线网网速太慢如何设置服务器,苹果手机网速慢怎么办 iphone手机配置DNS提升网速方法...
  9. uniapp开发APP实现导航栏顶部搜索功能
  10. 浙江经信公布人工智能5大榜单 网易易盾内容安全解决方案上榜