测试人生 | (汇总篇)从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了

147 阅读23分钟

本文为霍格沃兹测试学院优秀学员跳槽笔记,测试开发进阶学习文末加群。

作为七年的测试老鸟,做过几年外包,也做过自研项目,目前在一家电商小团队做业务功能测试,涉及一点压力测试,只是配合开发写jmeter脚本,资源分析和问题定位都是开发主导。总体来说,自己缺乏自动化和python语言能力,想在这方面提升自己。

不甘点点点的业务功能测试,想提升自己的技能,拿高薪。当初也想过自己学习,但是遇到以下几个问题,第一自觉性。第二,一个人学习很枯燥,没有学习氛围。第三,不是系统性学习,知识点很凌乱,成长很慢。

在百度找到的咱们学院,也对比了其他几家培训机构,看了咱们学院的课程安排,和试听课,觉得干货满满,比较合适我最后就报名了。现在已经拿到了某知名企业的高薪 offer ,涨薪超过 60%。

图片

因面试题内附答案,所以篇幅很长分为多篇文章来发。今天是最后一篇啦前三篇文章已为您准备好了

第一天:

**测试人生 | 从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了 **

第二天:

**测试人生 | 从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了 **

第三天:

测试人生 | 从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了

图片

面试真题之 python 面试题

图片

1、python 装饰器,作用,用法

python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。简单的说装饰器就是一个用来返回函数的函数。

它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

什么是装饰器语法糖?

python提供了@符号作为装饰器的语法糖,使我们更方便的应用装饰函数。但使用语法糖要求装饰函数必须return一个函数对象

图片

2、python 的垃圾回收机制?

Python 中的垃圾回收机制中有三部分内容:“引用计数”、“标记 - 清除”、“分代回收”

3、python中类方法,类实例方法,静态方法的区别

    • 实例方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
    • 类方法:由类调用;至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
    • 静态方法:由类调用;无默认参数;

4、dict和tuple及list的区别(这里列的是主要区别,面试足够)

    • tuple是不可变对象,list和dict都是可变对象,这里的不可变指的是指向地址不可变
    • list是有序的,dict是无序的,不可存放有序集合
    • dict查找速度快,不管有多少个元素时间都一样,list查找速度慢,需要有序查找
    • dict的key为不可变对象,且不可重复,list则可以重复,存放任意对象

5、json和dict的区别

    • json是一种数据格式,纯字符串。dict是一种完整的数据结构
    • dict是一个完整的数据结构,是对Hash Table这一数据结构的一种实现,是一套从存储到提取都封装好了的方案。它使用内置的哈希函数来规划key对应value的存储位置,从而获得O(1)的数据读取速度。
    • json的key只能是字符串,python的dict可以是任何可hash对象(不可变对象)
    • json的key可以是有序、可重复的;dict的key不可重复,且无序。
    • json任意key存在默认值undefined,dict默认没有默认值
    • json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问
    • dict可以嵌套tuple,json里只有数组

6、python会不会出现内存泄漏,为什么

    • 当对象之间互相引用的时候再删除的时候,可能会造成无法释放对象的情况,出现泄漏
    • 上面为个人了解,如有其它请补充

7、python的同步和异步

    • 直接得到最终结果的结果,就是同步调用。
    • 不直接得到的最终的结果,就是异步调用。
    • 同步与异步区别在于:调用者是否得到了想要的最终结果。

8、常见手撕代码

图片图片图片

面试真题之数据库

图片

1、mysql 删除语句有哪些?

1)drop 语句,用来删除数据库和表:例子【drop database db;drop table tb】、

2)delete 语句,用来删除表中的字段:例子【delete from tb where id=1】

3)用 truncate 来删除表中的所有字段:例子【truncate table tb】

2、数据库事务、主键与外键的区别?

数据库的事务:事务即用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,它具有四个特性,ACID,原子性,一致性,隔离性,持续性

主键和外键的区别:

1、主键是能确定一条记录的唯一标识,不能重复,能唯一确定该条数据;

2、外键用于与另一张表的关联,是能确定另一张表记录的字段,用于保持数据的一致性

3、工作中常使用的SQL语法有哪些?

    • create table、create view、 select from where、insert into、update set values、delete、alter、order by、having

4、数据库存储过程

    • 一组数据库操作命令,当作是自己写的一个方法,一系列步骤自己去封装(个人理解)

5、SQL常见查询语句编写 (此处仅举例常见的查询语句,如有更多坑,希望补充)

    • 查询所有学生的数学成绩,显示学生姓名 name, 分数, 由高到低。SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = ‘数学’ ORDER BY score DESC;
    • 统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生 id,姓名,总成绩。SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;
    • 列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩SELECT c.id , a.name, c.kemu, c.score FROM grade c, student a,(SELECT b.kemu, MAX(b.score) as max_score FROM grade b GROUP BY kemu) t WHERE c.kemu = t.kemu AND c.score = t.max_score AND a.id = c.id

6、慢查询是什么意思?

    • 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

7、导致数据库性能差的可能原因有哪些?

    • 硬件环境问题,如磁盘IO
    • 查询语句问题,如join、子查询、没建索引
    • 索引失效,建了索引,查询的时候没用上
    • 查询关联了太多的join
    • 服务器关联缓存,线程数等
    • 表中存在冗余字段,在生成笛卡尔积时耗费多余的时间

8、redis缓存应用场景

    • 需要将数据缓存在内存中,提升查询效率
    • 本人没经验,希望补充

9、怎么定位redis缓存失效问题(缓存坏了)

    • 不知道,看不懂

面试真题之Linux&&Shell

图片

1、介绍Linux管道?

举例:ls -a | grep mysql说明:就是把前一个命令的结果当成后一个命令的输入。结合本例就是先显示所有的文件,然后再用grep命令在ls的结果中查找包含mysql的文件

2、工作中常用的Linux命令有哪些?

    • awk、sed、vim、iotop、dstat、cp、top、ifconfig、pwd、cd、ll、ls、cat、tail、grep、mv、rm、mkdir、df、du

3、什么命令可以帮助Linux执行Windows上传的脚本

    • 改变编码格式
    • vim test.sh
    • :set ff?// 显示dos的话
    • :set ff=unix:wq****

4、简述linux三剑客

    • grep命令:根据用户指定的模式pattern对目标文本进行过滤,显示被模式匹配到的行,grep [options] pattern [file],常用参数:
    • -v 显示不被pattern匹配到的行
    • -i 忽略字符的大小写
    • -n 显示匹配的行号
    • -c 统计匹配的行数
    • -o 仅显示匹配到的字符串
    • -E 使用ERE,相当于egrep(可以识别更多的正则表达式规则)
    • sed:流编辑器,用来处理一行数据。将一行数据存储在模式空间中->用sed命令处理->送入屏幕->清空空间,常用参数:
    • -h 显示帮助
    • -n 仅显示script处理后的结果
    • -e 指定的脚本来处理输入的文本文件
    • -f 以指定的脚本文件来处理
    • 常用动作
    • a: 新增 sed -e ‘4 a newline’
    • c: 取代 sed -e ‘2,5c No 2-5 number’
    • d: 删除 sed -e ‘2,5d’
    • i: 插入 sed -ed ‘2i newline’
    • p: 打印 sed -n ‘/root/p’
    • s: 取代 sed -e ‘s/old/new/g’
    • g: 代表全局
    • awk:把文件逐行的读入,以空格为默认分隔符将每行切片。把行作为输入,并赋值给0>将行切段,从0->将行切段,从1开始->对行匹配正则/执行动作->打印内容,awk ‘pattern + action’ [filenames],常用语法:
    • filename awk浏览的文件名
    • begin 处理文本前要执行的操作
    • end 处理文本之后要执行的操作
    • fs 设置输入域分隔符,等价于命令行-F选项
    • nf 浏览记录的域的个数(列数)
    • nr 已读的记录数(行数)
    • 常用参数
    • ofs 输出域分隔符
    • ors 输出记录分隔符
    • rs 控制记录分隔符,换行标志
    • $0 整条记录
    • $1 第一条分隔后的记录

5、如何通命令定位Linux服务器下的日志?

    • 如果要监控日志,那么使用tail -f | grep xxx命令,过滤需要的字段
    • 如果在完整日志中查看内容,使用cat xxx.log | grep xxxx | awk '{print $1}'等命令过滤自己需要的内容

6、简述项目中的环境搭建和维护

    • 结合自身经验先从系统安装开始,如常用的centos和Ubuntu说起,系统安装主要是磁盘分区和磁盘阵列问题
    • 基础环境依赖,如MySQL、Redis、jenkins、docker、项目中用到的其他依赖环境等
    • 维护方便主要从遇到的错误说起,如无法远程连接、服务器加固等

面试真题之计算机网络

图片

1、七层模型有哪些,分别有哪些协议?

1)应用层包含的主要协议:

FTP(文件传送协议)、

Telnet(远程登录协议)、

DNS(域名解析协议)、

SMTP(邮件传送协议),

POP3协议(邮局协议),

HTTP协议(Hyper Text Transfer Protocol)

2)表示层

3)会话层

4)传输层

包含的主要协议:

TCP协议(Transmission Control Protocol,传输控制协议)、

UDP协议(User Datagram Protocol,用户数据报协议);

重要设备:网关

5)网络层

包含的主要协议

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议(Address Resolution Protocol,地址解析协议);

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)

6)数据链路层

数据链路层为网络层提供可靠的数据传输

主要的协议:以太网协议

基本数据单位为:帧

两个重要设备名称:网桥和交换机

7)物理层

中继器(Repeater,也叫放大器)和集线器

2、HTTP网络请求返回码分别表示?

  • 1xx(临时响应)
  • 2xx (成功)
  • 3xx (重定向)
  • 4xx(请求错误)
  • 5xx(服务器错误)

3、输入url到网页显示出来的全过程

  1. 输入网址
  2. DNS解析
  3. 建立tcp连接
  4. 客户端发送HTTP请求
  5. 服务器处理请求
  6. 服务器响应请求
  7. 浏览器展示HTML
  8. 浏览器发送请求获取其他在HTML中的资源。

4、http和https的区别

    • https里面是要有证书的,http并没有证书,证书的作用是证明你是这个网站的拥有者,谁去证明,最顶级的CA去帮你证明,这些顶级的CA都是浏览器、操作系统本身就自动帮你集成,而且自动添加到设置信任里面去
    • https要兼顾安全+性能的方面,由于对称式加密虽然速度很快,但是安全性特别的低,因为双方要规定对称式加密的秘钥,别人都无法知道,但你怎么能确保别人不知道你的秘钥呢,因此需要有非对称式加密去保证安全,但非对称式加密速度又很慢,如果客户端和服务器端都用非对称式加密,网络得卡死了。所以当双方建立好了非对称加密后,再约定一个随机数,等大家都非对称解密了之后呢,就拿到只有对方知道的唯一随机数(秘钥),就可以用秘钥来进行对称式加密和解密了

5、HTTP的报文结构

    • HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4个部分组成
    • HTTP响应报文:HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文

6、htt常见的响应状态码

    • 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
    • 201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随 Location 头信息返回
    • 202 服务器已接受请求,但尚未处理
    • 301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    • 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    • 304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 305 (使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
    • 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    • 401 当前请求需要用户验证。如果当前请求已经包含了 Authorization 证书,那么 401 响应代表着服务器验证已经拒绝了那些证书
    • 403 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交
    • 404 请求失败,请求所希望得到的资源未被在服务器上发现
    • 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
    • 501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
    • 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
    • 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

7、cookie和session机制的区别

    • cookies 数据保存在客户端,session 数据保存在服务器端;
    • cookies 可以减轻服务器压力,但是不安全,容易进行 cookies 欺骗;
    • session 较安全,但占用服务器资源

8、TCP和UDP的区别

    • TCP:面向连接,可靠的,速度慢,效率低
    • UDP:无连接、不可靠、速度快、效率高

9、TCP为什么是三次握手和四次挥手

    • 三次握手能保证数据可靠传输又能提高传输效率。若握手是两次:如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
    • 要保证双方都关闭了连接。因为TCP是全双工的,就是要等到两边都发送fin包确认双方都没有数据传输后才关闭

10、TCP为什么最后挥手后会有time_wait

    • 为了保证可靠的断开TCP的双向连接,确保足够的时间让对方收到ACK包。若客户端回复的ACK丢失,server会在超时时间到来时,重传最后一个fin包,处于TIME_WAIT状态的client可以继续回复Fin包,发送ACK。
    • 保证让迟来的TCP报文段有足够的时间被识别和丢弃,避免新旧连接混淆。有些路由器会缓存没有收到的数据包,如果新的连接开启,这些数据包可能就会和新的连接中的数据包混在一起。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。

11、简要说明http请求中的post和get有哪些区别的地方

    • 请求头多了content-length和content-type字段
    • post可以附加body,可以支持form、json、xml、binary等各种数据格式
    • 行业通用规范
    • 无状态变化的建议使用get
    • 数据的写入与状态的修改建议使用post
    • 基于http协议:都是请求返回数据,get将请求体放在头上,只发一次请求,post将请求体放在内部,需要发送两次请求
    • GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
    • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
    • GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
    • GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
    • 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
    • GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。

12、如果一个请求,返回的状态码是200,但是没有内容,可能发生了什么?

    • 请求头缺失或错误
    • 参数length不符

面试真题之「灵魂拷问题」

图片

1、自己的优点和缺点

    • 避开岗位的核心技能
    • 把缺点放在场景中描述
    • 对缺点进行合理化解释
    • 优点随便说,主要方向还是在岗位上

2、是否能接受加班,建议分情况作答

    • 第一种情况:假设公司有重要的项目要赶。示范回答:贵公司现在正处于发展上升期,也在官网上有看到公司的重要项目成果,我觉得有时候因为赶项目进度、工作需要等忙起来是非常正常的,面对这种情况,我是非常愿意配合公司和团队的工作,让工作能够更顺利地完成,此外,我也相信自己一定能在公司安排的工作中获得到锻炼,获得更快地成长。
    • 第二种情况:假设自己作为新人,对业务不熟悉。示范回答:我作为公司刚进去的新人,可能刚开始进入公司接触业务时不太熟练,会出现需要加班的情况,但我更愿意提高工作效率,并积极向公司的前辈请教学习,在一定的时间内完成工作而不是拖到下班之后。当然, 如果有紧急的事情,忙起来需要加班也是可以接受的。

3、薪酬的要求

    • 薪资并不是我求职的唯一标准,我上家公司基本在A~B 之间(建议合理提高,避免部分HR压价)
    • 我来贵司求职的主要动机是兴趣,这份工作是我喜欢做的,也相信自己可以胜任,更相信公司会给出一个合理的薪酬。
    • 相比薪酬,我更在意的是收入,所以,我很愿意了解贵司的薪酬架构,可以简单介绍下吗?
    • 我希望薪资可以达到**,据我了解,贵司这个岗位薪资范围是A~B ,而结合岗位职责及任职要求,我对自己也进行了相应评估,也愿意接受贵司的下一步考核。

4、未来5年的职业规划

    • 自我认知。对自己是否了解,了解是不是靠谱。
    • 动机和价值观。你是否能接受我们并不一定能给你公平的职业发展机会这个现实?
    • 组织承诺。你到底能在我们这踏实的干几年?

5、我们为什么要聘用你

    • 描述应聘岗位的胜任条件,强调自己的工作能力和工作经验跟岗位的匹配度,岗位要求的工作技能是否自己掌握了,掌握的程度是怎样的,最好在面试中说出来。因此,在面试前最好是要针对应聘岗位,把自己胜任的条件一一列出来,做到知己知彼。可以谈论一下自己之前的工作情况,用成绩、用数据来说明自己的成就。
    • 描述自己能为公司做出什么贡献,公司是一个讲究利益的地方,聘用你肯定要你为公司做出贡献。那么你在回答这个问题时,就需要说出你的加入可以为公司带来什么,这非常重要。因此,一定要明确你的工作目标和职业规划,表明你的立场和专业程度,让HR信任你。
    • 描述出自身的优势。公司为何要聘用你,而不聘用别人,肯定是你有比别人优秀的地方。那么在回答这个问题时,就一定要说出自己与众不同的地方,最好是要举一个例子,来支持你的观点。
    • 建立个人和公司的联系,HR想要得到一个怎样的答案呢?无非就是想通过这个问题,来进一步了解你各方面的信息,以及看看你为这次面试做了多少功课。那么在面试前,你最好是要尽可能获取有关公司可行业的资料信息。在回答的时候,结合自己所做的功课,建立个人和公司的联系,说明自己在哪一方面能够匹配公司的要求。HR看到你对应聘岗位这么了解,肯定会对你有好感。
    • 说出你对这份工作的兴趣以及热情

6、对我们公司有多少了解

    • 实时回答就好,知道多少就说多少,一般去面试对这个公司的了解都是从网上查到的,不会太深入

7、为什么愿意到我们公司

    • 有所准备,了解公司
    • 个人目标要与公司目标一致
    • 强调你能如何为公司提高价值

8、与领导意见不一致时,该如何处理

    • 不要假设我已经完全的掌握了对这件事的认知。向领导询问确认自己有可能缺失的信息。要寻找对领导没有告知的信息,和领导不能透露的信息。
    • 不要假设领导已经完全的掌握了我对这件事的认知。检查一下,是否已经将事情的前因后果,自己对事情的理解,明确清晰的传达给了领导,以及,他是否真的已经明确了解。
    • 在进行有效的认知沟通后,重新思考整件事情。如果意见还是有不一致,那么:
    • 按领导要求执行。不理解,也执行,在执行中理解。
    • 执行过程中,收集反馈,不断调整,提升认知。
    • 执行完成后,及时复盘,回顾决策和行动过程,沉淀知识。

9、缺乏工作经验,如何胜任这份工作

    • 承认工作经验的重要性。这样能带给面试官的印象是:该位候选人认知能力较强,具有理性思维与客观公正的处事态度及判断能力,尤其是对于自己也能客观公正地看待,勇于承认自己的缺失。
    • 突显个人优势。用自己的其他优势特长来补足经验上的不足,比如说记忆力好、动手能力强、语言能力强、学习能力强等。
    • 强调自己会不断提高工作能力。切忌用假大空的话,要用具体的与工作相关的事例或是数据来说明自己的学习力。

10、工作中与同事发生争执,如何处理

    • 在沟通之前,做好充分的准备
    • 学会认知倾听,让别人把话说完
    • 借用一些工具,来解决交流障碍

面试真题之反问面试官

图片

1、职责

    • 团队中初级和高级人眼如何平衡
    • 针对员工有哪些培训和提升计划

2、技术

    • 公司内部的技术栈
    • 产品的架构
    • 版本控制及迭代速度
    • 服务器管理权限,本机家算计管理权限

3、团队

    • 团队内和团队之间如何沟通
    • 遇到了分歧如何解决
    • 团队正在经历的尚未解决的挑战是什么
    • 绩效考核是如何算的

4、公司

    • 晋升机会
    • 是否有自己的学习资源
    • 假期,加班工资等
    • 过去半年最糟糕的一天是怎么样的
    • 是什么让你来到并留在这里
    • 是否能够平衡工作与生活

⬇️ 复制“下方链接”,提升测试核心竞争力!

更多技术文章分享和免费资料领取