测试类面试参考

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:目标导向强,勤奋努力,碰到困难想尽一切办法解决,客服过很多大的困难,有韧劲,并能很好的总结经验教训;

维度:适配性

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

Last updated