测试开发工程师成长日记018 - 测试面试必备题记录(持续更新)

技术模块

一、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试?

  1. 建立测试计划,确定测试标准和测试范围
  2. 设计典型场景的测试用例,覆盖常用业务流程和不常用的业务流程等
  3. 根据测试用例,开发自动测试脚本和场景:

i.录制测试脚本

  • 新建一个脚本(Web/HTML 协议);
  • 点击录制按钮,在弹出的对话框的 URL 中输入”about:blank”;
  • 在打开的浏览器中进行正常操作流程后,结束录制;
  • 调试脚本并保存。可能要注意到字符集的关联。

ii.设置测试场景

  • 针对性能设置测试场景,主要判断在正常情况下,系统的平均事务响应时间是否达标
  • 针对压力负载设置测试场景,主要判断在长时间处于满负荷或者超出系统承载能力的条件下,系统是否会崩溃

iii.执行测试,获取测试结果,分析测试结果


二、试述软件的概念和特点?软件复用的含义?构件包括哪些?

三、软件生存周期及其模型是什么?

四、什么是软件测试?软件测试的目的与原则

五、软件配置管理的作用?软件配置包括什么?

六、什么是软件质量?

七、目前主要的测试用例设计方法是什么?

八、软件的安全性应从哪几个方面去测试?

九、什么是测试用例?什么是测试脚本?两者的关系是什么?

十、简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试?

十一、软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?

十二、软件产品质量特性是什么?

十三、软件测试的策略是什么?

十四、软件测试分为几个阶段 各阶段的测试策略和要求是什么 ?

十五、软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?

【答案在:之前的推文】

测试开发工程师成长日记015 - 最强20道测试面试题https://blog.csdn.net/zy01051314/article/details/125991556?spm=1001.2014.3001.5501


十六、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点。

1、黑盒测试

优点:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;  从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。

缺点:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。

2、白盒测试

优点:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐    藏的问题。

缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。


十七、如何测试一个纸杯?

反问面试官:这个水杯容量、材质、大小、形状、功能有无限制?

面试官:没有限制

答:假设这个水杯 100ml 办公室一次性的纸质水杯

可以分功能测试、界面测试、易用性测试、兼容性测试、安全测试、性能压力来思考

  • 功能测试:水杯能否正常装水,不漏水?100ml 边界值? 装冷水开水热水?能否降解?
  • 界面测试:外观颜色、设计、logo、界面文字是否正确?
  • 易用性测试:隔热、易握?杯口是否毛刺?设计是否符合人体工学?
  • 兼容性测试:装气体/固体/液体? 不同环境下是否正常?
  • 安全测试:材质质量,是否防止腐蚀能力?防止碰撞,割手?抑制细菌?
  • 性能压力:摔多次?是否耐摔?(不同高度) 挤压(不同角度),是否变形?

十八、测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?

十九、黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。

二十、详细的描述一个测试活动完整的过程。(供参考,本答案主要是瀑布模型的做法)

二十一、BUG管理工具的跟踪过程(用BugZilla为例子)

二十二、发红包测试用例?

二十三、设计发朋友圈测试用例

二十四、领取优惠券的页面如何设计?

二十五、设计抖音视频播放页面测试用例?

二十六、针对抖音搜索界面,设计测试用例?

二十七、一个项目,有增删改查接口等,做接口测试,怎么测?


二十八、什么是接口测试?为什么要做接口测试?

做测试项目时,都会碰到接口测试,接口测试的目标是对被测试系统进行全量覆盖测试,覆盖到各个业务分支和各个功能,以及场景和数据组合。

什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

为什么要做接口测试?

1)越底层发现bug,它的修复成本是越低的。

2)前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。

3)检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。

4)如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。

5)接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。

接口规范是什么?

首先接口分为四部分: 方法、 uri、 请求参数、 返回参数
1.方法:新增(post) 修改(put) 删除(delete) 获取(get)
2.uri: 以/a 开头, 如果需要登录才能调用的接口(如新增、 修改; 前台的用户个人信息, 资金信息等)后面需要加/u, 即: /a/u; 中间一般放表名或者能表达这个接口的单词; get 方法,如果是后台通过搜索查询列表, 那么以/search 结尾, 如果是前台的查询列表, 以/list 结尾;url 参数就不说了。
3.请求参数和返回参数, 都分为 5 列: 字段、 说明、 类型、 备注、 是否必填
字段是类的属性; 说明是中文释义; 类型是属性类型, 只有 String、 Number、 Object、 Array四种类型; 备注是一些解释, 或者可以写一下例子, 比如负责 json 结构的情况, 最好写上例子, 好让前端能更好理解; 是否必填是字段的是否必填。
4、 返回参数结构有几种情况:

  1. 如果只返回接口调用成功还是失败(如新增、 删除、 修改等) , 则只有一个结构体: code 和 message 两个参数;
  2. 如果要返回某些参数, 则有两个结构体: 1 是 code/mesage/data, 2 是 data 里写返回的参数,data 是 object 类型;
  3. 如果要返 回 列 表 , 那 么 有 三 个 结 构 体 , 1 是 code/mesage/data,data 是 object , 里 面 放 置page/size/total/totalPage/list 5 个参数, 其中 list 是 Arrary 类型, list 里放 object, object 里是具体的参数。

注意: uri 地址里不允许出现大写字母, 如果是两个单词拼接, 用/分开

示例:
请求地址: get /a/student/list
请求参数:
返回参数:



处理能力和业务

一、公司测试流程?测试工作怎么开展的?怎么展开测试?

考察是否熟悉测试过程中各个环节。具备知识:软件生命周期、bug 生命周期、测试流程

大概流程为需求评审会议 —> 测试计划(测试范围、时间节点、任务分配、测试策略、环境,风险评估)—> 测试用例编写(测试思维)、内部/项目组评审 —> 测试执行(开发编译完成,提测):发现 bug 定位 bug,提交并跟踪 bug,多轮回归测试,测试结束 —> 整理测试报告–> 发布线上,线上问题跟踪。

可依据自己公司做适当调整。

流程:需求对齐(需求评审)->技术方案评审->开发->联调自测->提测->测试用例编写/用例评审->测试执行/提交跟进bug->测试报告->发布->线上问题跟踪/项目售后

测试开发工程师成长日记016 - 关于提测的那些事https://blog.csdn.net/zy01051314/article/details/126011580测试开发工程师成长日记017 - bug的生命周期https://blog.csdn.net/zy01051314/article/details/126012878?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126012878%22%2C%22source%22%3A%22zy01051314%22%7D&ctrtid=wBTU2


二、做过什么项目,负责什么?

三、项目中每个业务扣细节?

四、个人规划、如何理解测试岗位?

在每个软件企业中,测试占用一个很重要的地位,对于一个合格的测试工程师,需要了解产品想怎么玩,用户会怎么玩,运营想要用户怎么玩,开发怎么实现,测试怎么进行,何为技术难点等等。一个好的测试人员非常难得,了解了用户使用,懂得了代码实现,写的了接口测试,做的了性能优化,还能协调各种矛盾。比产品了解开发,比开发了解运营,比运营了解产品,还要最了解测试及产品质量。


对软件测试工程师的好习惯的几点建议:

1.先分析,再执行,这样会事半功倍
2.测试的最终目的是代表客户利益去把控软件质量,而不是想着找出所有的bug
3.熟悉产品的各个模块,理解产品的开发逻辑,了解客户的使用习惯
4.对产品、开发、运营的不合理需求要学会拒绝
软件测试的技术不断进步,与具体测试技术相比,掌握测试的核心思想比具体技术更重要。测试的最高境界在于运用最简单有效的测试技术,最大限度的发现软件缺陷。


团队对测试要求:

理念:软件产品质量必须依靠过程管控与数据监控
策略:积极参与到产品功能定义和产品设计环节
愿景:成为专业的软件质量管控团队
使命:代表我们的客户利益管控团队输出的产品质量
工作方法:轻敏捷:快速验证,价值驱动,团队自组织
团队:开放心态,乐于学习,追求精品,持续改进
产品观:稳定可靠,感性易用,凝聚创新,体贴极致,数据,数据,数据

希望设计质量部能够代表客户利益,制定更多的产品质量控制的标准,把这些标准传达到产品和设计部门,帮助他们实现这些标准,最终通过品质手段管控这些标准,交付客户高质量的产品。
 


五、在最近生活或者工作上,遇到的最有挑战的事

六、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?

七、维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

八、你对测试最大的兴趣在哪里?为什么?

九、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?

十、维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

十一、你对测试最大的兴趣在哪里?为什么?测试人员在软件开发过程中的任务是什么?

十二、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

测试开发工程师成长日记007 - Bug的优先级定义及填写规范https://blog.csdn.net/zy01051314/article/details/125760712?spm=1001.2014.3001.5502



情景问题

一、视频卡顿如何排查打开 APP 后页面空白,怎么排查问题?

  • 先确保网络正常、输入的 URL 地址是正确的;
  • 通过浏览器调试工具或者抓包工具例 fiddler,查看控制台的请求和响应;
  • 查看请求地址和参数等是否正常;后台返回状态码、响应数据等是否正常;
  • 一般经过以上步骤,基本能够定位到问题,例控制台报 js 异常之类的,则前端问题;若返回状态 500,则后端问题,可同步查看服务器日志来定位。

二、为微信的点赞功能设计测试用例,假如点赞了但是点赞数没有加一,可能报错在哪里?

三、网络良好的情况下,发现数据传输过程出现 404 的情况,你认为是什么问题?

原因一般来说有几种情况:

  1. 无法在所请求的端口上访问 Web 站点
  2. Web 服务扩展锁定策略阻止本请求
  3. MIME 映射策略阻止本请求
  4. 网站更新改版,但某些局部板块沿用原来的模块,而原有的模块调用的文件已经被删除或转移了路径
  5. 跟踪访问的各类脚码或 CSS 文件无效但调用代码依然存在。
  6. 某个目录直接删除网页
  7. URL 生成规则改变
  8. 网页文件更名或移动位置
  9. 导入链接拼写错误等

四、A 给 B 发送消息后,A 看见消息发送出去了,但是 B 没有收到,怎么排查问题?

五、网页加载慢的原因?

1、原因一:http请求次数太多

解决:减少http请求次数

① 图片地图:把多张图片整合到一张图片中,以位置定位超链接。

② CSS Sprites合并图片,通过指定CSS的backgroud-image和backgroud-position来显示元素。

③ 合并JS脚本和CSS样式表。

④ 使用外部JS和CSS文件。

2、原因二:接收数据时间过长,如下载资源过大

解决:对HTTP传输进行压缩,即在js,css、图片等资源已经压缩的基础上,
在HTTP传输过程中的再次压缩。客户端可以通过Accept-Encoding头来声明
浏览器支持的压缩方式,服务端通过Content-Encoding来启用压缩,配置
压缩的文件类型,压缩方式。gzip使用无损压缩,压缩效果最佳,已经成为
使用最为普遍、支持的浏览器最多的数据压缩格式。

3、原因三:JavaScript脚本过大,阻塞了页面的加载

解决:静态资源统一放在一个静态域名上,减轻重复下载静态资源的负担。

4、原因四:CSS、JavaScript、图片等需要重复加载

解决:静态资源统一放在一个静态域名上,减轻重复下载静态资源的负担。

5、原因五:cookie影响

解决:减小cookie的影响

① 去除没有必要的cookie,如果网页不需要cookie就完全禁掉。

② 将cookie的大小减到最小:减小HTTP请求报文的大小,提高响应速度。

③ 设置合适的过期时间:cookie信息将存储到硬盘上,即使浏览器退出cookie还会存在,
只要cookie未被清除且还在过期时间内,该cookie就会在访问对应域名时发送给服务器。

④ 通过使用不同的domain减少cookie的使用:cookie在访问对应域名下的资源时都会通
过HTTP请求发送到服务器,但在访问一些资源,如js,css和图片时,大多数情况下cookie
是多余的,可以使用不同的domain来存储这些静态资源,这样访问这些资源时就不会发送多
余的cookie,从而提高响应速度。

6、原因六:网页资源过多

解决:使用CDN部署网络以提高下载速度,可以先通过免费的CDN供应商来分发网页资源。


六、与开发人员冲突的处理方法及遇到问题的解决方法一个 bug 开发不认同是 bug 你该怎么做 ?

  • 首先确认开发环境是否跟自己测试环境一致(有时候开发是在他们已更新代码的环境上验证 bug 的,所以 bug 就没出现,但在测试环境上面会出现),确认在测试环境能重现,如果确认是缺陷跟开发保持有效的沟通;
  • 如果是级别较低的建议性 bug,可以先记录到 bug 平台,先保留沟通;
  • 如果是 bug 级别较高的问题,对应需求文档的预期结果跟开发说明,更有说服力;耐心讲解 bug 的危害,不行就找产品确认,确认是 bug 注明情况并再次指派给开发。

七、你正在测试,产品组拿来一个紧急测试让你测,你该怎么办?

八、如果同事进度不能符合预期,影响整体进度怎么办 如果领导给你一个不熟悉的事件,但很紧急怎么办?



计算机网络

一.介绍 OSI 模型

  1. 第一层:物理层,功能:利用传输介质为通信的主机之间的建立、管理和释放物理连接,实现比特流的透明传输,为数据联立层提供数据传输服务
  2. 第二层:数据链路层,功能:在物理层提供比特流的基础上通过建立数据链路连接,采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路
  3. 第三层:网络层,功能:通过路由选择算法为分组通过通信子网选择适当的传输路径,实现流量控制,拥塞控制与网络互联的功能
  4. 第四层:传输层,功能:为分布不同地理位置计算机的进程提供可靠的端对端链接与数据传输服务;传输层向高层屏蔽了底层数据通信的细节
  5. 第五层:会话层,功能:负责维护两个会话主机之间连接的建立、管理和终止,以及数据的交换
  6. 第六层:表示层,功能:负责通信系统之间的数据格式变换、数据加密与解密、数据压缩与恢复
  7. 第七层:应用层,功能:实现协同工作的应用程序之间的通信过程控制

二.为什么 TCP 消耗系统资源多

三.TCP 与 UDP 区别

基于连接与无连接;

对系统资源的要求(TCP 较多,UDP 少);

UDP 程序结构较简单;

流模式与数据报模式 ;

TCP 保证数据正确性,UDP 可能丢包,TCP 保证数据顺序,UDP 不保证。


四.TCP 怎么保证可靠连接

五.http 会话保持功能如何实现?

六.http 状态码?

测试开发工程师成长日记018 - 测试面试必备题记录(持续更新)_第1张图片

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

  • 200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。

  • 204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。

  • 206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向

  • 301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

  • 302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

  • 304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

  • 400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。

  • 403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。

  • 404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

  • 500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。

  • 501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。

  • 502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

  • 503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。


七.http 长连接和短连接以及他们分别适用的场景 ?

八.get 和 post 区别?

根据 RFC 规范,GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定)。

比如,你打开我的文章,浏览器就会发送 GET 请求给服务器,服务器就会返回文章的所有文字及资源。

测试开发工程师成长日记018 - 测试面试必备题记录(持续更新)_第2张图片

根据 RFC 规范,POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中, body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

比如,你在我文章底部,敲入了留言后点击「提交」(暗示你们留言),浏览器就会执行一次 POST 请求,把你的留言文字放进了报文 body 里,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。

测试开发工程师成长日记018 - 测试面试必备题记录(持续更新)_第3张图片

九.http 协议的 header

十.cookie 和 session 是什么,为什么要用 cookie 和 session ?

十一.DNS 协议和作用?

十二.Https 中的 CA 证书在客户端还是在服务端?



操作系统

1. 进程和线程的区别?

进程是资源分配的最小单位,线程是程序执行的最小单位。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。


2. 多线程和多进程,以及应用场景?

3. 进程通信方式 ?

4. 内存泄漏?

5. 堆和栈?

栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS 回收 。


6. 堆内存和栈内存?

7. 什么是死锁,死锁的条件?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去;此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

四个必要条件:

  • 互斥

  • 占有且等待

  • 不可强占用

  • 循环等待

8. 产生死锁的原因?

可归结为如下两点:

a. 竞争资源

系统中的资源可以分为两类:

可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU 和主存均属于可剥夺性资源;

另一类资源是不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。

产生死锁中的竞争资源之一指的是竞争不可剥夺资源(例如:系统中只有一台打印机,可供进程 P1 使用,假定 P1 已占用了打印机,若 P2 继续要求打印机打印将阻塞)

产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、信号、消息、缓冲区内的消息等),通常消息通信顺序进行不当,则会产生死锁

b. 进程间推进顺序非法

若 P1 保持了资源 R1,P2 保持了资源 R2,系统处于不安全状态,因为这两个进程再向前推进,便可能发生死锁

例如,当 P1 运行到 P1:Request(R2)时,将因 R2 已被 P2 占用而阻塞;当 P2 运行到 P2:Request(R1)时,也将因 R1 已被 P1 占用而阻塞,于是发生进程死锁。


9. 如何预防死锁,!避免死锁,死锁发生的检查?

资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)

只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)

可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)

资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)



代码题、算法题

1.装饰器并写一个装饰器例子?

2.找出 数组中出现次数超过一半的数字

3.哈希表的空间复杂度

4.算法题:给你一个字符串,查找出所有的重复子字符串。

5.算法题:树的深度遍历:while 循环:栈,先入右子树节点,后入左子树节点。

6.算法题:给你一个字符串找出其中的回文字符串,对你的算法设计用例

7.算法题:二叉树的前序遍历



Python/Java 基础

1.面向对象语言的特性?

2.深拷贝与浅拷贝?

数据类型分为两种基础类型和引用类型

基础类型:像 Number、String、Boolean 等这种为基本类型

引用类型:Object 和 Array

浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝(例:assign())

深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝


3、python 元组和列表的区别

a=[] 这是一个列表

b=() 这是一个元组

区别:列表可以修改而元组不能修改,例如可以往列表中用 append()添加元素,由于元组是不可修改的所以不存在添加元素的问题。

相同点:列表和元组都是容器,包含了一些列的对象,二者都可以包含任意类型的元素甚至包含序列。


4.python 去重用什么 ?

5.python 用过哪些库函数?

6.selenium 用到什么程度了?

7.python 装饰器,作用,用法

8.Java:多态说一下,接口类和抽象类的区别;

9.Java/Python 的垃圾回收机制?

10.Java 和 python 创建多线程和多进程的方式 ?

11.Java和python的区别?

  • python 跟 java 一样时强类型语言,也就是说它不会根据环境变化自动改变数据类型
  • python 是动态语言,而 java 是静态语言。也就是说 python 在编程时,永远不用给任何变量指定数据类型,而 java 写程序时必须声明所有变量的数据类型
  • python 的模块类似于 java 的 class,不过python模块导入会执行 代码的内容,而 java 不会 python 与 java 的执行方式还是蛮像的,都是将源码编译成 byte code 然后交给相应的虚拟机去执行
  • Python为了优化速度,避免为整数频繁申请和销毁内存空间,使用了小整数对象池。对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在这个范围内所有的整数都只会被建立一次 与 java 类似,java 叫常量池,[-128,127],通过 IntegerCache 来实现的 ( Integer [-128,127) 大整数池: python为了避免创建大整数浪费的内存空间和时间,将创建过的大整数加入
  • 大整数池:python中大整数池,默认大整数池里面为空,每一个py程序都有一个大整数池。使用大整数时如果大整数池里不存在该整数的话,会新建一个大整数对象。下次使用大整数时直接使用大整数池里的对象,而不是创建新的对象 。终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以。这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。 类似于 java 的 字符串常量池,java 不一样,基本数据类型在同一个 jvm 中都会重用。
  • 如果是其他普通类型对象的新建,python会请求内存,申请内存 。当n1的引用指向其他对象时,原有对象的引用计数会自动减1,没有被引用的对象会立即回收( 引用计数法 )。与 java 类似,但 java 不是通过引用计数来回收垃圾的,而是通过 到 GCROOT 的路径通不通来回收垃圾的 ( 可达性分析法 )
  • python 中有全局变量,而 java 中没有
  • python引用变量的顺序: Local ->Enclosing ->Global ->Built-in ,与 java 一样,就近原则
  • Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问, 与 java 类似
  • python中的字典 key 不能是可变的,可变的会报错,而java中没有此限制,虽然说可能不应该以可变对象为 key
  • python 的序列( list )、字典( dict )、集合( set ),都可以是混合类型
  • python 的函数在一定的程序上可以类比于 java 的方法,但函数是不同于方法的
  • Python 函数的 return 语句可以返回任意类型,也就是说 Python 的函数并没有固定的返回类型,符合动态语言的标识,而java 只能返回特定的类型 Python 函数的参数可以通过关键字指定,而 java 方法不可以。
  • Python 函数有默认参数,而 java方法 没有
  • 当我们在函数中引用一个变量时,Python 将隐式地默认该变量为全局变量。但是,一旦变量在没有 global关键字修饰的情况下进行了修改操作,Python 会将其作为局部变量处理,并在外部作用域中隐藏任何类似命名的变量
  • python 的函数定义也可以嵌套,而 java 不可以
  • python 中的 模块( module ) 其实就是python源文件,package + module 构成了 Python 中的依赖,与 java 类似


Linux

1.常见命令

2.打印当前文件夹文件 ls -al a 所有文件 l 详细信息​​​​​​​

3.查询 CPU 等情况的命令

  • free 命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述
  • top 命令提供了实时的运行中的程序的资源使用统计
  • atop 命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注
  • htop 命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。
  • ps 命令可以实时的显示各个进程的内存使用情况
  • smem 命令允许你统计基于/proc 信息的不同进程和用户的内存使用情况。内存使用情况的分析可以导出图表(如条形图和饼图--图形界面窗口才提供)
  • vmstat 命令显示实时的和平均的统计,覆盖 CPU、内存、I/O 等内容。例如内存情况,不仅显示物理内存,也统计虚拟内存
  • nmon 是一个基于 ncurses 的系统基准测试工具,它可以监控 CPU、内存、I/O、文件系统及网络资源等的互动模式。对于内存的使用,它可以实时的显示 总/剩余内存、交换空间等信息


数据库

1.MySQL 存储引擎如何实现?

2.事务概念及其特性?

概念

数据库事务: 数据库事务通常指对数据库进行读或写的一个操作序列。

它的存在包含有以下两个目的:

  1. 为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
  2. 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

3、多表查询、普通 SQL 和存储过程的区别?

4、索引的底层、底层为什么要采用 B 树或 B+ 树?

B 树和 B+ 都是通过多叉树的方式,会将树的高度变矮,所以这两个数据结构非常适合检索存于磁盘中的数据。

MySQL 默认的存储引擎 InnoDB 采用的是 B+ 作为索引的数据结构,原因有:

  • B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更「矮胖」,查询底层节点的磁盘 I/O次数会更少。
  • B+ 树有大量的冗余节点(所有非叶子节点都是冗余索引),这些冗余索引让 B+ 树在插入、删除的效率都更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化;
  • B+ 树叶子节点之间用链表连接了起来,有利于范围查询,而 B 树要实现范围查询,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率不如 B+ 树。为什么 MySQL 采用 B+ 树作为索引?https://xiaolincoding.com/mysql/index/why_index_chose_bpuls_tree.html#%E6%80%8E%E6%A0%B7%E7%9A%84%E7%B4%A2%E5%BC%95%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%98%AF%E5%A5%BD%E7%9A%84

5、B 树和 B+ 树区别?

  • B 树和 B+ 都是通过多叉树的方式,会将树的高度变矮,所以这两个数据结构非常适合检索存于磁盘中的数据。
  • B+Tree 只在叶子节点存储数据,而 B 树 的非叶子节点也要存储数据,所以 B+Tree 的单个节点的数据量更小,在相同的磁盘 I/O 次数下,就能查询更多的节点。
  • 另外,B+Tree 叶子节点采用的是双链表连接,适合 MySQL 中常见的基于范围的顺序查找,而 B 树无法做到这一点。
  • B+Tree 存储千万级的数据只需要 3-4 层高度就可以满足,这意味着从千万级的表查询目标数据最多需要 3-4 次磁盘 I/O,所以B+Tree 相比于 B 树和二叉树来说,最大的优势在于查询效率很高,因为即使在数据量很大的情况,查询一个数据的磁盘 I/O 依然维持在 3-4次

什么是 B+ 树?https://xiaolincoding.com/mysql/index/why_index_chose_bpuls_tree.html#%E4%BB%80%E4%B9%88%E6%98%AF%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE%E6%A0%91

6、熟悉数据库吗:学生选课系统怎么建表,查询一个老师教的所有学生的名字?

7、取一个年级中每个班级年龄最小的同学名字?

8、where 和 having 的区别?

a.用的地方不一样

  • where 可以用于 select、update、delete 和 insert into values(select * from table where ..)语句中。
  • having 只能用于 select 语句中。

b.执行的顺序不一样

  • where 的搜索条件是在执行语句进行分组之前应用,
  • having 的搜索条件是在分组条件后执行的,
  • 即如果 where 和 having 一起用时,where 会先,执行,having 后执行。

c.子句有区别

  • where 子句中的条件表达式 having 都可以跟,而 having 子句中的有些表达式 where 不可以跟,having 子句可以用集合函数(sum、count、avg、max 和 min),而 where 子句不可以。

d.总结

  • WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
  • GROUP BY 子句用来分组 WHERE 子句的输出。
  • HAVING 子句用来从分组的结果中筛选行。

end


你可能感兴趣的:(压力测试,单元测试,测试用例)