测试开发常见面试题

https://zhuanlan.zhihu.com/p/54430650

linux命令:

ps -ef | grep java | awk ‘{print $1}’
替换sed ‘s/a/b/g’ file.txt
计算第二列的和
cat file | awk ‘{ sum += $2} END {print sum}’
日志接口时间平均值(www.baidu.com 200 23)
cat log_file|awk ‘$2==“200”’|awk ‘{sum+=$3} END {print sum/NR}’
包含error的个数:
cat file | grep -o ‘error’ | wc -l
包含error前后5行
cat file | grep -A 5 -B 5 ‘error’
统计前10单词:
cat file | sort | uniq -c | sort -k 1nr | head -10
内存前5
ps -aux | sort -k4nr | head -5

数据库

存储引擎:MyISAM,innodb
innoDB:支持事务(ACID),行锁定,外键
MyISAM:插入,查询快
索引结构:B+树
聚集索引:物理地址和列值顺序一样,只一个(主键)
是否使用了索引:explain的key值
死锁:
事物A,B循环请求
分页:
select * from student limit(curPage-1)*pageSize,pageSize;
删除重复数据:
delete from aa
where
(name,gender) in (select name,gender from (select name,gender from aa GROUP BY name,gender having count(name)>1) s)
and
id not in (select id from (select min(id) id from aa GROUP BY name having count(name)>1) t) ;

事务:
https://www.runoob.com/mysql/mysql-transaction.html
BEGIN;
INSERT INTO classes(id,title) VALUES(8,‘ENGLISH’);
UPDATE classes SET title=‘11’ WHERE id=3;
COMMIT;
乐观锁:先改,提交的时候再检查版本。乐观锁并未真正加锁,效率高。一旦锁的粒度掌握不好,更新失败的概率就会比较高,容易发生业务失败。

悲观锁:先锁再修改,依赖数据库锁,效率低。更新失败的概率比较低。

sql优化:

  1. 在表中建立索引,优先考虑where、group by使用到的字段。
  2. 不使用select *,用具体字段名
  3. 不使用in,not in,用between和exists
  4. 不用or,用union all
  5. 不用开头模糊查询like '%ab%'用全文索引或like ‘ab%’
    ALTER TABLE dynamic_201606 ADD FULLTEXT INDEX idx_user_name (user_name);
    select id,fnum,fdst from dynamic_201606 where match(user_name) against(‘zhangsan’ in boolean mode);
  6. 尽量避免进行null值的判断,添加默认值0
  7. 尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。如下:
    SELECT * FROM t2 WHERE SUBSTR(username,1,2) = ‘li’
    优化方式:可以将表达式、函数操作移动到等号右侧。如下:
    SELECT * FROM t2 WHERE username LIKE ‘li%’
    https://blog.csdn.net/weiwosuoai/article/details/100032141
    https://blog.csdn.net/q13762258896/article/details/84905301
    Redis数据类型
    字符串、链表、hash表、集合、有序集合

网络问题:

应该层:HTTP
传输层:TCP
网络层:IP

线程 进程区别
线程的状态:
新建、就绪、运行、阻塞、死亡
进程间通信方式:
管道、消息队列、套接字
tcp udp区别:
tcp面向连接,udp无连接
tcp数据完整,udp不可靠
tcp一对一,udp可以多对多
tcp资源要求多,udp更快
http和https区别:
https基于secure socket layer的http
身份认证:CA证书
完整性:内容校验
私密性:加密传输
在浏览器中输入一个网址后的全过程:
解析域名的IP地址(在浏览器缓存或hosts或DNS服务器查找)
发起连接请求,TCP三次握手
发送HTTP请求信息
接受服务器返回的数据并渲染到页面
断开TCP连接,四次挥手
https://blog.csdn.net/weixin_30376083/article/details/95320106
DNS解析:
http://c.biancheng.net/view/6455.html
常见的状态码:
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效响应
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取响应

测试设计:

测试朋友圈
app和web测试区别:
https://blog.csdn.net/Bee_AI/article/details/86484692?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158571339919195239817670%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158571339919195239817670&biz_id=0&utm_source=distribute.pc_search_result.none-task

接口测试

第三方接口没有准备好? mock方法
get post区别
restful api:
看Url就知道要什么
看http method就知道干什么
看http status code就知道结果如何
https://blog.csdn.net/qq_27026603/article/details/82012277?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

幂等测试:
一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同
https://juejin.cn/post/6965341468332392456

性能测试
最大压力值

python

深拷贝浅拷贝区别
python回收机制:引用计数机制为主,标记清除和分代收集(隔代回收)两种机制为辅

算法:
反转链表
堆排序

大文件问题:(hash分解成小文件,归并)
有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M,要求返回频数最高的100个词。

Step1:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为f0,f1,…,f4999)中,这样每个文件大概是200k左右,如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M;
Step2:对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100词及相应的频率存入文件,这样又得到了5000个文件;
Step3:把这5000个文件进行归并(类似与归并排序);
https://zhuanlan.zhihu.com/p/24383239

app闪退原因:

  1. 空指针
  2. 数组跨界
  3. 内存溢出
  4. 内存泄露

问题排查:
https://blog.nowcoder.net/n/3c189d1fe31c439fa0b85c5e802d2523

cookie和session区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

匿名函数
s = lambda x,y:x if x>y else y
print(s(0,1))

生成器
def fib(n):
a,b = 0,1
for i in range(n):
yield a
a,b = b,a+b

算法题:

  1. 拼接最大数:https://leetcode-cn.com/problems/largest-number/submissions/
  2. 两个有序数组,合并后的中位数(LeetCode第4题)
  3. 约瑟夫环

其他

设计模式是什么

协程
生成器
数据库引擎
https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html

docker:
linux查看cpu数量,内存,全部文件替换
逻辑CPU个数:
https://www.cnblogs.com/djlsunshine/p/10833343.html

cat /proc/cpuinfo | grep "processor" | wc -l

字符串替换批量文件操作

sed -i "s/a/b/g"  `grep a -rl .`

后台服务架构
https://www.zhihu.com/question/20657269

安卓四大组件
activity,service,broadcast receiver,content provider
redis
数据:字符串,链表,hash表,集合,有序集合
雪崩
击穿

nginx配置

postman接口依赖,通过{{变量}}传给下一个接口使用

  1. json提取器(返回体是json类型)
    let r = JSON.parse(responseBody)
    pm.globals.set(‘token’,r.hello)
  2. 正则(返回体是html类型)
    let token=responseBody.match(new RegExp(‘name=“token” value="(.+?)"’)[1]
    pm.globals.set(‘token’,token)
  3. 在响应头或者cookie里取值
    let token = postman.getResponseCookie(‘token’)
    pm.globals.set(‘token’,token.value)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值