社招_测试开发面试题目汇总笔记
之前有写一篇社招面经总结 测开_社招-字节、BOSS、阿里、百度面经(许愿字节) ,
有小伙伴私信我说写的很详细,但更想要一些干货;于是,重新整理了一下遇到的题目,按知识点整理了一篇“干货”。
面试相关
大厂基本是20分钟聊项目,20分钟基础知识,20分钟算法;外加反问环节
记录面试大纲及范围,明确复习的方向
精通一种语言 (go 、 java 、 python、c++【shell、sql】)
数据库
互联网
移动端
数据结构算法基础
软件测试基础(包括扩展:自动化测试技术和经验、接口测试;)
Linux
其他加分项:
中间件
多线程
高并发
锁
设计模式
复习方向和方法
根据大纲找到薄弱点和优势点;先补薄弱,再加强优势,尽量在优势方面多说、讲透彻;
面试是一个展现自己的过程,尽可能多地在短时间内给面试官展现我们的优势和价值。
小编复习方法:
牛客面试宝典(测试工程师)--> 面经 --> 恶补劣势 -->加强优势 --> 猛刷算法 --> 做好面试复盘
加强对自身简历上个人技能的学习 、对负责项目的理解 以及 对自身职位的思考 。
面试重点(面经汇总)
Java
常考基础:
- Java中的int和Integer
- String、StringBuffer、StringBuilder的区别
- Vector、ArrayList、LinkedList的区别
- List、set的区别
- CurrentHashMap 、hashMap 、hashtable、TreeMap的区别
- hashmap相关 (hash算法、entry数组、红黑树与链表转化、负载因子扩容)
- 接口和抽象类的区别与理解
- Java异常体系,exception和error的区别
- Java的权限修饰符(public、private、default、protect的作用域)
深入加强:
- jvm组成、GC调优;垃圾处理器 和垃圾清除算法
- 双亲委派机制 、类加载过程
- 多线程、并发相关(常问,加分项,小编直接说不太会)
- 强引用、软引用、弱引用、幻想引用的区别
- 知道哪些设计模式,手写单例等
- Spring 相关,ioc 、 aop的理解
Python
- Python常用内置模块
- List与numpy的区别
- With机制及如何实现
- Range的方法
- 迭代器的了解
- c++和python的并发编程了解多少
- python中传递参数有什么要注意的吗?比如传递一个字符串或者一个列表,在函数中进行了一些操作,原值是否改变了?哪种情况改变,哪种不改变?如何克服呢?
- 了解深拷贝与浅拷贝
数据库
数据库常考 索引(调优)、事务(锁、多线程)、基础(表连接、主外键、语句编写)、深入(引擎)
(数据库推荐:极客时间 - MySQL实战45讲【力推,需有一定基础】+ 牛客刷题)
基础:
- sql 的join的几个方式;左连接和右连接的区别
- 讲讲各种数据库连接的区别,内连接,外连接,笛卡尔连接
- MySQL语句执行顺序
- 子查询、聚合函数、视图、存储过程、触发器等
- explain查询计划
- 略微深入一些:
- 了解哪些存储引擎
- 主外键、数据库完整性约束
- 不同数据库的比较,即对不同场景怎样选用数据库
事务:
- ACID(含义与理解 + 如何保证)
- 隔离等级与相应问题
- 多版本并发控制(MVCC)
- 长事务的危害与避免方法
- MySQL有哪些锁,区别(全局锁、表锁、元数据锁、行锁、间隙锁、next-key-lock、【页锁】)
- 如何解决死锁(死锁检测、控制并发度(客户端、中间件、服务端、数据库))
索引:
创建索引注意事项(是否常用、区分度、数量、组合索引选择、主键选择、唯一与普通的选择)
索引的类别(从存储方式来分:聚簇索引与非聚簇索引;从属性个数来分:单值和组合索引;
从是否唯一来分:唯一、普通和主键;从数据结构来分:B+树、hash表、数组等)
索引的数据结构及具体实现介绍(核心是MySQL为什么选B+树;以及B+树、hash表、数组的区别;)
索引什么时候失效 (在where索引字段有函数操作、数据量太小、analysis不准、排序、不满足最左匹配、其他索引干扰、使用了 in、非判断(!=、is null、is not null)等)
索引的特性(回表、最左前缀匹配原则、索引下推优化)
changeBuffer(普通索引与唯一索引的选择与优化)
SQL语句题:
(SQL题一般偏简单,但常要多种解法)
1.
ID Name City Address
1 包彦钦 北京 北京市东四北大街520号
2 王洪涛 北京 北京市西单北大街151号
3 张立涛 大连 大连市西岗区新开路69号
4 佘高峰 济南 山东省济南市泺文路50号
5 徐俊 上海 上海市静安区南阳路46号
6 张忠飞 上海 上海市肇嘉浜路414号
7 徐俊 上海 上海市乳山路150号
返回表中有两名以上学员的城市的所有学员信息
2.两个表,表1(id name),表2(id sroce class),
找出姓名张三的分数和班级
语文成绩最高的学生姓名;
3.s表和sc表,查询大于80分的学生姓名;
4.
表:1
id, 科目, 成绩
1 语文 80
1 数学 90
2 语文 70
表:2
id name
1 张三
2 李四
(1)语文成绩排名前10的学生ID
(2)语文成绩排名前10的学生姓名
(3)查出总成绩排名前10的学生ID
(4)统计语文成绩及格率
5.快速查询一个表的男女人数
6.写mysql语句:查重复城市信息
互联网
常考:
tcp:
TCP/UDP的区别
qq是udp为主,tcp为辅
微信的文字传输是哪种方式?视频语音通话呢?
三次握手、四次挥手(tcp连接,为什么不是两次和四次;tcp断开连接为什么不是三次挥手)
tcp报文组成
tcp如何保证稳定传输的
get与post的区别
网络模型:
- OSI模型、TCP/IP模型
- 网络层作用是什么
- 各层的常用协议
- 常用端口号(http、https、Tomcat等)
页面加载过程:
- 你能讲一下输入网址到页面呈现的全部过程吗?(缓存+DNS+(OA)+网络模型传输+三次握手+接口、页面展示+四次挥手)
- 你刚才提到了静态资源,你知道静态资源是如何请求到的吗?
- 刚才提到了重定向,能仔细讲讲重定向吗?能说说为什么使用重定向吗?知道怎么实现的吗?
- 知道cookie和seesion的区别和工作原理的差别吗?讲一下
http:
http报文格式
HTTP状态码;说一下http消息状态码吧 1-5开头的都说一下
http、https区别;分别属于(作用于)哪几层
对称加密和非对称加密区别以及具体https中如何使用的
操作系统
(操作系统相关的题,我很少被问到,社招原因?)
- 进程、线程的区别
中间件
Redis
- 为什么用redis锁
- Redis的雪崩、击穿
- 用redis就能保证可靠吗?为什么不加报警系统?
- 你还知道redis其他的应用场景吗?说一下
- redis和电商结合你知道吗?redis高并发场景下比如抢购你怎么使用redis?怎么测试?
软件测试
常考知识:
- 介绍黑盒测试和白盒测试 ;以及常用设计用例方法
- selenium的定位方式有哪些,你喜欢用哪些
- 测试的流程
- 对测试开发的认识
- 知道哪些测试模块及方法
- 了解哪些测试前沿技术
- 是否参加过测试大会、测试线下沙龙
- 是否有自动化测试、接口测试、性能测试经验
- 你在**实习执行自动化脚本,你怎么知道执行成功失败?
- 测试人员的整体素质(软硬方面)
用例设计题:
测试 秒杀场景
测试一个登录界面
测试微信聊天界面
测试某个网站的首页
一部电梯设计测试用例
测试 微信红包
测试抖音客户端修改用户名
测试视频通话
测试一个口罩
测试抖音的播放功能
电商方面的安全性你知道怎么测试吗?你刚才说的性能是哪些部分的性能?
场景题:
我打不开一个网页,你想到有哪些原因吗?我说了好多网络原因以及DNS域名解析,丢包等。面试官问只有网络原因吗?别的原因呢?我又说了一些兼容性。
用户界面显示修改成功,但是刷新后发现没有修改成功怎么办?你会怎么分析这个问题?你会使用什么工具去排查这个问题?
淘宝的支付失败,排查
页面加载内容异常,排查
Linux
- Liunx查看指定进程 ps -ef|grep 进程名(或端口号)、 lsof -i 端口号、 netstat -lntp 端口号 、top
- 知道的常用命令(三剑客 awk、grep、sed 常用查看:cat、head、tail、more、less 解压、移动、编辑、删除...)
- 通过Linux搭建测试环境过程
- 了解Linux调优吗(直接说不会)
- 是否了解shell编程
- nohup重定向
- 定位线上日志中昨天2点出现的问题,怎么看
shell编程:
1.题目:一个文件: 人名,订单号,金额
找出里面的最大金额
写出每个人一共消费多少金额
(牛客和力扣shell题)
项目经验
考察面试者对自身负责项目的认知熟悉程度、测试质量和流程的把控、学习抗压能力以及综合素质能力。
- 整体介绍下你负责的项目,如何保证质量(测试流程、思路、计划等)
- 测试工作遇到的困难,如何解决的
- 上线是否出现过问题,如何处理的,花费时间,如何总结、复盘,如何规避
- 认为现在测试中存在哪些问题
- 代码评审关注什么,如何提升效率
- 测试中是否有接触 接口测试、自动化测试、性能测试等
- 是否有在工作中写代码脚本、自动化用例经验
- 使用过哪些测试工具,如果是公司二次开发的讲讲你怎么使用的
- 做过哪些调优,怎么做的(做过数据库相关的:原因+分析+实践+优化效果+考虑范围+备份回滚)
- 你知道怎么把一个项目部署到服务器吗?你需要做哪些工作
- 有服务器开发经验吗,例如搭建服务器
- 项目中如何设计数据库的表和字段的
- 用过linux服务器吗
- git用过吗,项目里怎样用的(分支,stash)
智力题
牛客面试宝典测试工程师中有很多智力题,一般校招问的最多,社招很少
- 十堆苹果,其中有一堆比其他少10千克,求如何找出这一堆不同的苹果堆(万金油题目,,比如常考的还有几千杯水找毒酒、10个牌只能取1-2张最后取赢先手后手设计策略等)
- 绳子计时问题,一堆绳子,每根烧完都需要1小时,如何判断30分钟,15分钟
数据结构算法
数据结构
- 数组和链表
- 栈和队列
- hash
- 树
- 常用工具类(如Java:string、StringBuilder、List、set、HashMap、queue、stack)
小编的Java常用工具类总结: String: 增:concat() 删:replace() 后为空 改:replace() 查:length() charAt() indexOf() lastIndexOf() startsWith() endsWIth() isEmpty() contains() 操作:toCharArray() split() trim() toUpperCase() toLowerCase() subString() valueOf() copyValueOf() compareTo() compareToIgnoreCase() hashCode() StringBuilder: 增:append() insert() 删:delete() 改:reverse() replace() setCharAt() 查:capacity() charAt() length() 操作:subString() toString() Collections: sort reverse max min ArrayList: 增:add addAll 删:remove remoceAll clear removeRange removeIf 改:set replaceAll 查:get contains containsAll size isEmpty 操作:subList sort toArray toString indexOf lastIndexOf (栈队列也可以直接用list,只操作相应位置即可) Set: 增:add addAll 删:remove remoceAll retainAll clear 改: 查:contains containsAll size isEmpty 操作:toArray iterator equals Stack: 增:push 删:pop 查:peek empty search Queue: 增:offer add 删:poll remove 查:peek element PriorityQueue: 优先级队列,堆 增:add offer 删:clear poll remove 查:contains peek size 操作: comparator iterator ArrayDeque:双端队列 增:add addFirst addLast offer offerFirst offerLast push 删:poll pollFirst pollLast pop remove removeFirst removeLast removeFirstOccurrence removeLastOccurrence 查:contains getFirst getLast isEmpty peek peekFirst peekLast size Map: 75 18 8 6 增:put putAll 删:remove clear 改:put [key相同,value会覆盖] 查:get containsKey containsValue size isEmpty 操作: entrySet keySet values Iterator: 删:remove 查:hashNext 操作:next HashMap遍历: 【1】:根据keySet遍历 Set<String> ss = map.keySet(); for (Iterator<String> iterator = ss.iterator(); iterator.hasNext();) { String key = iterator.next(); System.out.println(key + "--" + map.get(key)); } 【2】:根据entrySet遍历 Set<Entry<String, String>> ss = map.entrySet(); for (Iterator<Entry<String, String>> iterator = ss.iterator(); iterator.hasNext();) { Entry<String, String> e = iterator.next(); System.out.println(e.getKey() + "--" + e.getValue()); } }
算法:
学习与刷题:
剑指offer + 常考top200 +左神视频+ 书(左神的书 《程序员代码面试指南》、剑指offer书籍、极客时间--数据结构与算法之美、小灰算法之旅)
常考知识点总结:
(xmind还在总结中,后续会发)
排序:快排、堆排、归并、选择、冒泡、插入、桶排序、计数排序、基数排序、希尔排序
链表:删除第k个节点、反转、判断环、判断相交、合并、判断回文、随机指针版复制
树(前中后序遍历、层序遍历、序列化与反序列化)
滑动窗口、递归、动态规划、二分、位运算、字符串匹配
写在最后
个人博客和项目也是加分项,这都是能反映出面试者综合素质能力的。
祝所有人都能拿到心仪的offer和可观的薪资,加油!
#测试开发工程师##学习路径#