Qa
https://juejin.im/post/5cd248...
old sport
自我介绍
一般都是姓名年龄,稍微描述一下自己的教育经历,然后主要侧重于在以前的公司做什么样测试,测试内容、测试过程中担当的角色。
说一下你们工作中的测试流程
略
说出一个常用的数据库,如何索引与事务?
写一个 SQL 查询语句:给一个字段,对其进行从大到小排序,取前十行。
测豆瓣App的发言页面,且讲下逻辑.
说出一个常用的编程语言,写几段代码.
有两个有序链表,将他们组成一个有序链表。 B、给一个字符串,字符串里有(){}[]“”
这六个符号,设计一个算法,判断这些符号是否成对匹配,即要检验这些括号是否都是成对出现的。
Linux常用命令
问上一份工作的公司是做什么的?离职原因?自己的职业发展规划?
问简历上的第一个项目的详细情况,包括测试用例怎么写?怎么判断测试通过?项目的原理?
第一个项目的测试框架的搭建、怎么用数据驱动测试?
对接口测试这块熟不熟?是怎么测的?用的什么工具?为什么用 HTTPClient 类库,觉得它有什么缺点?用 Fiddler 主要做什么?
性能测试用过吗?什么情况下用的?主要测哪些方面?
Python
python内存管理机制
(1)使用生成器;
(2)关键代码使用外部功能包(Cythpn, pylnlne, pypy, pyrex);
(3) 针对循环优化:尽量避免在循环中访问变量的属性
Python如何进行内存管理?
1. 垃圾回收,Python不像其他语言(C语言),可以不用事先声明变量类型而直接对变量进行赋值。对 Python 而言,对象的类型和内存在运行时确定的,对变量内存地址的分配在运行时是在运行时自动判断变量类型并对变量进行赋值
2. 引用计数,
数组、链表、队列和堆栈的区别
1. 数组和链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;
2. 队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是后进先出,队列和堆栈可以用数组或链表来实现。
sys 和 os 模块的区别
os --- 使用操作系统函数的方法, 负责程序与操作系统的交互, 提供了访问系统底层的接口
sys --- 负责程序与 python 解释器的交互, 提供了一系列的函数与变量, 用于操控 python 运行时的环境
Linux
linux根据进程号PID查找启动程序的全路径
1.我们可以从ps命令中得到进程的PID,如23347。
2.进入/proc目录下以该PID命名的目录。
3.输入ls -ail,结果中exe链接对应的就是可执行文件的全路经详细信息。
进程与线程的区别
HashMap 和 HashTable 的区别
SpringBoot 框架的优缺点
算法:蚁群算法
算法:是否知道堆排序及其原理
Linux 打包指令
Wait 和 Sleep 的区别
性能测试
性能测试指标有哪些?
性能测试中什么情况内存过高,但 CPU 使用率不高?
性能测试中什么情况 CPU 使用率高,但内存占用不高?
接口测试
TCP 和 UDP的区别?
做接口测试框架的实现时,遇到哪些问题?是如何解决的?
移动端测试
App 的测试工具知道哪些?
知道哪些设计模式,在工具开发当中有用到什么测试模式?
数据库
SQL 和 MySQL 的区别
MySQL 的优缺点
数据库事务
SQL优化方法
(1)对查询进行优化,尽量避免全表扫描,首先考虑在 WHERE 或 ORDER BY 涉及的列上建立索引;
(2)尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则导致引擎放弃使用索引而进行全表扫描(优化:在num上设置默认值0,确保表中num列没有null值) \`SELECT \* FROM test WHERE id IS NULL --> SELECT \* FROM test WHERE id = 0 \` (
3)应尽量避免在 where 子句中使用!=或<>操作符,否则导致引擎放弃使用索引而进行全表扫
(4)应尽量避免在 where 子句中使用 or 来连接条件,否则导致引擎放弃使用索引而进行全表扫 \` SELECT \* FROM test WHERE id = 10 OR id = 20 --> SELECT \* FROM test WHERE id = 10 UNION ALL SELECT \* FROM TEST WHERE id = 20 \`
(5)in 和 not in 也要慎用,否则会导致全表扫描 \` SELECT \* FROM test WHERE id in (1, 2, 3) -->(如果是连续值) SELECT \* FROM test WHERE id BETTWEN 1 AND 3 \`
(6)避免使用模糊查询 LIKE "%xx%",否则会导致全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,否则会导致引擎放弃索引进行全表扫描 \` SELECT id FROM test WHERE num/2=100 --> SELECT id FROM test WHERE num = 2 \* 100 \`
(8)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描 \` select id from t where substring(name,1,3)='abc'--name以abc开头的id --> select id from t where name like 'abc%' \`
(9)不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引
(10)在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
UNION ALL 与 UNION 的区别
* UNION和UNION ALL关键字都是将两个结果集合并为一个。
* UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
* 而UNION ALL只是简单的将两个结果合并后就返回。
* 由于UNION需要排序去重,所以 UNION ALL 的效率比 UNION 好很多。
TRUNCATE 与 DELETE 区别
* TRUNCATE 是DDL语句,而 DELETE 是DML语句。
* TRUNCATE 是先把整张表drop调,然后重建该表。而 DELETE 是一行一行的删除,所以 TRUNCATE 的速度肯定比 DELETE 速度快。
* TRUNCATE 不可以回滚,DELETE 可以。
* TRUNCATE 执行结果只是返回0 rows affected,可以解释为没有返回结果。
* TRUNCATE 会重置水平线(自增长列起始位),DELETE 不会。
* TRUNCATE 只能清理整张表,DELETE 可以按照条件删除。
TIMESTAMP 与 DATETIME 的区别
**相同点**
TIMESTAMP 列的显示格式与 DATETIME 列相同。显示列宽固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。
**不同点**
TIMESTAMP
* 4个字节存储,时间范围:1970-01-01 08:00:01~2038-01-19 11:14:07。
* 值以UTC格式保存,涉及时区转化,存储时对当前的时区进行转换,检索时再转换回当前的时区。
DATETIME
* 8个字节存储,时间范围:1000-10-01 00:00:00~9999-12-31 23:59:59。
* 实际格式存储,与时区无关。
什么是联合索引
两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。
为什么要使用联合索引
* **减少开销:**建一个[联合索引](http://mp.weixin.qq.com/s?__biz=MzU2MTI4MjI0MQ==&mid=2247489009&idx=2&sn=b548bbcbd7e716e866d6d62962eda602&chksm=fc7a785fcb0df14916e0fe9bf823fba0443a4409e79935baa0f409bd44255054824b2c32eb26&scene=21#wechat_redirect)(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。减少磁盘空间的开销。
* **覆盖索引:**对联合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操作。覆盖索引是主要的提升性能的优化手段之一。
* **效率高:**索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql`select from table where col1=1 and col2=2 and col3=3`,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出`1000W * 10%=100w`条数据,然后再回表从100w条数据中找到符合`col2=2 and col3= 3`的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出`1000w * 10% * 10% * 10%=1w`,效率得到明显提升。
MySQL 联合索引最左匹配原则
* 在 MySQL 建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。
* MySQL 会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
* \= 和 in 可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。
什么是聚集和非聚集索引
* 聚集索引就是以主键创建的索引。
* 非聚集索引就是以非主键创建的索引。
什么是覆盖索引
覆盖索引(covering index)指一个查询语句的执行只用从索引页中就能够取得(如果不是聚集索引,叶子节点存储的是主键+列值,最终还是要回表,也就是要通过主键再查找一次),避免了查到索引后,再做回表操作,减少I/O提高效率
什么是前缀索引
前缀索引就是对文本的前几个字符(具体是几个字符在创建索引时指定)创建索引,这样创建起来的索引更小。但是MySQL不能在ORDER BY或GROUP BY中使用前缀索引,也不能把它们用作覆盖索引。
创建前缀索引的语法:ALTER TABLE table_name ADDKEY(column_name(prefix_length))
建表时,int 后面的长度的意义
int占多少个字节,已经是固定的了,长度代表了显示的最大宽度。如果不够会用0在左边填充,但必须搭配zerofill使用。也就是说,int的长度并不影响数据的存储精度,长度只和显示有关。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。