总结(三)----2020上
一、百度
1.自我介绍
2.技能提问:
-
awk sed命令,文件处理,日志过滤相关,如t.txt 统计文件中hello出现的次数,txt文件的总行数
grep
-o hello t.txt |
wc
-l //单词出现次数
cat logfile.txt | wc -l //行数
-
python数据类型有哪些,列表元素增删,request模块介绍
number(数字)、string(字符串)、Boolean(布尔值)、None(空值)、list(列表)、tuple(元组)、dict(字典)、set(集合)
append(1) //列表末尾添加一个元素
extend([2,3,4]) //列表末尾添加多个元素
insert(1,value) // 在下标出添加一个元素
remove(2) //删除单个元素,删除首个符合条件的元素,按值删除
pop(1) //删除单个或多个元素,按位删除(根据索引删除)
del list(1) //它是根据索引(元素所在位置)来删除
-
C/C++什么是多态,深拷贝浅拷贝的了解并实现一个例子
定义:多态的定义简单来说就是使一条语句有多种状态。
实现方式:多态的实现方式分为三块:重载、重写、重定义。
重载是在同一作用域内(不管是模块内还是类内,只要是在同一作用域内),具有相同函数名,不同的形参个数或者形参类型。返回值可以相同也可以不同(在函数名、形参个数、形参类型都相同而返回值类型不同的情况下无法构成重载,编译器报错。
重写是在不同作用域内(一个在父类一个在子类),函数名、形参个数、形参类型、返回值类型都相同并且父类中带有virtual关键字(换言之子类中带不带virtual都没有关系)。
重定义是在不同作用域内的(一个在父类一个在子类),只要函数名相同,且不构成重写,均称之为重定义
-
网络七层协议,tcp建立连接、断开连接过程及处于那一层,http处于那一层
tcp:传输层
http:应用层,
IP:网络层。
-
http和https区别,get和posts区别,put和post区别,
HTTP特点:
无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
基于请求和响应:基本的特性,由客户端发起请求,服务端响应
简单快速、灵活
通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
HTTPS特点:
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
内容加密:采用混合加密技术,中间者无法直接查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
保护数据完整性:防止传输的内容被中间人冒充或者篡改
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
get和post区别:
1、GET请求参数直接拼接在url后面例如:url?params1=value1¶m2=value2,POST请求的参数则是放到body体
2、浏览器会自动缓存GET请求,而POST不会自动缓存,除非手动设置
3、GET 请求在浏览器中可回退,而POST会再次请求
4、GET请求时只能通过url编码,而POST则可以支持多种编码格式
5、GET的请求参数可以被完整保存到历史记录中,而POST不会被保留
6、GET产生的url可以被bookmark,而POST不可以
7、GET可接受的参数类型为ASCII字符,而POST没有限制
8、GET在ulr中传送的参数有长度限制, 而POST没有限制
真正的区别:
GET请求只会产生一个TCP包,也就是说浏览器会把所有的请求数据(header和data)一起发出去,服务器响应200时成功
POST 请求“可能” 会产生两个TCP包,第一次浏览器会先发送header,服务器响应100后,再次发送data
也就是说GET只需一次就将货物送到,而POST 会先告诉服务器我要发送数据,然后再把数据送过去,所以在调用时间上POST要稍微慢一点
udp和tcp区别:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
7、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
-
浏览器发起一个请求到获取页面信息经历了那些过程
1、首先,在浏览器地址栏中输入url
2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
5、握手成功后,浏览器向服务器发送http请求,请求数据包。
6、服务器处理收到的请求,将数据返回至浏览器
7、浏览器收到HTTP响应
8、读取页面内容,浏览器渲染,解析html源码
9、生成Dom树、解析css样式、js交互
10、客户端和服务器交互
11、ajax查询
其中,步骤2的具体过程是:
浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。
-
售货机的测试case
-
登录页面(用户名和密码输入框及登录按钮)
-
项目测试流程
3.代码:
-
快排
-
链表逆序返回一个数组
-
青蛙跳台阶问题(斐波那契数列)
二、滴滴
- 一面:
技能:讲解测试的后端项目,讲解开发的工具
简单联表查询sql
代码:手写二分查找并设计用例
2.二面:
讲解工具
稳定性测试怎么测,如果上线后发现流量扛不住怎么办
三、爱奇艺
1、技能:自动化测试相关、工作中那些是可以自动化提效的
code review中发现了那些常见问题
2.非技术类问题:
-
每份工作,工作内容,具体复制,个人亮点(对业务的理解能力和掌握能力),改进点,最终收益状况,举实际例子和数据
-
离职原因
-
个人优势、劣势,近期规划
-
工作倾向:技术、业务
-
举例说清楚工作内容,另外在这个例子中最好有后续提效的点(可以是别人做的),怎么考虑的,具体怎么落地的,最终效果怎么样
-
效果切记可以量化,量化的值怎么来的
-
业务特点(逻辑复杂,流程分支太多),结果,架构,难点,提效
四、西瓜
1.一面
-
网络协议
-
长连接短连接(分别是什么,适用于什么场景)
HTTP协议长连接和短连接本质上是TCP的长连接和短连接。
短连接
连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
具体就是 浏览器client发起并建立TCP连接 -> client发送HttpRequest报文 -> server接收到报文->server handle并发送HttpResponse报文给前端,发送完毕之后立即调用socket.close方法->client接收response报文->client最终会收到server端断开TCP连接的信号->client 端断开TCP连接,具体就是调用close方法。
也可以这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。
长连接
连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
如果业务来往比较频繁,则选择长连接。
如果server要主动给client发数据,则选择长连接。
什么是长连接、短连接?
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
-
http及https区别,前端输入一个url界面没有响应怎么排查这个问题,测试流程,验收测试在那个阶段、
-
黑盒白盒区别,白盒测试方法,
-
编程题(输出数组中出现次数最多且值最大的数字),
-
写常用sql,hive跟mysql区别
Hive采用了类SQL的查询语言HQL(hive query language)。除了HQL之外,其余无任何相似的地方。Hive是为了数据仓库设计的。
存储位置:Hive在Hadoop上;Mysql将数据存储在设备或本地系统中;
数据更新:Hive不支持数据的改写和添加,是在加载的时候就已经确定好了;数据库可以CRUD;
索引:Hive无索引,每次扫描所有数据,底层是MR,并行计算,适用于大数据量;MySQL有索引,适合在线查询数据;
执行:Hive底层是MarReduce;MySQL底层是执行引擎;
可扩展性:Hive:大数据量,慢慢扩去吧;MySQL:相对就很少了
-
头条的消息系统(评论、点赞、消息提醒等)怎么设计测试用例(从前后端分别考虑)
-
DNS工作原理
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为IP地址。
具体过程如下:
①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了。
②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如http://www.baidu.com/,并将这个主机名传送给DNS应用的客户端。
③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)。
④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址。
⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接。
-
平时涉及哪些测试方法
2.二面
-
java多态、
-
多线程安全问题
什么是线程安全问题?简单的说,当多个线程在共享同一个变量,做读写的时候,会由于其他线程的干扰,导致数据误差,就会出现线程安全问题。
使用多线程同步(synchronized)或者加锁lock
为什么这两种方法可以解决线程的安全问题?
当把可能发生冲突的代码包裹在synchronized或者lock里面后,同一时刻只会有一个线程执行该段代码,其他线程必须等该线程执行完毕释放锁以后,才能去抢锁,获得锁以后,才拥有执行权,这样就解决的数据的冲突,实现了线程的安全。
-
codeReview发现的典型问题、
-
一张表里某个字段升级后需要测试哪些,
数据库测试点
1. 页面提交成功时检查数据是否正确地保存在数据库中
2. 检查不接受空值的列值
3. 数据应根据表设计被存储在单个或多个表中
4. 索引名称应按照标准如IND_ <表名> _ < 列名>
5. 表应该有主键
6. 应对表中的列给出相应的描述信息(除了诸如创建时间、创建人等审计列)
7. 应该为每个数据库的添加/更新操作添加日志
8. 应该为需要的表创建索引
9. 检查是否只有操作完全成功后才将数据提交到数据库中
10. 一旦事务失败数据应该回滚
11. 数据库名称应按照应用程序类型命名,即测试,UAT,沙箱,现场 (尽管这不是一个标准,但对数据库维护是很有帮助的)
12. 数据库逻辑名称应根据数据库名称命名(这不是标准但又有利于数据库维护)
13. 存储过程不应该以前缀“sp_”命名
14. 检查表审计列的值 (如创建日期、创建人、更新日期、更新者、已删除、删除日期、删除者等等) 填充正确
15. 检查输入数据保存时是否未被截断,在页面中显示的字段长度和数据库的字段长度应该是相同的
16. 检查包含最小、最大和浮点的数值字段
17. 检查数值字段含有负值(接受和拒绝两种情况)
18. 检查单选按钮和下拉列表正确地保存在数据库中
19. 检查数据库字段设计的数据类型和数据长度是否正确
20. 检查所有的表约束条件如主键、外键等是否正确实现
21. 测试存储过程和触发器的样本输入数据
22. 输入数据的首尾空格应在数据保存到数据库之前被自动隐去
23. 主键列不允许为NULL值
-
视频如何测试、
功能测试
-
- 视频资源可以正常获取,不管是服务器返回还是后台添加等
- 视频的封面图、页面UI等正常
- 若一个视频中涉及到上一个视频、下一个视频时点击后都能正常切换到相应的视频,且视频正常播放
- 音量大小(如静音模式下播放时无声音)
- 视频最大化、最小化(如切换到最大化时视频全屏播放)
- 播放列表的播放顺序,单循环,多循环,顺序播放,随机播放(还需要考虑下视频若是后台上传的,若在后台将某视频进行增加,删除,修改操作,验证视频播放是否正常)
- 其他逻辑:
- 点击视频时,视频正常播放;再次点击时暂停播放资源;
- 播放视频时应用切换到后台---切换到后台后暂停播放,再次进入应用为暂停状态;
- 播放时杀掉程序进程---视频播放结束,不保留观看进度,再次进入到该视频,从头播放
- 播放视频A时切换到视频列表下的视频B----播放视频B;从进度B开始播放
- 播放视频A时切换到其他项目下的视频C---播放视频C;再次切换到视频A时从头播放
- 播放时上下滚动页面---视频播放器位置恒定,滚动不影响播放
兼容性测试
-
- 平台兼容性:如Android、IOS
- 系统兼容性:Android4.4-8.0;IOS8.0-12;谨记哦(低版本的机型问题还是蛮多的,如IOS8系统播放器问题较多,测试要引起注意)
- 播放器是否与其他类型播放器兼容(需要考虑播放过程中是否和音频等相冲突)
网络测试
-
- 网络切换测试:WiFi-移动网;移动网-WiFi;WiFi-无网;无网-WiFi;无网-移动网
- 弱网测试:弱网情况下,视频播放是否有卡顿、黑屏、闪退等情况
- 无网进入时是否有提示info;
- 移动网进行播放时是否有非WiFi弹框提示;
- 播放过程中断网时,播放完已加载的部分后停止播放且有相应提示;
- 播放过程中切换网络时有相应提示
- 踩过的坑:Android7.1.2版本切换4G网络查看视频时,出现黑屏,卡死,崩溃等情况
- 异常测试
半屏/全屏切换测试
-
- 视频右下角全屏按钮,点击全屏横屏播放视频;
- 点击收起按钮,全屏收起回到当前页半屏播放
- 两者切换播放回到当前页面时,页面展示正常(IOSXX项目曾出现页面导航错乱的问题)
横竖屏切换测试
-
- 旋转模式打开后,验证页面及视频播放是否正常;
- 横屏模式下播放完视频,自动切换回竖屏模式;
视频中断测试
-
- 播放中快进/后退进度,能正常播放本地资源,快进不卡顿,无延迟;
- 播放中切换到后台,切换到后台后暂停播放,再次进入视频为暂停状态;
- 视频播放时杀掉进程,则视频播放结束(是否保留观看进度具体看产品需求);
视频易用性测试
-
- 界面是否方便,整洁(如视频封面图,片头,片尾,视频图像等各个界面)
- 快捷键是否正确
- 菜单是否正确
- 图像是否清楚(在标清、高清,超清等模式下切换时视频播放正常,无卡顿黑屏闪退等问题,在切换过程中是否有加载loading的提示)
- 拖拽滚动条(拖、拽功能用起来是否友好)
- 是否具备播放记忆功能(即播放进度是否有记录)
- 能否自动保存以前的播放列表
-
工作中怎么合理安排工作内容、
-
个人优势、
-
单例有几种实现方式
饿汉式2种(静态常量饿汉式、静态代码块饿汉式)
懒汉式3种(线程不安全懒汉式、线程安全懒汉式、同步代码块懒汉式)
还有3种(双重检查、静态内部类、枚举方式)
-
写sql(如何统计某张表里每个小时(存的年月日时分秒格式)的数据量)、
SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS num FROM track WHERE Flag = 0 AND Duration >= 300 GROUP BY time ORDER BY time;
SELECT HOUR(e.time) as Hour,count(*) as Count FROM error_log e WHERE e.date = '2017-09-02' GROUP BY HOUR(e.time) ORDER BY Hour(e.time);
-
算法题(找到字符串中第一个非重复的字符)、
-
测试工作中用到什么辅助性的工具、
-
最近面了哪些公司,为什么离职、对哪些公司比较有意向
-
介绍整体项目背景及项目做的事请及测试内容及测试形式,工作中的痛点是怎么推进的。
3、西瓜三面:
自己的优势跟不足
白盒自动化测试用例的积累
开发跟测试时间的比例
工作方法是不是适合快速的迭代
发现的比较经典的问题
介绍一下项目跟具体负责的部分
介绍一下自动化方面做的比较好的
可能白盒的测试方法并不适用于移动端?
最近面了哪些公司,哪些公司是比较意向
离职原因
为什么考虑字节
五、美团
1、自我介绍,大概介绍项目
2、sql:输出某个字段下值出席次数超过三次的值
1、SELECT business_unit_code from t_replenish_config GROUP BY business_unit_code HAVING count( 1)>3;
2、SELECT business_unit_code from (
SELECT business_unit_code,count(1) as sum from t_replenish_config GROUP BY business_unit_code) a
where a.sum>3
3、算法题:[2,3,5,6,7,3,5,3,9]输出3的位置,但不能顺序遍历
4、多线程实现方式
实现Runnable接口、继承Thread类、实现Callable接口并通过FutureTask包装、匿名内部类、Lambda表达式、线程池、定时器、
5、性能测试除了关注并发,还需要关注什么指标
前端主要关注点是:
- 响应时间:用户从客户端发出请求,并得到响应,以及展示出来的整个过程的时间。
- 加载速度:通俗的理解为页面内容显示的快慢。
- 电量:APP的耗电量。
- 流量:APP所消耗的流量
后端主要关注的是:
- 响应时间:接口从请求到响应、返回的时间。
- 并发用户数:同一时间点请求服务器的用户数,支持的最大并发数。
- 内存占用:APP的内存开销。
- 吞吐量(TPS):Transaction Per Second, 每秒事务数。在没有遇到性能瓶颈时:TPS=并发用户数*事务数/响应时间。
- 错误率:失败的事务数/事务总数。
- 资源使用率:CPU占用率、内存使用率、磁盘I/O、网络I/O。
6、测试在除了测试环节以外的流程中的角色,prd评审时提出了哪些问题
7、百度搜索功能测试
8、采购系统在整个供应链上的作用,介绍一下系统背景及平时的测试策略,跟各系统的交互,如果依赖数据没准备好怎么测试
9、linux命令:输出一个文件中包含abc的总行数 grep 'abc' a.txt ,写的这个,只是打印明细,没有统计总数
find access_log.20160423.txt | xargs cat | grep .*helloworld.*|wc -l //统计含"helloworld"字符串的总行数
或者:grep -o aaa file | wc -l
10、接口测试入参校验
1. 段值为空
2. 字段值为“”
3. 字段值为null
4. 身份证号码全为数字(目前身份证号码好像都是18位的)----参数符合身份证规则
5. 身份证号码中包含字母(据说是大写字母,不知道小写字母的有没有)---参数符合身份证规则
6. 交易金额:0、整数、一位小数、两位小数、一个较大的数(可能会触发风控限额等)---参数符合常识+编程语言的数据类型
7. 注意接口字段的单位(接口单位和DB落库单位不一致时,要注意对应关系;上下游联调要注意接口字段单位的转换,我们系统用忽、上游系统可能用分、银行可能用元)
8. 证件不只有身份证一种,还有护照、港澳通行证等。
9. 如果是前端页面输入的字段,输入空格、特殊字符的概率等。
10. 有关联关系的字段要进行相关校验。比如身份证号码、证件类型、户名之间的关系
六、字节
1、一面
-
编程:给你n,输出一个n*n的二维数组,要求斜着填充
-
给编辑-->草稿-->机器审核-->人工审核-->通过/不通过,设计用例 画状态机
-
项目流程
-
工具实现
-
hashmap有了解吗
-
印象深的bug,解决方案是什么
-
是否做过后端自动化,成果是什么
-
系统结构
2、二面
-
编程:字符串是不是ip地址的判断并设计用例
-
docker
-
Jenkins
-
hashmap
-
职业规划
-
对公司使用的环境治理工具的实现原理是否清楚
3、三面
-
java内存,垃圾回收
-
@override注解含义
表示子类重写了父类的方法
-
印刻最深刻的事情(难点+突破)
七、字节
1、设计共享单车系统
2、单例模式应用场景
1).外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机。内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的系统应该有一个对象管理这些属性文件
2). Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~
3). windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
4). 网站的计数器,一般也是采用单例模式实现,否则难以同步。
5). 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
6). Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
7). 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
8). 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
9). 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
3、shell中source和sh的区别
- source FileName 作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限" 注:该命令通常用命令“.”来替代。
通常用于重新执行刚修改的初始化文档。
-
sh FileName / bash FileName
作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"
注:两者在执行文件时的不同,是分别用自己的shell来跑文件。
- 主要区别,source是在当前的shell下运行文件内容,而sh或bash或其他shell+脚本文件,是在新的shell中执行。
- source一般用于执行一些配置文件,比如.bashrc等
4、tcp3次握手,4次挥手
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
5、算法:数组中超过一半的数字,模拟扑克牌洗牌
6、数据库join 有什么区别
7、表name、subject、score找出两种成绩大于80的点
8、判断两个表相交的相交点
9、get和post区别,http和https区别
10、算法:一个人只能跳1,2,3级,跳100级有多少种方法
11、假设抖音发生卡顿,P98 p50发生变化,怎么分析问题,
12、shell 逐行读取文件, 查看某个进程
while read line
do
echo $line
done < filename
13、设计前端自动化平台,怎么设计
14、离职原因
15、兼容性测试
16、内存崩溃和内存泄露
- 内存溢出 OOM:指你的应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃,这是一种结果描述。
- 内存泄漏(Memory Leak):指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述。你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。
通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。 从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。 - 1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出
3、二者的关系:内存泄漏的堆积最终会导致内存溢出内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。
内存溢出原因:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小
17、什么操作会导致内存泄漏
1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄露
2. 全局变量
3. 闭包
4. dom清空或删除时,事件未清除导致的内存泄漏
5. 控制台日志
6. 循环
八、滴滴
1.一面
sql 成绩倒序输出
linux 查看文件前十行,后十行,第十行
滴滴打车流程,测试时间10天,如何分配
印象比较深的项目
自动化怎么做的,有什么难点
2.二面
前端页面空白,如何排查问题
-
打开控制台查看静态资源是否加载失败(资源加载顺序也需关注下)
-
打开控制台查看请求是否异常(网络状况也需关注下)
linux 查看服务器端口、查看服务是否运行、怎么看docker中服务是否运行
git 合并分支到主干
get可以提交表单吗,get post区别
https://www.cnblogs.com/chy8/p/10397226.html
dns原理,server存储在哪里
python list和tumple区别
- list是一种有序的集合,可以随时添加和删除其中的元素
-
tuple是一种有序列表,它和list非常相似,
tuples具有immutable的属性,意味着tuples内的元素一旦建立就无法更改、删除、排序,然而我们还是可以向list和tuples添加数据的。
- 由于tuples的操作拥有更小的size,也就意味着tuples在操作时相比list更快,当数据足够大的时候tuples的数据操作性能更优
- 由上述可知,tuples是immutable,list是mutable的,所以我们可以将tuples用作dictionary的key,但是list不可以
因为tuples不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
python 自带http库
tcp第二次握手,传的什么值
mysql默认引擎是什么
host unavailable 是什么问题,怎么排查
九、字节
一面:
1.sql
2.接口,插入数据库,一条新增一条修改,设计测试用例
3.linux:一条命令杀死8080端口进程
sudo kill -9 $(lsof -i:端口号 -t) #-t 只输出 PID
sudo fuser -k -n tcp 80
4.python装饰器
5.字符串M、charN,判断字符串是否包含N,包含的N可以是乱序的,但是中间不能有间隔
二面:
1.编程题:输入list,tumple,string,int,等等类型的参数,将所有的value为int的改成string
2.项目应用
3.接口做过diff吗?接口测试造数据?
十、快手
- 一面
1、python os和sys区别
2、编程
- 二面
1、编程 编程 比较app版本大小
十一、高德
A、一面
1、python3和python2的区别,print为什么要改成3的风格为什么?
2、python 列表和元组的区别
3、python list 的append和extend区别
4、python多线程实现方式,最基础的实现方式模块是什么?
5、python常用的模块都有那些?
#os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
#chdir()改变当前工作目录
- sys 模块
- os模块是与操作系统交互的一个接口
- sys模块用于提供对python解释器的相关操作。
- time模块
-
datetime模块
-
hashlib加密
-
logging模块简介
-
random
-
json&pickle
6、闭包有了解吗?
7、python内存泄漏的原因?
自定义函数一定要有return,即使不需要也要加上,否则在此函数运行完毕后,不会自动清理内存,造成内存泄漏!
什么是内存泄露?
内存泄露是那些使用过后,应该被清理却没有被清理的内存一直占据着系统资源,通过长时间的累积导致系统崩溃。
Python的垃圾回收机制
1、引用计数
原理:当一个对象的引用被创建或者复制时,对象的引用计数+1,当一个对象的引用被销毁时,对象的引用计数-1,当对象的引用计数变为0时,就意味着已经没有再被使用了,可以将其内存释放掉。
优点:引用计数的优点是实时性,任何对象只要没有被引用就会被释放。
缺点:1.维护引用计数需要额外的操作,花费时间和空间。2.引用计数无法解决循环引用问题,当两个对象互相引用对方时,每个对象的计数都不是0,这些对象永远不会被引用计数机制回收。
2、标记-清除
标记清除只关注那些可能会产生循环引用的对象,一般都是容器对象,比如列表、字典、类等等。
过程:
1.当触发标记清除机制时,首先将所有对象及引用计数复制出一份副本,对副本进行以下操作
2.假设AB互相引用对方,遍历每个对象,如A,如果A中引用了B,则先将B的引用计数-1,然后去看B,如果B引用了A,则将A的引用计数也-1,这样就将对象的真实有效引用数暴露了出来。
3.遍历完成后,如果有效引用为0则说明需要回收。
缺点:效率低
3.分代回收
分代回收是用空间换时间,认为如果一个对象存活的时间越长越有可能不是垃圾,把那些在第一次垃圾回收后没有被清除的对象放入二代,减少标记清除检查的次数。一共分为三代。
8、python gc的原理?
9、编程题:一个log文件,有日志请求的信息 格式2020-01-01 13:00:11 http://www.baidu.com/adblllll.....
统计每个自然小时段内,请求次数最多的域名和其次数
10、用例设计:程序根据两个数加和并输出,设计用例
11、接口性能测试有了解吗?有关注什么?怎么判断是否符合预期结果
12、OSI协议都有那些层,那些协议都在哪一层?
应用层:TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP、DNS(注:DNS使用的传输协议既可为TCP又可为UDP)
表示层: 文本:ASCII,EBCDIC 图形:TIFF,JPEG,GIF,PICT 声音:MIDI,MPEG,QUICKTIME
会话层:Socket、NFS、SQL、RPC 、X-WINDOWS、ASP(APPTALK会话协议)、SCP
传输层:TCP、UDP、SPX
网络层:IP、IPX、ICMP、RIP、OSPF(Open Shortest Path First开放式最短路径优先)
数据链路层:SDLC、HDLC、PPP、STP(Spanning Tree Protocol)、帧中继
物理层:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45
13、http和https区别
14、一条http请求有那些重要组成部分
15、常见http响应码,403 404 405有了解吗
403 Forbidden 对被请求页面的访问被禁止。
404 Not Found 服务器无法找到被请求的页面。
405 Method Not Allowed 请求中指定的方法不被允许。
500 Internal Server Error 请求未完成。服务器遇到不可预知的情况。
501 Not Implemented 请求未完成。服务器不支持所请求的功能。
502 Bad Gateway 请求未完成。服务器从上游服务器收到一个无效的响应。
504 Gateway Timeout 网关超时。
16、linux
查询系统有几个核,系统物理信息
查看当前操作系统内核信息 $ uname -a 查看CPU是几核 $ cat /proc/cpuinfo |grep "cores"|uniq linux命令:cat /proc/cpuinfo #用命令判断几个物理CPU,几个核等:
查进程号
看盘用了多少,看当前目录使用情况
df查看的是整个系统的空间使用情况,du查看的是目录和文件夹的使用情况 #查看当前目录磁盘使用情况: df -h #查看当前目录每个文件夹的情况: du --max-depth=1 -h du -sh : #查看当前目录总共占的容量。而不单独列出各子项占用的容量 du -lh --max-depth=1 : #查看当前目录下一级子文件和子目录占用的磁盘容量。
17、离职原因
二、二面
1、怎么测试接口
2、接口性能怎么测试,造成接口性能问题的原因有哪些?
3、安全测试有哪些
4、请求www.taobao.com,都发生了什么?
5、请求后,图片资源是怎么加载的,图片地址不同,怎么确定要加载的是这个图片?
6、http端口是什么,为什么要有不同的端口
7、两个人请求同一个服务器的同一个端口,服务器怎么区分?怎么知道分别的请求的数据是对应的人的数据
8、tcp三次握手过程
9、tcp位于什么层
10、为什么说http是无状态的,tcp是有连接的
11、客户端性能怎么做的,怎么判断是否符合测试标准,都有哪些问题会消耗性能?
12、做的平台起到了什么作用
13、离职原因