千亿国际娱乐app

价值 25k 的面试题及其答案分享

时间:2022-05-27 07:20:56 来源:千亿国际娱乐官网 作者:千亿国际平台下载 浏览量:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  答: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 保存和失效,防重分布式锁,冷数据(改动量小)保存,幂等性校验等等。

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

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

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

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

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

  主体内容包含:阿里、腾讯、美团、字节跳动等等测试面试题,功能测试、性能测试、自动化测试等学习视频等知识内容。

  加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。