> For the complete documentation index, see [llms.txt](https://l1nwatch.gitbook.io/interview_exercise/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://l1nwatch.gitbook.io/interview_exercise/shen-xin-fu-sangfor-xiang-guan/ce-shi-lei-mian-shi-can-kao.md).

# 测试类面试参考

## Q\&A

网络、Linux、操作系统、安全、数据结构等多个维度

### 维度：综合各项能力

从你的简历看，你在校期间做过XX项目，这个项目是为了解决什么问题？这个项目人员的构成是什么样的？人员资历情况，能力情况？这个项目的核心模块是什么？次之是什么，再次之是什么？这个项目的难点是什么？你所负责的是哪块的工作？你所负责的工作的难点是什么，请具体说一下，你是怎么解决的，在解决问题中你有啥改进和创新？主要学习到哪些新知识，怎么学习的，做出来的东西和类似的项目相比你做出来的东西有哪些优势，结果怎么样？做完这个项目后你的总结是什么样的，如果下次还做同样的项目，你觉得该怎么做得更好？项目加班情况？

（本题考查包括实践、学习能力、专研精神、创新能力、思维敏捷）

### 维度：开发设计和调试

#### 题目：

现需要你设计一款测试工具，实现输入一个网址就能够检测出网址内所有子连接是否有效（连接访问响应 200 算正常）。

1、需求理解、架构设计：画出整个工具的架构框图或组件模块图。（看沟通理解能力，是否有需求的遗漏或者错误，是否能够理解需求的边界或需求功能点？整个工具的架构设计与抽象是否合理，组件或模块划分是否合理）

2、编码实现：根据采用的语言，问会用到哪些库或者第三方组件？这个库如何使用？觉得实现的难点在哪里？或请写一段代码实现找出所有子链接算法？关注如何识别子链接、如何去重保证不爬取死循环？

3、单元测试：从设计中选一个模块或函数问如何做单元测试？觉得单元测试的难点在哪里（数据与环境准备）？如何去构造或准备数据（mock）？用过哪些mock框架？

4、调试与问题定位：假设一个错误，问如何调试，用什么方法/工具/打日志，调试工具如何使用的？如何通过调试工具去检查一个变量的值？日志如何打？

#### 参考答案：

1、首先，不同网站复杂度不同，这题只能讲个简单的 DEMO【比如，有些网站反爬，很难获取子连接，得针对】，大概就是爬首页，循环，验证每一个链接的情况，保存结果

2、基本框架，先定义输入输出，input -> \[测试工具] -> output，然后 requests 库爬首页源码，配合 re 库提取所有 a 链接，放到某 list 中，while 循环，里面访问每一个子连接，进一步提取子连接，然后检查响应码，保存连接及结果

3、用 unittest.mock 库构造情况就够了，比如【函数功能，输入一个 URL，检查响应码，200则回TRUE，否则回False】，那就写个单测，mock 一下 requests 函数，分几种情况，一种 mock-requests 返回的是 200，另外一种返回的是非 200，然后观察这个函数的调用返回结果是不是对的

4、假设错误，比如假设爬到一半就停了，那就补充个断电续爬的功能，最简单的最里面来个 try-except，把错误的 URL 保存到某个地方，回头手动检查一下这个 URL，又不影响爬取进度又可以查 BUG；调试工具，PyCharm 调试按钮点一点就可以调试了，有什么一行行调试，有跳过当前函数的，运行到下个断点之类的；检查变量的值，控制台点点不就完了；日志，logger 模块吧，或者 bash 后台运行直接把所有输出到文件中

### 维度：学习能力

#### 题目：

除了之前讲项目上的知识学习外，在大学中还学习过哪些知识，通过哪些途径掌握；有哪些印象比较深刻的地方？（就其印象深刻的地方问一下技术等方面的题目，以了解其是否真的认真学过）（考察结果）分析：从知识面广、懂的东西多（不仅仅是技术领域）、涉猎范围等去考察；（考察学习能力）

### 维度：专研精神

除了你简历上的项目外，有哪些有意义的改进工作（项目），这些是老师安排的还是自己去做的？（考察创新意愿、考察专研精神），你通过哪些方面去着手研究的（或研究了哪些开源的项目），得到了什么启发？（考察学习意愿和能力、考察专研精神），做的时候用到了哪些技术？（需要对技术进行考察，看是否深入掌握、考察专研精神），改进点是什么？完成项目或工作之后学到了什么东西？（考察结果、考察钻研精神）

### 维度：WEB

代码：HTML、登录页面、Python 爬虫、Ajax

基础：HTTP1.0 和 HTTP1.1 的区别、Cookie 和 Session、HTTP 请求头和响应头、1xx2xx3xx4xx5xx区别

安全：SQLi、XSS、CSRF、DDOS 等等；网站安全性？

动手：搭建一个网站 Apache、IIS？正向代理和反向代理的区别，适用场景？

逻辑思维：对比两个网站的访问速度，请问用什么方法进行对比？某天突然发现办公PC打开新浪主页失败，请详细说明排查定位问题的过程？

#### 1、代码：HTML

就比如说 HTML5 的更新吧，参考：<https://www.jianshu.com/p/4ff71db770be>

目前开发的静态 HTML 基本都是 HTML4.0，存在着一些相对过时的标签，比如  之类的，只是为了显示效果而存在的标签，现在已经被 CSS 取代了；HTML5 相当于 HTML+CSS+JS+API 的一种新定义的语言，把过时标签取消了，还增加了一些新的智能元素，email 之类的，也有新的 API；

Django 与前端 HTML 交互，参考：<https://www.runoob.com/django/django-template.html>

自己开发 HTML 的经验，比如自己有建过站点的，比如 Django 框架的，就先用 Django HTML 渲染引擎的语法写个模板，比如说 ，

之类的模板标签，与后端比如 Django 框架交互的时候，通过 render 函数把对应的值传给模板；

#### 2、登录页面

比如说 POST 表单，首先是 form 标签，action 属性指定提交 URL，methods=post 指定提交方法，然后再加上 CSRF 令牌，里面放几个 input 就是要提交的数据

#### 3、Python 爬虫

讲自己写过的爬虫吧，比如说最简单的，弄个 requests 库，然后访问首页，获取子连接，不断循环把每一个页面用 requests 库爬下来；复杂一点的，比如爬取淘宝，各种 JS 验证，就用 Selenium 框架，再绕过一下淘宝的 chromedriver 校验，之后就 browser.get() 各种页面，find\_element\_by\_id 之类的点击各种按钮或者获取各种信息

#### 4、Ajax

就 JS 异步处理，就自己使用过的操作，导入 jquery 库之后，就用 $.ajax 语法，指定 URL，指定提交的参数，指定返回结果；之所以会用到 ajax，是因为想更新页面里的某一部分区域的数据，但是又不想刷新整个页面，比如说做了个加密，输入框输入一部分数据，点了按钮之后会把数据加密然后放到输出框中，不刷新页面，只刷新输出框里面的数据，这时候就可以用 ajax 异步了

\====================================================================================================================================================================================

#### 1、HTTP1.0 和 HTTP1.1 的区别

首先，现在 HTTP 已经出到了 HTTP3 了，然后这几个版本的区别:<https://juejin.im/entry/5981c5df518825359a2b9476、https://www.zhihu.com/question/302412059>

简单来说，就是不断的性能优化；

HTTP1.0 和 HTTP1.1 的区别，就性能提升了一下，HTTP头添加了HOST字段，增加了长连接之类的

HTTP2 和 HTTP1.x 的区别，进一步提升性能，使用了多路复用之类的新技术

HTTP3 和 HTTP1.x/2.x 的区别，HTTP1.x/2.x 是使用 TCP 协议，HTTP3 改用 UDP，基于 UDP 弄了个 QUIC，quick UDP 协议，提高链路利用效率提高数据交互速度之类的，还满足了安全需求，解决适配问题之类的；

#### 2、Cookie 和 Session

<https://blog.csdn.net/guoweimelon/article/details/50886092>

简单来讲，都是用来跟踪用户的一个变量，只是一个保存在用户端（COokie），一个保存在服务器端（Session），然后存在区别，比如说有效期，Cookie一般比较长，Session一般比较短（关闭浏览器就失效），Session能保存的内容丰富一些，Cookie基本是只保存一些 ASCII 字符

#### 3、HTTP 请求头和响应头

<https://blog.csdn.net/u010256388/article/details/68491509>

格式基本都差不多，就请求行+请求头+请求体，响应行+响应头+响应体

其中，请求会有一些请求方法、请求 URL、HTTP协议之类的；而响应会有对应的 HTTP 协议，状态码，状态描述之类的

#### 4、1xx2xx3xx4xx5xx 区别

<https://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html>

一般来说，1xx是信息提示；2xx是成功；3xx是重定向；4xx是客户端错误，请求不对或者URL不对之类的；5xx是服务器错误

\====================================================================================================================================================================================

#### 1、SQLi

SQL 注入，<https://paper.seebug.org/15/>

比如说 SQL 注入有哪几种类型：<https://itindex.net/detail/54715-%E8%AE%A4%E8%AF%86-sql-%E7%B1%BB%E5%9E%8B，布尔注入、报错注入、联合注入、多语句注入、时间注入>

举个例子，原本语句是，select *from table where user=admin and password=password；其中，admin 和 password 是用户输入传过来的，如果没有校验，用户这么输入 select* from table where user=admin --；就可以让用户只输入用户名不输入密码，直接通过了查询

防范方法：1、过滤用户输入，检查输入类型；2、使用预编译，占位符的形式，组装 SQL 语句

#### 2、XSS

跨站脚本攻击，<https://www.jianshu.com/p/4fcb4b411a66、https://wizardforcel.gitbooks.io/xss-naxienian/content/7.html>

普遍认为，XSS 包括三种类型：反射型、存储型、DOM型

反射型，比如说某个页面，会读取 URL 中某个变量的值，然后原封不动的搬到页面里面的某一部分，所以攻击者就可以构造一个恶意的 URL <http://xxx?data=>alert... 之类的，当用户点击这个 URL，就会实现弹窗，而如果访问原生的 HTML 页面，是不出现弹窗的

存储型，比如说某个页面，会把输入数据保存到数据库，当用户访问这个页面的时候，会从数据库读取数据显示在 HTML 页面上，然后如果没有处理数据输入输出的话，攻击者就可以构造一个恶意的数据插入到库中，比如说留言板 `<script>alert...`. 之类的，当读取 HTML 页面是，就会读取到这个数据到页面，然后就会被当做 `<script>` 执行

DOM 型，比如说某个页面，会接收 URL 中某个参数，用这个参数替换掉页面中某个初始值，类似于搜索框，输入一次之后回车，搜索框会保留你输入的内容，于是就可以构造一个恶意的 URL，更改框的显示内容甚至跳转链接，比如说 xxx.innerHTML="按职业检索：img src=1 onerror=alert(1)"，打开页面后就可以执行恶意 js

防范方法：前后端都要，输入过滤，渲染转义；其他安全措施，比如设置 HTTP-ONLY 不让 JS 读取 COOKIE 之类的

#### 3、CSRF

跨站脚本伪造，<https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html>

按照链接里的这个场景，用户先是登录了银行网站A，然后访问了恶意页面B，恶意页面B会执行特殊的代码让浏览器自动发送恶意请求给A，而浏览器会自动带上A的Cookie，于是就成功通过了这个恶意请求

防范方法：Refer 字段检查，CSRF-TOKEN 令牌使用（token 不保存在 COOKIE 中）

#### 4、DDOS

拒绝服务攻击，<https://blog.51cto.com/hukunlin/337584>

各种类型，比如说流量攻击ICMP Flood、UDP Flood、NTP Flood；协议利用SYN Flood和CC攻击，DNS Query Flood 等

防范：频率控制，IP 限制之类的

#### 5、网站安全性

简单的理解就防范各种 WEB 攻击（除了上面这四种，还有文件上传，目录遍历，信息泄露之类的），修复服务器自身漏洞之类的；

\====================================================================================================================================================================================

#### 1、搭建网站 Apache、IIS

Linux 下搭建 Apache：只要 Apache 的话，apt-get install apache2，然后可以下载 lamp（linux-apache-mysql-php）套装之类的

Windows 下搭建 Apache：官网下载 Apache 安装包，或者 wamp（windows-apache....）

Windows 下搭建 IIS：Server 系统，下个 ISO，控制面板-添加组件，把 IIS 搞上去就好了

#### 2、正向代理、反向代理、透明代理

参考：<https://www.jianshu.com/p/208c02c9dd1d>

正向代理，用户与代理在同一侧，用户可以通过代理去访问其他服务器资源，服务器一般无法知道是哪个用户访问的，比如说翻墙

反向代理，代理与服务器在同一侧，服务器可以通过代理返回资源，但用户一般无法知道是哪台服务器返回的，比如说负载均衡

透明代理，用户不知道代理的存在，直接访问服务器，但其实中间过了代理了，比如 MITM

\====================================================================================================================================================================================

#### 1、对比两个网站的访问速度，请问用什么方法进行对比

一般是用工具的，比如说站长之家有个在线 ping 服务器，全球几十个服务器分别访问，得到时间；或者说浏览器，开发者工具，有个 Timing 可以计算时间，还可以仔细看到是哪一部分（比如SSL）时间高之类的

#### 2、某天突然发现办公PC打开新浪主页失败，请详细说明排查定位问题的过程

控制变量法，同个浏览器打开其他知名外网页面，可行，先排除网络问题；然后手动 ping 新浪，看能不能解析成功、ping 通；进一步用浏览器开发者工具，仔细定位一下看是哪部分一直没有回应；

### 维度：操作系统

代码：Windows 编程、Linux 编程、多线程、GCC、GDB

基础：网卡？网卡的 MAC 地址，IP 地址是什么

安全：个人 PC 或服务器有哪些安全隐患？如何提高安全性？

动手：Windows 和 Linux 多系统、虚拟机、GHOST；系统共存（VMWARE）？引导（GRUB、LILO），如何制作启动盘，系统启动失败如何解决？虚拟机如何上网（桥接 OR NAT）？LINUX 系统启动过程？Linux 深入操作，如何让一个脚本开机自动运行？如何优雅的杀死一个进程？查看占用内存最多的进程？如何判断一个进程是否有内存泄漏？

逻辑思维：操作系统出现故障，无法进入系统，但是系统盘有非常重要的文件，请问用什么方法恢复文件？电脑里存在较多临时文件需要清理，分布在不同的目录和文件名，你准备如何解决？电脑本地连接只有“已发送”数据，没有“已接收“数据，是什么原因？如何去排查？

\====================================================================================================================================================================================

#### 1、Windows 编程

现在比较流行跨平台的语言了吧，比如 Python，先去官网下个 Windows 版的 Python，然后下个 IDE 比如 Pycharm，然后就可以开始编码了；然后还可以写 bat 脚本之类的；win32-api 用 Python 封装好的库就可以调用了

#### 2、Linux 编程

同样，Python，apt-get install python，然后也有 PyCharm；可以写 shell 脚本之类的；linux 工具可以用 os.system 之类的调用

#### 3、多线程与多进程

<https://blog.csdn.net/linraise/article/details/12979473>

区别的话，比如说多线程可以共享进程数据，但是多进程不共享数据之类的

编码的话，Python 用 threading 库可以实现多线程；然后 multiprocess 可以实现多进程；实现的方式有点类似，一个 for 循环，函数和参数传进去给对应的 api，然后 start 启用就好了，还可以弄些高级的进程池之类的

#### 4、GCC

<https://www.jianshu.com/p/5b214335c1de>

一般认为是 C 语言的编译器，然后 G++ 之类的可以用来编译 C++，然后可以生成二进制程序运行

#### 5、GDB

<https://www.jianshu.com/p/c9219fb0fd66>

Linux 下调试工具的神器吧，比如一个程序出现死循环之后就可以用 GDB 定位一下是哪行代码出问题了

\====================================================================================================================================================================================

#### 1、网卡

有硬件设备也有虚拟网卡，用来实现网络通信用的，自带了 MAC 地址，虽然说可以改；

#### 2、网卡的 MAC 地址、IP 地址

每个网卡都有一个 MAC 地址，二层通信用的；然后每个网卡可以有若干个 IP 地址，三层通信用的；

\====================================================================================================================================================================================

#### 1、个人 PC 或服务器有哪些安全隐患

操作系统本身存在各种漏洞，比如说 Windows 有什么 SMB 漏洞，可以导致永恒之蓝勒索病毒攻击成功之类的； 然后就是开放的端口号，比如一个服务器开放了 25 和 110 端口，可能就是邮件服务器，开放 80/443 就是 Web 服务器之类的

#### 2、如何提高安全性

各种打补丁，不该开的服务禁用掉，架上防火墙之类的保护措施，内部程序的权限控制之类的

\====================================================================================================================================================================================

#### 1、Windows 和 Linux 多系统、虚拟机、GHOST

电脑可以装多个系统，然后通过 MBR 引导分区设置好，开机选择指定系统启动就好；

虚拟机，是模拟系统的一个软件，比如说 VMWare，在 Windows 上安装好对应软件，然后就可以新建虚拟机安装 ISO 然后就有虚拟系统了；也有 vSphere 专门用来做虚拟机服务器之类的系统；

GHOST，备份恢复系统，就提前把系统包括分区表之类的磁盘信息记录下来，然后用 PE 系统之类的挂载硬盘，再把这个备份数据拷贝进去

#### 2、系统共存（VMWARE）

VMware 是一个虚拟机软件，还有其它厂商的软件，比如深信服自己也有 HCI 这种虚拟系统

#### 3、引导（GRUB、LILO），如何制作启动盘，系统启动失败如何解决

<https://blog.csdn.net/xtqueen/article/details/8468801>

不同的引导方式吧，用来管理启动哪个系统的

制作启动盘，很多方式，拿个 U 盘，用软件比如说软碟通/rufus直接拷贝 ISO，或者用大白菜做个 PE 系统，然后把 ghost 拷贝进去

启动失败的话，用 PE 系统挂载一下这个硬盘，然后一点点做检测；或者试下安全模式能不能进去，能进去就可以检查是不是某些服务导致启动失败

#### 4、LINUX 系统启动过程

<https://www.runoob.com/linux/linux-system-boot.html>

先是硬件上的，BIOS开机自检之类的，然后就是加载 Linux 内核，然后就是运行 init 程序，运行 rcx.d 里面的各种脚本初始化系统，之后就是建立终端或者图形界面给用户登录使用了

#### 5、Linux 深入操作，如何让一个脚本开机自动运行

一般是编辑 rc.local 这个文件，把要运行的脚本放进去就行了，然后注意一些细节，比如说得用绝对路径之类的

#### 6、如何优雅的杀死一个进程

一般是 PS AUX | grep xxx，得到 pid 号，然后 kill -9 pid 号杀掉；a 是 all，u 是所有用户，x 是所有终端之类的，可以看 help 帮助

#### 7、查看占用内存最多的进程

一般是 free -mh 大致了解一下总内存，还剩下多少内存，然后 top 命令看下哪个 CPU 或者内存占用高

#### 8、如何判断一个进程是否有内存泄漏

可以进行内存监控，比如说实时保存 top 命令的数据，然后分析一下；或者用一些内存分析工具，比如有个 Valgrind 之类的

\====================================================================================================================================================================================

#### 1、操作系统出现故障，无法进入系统，但是系统盘有非常重要的文件，请问用什么方法恢复文件

用 U 盘弄个 PE 系统，然后挂载硬盘，拿文件

#### 2、电脑里存在较多临时文件需要清理，分布在不同的目录和文件名，你准备如何解决？

WIndows 下一般是用各种软件吧，比如电脑管家，或者重复文件分析之类的，另外 Windows 也自带了磁盘清理之类的；

#### 3、电脑本地连接只有“已发送”数据，没有“已接收“数据，是什么原因？如何去排查？

包没有过来，检查一下有没有防火墙或者杀毒软件把数据给拦了，甚至看下其他同事能不能收到数据，会不会有 ARP 欺骗之类的

### 维度：局域网通信

代码：SOCKET 网络编程？QQ局域网聊天工具？

基础：TCP 和 UDP 的区别？ARP 和 RARP 区别？

安全：如何解决或规避永恒之蓝的病毒攻击？IPTABLES？

动手：搭建共享服务器的方式？局域网上网方式？故障排查？怎么查看路由表（Linux、Windows）

逻辑思维：局域网出现广播风暴网络不可用，如果你是网络管理请问该如何排查？IP冲突如何解决？你有一个测试任务，需要运行在局域网50个PC上。你会如何提高效率，将这些测试任务部署到这些 PC 上运行？谈谈你的思路，需要的话，你会如何设计这样的工具？

\====================================================================================================================================================================================

#### 1、SOCKET 网络编程

就 TCP/UDP 套接字编程，python 有个 socket 库，大致的流程就是，先弄服务器，新建个套接字，设置一下协议、家族，地址，端口号之类的，开启监听；然后客户端新建套接字，也是指定同样的协议家族地址之类的，然后 TCP 的话要连接，UDP 的话直接收发数据；接下来就是互相收发数据了，最后 close 就完成了；

#### 2、QQ局域网聊天工具？

企业内部 IM 通讯工具，可以用 RTX 之类的；然后如果要自己写的话，UDP 套接字编程之类的，弄个服务端，不断监听，然后各个客户端登录后就收发信息

\====================================================================================================================================================================================

#### 1、TCP 和 UDP 的区别

区别有很多，比如 TCP 是可靠连接的，每次建立连接得三次握手四次挥手，然后有各种超时重传机制；最原始的 UDP 没有这种可靠性保证，只是发消息发完就不管了

<https://hit-alibaba.github.io/interview/basic/network/TCP.html>

三次握手，客户端 SYN1,SEQ=X，然后服务端回个 SYN1，ACK1，SEQ=Y，ACKnum=x+1，然后客户端再发个，ACK1，ACKnum=y+1

四次挥手，客户端 FIN1，SEQ=X【FIN\_WAIT1】，然后服务端回个 ACK1，ACKnum=X+1【服务端 CLOSE\_WAIT，客户端 FIN\_WAIT\_2】，服务端再发个 FIN1，SEQ=Y【服务端 LAST\_ACK】，客户端发个 ACK1，ACKnum=y+1，然后【客户端 TIME\_WAIT，服务端 CLOSED】

#### 2、ARP 和 RARP 区别？

ARP 是已知 IP 地址然后请求 MAC 地址的

RARP 是已知 MAC 地址然后请求 IP 地址的

\====================================================================================================================================================================================

#### 1、如何解决或规避永恒之蓝的病毒攻击

漏洞打补丁，禁用 SMB 协议，装杀毒软件之类的

#### 2、IPTABLES

Linux 下的一种包过滤防火墙，可以指定给不同端口设置不同规则，拒绝或者允许之类的

\====================================================================================================================================================================================

#### 1、搭建共享服务器的方式

最方便是搭建个 HTTP 服务器，python -m SimpleHTTPServer 或者 python3 -m http.server，甚至用 hfs 之类的神器；或者 FillZilla 之类的 FTP 软件也行

#### 2、局域网上网方式

一般使用 NAT 吧，网关指给某个具备 NAT 功能的网口出口设备，如果公司禁外网还可以研究下 DNS 隧道之类的

#### 3、故障排查

一条一条查询，比如说路由部署吧，C -> 网关 -> S，先检查 C 到网关通不通，再检查网关到 S 通不通，都通，则可能是 S 网关丢的是别人，可以 tracert 跟一下

#### 4、怎么查看路由表（Linux、Windows）

Windows 下 route print 吧

Linux 下 route -n 命令

\====================================================================================================================================================================================

#### 1、局域网出现广播风暴网络不可用，如果你是网络管理请问该如何排查？

可以物理排查，先恢复生产力，把所有机柜都断了，然后一个个接上，看是哪个机柜出问题，然后在机柜里面找一下，一个个设备接网线看下，是哪个设备出问题了

也可以有规划的网络设计排查，就是抓包，看一下是哪个 IP 哪个 MAC 发包这么多，如果事先有良好的网络规划那就可以定位出哪台设备有问题，直接去查这台设备

#### 2、IP冲突如何解决？

一般都用 DHCP 解决 IP 地址分配的问题，如果是静态分配就有可能出现冲突，这时用 arp 协议看一下，哪个 MAC 地址用了这个 IP，如果事先网络规划得好就可以定位出来；

#### 3、你有一个测试任务，需要运行在局域网50个PC上。你会如何提高效率，将这些测试任务部署到这些 PC 上运行？谈谈你的思路，需要的话，你会如何设计这样的工具？

一般来说，50 个 PC，都是用虚拟机的，比如说 vSphere 上装了 50 台虚拟机，然后就可以用 Python 脚本搭配 Vmware，有批量拍快照，恢复快照的选项，这就解决了前后置的问题

然后就是执行测试任务，可以设置一个服务端，在生成这 50 台 PC 的时候就把对应的客户端脚本放上去然后用 crontab 之类的，一开机自动执行脚本，拉取服务端上的脚本，然后执行，返回执行结果

### 维度：邮件

代码：现在有一个任务需要你去做一个工具完成：在家发一个邮件到某公司邮箱那里，就可以触发公司的一个自动化任务开跑（假设自动化任务就是一条命令开跑）

基础：SMTP和POP3？邮件加密协议？HTTPS+邮件？

安全：钓鱼邮件？发件人伪造？

动手：邮件服务器？

逻辑思维：多个邮箱账号如何在一个手机中高效使用？

\====================================================================================================================================================================================

#### 1、现在有一个任务需要你去做一个工具完成：在家发一个邮件到某公司邮箱那里，就可以触发公司的一个自动化任务开跑（假设自动化任务就是一条命令开跑）

一般来说，这种都是用 CI 比如说 jenkins 来完成的；

然后如果说要实现功能的话，先试试看邮件服务器比如说 MagicMail 之类的，有没有接收邮件然后执行命令的功能，没有的话，参考开源库用 Python 写个邮件服务器，收到邮件之后调用脚本

\====================================================================================================================================================================================

#### 1、SMTP和POP3？

SMTP 是发邮件时用的，25 端口

POP3 是收邮件用的协议，110 端口

#### 2、邮件加密协议？

<https://www.jianshu.com/p/2139dc746550>

PGP（全称：Pretty Good Privacy，优良保密协议）、S/MIME是Secure/Multipurpose Internet Mail Extensions，还有的 SSL 好像也可以

#### 3、HTTPS+邮件？

Web 邮箱，开启 HTTPS 加密的话收发邮件会安全一些吧

\====================================================================================================================================================================================

#### 1、钓鱼邮件？

比如说用 XSS 构造了个恶意链接，然后发给用户，用户点击后就会受到 XSS 攻击；或者说直接构造相似域名，然后欺骗用户等；

#### 2、发件人伪造？

对于某些没有设置安全检测的邮件服务器，可以直接用脚本，把对应的发件人改成要伪造的发件人地址，直接发送邮件给服务器

\====================================================================================================================================================================================

#### 1、邮件服务器？

可以用 MagicMail 之类的服务器搭建个邮件服务器，然后配合 Foxmail 之类的邮件客户端，就可以使用了

\====================================================================================================================================================================================

#### 1、多个邮箱账号如何在一个手机中高效使用？

下个 APP 啊，QQ 邮箱都可以，里面可以绑定各家邮箱账号，然后在这个 APP 里面收发所有邮箱的信息就 OK

### 维度：数据库

代码：SQL 基本的查询方法，联合查询，查询性能优化

基础：SQL 和 NOSQL 有什么区别，分别举例说明。MYSQL数据库存储引擎有哪些？主键、外键、索引的概念

安全：最基本安全保障（密码，防止远程连接），如何防止 SQL 注入攻击？

动手：如何连接数据库，数据库备份和恢复（MYSQL、MONGO），记录和查看慢查询，数据库迁移

\====================================================================================================================================================================================

#### 1、SQL 基本的查询方法

先 USE 数据库名字，指定好数据库后，开始 SQL 语句：SELECT \* FROM table WHERE xxx=xxxx;

#### 2、联合查询

`SELECT name FROM table1 UNION SELECT name FROM table2;`

场景，比如说有两张表，一张表里面存取中国雇员名单，另一张美国的，想一起读取出来，就可以使用了

#### 3、查询性能优化

建索引，避免模糊查询，避免复杂语句，之类的

\====================================================================================================================================================================================

#### 1、SQL 和 NOSQL 有什么区别，分别举例说明

NoSQL 比如 MongoDB，SQL 比如说 MySQL；MongoDB 可以直接存储 JSON 串，方便扩展，而 MySQL 得实现设计好列，类型之类的，才能开始使用；

NoSQL 对关系型逻辑的概念比较弱，比如说多张表联合操作之类的，SQL 就比较成熟了；

#### 2、MYSQL数据库存储引擎有哪些？

<https://juejin.im/post/5baca114f265da0a8c6c3168>

InnoDB 引擎、MyISAM引擎、MEMORY 存储引擎 之类的

#### 3、主键、外键、索引的概念

<https://blog.csdn.net/xrt95050/article/details/5556411>

主键：比如说学生，学号是唯一的，但是名字可能重复，所以学号可以拿来当主键；

外键：比如说有俩个表，一个表是哪个电脑有哪个CPU型号，另一个表是CPU型号的具体信息，这个时候就可以把CPU型号当做外键，然后把俩个表关联起来

索引：可以类似的理解为列表与字典的区别，没有索引，要查找的话，就得一个个遍历元素，判断是否相等；有了索引，就相当于直接就可以找到元素，不需要遍历操作

\====================================================================================================================================================================================

#### 1、最基本安全保障（密码，防止远程连接）

<https://www.jianshu.com/p/952c3b9b3490>

比如说只监听本地端口，服务器本身漏洞补丁之类的打齐全，密码不要明文保存，控制每个用户的权限之类的

#### 2、如何防止 SQL 注入攻击？

仔细检查用户输入，使用预编译好 SQL 占位符语句之类的；

\====================================================================================================================================================================================

#### 1、如何连接数据库

可以使用一些图形工具，MongoDB 用 Robo3T 这种的，MySQL 可以用 Workbench 之类的；或者自己写脚本，Python 中有个 peewee 库，跟数据库交互挺方便的

#### 2、数据库备份和恢复（MYSQL、MONGO）

MongoDB：<https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html，mongodump> 和 mongorestore 工具

MySQL：<https://dbaplus.cn/news-11-1267-1.html，也有> MysqlDUMP 和 MySQLbakcup 之类的工具

#### 3、记录和查看慢查询

<https://blog.csdn.net/timchen525/article/details/75268151>

数据库会记录日志，以及对于响应慢的查询会有单独的日志可以查看

#### 4、数据库迁移

<https://blog.csdn.net/haiross/article/details/51282377>

有几种迁移方法，比如说整个数据库备份后恢复，或者直接用迁移工具，或者拷贝表结构之类的

\====================================================================================================================================================================================

### 维度：搜索引擎

代码：SEO排名？

基础：百度和 Google 的区别？

安全：怎么通过搜索引擎获取一些安全信息，比如 IP 地址，爆破账号信息等等？

动手：你是怎么用 Google 搜索的？（翻墙，高级搜索技巧）

逻辑思维

\====================================================================================================================================================================================

#### 1、SEO排名？

有几种算法，PageRank 算法（Google 早期用的），还有 HITS 之类的算法，来计算每个网页的权重然后弄个排名出来

\====================================================================================================================================================================================

#### 1、百度和 Google 的区别？

SEO 算法不同，俩家搜索公司，百度爬国内网站比较多，谷歌爬国外网站比较多，爬国内较少；blablabla...

\====================================================================================================================================================================================

#### 1、怎么通过搜索引擎获取一些安全信息，比如 IP 地址，爆破账号信息等等？

Google Hacking，如果说目录遍历，直接 intitle:index of，有对应漏洞的就出来了；除了 Google 还有 Zoomeye 之类的；然后如果要反查 MD5 可以用在线 md5 破解，一般都有彩虹表内置了一部分信息的

\====================================================================================================================================================================================

#### 1、你是怎么用 Google 搜索的？（翻墙，高级搜索技巧）

翻墙：自己搭建 VPS，V2ray 或者买 ss 服务；高级搜索技巧，就 Google Hacking，各种搜索网站之类的；

\====================================================================================================================================================================================

### 维度：移动端

代码：APP项目？

基础：1、Android 后台怎么连接；2、Android 手机和 IOS 手机，系统有什么区别（运行机制不同，一个是虚拟机机制，一个是沙盒机制，后台制度不同）

安全：Android 和 IOS 分别有哪些鉴权机制？

动手：1、Android/IOS 系统，升级版本一般是怎么升级的？尝试讲一下升级步骤（判断条件）；2、Android/IOS 系统下怎样安装 APP 应用？3、对 Android 的 adb 了解哪些功能。考察 Android 开发的调试工具

逻辑思维：移动支付作为一种新兴的支付方式，其便利性使得其已成为一种潮流，但是移动支付存在的安全隐患也不容忽视，请以微信为例进行分析可能存在的安全隐患及如何防范？APP 是否存在手机兼容性问题？

APP 正在使用过程中，突然发生了崩溃，这个时候可能会由哪些情况导致？

IOS系统和 Android 系统，哪个使用更流畅？为什么？

\====================================================================================================================================================================================

#### 1、APP项目？

Android 开发入门；IOS 开发入门之类的；

\====================================================================================================================================================================================

#### 1、Android 后台怎么连接；

Android 手机，数据线插上，开启开发者模式，然后利用一些连接工具，比如 airtest 框架之类的，就可以对手机进行操作了；

#### 2、Android 手机和 IOS 手机，系统有什么区别（运行机制不同，一个是虚拟机机制，一个是沙盒机制，后台制度不同）

<https://zhuanlan.zhihu.com/p/54653029>

IOS 不开源，Android 很多开源的，然后是 IOS 是假后台，Android 真后台，之类的

\====================================================================================================================================================================================

#### 1、Android 和 IOS 分别有哪些鉴权机制？

<http://www.droidsec.cn/%E7%BB%86%E6%95%B0ios%E4%B8%8A%E7%9A%84%E9%82%A3%E4%BA%9B%E5%AE%89%E5%85%A8%E9%98%B2%E6%8A%A4/、https://www.cnblogs.com/lao-liang/p/5089336.html>

IOS/Linux 有很多类似的安全措施，比如说签名验证，程序有签名验证；沙盒机制，程序运行在沙盒里；还有一些堆栈溢出保护，DEP 啥的

\====================================================================================================================================================================================

#### 1、Android/IOS 系统，升级版本一般是怎么升级的？尝试讲一下升级步骤（判断条件）；

IOS 的话，官方升级就是网络连接下载包或者 iTunes 升级，或者可以用 PP 助手之类的刷机；

Android 的话，也是网络连接更新或者也是可以用刷机工具，360 刷机大师啥的；

#### 2、Android/IOS 系统下怎样安装 APP 应用？

Android，一般去官网或者各大软件园比如豌豆芽这种下载；

IOS，有个固定的 Appstore 可靠一些，或者想下一些越狱的有个 cydia 之类的，或者 PP 助手之类的

#### 3、对 Android 的 adb 了解哪些功能

<https://www.jianshu.com/p/c4a6c9297b33>

Android Debug Bridge，Android调试桥接器，是 PC 和 Android 的通讯中介，通过网络连接之后，可以在 PC 下发命令然后在手机上执行，可以打开程序、安装程序、重启之类的；

#### 4、考察 Android 开发的调试工具

Stetho 之类的吧，自己之前用的是 airtest 框架，就左边是你的测试工程，右边是手机屏幕的映射，然后你可以跑脚本，在电脑上模拟手机操作，还可以分析组件树，每个组件的信息之类的；

\====================================================================================================================================================================================

#### 1、移动支付作为一种新兴的支付方式，其便利性使得其已成为一种潮流，但是移动支付存在的安全隐患也不容忽视，请以微信为例进行分析可能存在的安全隐患及如何防范？

安全隐患：支付密码输入可能被监听，然后扫码支付可能对方恶意指定金额然后收钱

防范：不要乱下载东西，一不小心就装上了键盘记录器之类的；然后安全中心之类的保证更新，还有支付的时候小心不要被第三方扫到屏幕，支付的时候多留心一下支付金额之类的

#### 2、APP 是否存在手机兼容性问题？

存在，不同操作系统有不同的 API 接口，比如说 IOS10 的好多程序在 IOS9 版本就跑不起来，还有一些小屏幕的软件【iphone】在大屏幕【ipad】会有显示问题之类的

#### 3、APP 正在使用过程中，突然发生了崩溃，这个时候可能会由哪些情况导致？

内存不够用，磁盘空间不够用，网络连接异常，之类都有可能导致程序陷入死循环或者其他异常然后崩溃

#### 4、IOS系统和 Android 系统，哪个使用更流畅？为什么？

<https://www.jianshu.com/p/1a9ecb2f06b3>

比如优先级、硬件、系统设计方面的；

### 维度：虚拟化

代码：请实现一个多主机共享读写一个文件的逻辑，要求避免冲突和读写覆盖

基础：路由协议、DHCP、NAT

安全：云上业务安全的手段

动手：磁盘格式化主要做了哪些动作？如何搭建一个 VMware 环境？配置过路由器，交换机没有？是否了解过 DOCKER、OPENSTACK，做过哪些实践？

逻辑思维：一个物理主机要虚拟出来几个虚拟机共享使用同一个硬件，你觉得是怎么做到的？RAID 协议目的就是保证数据冗余，数据冗余有哪些手段？要选一个云平台，阿里云和腾讯云，如何对比两家供应商哪个更优？

\====================================================================================================================================================================================

#### 1、请实现一个多主机共享读写一个文件的逻辑，要求避免冲突和读写覆盖

可以用文件锁的库，当一个主机要用文件的时候先加个锁，用完释放；Python 有 fcntl 之类的库可以实现

\====================================================================================================================================================================================

#### 1、路由协议

<https://blog.csdn.net/qq_30852577/article/details/79009003>

RIP、OSPF、BGP 之类的，各种网关协议，可以实现防环，区域划分之类的；

#### 2、DHCP

主要用来分配 IP 地址，避免 IP 冲突的，需要有个 DHCP 服务器，然后各台 PC 申请 IP 资源之类的

#### 3、NAT

NAT 英文全称是“Network Address Translation”，中文意思是“网络地址转换”，常见的 SNAT 就是一堆主机转换成同一个出口地址，上网；然后 DNAT/PNAT，反过来，访问某一个地址的某个端口，会映射到内网的不同机器上；

\====================================================================================================================================================================================

#### 1、云上业务安全的手段

可以配各种外网防火墙、防 DOS 服务、各种服务器日志审计之类的；

\====================================================================================================================================================================================

#### 1、磁盘格式化主要做了哪些动作？

不同的格式化程度，比如说快格，就做一些比如删除文件索引的操作，让操作系统以为文件不在了，实际上文件的内容还放在对应的磁盘空间里；然后低格会更加细致一些，会把文件内容进一步清空掉；

#### 2、如何搭建一个 VMware 环境？

普通 PC 下个 Vmware Workstation 就可以，然后如果是专业的服务器，那就下个 vSphere 之类的系统镜像，再装系统当虚拟机服务器

#### 3、配置过路由器，交换机没有？

CCNA、CCNP、CCIE 之类的课程；

#### 4、是否了解过 DOCKER、OPENSTACK，做过哪些实践？

DOCKER，就一个轻量级的虚拟机系统，比如说 jenkins 之类的，就有人做成了镜像，直接 docker-run 就有了 jenkins 的服务，不用自己搭建

<https://baike.baidu.com/item/OpenStack>

\====================================================================================================================================================================================

#### 1、一个物理主机要虚拟出来几个虚拟机共享使用同一个硬件，你觉得是怎么做到的？

比如虚拟网卡，就通过字符设备模拟之类的

#### 2、RAID 协议目的就是保证数据冗余，数据冗余有哪些手段？

#### 3、要选一个云平台，阿里云和腾讯云，如何对比两家供应商哪个更优？

## HR 面试

### 维度：沟通能力、人际理解、家庭与生活背景与企业文化的匹配性

#### 题库：

XX同学，你好；你是哪里人？

最近工作找得怎么样？面试和笔试了哪些公司？为什么选择这些公司去笔试和面试？投了什么岗位？开发的多还是测试的多？为什么会选择我们的测试岗位？

你心目中最想去的公司或者单位有哪些，为什么？

为什么报我们公司，之前对我们公司有什么了解？

家里人有没有在帮你找工作？家里人都是做什么的？家里对你以后的工作有什么看法？你觉得你受家里人哪些人的影响最大，为什么？你家里人对你未来有什么期望？

当初为什么会考到这个学校？为什么报这个专业？这个专业学下来情况觉得怎么样？大学这几年你主要在干什么？

大学期间有没有什么不适应的事情？有的话主要是什么？

介绍一下你大学最好的几个朋友的特点，以及为什么你们能成为最好的朋友；你觉得你的朋友会怎么介绍你，优点和缺点分别是什么？

你觉得你最难以和什么样的人相处？为什么？

#### 维度：淘汰项

说话结巴，感觉很紧张，不理解面试官的意思，或答非所问或绕圈子，反应迟钝

整个面试过程毫无面部表情，呆滞

家人或男女朋友不允许其到深圳工作的

对什么事情都抱怨很多的

对加班比较反感，比较懒惰的

对公司的产品和技术不感兴趣者

有创业打算的

太过自由散漫，考虑问题的角度只关注自己的

身体看上去很弱，并确认有身体问题

态度傲慢，看不起面试官和同学

对工作内容很挑剔者需慎重考虑

性格孤僻，几乎没有朋友

对做测试工作几乎没有意愿，只是随便投的

### 维度：成就动机

#### 题库：

从你懂事到现在，你觉得你人生最重要的几个时刻是什么？在这几个时刻发生了什么样的事情？你是怎么对待的？

你这么多年来受到的最大考验是什么？当时碰到的时候你是怎么想的？又是怎么解决的？最后的结果是怎么样的？过后你的总结是什么样的？

从你的简历看，你在校期间做过以下这些项目，你认为最重要的项目是哪个？这个项目的难点是什么？你所负责的是哪块的工作？结果怎么样？加班情况？

#### 维度：淘汰项

很容易就放弃，几乎没有成功做过一个事情过

很多理由为自己的失败找借口

失败了从不总结经验教训

不愿意为了成功加班或者更努力的工作

## 评价参考标准

### 维度：人际理解力

S：全面优秀

A：具有很好的同理心，能时刻设身处地地站在对方的角度考虑问题，考虑团队利益，能够非常好地控制自己的情绪和情感，较好地与他人相处，亲和力比较好，不轻易暴怒；自我认知很清晰；

B+：具备良好的同理心，在乎对方的感受，乐意倾听，考虑团队协作，能控制自己情绪，与他人相处相对融洽，亲和力较好。能控制自己情绪和情感。对自我认知清晰；

B：能够理解他人，懂得妥协和退让，同理心尚可；大部分的时候可以较好地控制自己的情绪和感情，但是偶尔也会失常，亲和力基本可以；自动定位基本清楚，可以达到要求，但不是很突出；

C：基本不能有效地正确地理解他人想表达的意思，很固执，个性张扬，不会轻易听取他人的意见，也不懂妥协和退让，给人有点愣头青的感觉，团队意识比较淡薄；情绪经常失控，情绪化很严重，难以相处；基本没有自我认知，或认知错误；性格很闷，不愿意交流；

关键词：同理心、人际洞察、情绪管控、团队协作

### 维度：表达能力

S：全面优秀

A：思路清晰、有肢体语言表达，语言流畅，重点突出，完全能清楚的讲述自己的经历或项目

B+：思路比较清晰，语言流畅，能找到重点，基本上能清楚的讲述自己的经历或项目，但实现的过程上描述不够清晰

B：思路不够清晰，重点不够突出，可以描述出自己的经历或项目，但不能够讲出实现的过程

C：没有思路，语言不流畅，没有重点，项目和经历讲不清楚

### 维度：成就导向

S：全面优秀

A：目标导向强，勤奋努力，碰到困难想尽一切办法解决，客服过很多大的困难，有韧劲，并能很好的总结经验教训；

### 维度：适配性

能否持续奋斗，重点关注是否能够接受或适应我们高强度工作量和工作节奏
