软件测试之面试题分享
最近面试了一些测试方面相关的岗位,通过牛客等途径也看了不少的面经,发现大部分人面试题目都有很多相似点,结合自己的一些面试经历,现在分享一些我面试中碰到过的问题以及我回答的部分答案,可能存在错误,欢迎大家交流指正
一、计算机网络方面(大厂面试必考点,一定要去记住)
1、OSI七层网络模型(TCP/IP五层模型)常见考察的是七层模型,要明白每层模型的作用以及对应的协议,例如应用层对应了:HTTP FTP DNS SMTP等协议
2、TCP的三次握手、四次挥手过程要心里有数,以及为什么要三次握手,四次挥手
3、输入一个网址到其响应的过程(例如美团页面内点击搜索后发生了什么历程之类的问题),一般可以从域名解析-三次握手-发送http请求-服务器响应-浏览器渲染响应信息来考虑,可以在网上查看相关资料,多背背
4、DNS域名解析的过程也要心里有数
5、TCP与UDP的区别,常考点,偶尔还会考察什么时候时候用TCP什么时候适合用UDP,一般的话对网络质量要求较高,例如语音、传输文件等可以考虑TCP,对网络质量要求较低的情况下,例如视频会议、游戏等都可以考虑UDP
6、Cookie与Session的区别,这个楼主面试 字节跳动(头铁)的适合遇到过,还是要去看看留个印象的
7、get与post的区别,这个也是常考的,网络上有很多相关资料,需要注意的是还有的面试官可能会问你除了这两个还有什么,楼主当时回答了put与delete, put:向指定资源位置上传其最新内容。delete:请求服务器删除Request-URI所标识的资源。
8、http的组成,这个网上也有资料,大家可以去看看
9、http常见的状态码,可以从2记到5的顺序 200:响应成功,301:永久重定向,302:临时重定向 400:客户端请求错误 403:服务器拒绝服务 404:资源找不到 500:服务器内部错误
10、http与https的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对 HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
问到HTTPS时候,如果问到了HTTPS的加密过程,楼主用个图简单描述一下过程
二、数据库
1.比较菜,没碰到什么问题,就一个(字节跳动面试官):根据分数,查询排名前10的学生,当时太天真,就是排个序,取前10的数据,但是没有考虑到分数相同的同学。
2.能力比较强的去了解下数据库索引,这个有些面试官蛮喜欢问,虽然我没被问到~
3.数据库的四大特性:原子性、一致性、隔离性、持久性
4.增删查改基本的要会,delete与drop的区别?
三、测试技术
1.测试的过程,要记住测试的流程,从需求分析开始到结束
2.测试用例的编写,面试官会给你具体某个场景,叫你设计测试用例,具体我会额外写一篇文章
3.由于楼主提到了自动化,要明白自动化的原理,通过浏览器驱动去操控浏览器。
4.自动化的优点和缺点,什么时候适合用自动化,你的测试用例如何维护的?
5.自动化的8大元素定位方式
6.性能测试中,如何进行压测?
7.压测过程中关注哪些数据?响应时间、TPS、CPU、内存等数据,还可以讲讲你压测后对系统的调优建议,可以从数据库,服务器硬件等角度考虑
8.企业如何设置正确的TPS?考虑到成本的原因,不能太高也不能太低,高了浪费成本,低了系统的业务能力就下降了。可以采取先采取一个预估值上线,根据用户的实际使用情况,多次的增加或降低一点TPS,每次增加或降低的值不宜太大,这样可以确保我们资源的节约
10.断言如何添加,参数化数据如何进行传递?这里讲到了jmeter里面的断言,参数传递可以用CSV以及正则表达式提取器提取相应参数,通过引用来进行参数传递
11.有没有使用过fiddler(抓包工具,很简单的,可以去自学)?(简历写了,所以面试官问了)简单的回答了一下用来抓包的,还可以修改请求与相应的数据,面试官接着问fiddler还可以用来干嘛?回答:弱网测试,通过fiddler可以设置参数进行弱网测试,具体可以网上查找资料
12.面试官给你某个场景,叫你定位排查错误,例如发朋友圈,发出去的图片顺序不对,什么原因造成的?一般我们可以从客户端到服务器考虑,线考虑客户端是不是出现问题了,例如渲染错误,url地址解析错误等等,如果客户端没有错误,可以考虑服务端错误,我们可以绕过前端,通过它的接口发送相对性的数据,根据它返回的数据来判断是否服务器后端出现错误。还有的话排查错误,我们还可以通过它的log来查看哪里出现错误。
13.需求评审的过程以及为什么不能每轮都评审?项目进度比较紧,没有时间给到我们每轮都来评审
14.做过接口测试吗?
15.项目:基本自我介绍的适合可以简单讲讲自己的项目,要学会引导面试官,让他问你会的,不会的不要多提,会的尽量多说点。
四、测试场景题
1.测试发现一个bug,开发认为没有必要修改,你怎么办?
2.当一个产品急着上线,测试工作却没完成,你怎么办?
3.你对测试的理解?
4.项目中碰到的困难?
5.测试醒目的流程?
五、其他类型
1.排序算法经常被问到:冒泡、选择、插入这三个基本的要会,要明白其稳定性,还有一个很重要的就是快速排序,一定要明白他的原理,同时要会他的代码,楼主就曾经手撕代码。同样的快速排序的时间复杂度,平均情况下是nlogn,最坏的情况下是n2,空间复杂度O(logn),一般情况下面试官问时间复杂度适合你只需要回答nlogn就可以了,如果提及到最坏的情况,你一定要明白为什么是n2,还有可以看下空间复杂度为什么是logn。还有一点大家要记住的是它是不稳定的算法,为什么(这个面试碰到了)?假设待排序数组:int a[] ={1, 3, 3, 2, 1, 5, 6};若选择a[2](即数组中的第二个3)为参考数字,而把大于等于参考数的数均放置在大数数组中,则a[1](即数组中的第一个3)会到参考数的右边, 那么数组中的两个3的相对顺序就发生了 改变,这就说明快排是“不稳定”。
有些面试官还可能会问还有什么排序算法时间复杂度是nlogn,下面的图大家可以记一下常用的希尔、归并、堆,心里知道它们的排序原理就行,最好的话可以着重记一下堆排序
2.线程与进程的区别?知乎上这篇文章,个人觉得他写的挺好的,有兴趣的可以看看:https://www.zhihu.com/question/25532384
3.死锁是什么?
4.死锁的四个条件?如何避免死锁?
5.线程的生命周期?
6.java部分也是可能会考察的:java的三大特性:封装、继承、多态
7.抽象类与接口的区别
8.String、StringBuffer、StringBuilder的区别:https://blog.csdn.net/itchuxuezhe_yang/article/details/89966303
9."=="与"equals"的区别
10.深拷贝与浅拷贝(这个是面测开碰到的,楼主太菜了,当时不会.)https://www.cnblogs.com/williamjie/p/11192895.html
11.链表与数组的区别,两次都问到了
12.最好要会点Linux
13.智力题:好多大厂面试都会问智力题,这个多看看,明白套路就十分的简单了,推荐几篇博客:https://blog.csdn.net/qq_41112238/article/details/105611213?utm_source=app
还有一个https://blog.csdn.net/qq_43518645/article/details/104118528?utm_source=app 楼主面试网易的时候就碰到了同类型的智力题,很轻松就回答出来了,推荐大家看看~
六、算法题
面试大厂,无论是笔试还是面试,几乎都逃不过算法题,这个没有捷径,只能多练习
推荐几个训练方法:刷剑指offer、LeetCode就行
再推荐几个我比较喜欢的up主:https://www.bilibili.com/video/BV1wA411b7qZ 手把手带你一起刷LeetCode,还做了合集简直不要太良心,想要短时间快速提高真的还是很不错的,强烈推荐!
还有一个就是带你刷《剑指offer》的up:https://space.bilibili.com/59546029?spm_id_from=333.788.b_765f7570696e666f.1在他的个人主页,把他《剑指offer》的视频过一遍,相信你会有很大的提高
总之算法还是要多练,虽然测试工程师算法要求不高,但是我们还是不能放下他,要想进大厂以及做测开,它是一定要坚持的!
感悟:以上这些内容都是我面试实际碰到过的或者是一些高频的面试题,一定要多看看面经,牛客是个好地方。还有就是算法真的蛮重要的,一定要多看多练。有些hr面可能会挂人比如我四轮技术面都过了,貌似死在了hr面。。。 要多尝试,要相信自己,多投几个,相信总有一个能成功。最后祝大家面试成功,早日拿到offer!