前面一个月断了,是因为找工作,很累,然后找到工作后,新环境也很累,哈哈哈,好吧,我懒。后面应该不会每天更新了,因为我还要分一点时间出来干其他事情,就每天更新一个类型的面试题,每周刚好一篇(也就是周一新开一页,然后后面每天再修改累加),最后周日的是完整的。本来是不想继续更了,但考虑一下还是要每天把可能的面试内容记录一下,毕竟现在还比较年轻嘛,还是要随时准备换单位的。现在的工作内容有些偏物联网,还会涉及到部分 APP 的工作,所以就比以前的服务器/交换机等的测试更互联网一些,记录就更加需要了,哎,技术还是要老老实实沉淀,测试也要有知识分子的尊严

一、测试基础面试题

问:请你说一下 app 性能测试的指标
答:
  ①、内存:内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性,当然关于内存的测试,在这里我们需要引入几个概念:空闲状态、中等规格、满规格
空间状态指打开应用后,点击 home 键让应用后台运行,此时应用处于的状态叫做空闲;中等规格和满规格指的是对应用的操作时间间隔长短不一,中等规格时间较长,满规格时间较短。
内存测试中存在很多测试子项,清单如下:
空间状态下的应用内存消耗;
中等规格状态下的应用内存消耗;
满规格状态下的应用内存消耗;
应用内存峰值;
应用内存泄漏;
应用是否常驻内存;
压力测试后的内存使用
  ②、CPU:
使用 Android 提供的 view plaincopy 在 CODE 上查看代码片派生到我的代码片
Adbshell dumpsys CPUinfo igrep packagename > /address/CPU.txt 来获取;
使用 top 命令 vie plaincopy 在 code 上查看代码片派生到我的代码片
Adbshell top igrep packeagename>/address/CPU.txt 来获取。
  ③、流量:
网络流量测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。流量测试包括以下测试项:
应用首次启动流量提示;应用后台连续运行 2 小时的流量值;应用高负荷运行的流量峰值。
  ④、电量
测试手机安装目标 APK 前后待机功耗无明显差异;常见使用场景中能够正常进入待机,待机流量在正常范围内;长时间连续使用应用无异常耗电现象
  ⑤、启动速度
第一类:首次启动—应用首次启动所花费的时间;第二类:非首次启动—应用非首次启动所花费的时间;第三类:应用界面切换—应用界面内切换所花费的时间
  ⑥、滑动速度、界面切换速度
  ⑦、与服务器交互的网络速度

二、测试基础面试题

问:请你说一下 python 的垃圾回收机制
答:
  Python 中的垃圾回收机制中有三部分内容:“引用计数”、“标记 - 清除”、“分代回收”。具体实现中,python 通过 “引用技术” 进行垃圾回收,“标记 - 清除” 解决容器对象可能产生的循环引用问题,“分代回收” 以空间换时间的方式提高垃圾回收效率。具体内容如下:
  ① 、引用计数。
引用技术法的原理是每个对象维护一个 ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,当发生以下四种情况时,该对象的引用计数器 +1:
  A:对象被创建----->>>a = 14
  B:对象被引用----->>>b = a
  C:对象被作为参数,传到函数中----->>>func(a)
  D:对象作为一个元素,存储在容器中----->>>list{a,” a”,” b”,2}
当发生以下四种情况时,该对象的引用计数器-1:
  A:当该对象的别名被显式销毁时----->>>del a
  B:当该对象的引用别名被赋予新的对象----->>>a = 26
  C:一个对象离开它的作用域,例如 func 函数执行完毕时,函数里面的局部变量的引用计数器就会减一(但全局遍历不会)
  D:将该元素从容器中删除时,或者容器被销毁时。
总之,当指向该对象的内存的引用计数器为 0 的时候,该内存将会被 python 虚拟机销毁。

  ② 、标记 - 清除
  在引用如果存在循环引用时:有一组未使用的、互相指向的对象,但谁都没有外部引用。这些 “孤岛” 没法使用引用计数的方法去释放这些对象,并回收它们占用的内存空间,因为所有的引用计数都是 1 而不是 0,
  Python 对这些 “孤岛” 的情况使用了 GC 算法,算法分为两个阶段:A:标记阶段,GC 会将所有的 “活动对象” 打上标记。B:回收阶段,GC 将那些没有标记成功的 “非活动对象” 进行回收。具体标记过程为:对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边。从根对象(root object)出发,沿着有向边遍历对象,可达的对象标记为活动对象,不可达的对象就是要被清除的非活动对象。根对象就是全局变量、调用栈、寄存器

 在上图,我们把小黑圈视为全局变量,也就是把它作为 root object,从小黑圈出发,对象 1 可直达,那么它将被标记,对象 2、3 可间接到达也会被标记,而 4,5 不可达,那么 1,2,3 就是活动对象,4,5 就是非活动对象会被 GC 回收
  ③ 、分代回收
  过程:
分配内存
-》发现超过阈值
-》触发垃圾回收
-》将所有可收集对象链表放到一起
-》遍历,计算有效引用计数
-》分成 有效引用计数= 0 和有效引用计数>0 两个集合
-》大于 0 的,放入到更老一代
-》等于 0 的,执行回收
-》回收遍历容器内的各个元素,减掉对应元素引用计数(破掉循环引用)
-》执行-1 逻辑,若发现对象引用计数=0,触发内存回收
-》python 底层内存管理机制回收内存
  分代回收是一种以空间换时间的操作方式,pthon 将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,python 将内存分为了 3 代,分别为年轻代(0 代)、中年代(1 代)、老年代(2 代),他们对应的是 3 个链表,他们的垃圾收集频率与对象的存活时间的增大而减小。新创建的对象都会被分配在年轻代,年轻代链表的总数达到上线时,python 垃圾收集机制就会被触发,把哪些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依次类推,老年代中的对象时存活时间最久的对象,甚至时存活于整个系统的生命周期内。同时,分代回收是建立在标记清除技术基础之上。

三、操作系统类面试题(linux)

问:请问 contrab,uptime,netstat 这几个指令有什么作用,如何查看磁盘分区状态
答:
  crontab 被用来提交和管理用户的需要周期性执行的任务,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
  uptime 查询服务器已经运行多久
  du 查看文件和目录磁盘使用的空间情况
  netstat 显示网络状态,利用 netstat 可以让你得知整个 linux 系统的网络情况
  df 命令可以查看磁盘的适用情况以及文件系统被挂载的位置

四、计算机网络类面试题

问:OSI 七层模型,各层有哪些协议
答:

五、数据库类面试题(sql,mysql)

问:请你说一下数据库事务、主键与外键的区别
答:
  数据库的事务:事务即用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,它具有四个特性,ACID,原子性,一致性,隔离性,持续性。
  主键和外键的区别:1、主键是能确定一条记录的唯一标识,不能重复,能唯一确定该条数据;2、外键用于与另一张表的关联,是能确定另一张表记录的字段,用于保持数据的一致性。

六、接口测试(python)

之前第 6 部分是 python 的编程题,但是我其实已经懂了一点编程基础,我不是做开发,所以刷 leecode 的题目可能对职业发展不是那么的有用,后面改为自动化测试和测试开发方面的东西,也有一点点编程在里面
问:做过 API 接口测试测试吗?讲一讲
答:
  我们通常说的接口测试(或者 API 接口测试),其实就是对软件系统消息交互接口的测试,比如,你手机上使用美团订餐,美团 APP 和美团服务器之间,是消息交互的。
  接口测试就是:1、依据接口规范,写出测试用例,2、使用软件工具,直接通过消息接口对被测系统进行消息收发。3、验证被测系统行为是否正确。
目前的软件系统之间的消息接口大部分是基于 HTTP 协议收发的。HTTP 协议的特点是,客户端发出一个 HTTP 请求给服务端,服务端就返回一个 HTTP 响应。好像程序的 API 调用。所以接口测试通常又被称之为 API 接口测试或者 WEB API 接口测试。
  API 接口传递数据信息是通过 HTTP 协议进行收发的,网站获取网页、图片 、css 等资源,也是通过 HTTP 协议进行收发的。那么这两者有什么区别呢?为什么获取网页、图片这些 HTTP 消息 通常不叫 API 接口消息呢:
  网页、图片、css 这些资源,都是静态资源,就是一个个文件存储在服务器上的,获取这些信息,服务端直接读取文件,返回给客户端即可,无需特别的数据处理。
  而 API 接口请求消息,通常都需要服务端程序进行一番处理,比如:对请求的权限检查,从数据库中读出数据,进行信息过滤和格式转换,最后在 HTTP 响应中返回给客户端。


↙↙↙阅读原文可查看相关链接,并与作者交流