测试工程师常见面试题

目录

测试

一,测试了解

二,bug缺陷管理

三,接口测试Jmeter,Fiddler

四,接口测试用例的设计:

五,单元测试 

六,弱网测试

七,web测试和app测试的异同 

八,APP性能测试指标

九,APP相关问题-java/android开发

十,请说明Android手机和IOS手机,系统有什么区别?

十一,IE空白页面原因 

十二,并发用户数和在线用户数的区别

十三,一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

十四,测试前端页面,按钮不好使,不获取源码如何解决(提示接口测试)

十五,测试手机开机键 

十六,登陆界面测试

十七,支付流程测试

十八,其它测试用例编写

面试

一,自我介绍         

二,还有什么要问的?

三,自己的优点&不足

四,职业规划

五,为什么想做测试开发而不是研发工作

六,实习所得

七,对加班的看法

八,选择原因&薪资要求

九,还有什么要问的

十 ,一些小问题

十一,公司了解

十二,面试注意点

十三,签约前需了解

前端 

 一,为什么前端选择vue.js框架(和其他框架的对比)

 二、Cookie&Session&localstorage

 三、Cookie和Session区别

 四,常见的设计模式

Linu相关知识

一,Linux常用的指令

二,Linux chomd命令详解

三,一些shell命令1

四,一些shell命令2

五,一些shell命令3

六,linux查看进程

七,硬链接&软链接 

MySQL相关知识

一,MySQL常见命令   

二,事务ACID特性

三,主键&外键&索引

四、索引

五,乐观锁悲观锁&数据库锁机制

六,SQL基本操作

         七,事务的并发问题&隔离级别: 

八,数据库类型区别

九,数据库优化

十,剩余

十一,平时练习题

数据结构

一,常见排序算法

二,数组和链表的区别,以及用途?

三,常见的数据结构及优缺点

四,B树-平衡多路查找树/B-树

五,HashMap怎样解决散列(hash)冲突?

操作系统

一,进程&线程

二,进程&程序 

三,进程的状态 

四,通信&线程的同步互斥

五,进程调度算法

六,死锁

七,内存分配的算法 

八,中断和异常

计算机网络

 一,TCP和UDP的区别

二,流量控制

三,拥塞控制

四,http 和 https 有何区别?

五,常见的HTTP状态码

六,HTTP 

七,get和 post区别

八,从一个url地址到最终页面渲染完成

九,TCP三次连接

十,TCP四次挥手

十一,私有IP地址范围 

十二,HTTP跨域

十三,基础知识

智力题

C++ 

一,基础知识入门

二,错误总结

三,进制问题

四,位运算符

五,c函数

六,STL容器

七,虚函数和xxx函数

 八,深拷贝&浅拷贝&动态内存分配

九,申请&释放

十,指针和引用的区别

十一,static 作用

十三,僵尸进程&孤儿进程

十四,C++内存泄漏


参考牛客网和对应公司面经

 

数字规律:https://blog.csdn.net/sinat_38972110/article/details/82145600

编程特训:https://www.nowcoder.com/activity/oj(推荐《剑指offer》) 

牛客竞赛:https://blog.csdn.net/weixin_44264744/article/details/106525662

20春招总结:https://blog.csdn.net/weixin_44264744/article/details/106525662

牛客各大面经:https://www.nowcoder.com/activity/topics

测试岗各企业面经:https://www.nowcoder.com/discuss/84011

知乎没有软测经验办法: https://www.zhihu.com/question/26779409/answer/580740361

MySQL数据库面试题(2020最新版):https://blog.csdn.net/ThinkWon/article/details/104778621?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendHotData-27.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendHotData-27.nonecase

深圳虾皮:https://app.mokahr.com/recommendation-apply/shopee/2964#/jobs?page=4&isCampusJob=&zhineng=9055&_k=wlw2l3

 


测试


一,测试了解

  • 测试流程:需求评审,需求确定,制定测试计划,设计用例设计(概要+详细),测试环境,执行测试,BUG追踪,测试报告

  • 测试方法:黑盒---,白盒---(语句,判定,条件,判定/条件,条件组合,路径),灰盒

  • 测试类型:功能,非功能(兼容,性能,可靠,安全,压力--阈值--性能测试的一部分,负载--时长.....)

  • 测试阶段:(需求,概要,详细设计) 

    • 单元测试是对软件中的基本组成单位进行的测试(桩/驱动)

    • 集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确

    • 系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求

    • 验收测试:向软件的购买者展示该软件系统满足其用户的需求。测试数据通常是系统测试的测试数据的子集(a/b/正式

    • 通过运行程序测试软件称为动态测试.通过评审文档、阅读代码等方式测试软件称为静态测试,

  • 测试人员所需:基础理论知识,编程语言知识,工具使用经D验,计算机基础知识,测试框架知识JUnit

  •                          业务分析能力,缺陷洞察能力,团队协作能力,专业技术能力,逻辑思考,沟通表达,宏观把控

  • 软件测试的潜力和挑战: 111  222

  • 测试人员的核心竞争力:早发现问题早解决问题降低成本消耗,发现别人发现不了的问题,独一无二,沟通思考,快速学习

  • 黑盒测试:等价类划分,边界值分析,错误推测,因果图法,正交法,场景法(功能测试) //简单+代码覆盖率低

  • 白盒测试:逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试(结构测试)

  • α测试:alpha,指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试

  • β测试:beta,软件的多个用户在一个或多个用户的实际使用环境下进行的测试,开发者不在测试现场,外部/非专业人员

  • 测试在开发中的任务:寻找BUG,避免软件开发过程中的缺陷,衡量软件品质,关注用户需求

  • 软件质量的六个特征:功能特征,可靠,易用效率,可维护,可移植

  • 如何写测试用例:

  • 测试用例的组成:用例编号,用例标题,功能模块名称,前置条件,输入数据,操作步骤,预期结果,优先级,执行结果

                                 编写人,执行人,其他补充项

  • .软件的生命周期问题定义  可行性研究  需求分析  概要设计  详细设计  编码和单元测试   综合测试   软件维护

二,bug缺陷管理

  • 周期:New,Assigned已指派,Open,Fixed-修复,Pending Reset--待测试, Reset,Closed

  •            Reopen,Pending Reject-拒绝中,Rejected-被拒绝的,Postponed-延期的  (11)

  • 类型: 代码错误,界面优化,设计缺陷,安装部署, 性能问题,标准规范,,,,,

  • 等级:致命,严重,一般,建议(立即解决,高优先级,正常排队,低优先级

  • 如果测试过程中你发现一个bug,但开发人员认为不是一个bug怎么处理

    • 首先:明确开发说不是bug的理由,将问题提交到缺陷管理库里面进行备案,要获取判断的依据和标准

    • 如果是需求变更/不确定, 那就找产品经理确认是否是需求变更 

    • 如果开发说测试环境问题, 说明清楚测试环境问题是什么,按照他说的验证一遍, 如果确实如他所说, 关闭bug 

    • 如果开发说用户不存在这种使用场景,依据是什么?若出现会有什么不良结果?把这个bug 知会到测试经理,让其判定 

    • 小概率BUG,截图或保留证据

  • 前后端判定:

    • 通过请求与响应来判断

    • 先抓包看请求报文,对比接口文档,看请求报文有没问题,有问题就是前端发的数据不对

    • 请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题 

  • 缺陷管理工具:禅道 

  • 自己遭遇的印象深刻的BUG:

  • 缺陷管理:严重等级判定,上线的影响,出现在那一端,是偶线还是A线,期望结果,错误表现,操作步骤,

  • bug记录的组成:内容,发现时间,测试条件(系统配置信息,环境,软件版本)

  •                            预期结果与实际结果,发现步骤,严重等级,发现位置等 

三,接口测试Jmeter,Fiddler

  • 方法:从开发那儿获取接口文档(功能接口、请求方式、请求URL、请求参数、参数类型,返回参数)若无,用fiddler抓包

  • 分类:程序内部/系统对外,webservice接口--走soap协议通过http传输    http api接口--走http协议  举例1  如何测--详细 

  • 定义:通过测试不同情况下的入参和相应的出参信息来判断接口是否符合相应的功能/安全性要求,是测试系统组件间接口的测试

  • 必要性:发现很多在页面操作上发现不了的BUG,检查系统的安全性,稳定性,异常处理能力,处理并发情况

  • 发现的BUG:边界值溢出导致输入和 

特殊值处理不当导致程序异常退出或者崩溃

类型边界溢出,导致数据独处和写入不一致

取值边界外未返回正确的错误信息

权限未处理,可以访问其他用户的信息

逻辑校验不完善,可以利用漏洞获取非正当利益

状态处理不当,导致逻辑出现错误

数组类型item个数为0或者item重复时程序异常退出

问题:在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理---设置全局变量处理依赖的数据

           依赖于第三方数据的接口如何进行测试?---通过mock工具来模拟第三方的数据返回,最大限度降低接口依赖

           当一个接口出现异常时候,你是如何分析异常的?---1-通过fiddler抓包,查看请求和返回报文,2查看后端日志

           如何模拟弱网测试----通过fiddler,平时说的模拟丢包即是

          依赖登录状态的接口如何测试?-----在构建POST请求时添加必要的session或者cookie

四,接口测试用例的设计:

  • 是否满足前提条件:

    • 有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token

    • 逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例

  • 是否携带默认值参数:

    • 正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例

  • 业务规则、功能需求:

    • 这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例

  • 参数是否必填:

    • 逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例

  • 参数之间是否存在关联:

    • 有些参数彼此之间存在相互制约的关系

  • 参数数据类型限制:

    • 逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例

  • 参数数据类型自身的数据范围值限制:

    • 正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例

五,单元测试 

  • 工具:  111   eclipse中的outline窗口显示测试方法,Android JUnit Test测试

  • 定义:可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行

  • 分类:整体测试(类名右键)和单独测试(项目名上右键)   可行不

  • 问题:测试没有参数的函数,它可能还有别的输入,例如全局变量,成员变量,或调用子函数获得的输入(照常测试)

六,弱网测试

  • charles弱网模拟

  • chrome的webview调试工具弱网模拟

  • iOS手机自带Network Link Conditioner 弱网模拟

七,web测试和app测试的异同 

  • web项目:是b/s架构,基于浏览器的,只用更新服务器端,主要关心响应时间

  • app项目:是c/s的,必须要有客户端,需要服务器和浏览器端同时更新,关心流量/电量/CPU/GPU等,需考虑安装卸载更新

  •                 还要看屏幕分辨率,屏幕尺寸,还要看设备系统。考虑安装时的中断、弱网、安装后删除安装文件等异常场景

  •                 有专项测试:如网络、适配性   兼容不同(品牌/版本/分辨率/

八,APP性能测试指标

  • 内存:空闲状态、中等规格、满规格状态下的应用消耗    app测试面试题

  • 流量:首次启动,高负荷运行,连续运行n小时

  • 电量:待机时耗电,长时间连续使用耗电

  • 启动速度:首次启动,非首次启动,应用界面切换(安装卸载时间,页面加载时间)

    • CPU,页面切换速度,与服务器交互的网络速度

  • 工具:轻量接口自动化测试---jmeter  网络抓包工具---Wireshark

九,APP相关问题-java/android开发

  • 如果广东用户头条app刷不出东西了:网络连接是否稳定/更新头条版本尝试/清除app缓存

  • 请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题

    • 是否手机出现故障,是否手机缓存过多造成内存不够用

    • 是否手机网络连接不稳定(弱网/无网),若是,有无网络差提示

    • 是否手机内存溢出(关注人数达上限否)

    • 是否是版本问题或者是安装包问题(更新系统,重新安装安装包)

  • 在debug模式下,查看app的线程列表,看线程是否卡主 

    • 1.在Eclipse Devices窗口,选中app对应的包名,然后点击debug图标(绿色的小虫子),然后切换到Debug视图。

    • 2.切换视图之后,可以看到debug下,app的线程列表。

    • 3.对于main线程(第一个线程),选中,并将其挂起Suspend。

    • 4.然后我们就可以看到,Suspend之后,main线程卡住的位置。

  • 测试工具: /性能监控器工具,流量-wiresh/弱网测试:

  •                   手机自带测试系统,单元测试:Junit等

  •                  通过真机调试,修改appdata中的数据,做最大值和异常值的测试

  •                  接口/性能测试--后端服务器:jmeter(主要关注响应时间,吞吐量,并发数,事务通过率等)

  •                  app性能测试--性能监控器(实时查看),长时间查看:打开性能监控面板,导出trace工具,借助开发者工具中的trace查看

  •                  微信小程序自动兼容ios和android手机,屏幕适配(分辨率/机型/版本)小程序自带调试系统,

十,请说明Android手机和IOS手机,系统有什么区别?

  • 运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。

  • 后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。

  • 指令权限不同:IOS中用于UI指令权限最高,安卓中数据处理指令权限最高 

十一,IE空白页面原因 

  • 防火墙,网络信号,DNS解析,输入错误,服务器拒绝访问

  • 访问拥塞,病毒,请求和响应被黑客截取,浏览器不兼容   

十二,并发用户数和在线用户数的区别

  • 在线用户数:用户同时在一定时间段的在线数量

  • 并发用户数:某一时刻同时向服务器发送请求的用户数

十三,一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

  • 300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。
  • 300个用户在一个客户端上,需要更大的带宽。
  • IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
  • 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

十四,测试前端页面,按钮不好使,不获取源码如何解决(提示接口测试)

  • 因为这是个前端界面,可以按F12打开开发者工具

  • 在network里按钮点击时请求有没有发出去,看状态码,有没有生成新文件之类的,确定是不是连接的问题。

  • postman模拟发包过去测试也行

十五,测试手机开机键 

  • 功能测试:按下开机键,屏幕能否亮起

  • 性能测试:按下开机键,屏幕能否在规定时间内亮起

  • 压力测试:连续多次按下开机键,观察屏幕是否能一直亮起,到多久时间失灵

  • 健壮性测试:给定一个中了病毒的手机或者是淘汰许久的老机子,安歇开机键观察屏幕能否亮起

  • 可靠性测试:连续按下开机键有限次数,比如1万次,记录屏幕未亮起的次数

  • 可用性测试:开机键按下费不费力,开机键的形状设计是否贴合手指,开机键的位置设计是否方便

十六,登陆界面测试

  • 功能测试:                  测试方法

    1. 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

    2. 输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。

    3. 用户名或密码有一方为空,验证是否登陆失败并且提示信息正确

    4. 登录成功后能否能否跳转到正确的页面

    5. 用户名和密码,如果太短或者太长,应该怎么处理

    6. 用户名和密码,中有特殊字符(比如空格),和其他非英文的情况

    7. 有无记住用户名的功能,能否复制粘贴,是否支持TAB、ENTER等快捷键;

    8. 登陆失败后,不能记录密码的功能

    9. 用户名和密码前后有空格的处理

    10. 密码是否非明文显示显示,使用星号圆点等符号代替。

    11. 牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用

    12. 登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

    13. 输入密码的时候,大写键盘开启的时候要有提示信息。

    14. 什么都不输入,点击提交按钮,检查提示信息。

    15. 是否支持第三方登陆

      是否可记住密码,记住的密码是否加密

    16. 用户名和密码是否大小写敏感

  • 界面测试
    1. 布局是否合理,testbox和按钮是否整齐,长度,高度是否复合要求 

    2. 界面的设计风格是否统一 ,文字简洁易懂,没有错别字 

  • 性能测试(吞吐量,响应时间,错误率,耗电量)
    1. 打开登录页面,需要的时间是否在需求要求的时间内。

    2. 输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内 

    3. 弱网,不同网速时登陆的时间,网络切换和网络延迟时登陆界面是否正常

    4. 高集合点并发场景下是否存在资源死锁和不合理的资源等待

    5. 单用户登陆时后台请求数量是否过多

      单用户/高并发场景下用户登录的响应界面是否符合预期

      长时间大量用户连续登录和登出,服务器端是否存在内存泄漏

  • 压力测试

    1. 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。

  • 安全性测试(app可以吗?)
    1. 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。

    2. 用户名和密码是否通过加密的方式,发送给Web服务,密码在后台储存时是否加密

    3. 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。

    4. 用户名和密码的输入框,应该屏蔽SQL注入攻击

    5. 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)

    6. ----用户名和密码的的输入框xss跨站脚本攻击字符串验证系统的行为是否被篡改

    7. 防止暴力破解,检测是否有错误登陆的次数限制。

    8. 是否支持多用户在同一机器上登录。

    9. 同一用户能否在多台机器上登录。

    10. 不同机型登陆,异地登陆是否有提醒

    11. 密码是否具有有效期,密码有效期到期后是否提示修改密码

    12. 不登陆的时候直接在浏览框中输入登录界面后的url地址,是否会重新定位到登陆界面

    13. 连续多次登陆失败后系统是否会阻止用户后续的尝试

  • 可用性测试
    1. 是否可以全用键盘操作,是否有快捷键。

    2. 输入用户名,密码后按回车,是否可以登陆。

    3. 输入框能否可以以Tab键切换。

  • 兼容性测试
    1. 不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。

    2. 同种浏览器不同版本下能否显示正常且功能正常。

    3. 不同的平台是否能正常工作,比如Windows, Mac。

    4. 移动设备上是否正常工作,比如Iphone, Andriod。

    5. 不同的分辨率下显示是否正常。

  • 本地化测试

    1. 不同语言环境下,页面的显示是否正确。

十七,支付流程测试

  • 功能测试      举例1      电商网站测试点

    • 等价类和边界值,判断支付的金额

    • 如果没有登陆能否支付,支付成功后是否可以正常跳转

    • 支付方式是否支持扫码支付,第三方平台支付(支付包,云网等),语音支付,指纹支付

    • 支付时是否需要身份验证,支付后有无手机短信提示,是否可以找他人代付

    • 用边界值法有无支付额度限制,余额不足时有无提示,支付时是否是动态加密支付

    • 待支付状态:订单是否可以正常支付;是否可以取消;有相同订单是否可以支付两次

    • 是否可以扫码支付,输入错误的密码会怎样显示,有无错误次数限制

    • 若支持扫码支付,二维码是否支持支付包和微信扫码,若两人同时扫描怎么处理

    • 有无最小支付金额限制,无意义的支付金额0,重复支付如何处理

    • 如果支付包含优惠金额,该怎么处理优惠额度

  • 性能测试 

    • 弱网,无网时是否可以支付

    • 退款到账时间,耗电量的多少

    •  带负载情况下的响应时间和吞吐率,在某个时间段内同时访问系统的用户数量 

  • 压力测试

    • 多人同时付款

  • 界面测试

    • 支付界面有无错别字,排版是否合理,颜色搭配是否合理

  • 兼容性测试

    • 是否可以跨平台,不同电脑机型下显示有无区别

  • 安全性测试

    • 若支付不成功是否原路退款,若支付成功,有无支付信息提示

    • 用fiddler抓包尝试修改价格,对订单金额有无效验

    • 直接输入需要权限的页面地址可用访问

  • 接口测试

    • 第三方平台支付 

十八,其它测试用例编写

  • 服务端接口测试:SQL注入,XSS跨站脚本攻击,CSRF跨站请求伪造,越权访问 

  • 微信朋友圈点赞   游戏中英雄技能    测试路由器  微信红包

  • 一瓶矿泉水瓶进行测试---高处跌落测试,烫,果汁等装入

  • 如何对淘宝搜索框进行测试---分页,多条测试,违法内容管控禁止输入

  • 水壶进行测试---耐热,易用,不易损坏,可移植(不同环境正常使用)

  • 杯子的检测-----盖子,使用的最大次数,界面,方便否,易携带否,防震动否

  • 多个摄像头,抓拍车牌  测试网络协议   PC网络故障,以及如何排除障碍  吃鸡游戏进行压力测试 

 

 


面试


一,自我介绍         

  •  准备两份,一个一面,二面时用,一个hr面时用。

  • HR面主要技能素养,生活经历,突出团队性,积极性,稳定性。

  • 一二面主要技能,实习经历,会的技能,突出特点等等。 

二,还有什么要问的?

  • 通常:非常感谢您给的机会,如果我有下轮面试,大概是什么时候,该做那方面的准备,进入(主要的挑战有)

  • 一般:xx,坦白的说我对自己的面试表现不是很满意/您觉得我这边有什么需要改进和提升的地方吗?我想提升下自己

  • 很差:xx,让我认识到自己的不足,坦白的说我离这个岗位的要求还有些距离,如果我再次来公司面试,您能否给点建议

  • 语言:紧张?--语速就放慢   不会?-----谦虚 不好意思,这个问题我没涉及过,您看能不能给我解释一下 

  • 不了解时说:之前对这个软件接触并不多,不过我很好奇这里的技术大牛是如何使用的,我也非常有兴趣向大家学习。 

三,自己的优点&不足

      优点:我先来说吧,主要有三个方面,第一是坚持,从大一开始,每周坚持进行两次锻炼,至今为止瘦了足足3/40斤,自从

决定参加蓝桥杯以来,每周的测试我从未缺席,除此之外每周都抽出4小时进行自我训练。第二,是好奇,无论大事小事,我总想

去试试,小时候我是我们街第一个玩滑板的人,高中时我是我们班第一个在校报上投稿并成功的人。第三,细心,从小到大,我

很少在数学考试中因粗心而失分,每次出门时总会再三检查有无缺漏。

      缺点:我的缺点也很明显,首先,决策时不果决,总希望尽可能的选择最好的一方,获取最大利益,殊不知犹豫中会错失良

机,所以当面临决策时,我会第一时间去搜集相关资料,告诉自己不要犹豫。其次,我对他人的情感变换反应有些慢,不能很好

的察觉,所以,我会尽量的包容他人的脾气,去倾听去鼓励。最后,我有些怯场,每当面临大场面,总会十分紧张,为此每次

都会提前准备,从常见问答,表情等方面尽可能的去完善,同时在平时,参与演讲比赛等活动去锻炼自己。

四,职业规划

目前阶段,我会努力做好毕业设计,学习相关知识技能,并编写技术博客,同时积极锻炼身体,为未来打下坚实的基础

当入职后,我会尽可能的融入公司,通过请教周边同事,尽快的了解公司,了解职位。努力做好本职工作的同时,快速提升自己

的能力,融入团队,和大家一起共同努力。将自我价值与实现公司目标相结合,同时有针对当前工作,学习对应所需的内容,如

参与前端测试时,我会在前端代码,测试工具等方面加强,同时我会根据自己的成长,适当改动调整

五,为什么想做测试开发而不是研发工作

开发的工作是实现功能,而测试的工作是确定功能是否正常运行,在测试和开发的选择上我思考了很久,之所以选择测试而不是

开发,主要原因有如下几点:首先,我是一个细心的人,容易发现问题,数学考试--细节上出错的很少,每次出门时都会再三检

查有无缺漏。其次,开阔思维,打开一片新的天地----比如登陆界面开始可能只知道,后来

最后,我认为测试虽然不起眼但有着举足轻重的作用,责任感,成就感-发现别人未发现的BUG,吵的凶的开发人员背后对着别人

夸你是最好的时候

享受少数派和幕后英雄的乐趣  不能把2000年识别为闰年没有2月29号,99是一个特殊标识,将电脑中的很多文件删除

测试工程师常见面试题_第1张图片

六,实习所得

  • 把用来抱怨的时间,去寻找问题的解决方法,度娘永远是你的第一老师

  • 责任,对谈好的截止日期认真负责

  • 遇到问题,咨询领导和同事永远是备选项

  • 你以为学到了全部,不过只是九牛一毛

七,对加班的看法

  • 加班可以学习到更多的东西,锻炼自己的能力,快速成长,如果工作需要我将义不容辞 

  • 大学校信息中心,我们就经常要加班,

  • 我目前单身,没有家庭负担,可以全身心的投入工作。(改)

  • 但同时我会提高工作效率,了解加班的原因,尽可能避免不必要的加班。

八,选择原因&薪资要求

  • 资:我对工资没有硬性要求/更注重的是工作机会和职业发展/我对贵公司非常感兴趣,所以只要条件公平我不会计较太多。

  • 资:我更希望你能根据我的背景、工作经验和工作的积极性,来决定应付给我的薪水。

  • 资:https://wenda.so.com/q/1371316342069130?src=180&q=%E9%9D%A2%E8%AF%95%E5%AF%B9%E5%85%AC%E5%8F%B8%E6%9C%9F%E6%9C%9B

  • 预期薪资:有礼貌的先问下HR公司的薪资架构、福利是怎样的,然后再问下对应聘岗位的薪资预算范围。

九,还有什么要问的

  • 贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?

  • 贵公司的晋升机制是什么样的?之后几轮面试什么形式

  • 使用的主要语言有?测试开发部门是干什么的?  机遇和挑战

  • 作为公司的管理层,您认为优秀的员工应该具备哪些特质呢?

  • “如果有幸能被贵公司录用的话,请问有没有什么 需要我在入职前,提前学习和准备的。”

十 ,一些小问题

  • 业余爱好:和别人约着一起跑步,(体现团队意识)

  • 跳槽看法:适当的跳槽可以促进人才的交流,应该支持,频繁的跳槽应该拒绝

  • 朋友看法: 是一个值得信赖的人,因为我一旦答应别人什么事,就一定会做到,如果做不到,就不会轻易许诺

  • 发生的大事:非洲发生蝗灾向亚洲进军,南极迎来最热1月,澳大利亚发生火灾大量植被被破坏,美国爆发新型流感病毒

  • 如果没有被录取:敢于面对不气馁,善于反思吸取经验教训,克服失败阴影,再接再厉

  • 难以和同事相处:首先从自身找原因,其次和同事沟通,同时顾全大局,努力做好本职工作 

  • 工作失误给公司造成损失:1想方设法去弥补2责任问题3总结吸取教训 

  • 如果录用了你,你会怎么开始工作:听从指示,了解情况,制定计划,开展工作

  • 希望和那种上级合作:我是一个容易相处的人,无论哪种都可以,我相信公司选择的上级一定是xxx

  •                                    如果可以的话,作为一个新人,我应该第一时间去适应环境,而不是让环境适应自己  

十一,公司了解

  • 首先,我花费了很多时间考虑考虑各种职业的可能性,最后我认为这项工作最适合我,原因是xxx,

  • 这是一家有爱心的公司,捐款xxx设立了专项基金  维护员工合法权益,经常展开职工关怀活动  企业核心价值观:xxx

  • 万金油:我了解到贵公司非常注重公司的发展和建设,各方面的管理也非常完善,xxx人际关系比较简单,团队氛围好,公司

  • 前景很好,福利待遇好,我向往这样的公司已久了+公司特色 

东方财富:

           企业核心价值观:用户第一、正直敬业、合作创新  

          捐款500万驰援武汉并设立了专项基金

         国内领先的互联网金融服务平台综合运营商 

作业帮:

              让一些教育资源不那么优秀的省份学生能够接触到一线教学资源

              模式:搜题,直播课,1对1       用户量、活跃人数、搜索指数远超第二名

              涵盖了习题搜索、名师直播、实时答疑、同步练习和学习沟通等教学测练评的各个环节

              题目的一题多解,还有知识点讲解,相似题练习

shopee:

            2015年成立于新加坡,东亚平台最大的跨境电商,覆盖新加坡、马来西亚、菲律宾、台湾、印度尼西亚、泰国及越南七大

市场,在越南和印尼领先lazada,拥有完善与充满潜力的学习与发展机会,时效快,主营为生活类产品,多元包容、信任透明的

文化氛围   

十二,面试注意点

不要说还行/不/不会/立刻入职等词           (价值观、稳定性、性价比)企业的氛围、文化、价值观等

自信不自大+穿着+企业文化+职业规划+应变能力+目光接触+保持微笑+真诚+结束:感谢你给的机会和指导

面试结束时,表达谢意,表明通过沟通,对这个职位更加了解,相信自己能够胜任   好的,辛苦您了

面试结束了,3轮面试下来觉得xx挺棒的,不管最终结果如何,都谢谢你的通知相伴啥的,如果有后续还请继续通知啥的

十三,签约前需了解

签offer前一定要了解,如果不是特别有把握,终面结束请别问这些,终面后通知结果时会谈

工资=基本工资+效绩+补贴(餐补,交通补)+加班费    五险一金,试用期,外勤+带薪年假

 


前端 


一,为什么前端选择vue.js框架(和其他框架的对比)

  • 定义:渐进式JavaScript框架

  • 适应:web端开发,移动端开发,跨平台应用开发

  • 优点:遵循MVVM模式,体积小,运输效率高,实现了双向绑定,简化DOM操作

  • 借鉴:angular的模板和数据绑定,react的组件化和虚拟DOM技术 

 二、Cookie&Session&localstorage

特性 Cookie sessionStorage localstorage
存储数据大小

不能超过4k

                  5M,或者更大
生命周期

关闭窗口失效

生存周期内一直有效

页面会话期间

持久存储数据

除非主动删除数据

数据/服务器

交互方式

数据会自动的传递到服务器

也可逆向,有带宽浪费

仅在本地保存

不发给服务器,无浪费

仅在本地保存

不发给服务器,无浪费

作用域

同源同窗口共享

同页面同窗口 同源同窗口共享
共同点                                                         都保存在浏览器端

 三、Cookie和Session别

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上

(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie

(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

(5)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie

 

 


设计模式


一,常见的设计模式

  • 定义:最佳的实践,软件开发过程中面临问题所采用/被反复使用/多数人知晓/经过分类编目的、代码设计经验的总结

  • 单例模式:一个类仅有一个实例   (会手写代码,Java工程师)

  • 策略模式:一个类中经常改变的部分写成一个接口,然后在类中包含这个对象的实例

  • 装饰模式:允许向一个现有的对象添加新的功能,同时又不改变其结构

  • 观察者模式对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都改变

  • 简单工厂模式:定义一个用于创建对象的接口或抽象类,让子类决定实例化哪一个类

 

 


Linux相关知识


一,Linux常用的指令

  1. 查找文件: find filename.txt

  2. 启动文件:net start filename.txt

  3. 判断文件类型: file [-v/-z] 文件名

  4. 查看进程是否运行: ps –ef|grep tomcat

  5. (强制)终止线程: kill 【-9】 19979

  6. 显示文件和目录,包括隐藏/所有: ls -al

  7. 显示当前工作目录:pwd

  8. 创建目录: mkdir -p newfolder (确保存在)

  9. 删除目录: rmdir deleteEmptyFolder

  10. 修改用户密码:passwd   

二,Linux chomd命令详解

  1. 定义:改变一个或多个文件的存取模式

  2. 语法:chomd  [who]  [opt]  [mode]  文件名/目录名  chomd  g+rw  a.txt

  3. [who]:u/g/o/a  用户/组/其它/所有

  4. [opt]:r/w/x/s  读/写/执行/设置ID号

  5. [mode]:+/-/=   增加/删除/重设     实例 

  6. 其它:chomd  [mode]  文件名   即664--110  110  100  自己读写不执行  同组读写不执行  其它组只读 drwxr-xr--  754

三,一些shell命令1

  1. 编辑文件:vi 文件名

  2. 新建空文件:touch 文件名

  3. 移动文件:mv a文件 b目录

  4. 重命名文件:mv a文件 b文件

  5. 删除文件及子文件: rm -rf deleteFile

  6. 只读查看文本内容:cat  -n  /home/profile |  more 

  7. 全屏查看文本内容:more  /etc/profile

  8. 分屏查看文本内容:less  a.txt

  9. 查看文件头/尾10行 :head/tail -n 10 example.txt

  10. 复制文件-同目录a复制给b:cp a文件 b文件

  11. 复制文件包括其子文件到指定目录 : cp -r sourceFolder targetFolder 

四,一些shell命令2

  1. 返回根目录:cd

  2. f返回上级目录:cd ../

  3. 列出目录:ls -d (directory)

  4. 列出所有文件: ls -a (all)

  5. 清屏:clear

  6. 立即关机:shutdown -h now

  7. 1 分钟后关机:shutdown -h 1

  8. 立即重启:shutdown -r now

  9. 重启/关机/同步/注销:reboot/halt/sync/logout

  10. 来源

五,一些shell命令3

  1. 获取文本对应文本的行号:

    grep -n "xxx" a.txt | cut -d ":" -f 1

    sed -n -e '/xxx/=' a.txt

  2. 获取进程ID:ps -A |grep "cmdname"| awk '{print $1}'       pidof "cmdname"       pgrep "cmdname"

  3. 查看IP地址:ifconfig -a

  4. 查看路由表:netstat -rn  

  5. 远程登陆:telnet hostname 

  6. 查看磁盘io:top

  7. netstat-----显示网络状态    ping----检测主机    ifconnfig----显示或设置网络设备  telnet-----远程登陆

六,linux查看进程

  1. ps命令查找与进程相关的PID号:

  2. ps a 显示现行终端机下的所有程序,包括其他用户的程序。

  3. ps -A 显示所有程序。

  4. ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

  5. ps -e 此参数的效果和指定"A"参数相同。

  6. ps e 列出程序时,显示每个程序所使用的环境变量。

  7. ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

  8. ps -H 显示树状结构,表示程序间的相互关系。

  9. ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

  10. ps s 采用程序信号的格式显示程序状况。

  11. ps S 列出程序时,包括已中断的子程序资料。

  12. ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。

  13. ps u 以用户为主的格式来显示程序状况。

  14. ps x 显示所有程序,不以终端机来区分。 (常用:ps aux)

  15. ps aux | grep pr  查找,通过管道使用grep命令过滤查找特定进程

  16. kill -9 aa  杀死进程aa   (windows的任务管理器)

  17. 根据进程号查看端口号:netstat -nap | grep port   

  18. 手机查看进程:adb shell后在ps

七,硬链接&软链接 

  • 软链接:可以跨分区跨文件系统,链接次数增加,支持目录,写相对路径,不是同一个文件,可以对不存在的文件创建

  • 硬链接:.....是同一个文件   ln (-s)源文件 链接名    (加()s是软连接) 


MySQL相关知识


一,MySQL常见命令   

  • 查看当前所有数据库:     show database ;     

  • 打开指定数据库:            use  库名 ;

  • 查看当前库的所有表:     show tables from 库名 ;

  • 创建表:                          create  table 表名( 列名 列类型;,,)

  • 查看表结构:                   desc 表名;  

  • 查看服务器的版本:        select  version( ) ;  //未登录时mysql  --version/V   

  • 删除表:                          drop  table  表名

  • 注释:                             #注释文字   --注释文字   /*多行文字*/

二,事务ACID特性

  • 事务:用户定义的一个数据库操作序列

  • 持久性:事务一旦提交,对数据库的改变是永久的  

  • 原子性:事务中包括的所有操作要么都做,要么都不做

  • 隔离性:事务的执行不受其它事务干扰

  • 一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态(300水从a杯到b杯,取钱故障,你少300,别人未加)

三,主键&外键&索引

  主键 外键 索引 视图

定义:

唯一标识一条记录

不能重复,不为空,可修改

表的外键是另一表的主键

外键可以有重复的, 可以是空值

该字段没有重复值

但可以有一个空值

虚拟的表,不包含数据

只包含动态检索数据的查询  

作用:

用来保证数据完整性

用来和其他表建立联系用的

提高查询效率,降低更新效率

简化操作,隐藏细节,保护数据

个数:

主键只能有一个

一个表可以有多个外键

一个表可以有多个惟一索引

一般不更新

 

 

 

 

四、索引

  • 分类:普通索引,唯一索引,主键索引,组合索引,全文索引 

    • 唯一索引:在创建唯一索引时要不能给具有相同的索引值。

    • 主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。

    • 聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。

    • 普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。

    • 全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。 

  • 作用:相当于书的目录,以空间换时间,可以加快检索速度,表与表之间的连接,分组或子查询时可减少速度

  • 场景:分组或子查询,统计max(),关联字段如外键,频繁whiere查询可以有索引

    • 表的主键、外键必须有索引;

    • 数据量超过300的表应该有索引;

    • 经常与其他表进行连接的表,在连接字段上应该建立索引;

    • 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    • 索引应该建在选择性高的字段上

  • 注意:不滥用,不会有包含NULL的列,查询通常只用一个索引,like"%s%"不用索引

  • 缺点:空间占用,维护麻烦,跟新数据库不方便 

  • 哈希索引:更适合于等值查询,若键值对唯一,查找速度很快,一次即可,不唯一,则向后搜索

  • 哈希索引:不支持范围查询和排序,不支持多列联合索引的最左匹配规则,大量重复键值对的情况下效率低

五,乐观锁悲观锁&数据库锁机制

  • 目的:处理并发问题

  • 分类:排他锁、共享锁、更新锁(数据库系统角度)乐观锁,悲观锁(程序员角度)

  • 共享锁:S锁,也叫读锁,用于所有的只读数据操作,非独占,多个事务可封锁同一个共享页,读完即放;

  • 排它锁:X锁,也叫写锁,表示对数据进行写操作,独占,仅允许一个事务封锁此页;

  • 更新锁:可读不能加其它锁,初始化阶段用来锁定可能要被修改的资源--》升级x锁,避免使用共享锁造成的死锁现象

  • 乐观锁:每次去拿数据的时候都认为别人不会修改,不上锁,更新时判断,适合多读类型,开销大,浪费资源

  •                版本号机制(表明修改的次数)或CAS算法实现-并发少时提高效率,cpu开销大,不保证代码原子性

  • 悲观锁:每次使用资源都认为会被修改,操作取数据前先上锁,适合多写类型

  •            (共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)

六,SQL基本操作

  • 内连接:select  查询列表  from  表1  别名    【连接类型 left/right inner】    join  表2  别名   on   连接条件

  • 补充:【where  筛选条件】  【group  by  分组条件】  【having   筛选条件】  【order by  排序列表】

  • 最后:limit   【offset,】size;  要显示条目的起始索引(从0开始)  要显示的条目个数

  • 列记录改变

    • 插入:insert   into  表名  set  列名=值,列名=值,.....  /values(  )

    • 修改:update  表名  set  列=新值,列=新值,......where  筛选条件

    • 删除:delete  from  表名  where 筛选条件;----支持回滚      truncate   table  表名;//全删

  • 表改变

    • 创建:create   table  表名( 列名  列的类型【(长度)约束】 列名......);

    • 修改:alter  table  表名  add|drop|modify|change  column  列名  【列类型,约束】

    • 删除:drop  table/database  表名  if  exists  表名; show  tables;

  • 其它:not in / is  null/  like  % _  /avg/count/sum/max/min  / limit 1 2

  • 练习:

    • 表中10条一样数据删除9个 : delete * from table_name limit 9

    • 查询单科成绩前十:select * from student order by subject desc limit 10;

  • 创建唯一索引:create  unique   index  索引名  on   表名(列名1,列名2,。。。)

七,事务的并发问题&隔离级别: 

  • 脏读      不可重复读     幻读                     事务的隔离级别           //解决并发问题

  •    y                  y                 y               read  uncommitted:读未提交

  •    y                  y                 x               read  committed:读已提交,不可重复读   Oracle  24

  •    y                  x                 x               repeated  read:可重复读    mysql  1234

  •    x                  x                 x               serializable:串行化

八,数据库类型区别

  • char:定长字符串

  • vchar:可变长度字符串

  • union:对连个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

  • union all:对两个结果集进行并集操作,包括重复行,不进行排序。

  • sum():求和用累加  , 下用于求行个数

  • Count(*):包括了所有的列,在统计结果的时候不会忽略列值为null

  • Count(列名)只包括列名那一项,会忽略列值为空的计数

九,数据库优化

  • 调整数据结构的设计,对于经常访问的数据库表建立索引

  • 调整服务器内存分配

  • 调整硬盘I/O,使硬盘之间I/O负载均衡

十,剩余

  • 语法顺序:select[distinct]  from  join  on  where  group by  having   union  order  by  llimit 

  • 执行顺序:from  on  join  where  group  by  having  select  distinct  union  order  by

  • MySQL密码丢失  聚类查询    redis  mybaits优点   数据库连接泄露  相关知识  等值连接与自然连接  外连接

十一,平时练习题

1. select *  from employees  where  hire_date =(select max(hire_date) from employees) //最后有无;无所谓

2. select distinct * from employees order by hire_date desc limit 2,1; //从m+1条开始,取n个数据 序号从1开始

3. select s.* ,d.dept_no  from salaries as s join dept_manager as d on s.emp_no=d.emp_no 
   where s.to_date = '9999-01-01'  and  d.to_date='9999-01-01';  //as可省join另一个表on条件   或
   and s.to_date = '9999-01-01'  and  d.to_date='9999-01-01';  //注两个表都要日期为9999

4. select last_name,first_name,dept_no from employees,dept_emp where dept_emp.emp_no = employees.emp_no;
   select last_name,first_name,dept_no from employees left join dept_emp on
   employees.emp_no = dept_emp.emp_no  where dept_emp.dept_no<>'';   //''前-不等于  或者无where用内连接

5.  select sex ,count(*)  as 人数  from student group by sex  //count(*)计数 也可具体 count(sex)
    select count(*) from student where sex='男' , emp_no % 2 = 1  //为奇数
    select count(*) from student where sex='女'

6.  select a.* from( select emp_no,count(*) as t from salaries group by emp_no) as a where t>15 //用()
    select emp_no,count(*) as t from salaries group by emp_no having t>15  //若用where筛选,则无效 *==emp_no
   
7.  获取所有非manager的员工emp_no
    select emp_no from employees where emp_no not in (select emp_no from dept_manager) //not in 列不在列
    select e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no where 
    d.emp_no is null;  //左外连接两个表,主表在左,选从表为null的,即非manager的  is null
    select employees.emp_no from salaries except select dept_manager.emp_no from dept_manager; //except union SQL支持集合运算

8.  select d.dept_no,d.emp_no,max(s.salary) from dept_emp d left join  salaries s on d.emp_no = s.emp_no 
    and d.to_date = s.to_date where d.to_date = '9999-01-01' group by d.dept_no //max(s.salary)的应用
 
9.  按照title进行分组,每组个数大于等于2,给出title以及对应的数目t,注意对于重复的emp_no进行忽略
    select title, count(distinct emp_no) as t from titles group by title having t >= 2; //注意count内部
    //没有sum()可以count(id) as sum 此外起别名,则调用时最好都d.emp_id

10. 对员工按薪水排名,薪水同按emp_no升序排列,并开始一列rank,表排名
    select  a.emp_no ,a.salary, count(distinct b.salary) from salaries as a,salaries as b where a.to_date =
   '9999-01-01' and b.to_date ='9999-01-01' and a.salary<= b.salary group by a.emp_no order by a.salary desc,a.emp_no asc;

总结,a.别少,单词别写错,别写成英文, 判断a.salary<=b.salary,order by后的内容用,且注意顺序,count(b.salary)是b不是a 

相关知识     等值连接与自然连接     外连接  等值连接==内连接(常用)用外连接一般生成表有null  asc升序/顺序

exist==in  in效率高,返回列  EXISTS相关子查询,返回true/false 通过子查询的判定对父要求的改变,子内可用父 f.sno=z.sno

 

 


数据结构


一,常见排序算法

排序算法---能手撕

测试工程师常见面试题_第2张图片

二,数组和链表的区别,以及用途?

  • 数组:随机访问性强,查找速度快,插入和删除效率低,可能浪费内存,必须有足够的连续内存空间,大小固定,不能动态拓展

  • 链表:插入删除速度快,内存利用率高,不会浪费内存,大小没有固定,拓展很灵活。,不能随机查找,查找效率低

  • 数组应用场景:数据比较少,经常做的运算是按序号访问数据元素

  • 链表应用场景:对线性表的长度或者规模难以估计;频繁做插入删除操作;构建动态性比较强的线性表。

三,常见的数据结构及优缺点

  • 数组:略      大小固定,当数据个数不确定时,浪费内存空间

  • 链表:略       

  • 队列:提供先进先出的方法,存取其它项慢

  • 栈:提供先进后出的方法,存取其它项慢

  • 树:查找,插入,删除都快(如果数保持平衡),删除算法复杂

  • 图:对现实世界建模,算法复杂且内存占用大

  • 串:一种特殊的线性表,有空串,空格串 

四,B树-平衡多路查找树/B-树

  1. 树中每个结点最多含有m个孩子(m>=2);

  2. 除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子;

  3. 若根结点不是叶子结点,则至少有2个孩子

  4. 所有叶子结点都出现在同一层,叶子节点只有关键字,指向孩子的指针为空

  5. B+树是在B树的基础上改造,它的数据都在叶子节点,同时,叶子节点之间还加了指针形成链表,知道首尾可查出所有数据

  6. B+树快的原因:层数少,只在叶子节点存数据的特点就能极大的保证磁盘IO次数少,进而说,效率高

五,HashMap怎样解决散列(hash)冲突?

链地址法开放寻址法,线性探测再散列

数组A[0..5, 0..6]的每个元素占5个字节,按行优先次序存储,则元素A[5, 5]相对A[0,0]的偏移量是( 200=7*5*4+5*4  )

 


操作系统


一,进程&线程

  • 进程:彼此间独立,每一进程都拥有多个线程,至少一个,资源分配的最小单位,资源分配和调度的独立单位,有独立空间

  • 线程:运行在进程空间内,同一进程所产生的线程共享一内存空间,.线程是程序执行的最小单位,切换上下文CPU快

  • 备注:只有一个CPU,一次10毫秒,只运行一个进程,时间片轮转进程调度算法,并发,多个CPU,总线程数>CPU 并发

  • 多线程:一个进程中同时有多个执行路径正在执行

  • 高并发:指通过设计保证系统能够同时并行处理很多请求

二,进程&程序 

  • 程序:永存的,静态的,和进程不一一对应,没有状态,至少有一个进程

  • 进程:暂时的,是程序的一次执行过程,动态的,具有并发性,有状态(具有生命周期,执行需要CPU,不是指令集合)

三,进程的状态 

  1. 创建态:操作系统为新进程分配资源,创建PCB

  2. 终止态:,,,,数组越界,整数/0,I/O故障,非法指令(结束,遇到不可修复的错误)

  3. 就绪态:获得除CPU以外的所有资源(其它)

  4. 运行态:得到CPU在CPU上执行(CPU,其它)

  5. 阻塞态:因等待一些事件的完成暂时不能运行(全无)

  6. 创建态-------->就绪态<------时间片到,CPU被抢占/进程调度------->运行态------>终止态

  7.                                             <---I/O完成---阻塞态<------I/O请求-------

四,通信&线程的同步互斥

  • 进程同步的方法:临界区,互斥量,信号量,事件 

  • 进程通信 :信号通信/信号量通信PV/消息队列通信/共享内存通信/套接字通信/管道通信-单向有情缘

  • 线程通信的方法:通过synchronized关键字,while轮询方式,锁机制,管道通信方式

  • 同步:同一时刻,只允许一个线程对临界资源进行操作

  • 互斥:在互斥的基础上,实现进程之间的有序访问,A写,B不能读,B写完,A才能读

  • 管道通信:只允许有血缘关系的进程之间进行通信,单向,面向字节流,保证数据一致性,半双工

五,进程调度算法

  • 先来先服务算法(7)                   等待时间最长    有利于长作业    用于批处理系统

  • 时间片轮转调度(分时系统)      紧迫任务响应慢

  • 短作业优先调度算法                     导致长作业陷入饥饿,不能保证紧迫性作业被及时处理

  • 最短剩余时间优先算法            

  • 高响应比优先调度算法           响应比 =(等待时间+要求服务时间)/ 要求服务时间   对短作用有利,增加系统开销

  • 优先级调度算法

  • 多级反馈队列调度算法

六,死锁

  • 定义:各进程互相等待对方手里的资源,导致各进程阻塞,无法向前

  • 条件:

    1. 互斥条件:对必须互斥使用的资源的争抢才会导致死锁

    2. 不剥夺条件:进程保持的资源只能主动释放不能强行剥夺

    3. 请求和保持条件:保持着某些资源不放的同时,请求别的资源

    4. 循环等待条件:存在进程的循环等待链,死锁有循环等待,反之不对

  • 解决:

    1. 将临界资源改造为可共享资源(如SPOOLing技术)   可行性不高 

    2. 申请的资源得不到满足时,立即释放所拥有的资源       实现复杂,可能导致饥饿

    3. 运行前分配好所需的资源,之后一直保持                     资源浪费,可能导致饥饿

    4. 给资源编号,必须按编号从小到大的顺序申请资源      不方便,资源浪费,编程麻烦

七,内存分配的算法 

  • 首次适应算法:从头满足要求即可

  • 最佳适应算法:满足要求且大小最小的空闲区

  • 最差适应算法:满足要求的最大空闲区,使碎片尽量小

  • 循环首次适应算法:从上一次选择的下一块寻找

八,中断和异常

  • 中断:中断是指来自CPU执行指令以外的事件发生后,处理机暂停正在运行的程序,转去执行处理该事件的程序的过程。

  • 异常:异常是指源自CPU执行指令内部的事件发生后,处理机暂停正在运行的程序,转去执行该事件的过程。

  • 区别:狭义的中断和异常的区别在于是否与正在执行的指令有关,中断可以被屏蔽,异常不能被屏蔽,出现应立即处理。 

 

 


计算机网络


 一,TCP和UDP的区别

  • TCP: 面向连接的可靠性传输( 无差错,不丢失,不重复,且按序到达)--办法:确认和超时重传机制,下二

  •            面向字节流1对1全双工,首部20字节,传输效率低,有流量控制(滑动窗口),拥塞控制(慢开始,快重传)

  • UDP:无连接不可靠传输(尽最大能力交付,不保证可靠交付)

  •            面向报文,支持1对1,1对多,多对多,首部8字节,传输效率高,没有拥塞控制,拥塞控制

测试工程师常见面试题_第3张图片

二,流量控制

  • 定义:防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理

  • 方法:滑动窗口---高效可靠的发送大量的数据

  • 过程:接收端发现缓冲区快满了,就将滑动窗口调为小值或0,发送方发送窗口探测,之后决定是否再次发送

三,拥塞控制

  • 定义:防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞

  • 丢包:定时器超时,收到三个重复的ACK

  • 方法:慢开始,快重传

  • 差异:丢包位置不同(流量控制-接收端,拥塞控制-路由器上),作用对象不同

四,http 和 https 有何区别?

  • http:简单快速灵活,无状态(对事务处理没有记忆能力,不知道客户端是什么状态),无连接,支持客户端服务器端模式

  •            超文本传输协议,运行在TCP之上,内容是未加密的,明文的,客户端/服务器端都无法验证对方的身份 ,80

  • https:HTTP的安全版,运行在建立在TCP之上的加密传输协议SSL之上,需要CA申请证书,费用高,端口号:443

五,常见的HTTP状态码

  • 200状态码:响应成功  

  • 301状态码:永久重定向

  • 302状态码:临时重定向,请求的文档被临时移动到别处

  • 400状态码:客户端语法错误

  • 401状态码:用户验证

  • 403状态码:拒绝/禁止执行

  • 404状态码:请求资源/页面不存在

  • 500状态码:服务器内部错误

  • 501状态码:未实现

  • 502状态码:网关错误

六,HTTP 

  • 版本:

    • HTTP/1.0:使用短连接,浏览器和服务器每进行一次HTTP操作建立一次连接,任务结束中断连接

    • HTTP/1.1:使用长连接,网页打开完成后客户端和服务器之间用于传输HTTP数据的 TCP连接不关闭,以后继续使用

    • HTTP/2.0:采用二进制格式,采用多路复用格式,头部压缩

  • 特点:支持客户/服务器模式,允许传输任意类型的数据对象,每次连接只处理一个请求,对于事务处理没有记忆能力,快速

  • 组成:(请求方法,URL,请求版本)请求行,请求头部,请求体

  • 刷新页面不需要重新建立SSL连接:TCP连接没有断开

  • 一个TCP连接可以对应多个HTTP请求

测试工程师常见面试题_第4张图片

七,get和 post区别

  • GET:从指定的资源请求数据

  • POST:向指定的资源提交要被处理的数据

  GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
缓存 能被缓存 不能缓存
编码方式 只能进行url编码 支持多种编码方式
是否保留在浏览历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
数据长度的限制 发送数据,GET 方法向 URL 添加数据,但URL的长度是受限制的。 无限制。
数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性 安全性较差,因为参数直接暴露在url中 因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。
传参方式 get参数通过url传递 post放在request body中。

八,从一个url地址到最终页面渲染完成

  • DNS解析:将域名地址解析为ip地址

    • 依次检查:浏览器DNS缓存,系统DNS缓存路由器DNS缓存,运营商DNS缓存

    • 递归查询:.->.com->google.com->www.google.com.-->出错 本地/根/顶级/二级/..域名服务器

  • TCP连接:TCP三次握手

  • 发送请求:客户端向服务器端发送HTTP请求报文 应用--》传输层TCP传输报文--》网络层查询MAC地址---》数据链路层

  • 接受响应:服务器端经过数据链路层→网络层→传输层→应用层,解析请求报文,发送HTTP响应报文

  • 渲染页面:

    • 浏览器解析HTML源码,然后创建一个DOM树

    • 浏览器解析CSS代码,然后创建一个CSSOM树

    • 遇到script标记,调用javascript解析器,处理script代码(绑定事件,修改dom树/cssom树)

    • 根据DOM树和CSSOM来构建一个渲染树

    • 根据渲染树来计算每个节点的几何信息(布局),将各个节点颜色绘制到屏幕(渲染) 上5不顺序,次数不固定

  • //断开连接,TCP四次挥手

九,TCP三次连接

 

测试工程师常见面试题_第5张图片

ACK确认位 SYN同步位 Seq序号

为什么不是两次:

在服务端对客户端的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果客户端并没有收到服务端的回应呢?此时,客户端仍认为连接未建立,服务端会对已建立的连接保存必要的资源,如果大量的这种情况,服务端会崩溃。

十,TCP四次挥手

 

测试工程师常见面试题_第6张图片

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

十一,私有IP地址范围 

  • A: 10.0.0.0~10.255.255.255 即10.0.0.0/8

  • B:172.16.0.0~172.31.255.255即172.16.0.0/12

  • C:192.168.0.0~192.168.255.255 即192.168.0.0/16

十二,HTTP跨域

  • 同源策略:浏览器安全策略,协议名http://,域名www.xxx.com,端口号11 必须完全一致 

  • 跨越:不同域名之间相互访问,违背同源策略就会产生跨域

  • 解决:

    • JSONP 

    • window.name

    • 降域 document.domain

    • 设置窗口片段标识符,监听读取location.hash

    • 跨域资源共享(CORS)

    • WebSocket协议跨域 

十三,基础知识

服务端有很多服务,关于 http、ftp 等等,怎么知道你发的是 http 请求,我要响应的是 http 请求(端口)

TCP的11种状态

视频聊天所用协议:1,RTP/RTCP/RTSP/SIP/SDP

2,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) 

http rest

四层:链路层,网络层,传输层,应用层

在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层

网络层:

  • ip协议网络层协议,提供ip路由功能

  • ICMP:网际控制报文协议,TCP/IP协议的子协议,用于在IP主机、路由器之间传递控制消息

  • ARP:地址解析协议,将ip地址转换为mac地址 请求--广播 应答--单播

  • RARP:逆地址解析协议,将Mac地址转换为ip地址

  • DHCP :动态主机配置协议

  • BGP :边界网关协议 ,域间路由协议

  • RIP :距离-向量协议,域内路由协议

  • OSPF:链路状态协议,域内路由协议

传输层:

  • TCP:传输控制协议

  • UDP :用户数据报协议

应用层:

  • DNS:域名解析协议

  • FTP文件传输协议,端口号20/21

  • HTTP:超文本传输协议

  • SMTP:电子邮件协议

 

  1. 私有IP:10. 172.16 192.16

  2. 广播域/冲突域:路由器-都可,集线器/中继器-都不能,交换机/网桥-只能隔离冲突域

  3. 信道复用技术 :TDM/CDM/FDM/WDM 时/码/频/波分复用

  • IP地址:200.23.16.0/23​

  • 网络号:IP地址&子网掩码

  • 子网掩码:23个1 即11111111.11111111.11111110.00000000 255.255.254.0

 IP提供不可靠的数据报传送服务

数据传输过程中,差错主要是由通信过程中的噪声引起的 

TCP的服务器程序必须先于其客户程序运行

向服务器请求服务只需传送请求方法和路径。请求方法:GET、HEAD、POST。

IPV4  单播/广播/组播  IPV6  任播

在局域网模型中,数据链路层分为 逻辑链路控制子层LLC和媒体访问控制子层MAC

IPv6的128位地址通常写成8组,每组由四个十六进制数组成

 

 


智力题


一,5只猫 五分钟捉5只老鼠 请问100分钟捉100只老鼠需要多少只猫?

答案:5只

二,圆桌,两个人,轮流放硬币,不能重叠,半径为1,某一方不能放下去,则为输。问先手赢 后手赢

答案:先手赢,圆桌对称,先手先放,后手都可以找对称位置,除了圆心

三,3升的杯子一个,5升的杯子一个,杯子不规则形状 问怎么得到4升的水 水无限多

答案:略

四,晚上有四个人过桥,一次只能过两个人,但是只有一只手电筒,四个人过桥时间分别是1,2,5,8,求最短过桥时间

答案:甲乙,甲回,丙丁,乙回,甲乙,15分钟

五,有十张扑克牌,每次可以只出一张,也可以只出两张,要出完有多少种出法

答案:89 F(9)=N F(8)=P F(10)=F(8)+F(9) F(1)=1 F(2)=2

六,井盖为什么是圆的

答案:用料少,受压均匀,成本低

七,两个盲人各买了一白一黑两双袜子,不小心弄混了,问他们自己怎么分成刚好每人一白一黑

答案:袜子是连在一起的

八, 烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定15分钟?

答案:烧两根,一根点两头,一根点一头,烧完,剩下的把另一投点了,烧完,看重合点

九,海盗分金,五人,过半同意,否则喂鱼,问1方案?

答案:45,5反对,4喂鱼,所3(100,0,0),故2(98,0,1,1),故1(97,0,1,2,0)

十,岔路口,通往1,2,两人,一人必说谎,一人永真话,怎么去1

答案:问一人,另一人会回答那条路去1,回答答案必假

十一,果冻,有黄色、绿色、红色三种,闭眼抓同种颜色两个,抓取多少个,可确定有两个同色果冻?

答案:根据抽屉原理,4个

十二,下水道为什么是圆的

答案:方便人员进出,井盖不容易掉落,不易如棱角磨损节约材料,保护车辆 和行人的安全

十三,一共100个球,两人轮流拿,每人每次最多拿5个,最后一个拿的人赢;如果我先拿,怎么拿一定会赢?

答案:每次拿的球总数控制为6;第一次拿4个;

十四,有120g面粉,现有一个天平和一个2g的砝码以及一个7g的砝码,最少称几次可以将面粉分为70g与50g

答案:4次,第一次120g=111g+9g  第二次111g=93g+18g  第三次93g=57g+36g  第四次50g=57g-7g  70g=7g+36g+18g+9g

十五,扔鸡蛋不碎问题(腾讯校招面试题)?

答案:14次

十六,智力题:一千瓶中有一瓶毒药 十只小白鼠找出这瓶毒药

答案:2^10=1024,小白鼠编号1-10,瓶子编号1-1000,把瓶子的编号转变为二进制数,第几位1,就给第几个小白鼠喝

 

 


C++ 


一,基础知识入门

  • 定义:字符型、宽字符型、整型、浮点型、双浮点型、布尔型等+自定义的数据类型

  • 面向对象,高效,简洁,快速,可移植,区分大小写

  • 注释://  ,/*  */      

  • 换行:cout<<"aaa\n"<<" aa "<

  • 常量:#define  PI  3.14  #const  double  PI=3.14 

  • 数组:int a[5][2]={{1},{2,3}}  memset(a,0,sizeof(a));  数组个数=sizeof(a)/sizeof(int);  strlen(a);

  • 指针:变量,值为另一个变量的地址   int  *ptr,a[122]; ptr=&a;*p===a[0]   上连续内存空间

  •            int *p=new int[12]; p[1]=1234;   /   int  *ptr;  ptr=(int *)1234;   /delete ptr;   /delete  [ ]p;

  • 函数:int/bool/void...  fun(int a,int b){  return  ....  }  //main()后定义main()前需声明

  • 整除\:全整即整,有小即小

  • 取余%:前后必须全为整,求后2位a%100  

  • 字节:int/short/long/long long/char/bool/         4/2/4/8

  • 字符串:以'\0'结尾,+拼接,char a[4]="djs" 字符数组储存  a.size()/length() //求字符串长

  • 结构体:typedef struct ABC{string  str; int chengji; char ch;}b,c[101];  ABC  a={"dkfj",0.23,'a'};  

  • 三大特性:封装,继承,多态

  • 固定窗口:cin.get( );  system("pause");   

  • 转义字符:\n换行  \a响铃  \t水平制表符  \b退格   \\反斜杠   \?问号  \' 单引号  \"双引号

  • 万能头文件:#include using namespce std;         

  • 强制类型转换:double  b,c;  a=(int)b+(int)c; 

  • 数组元素初始化0:memset(next, 0, sizeof(next));  可以声明的同时定义

  • 运算符优先级:算术运算符>关系运算符>&&>||>赋值运算符

二,错误总结

  • “;”不是英文的

  • 返回值,true,false首字母小写

  • 注意细节:>  还是  >=

  • if(!a){  }  //如果a不存在,则如何如何

  • 类型:3.12334f  浮点型    8.34e/E-3(8.34*0.001,小数点左移3位)   

  • 大小:bool

三,进制问题

  • 二进制B   八进制O   十进制D   十六进制Ox/OX(A-F-10-15)  
  • ASSCI:A-Z 65-90 a-z97-122   0-9 48-57  “ ”32  “!”33
  • cout<
  • cout<
  • cout<

四,位运算符

  • &      1,1->1     1,0->0     0,0->0    1真
  • |       1,1->1     1,0->1     0,0->0
  • ^      1,1->0     1,0->1     0,0->0
  • ~      1变成0,0变成1
  • <<    左移指定位数,缺位补0   b>>=1
  • >>    右移指定位数,缺位补0

五,c函数

  • strcpy(s1, s2);复制字符串 s2 到字符串 s1                  

  • strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾 

  • strlen(s1);返回字符串 s1 的长度 

  • strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1s2 则返回值大于 0 

  • strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置 

  • strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置 

  • getline(a,b);//读取一行数据

  • getchar(s);//从标准输入读取一个字符(包括空格和换行"\n")

  • memcpy(b,a,sizeof(a))//数组a全部复制到数组b

  • memset( ticket, 0, sizeof(ticket) ); //对ticket数组清零,初始化赋值0

六,STL容器

  • vector,deque,list,map,queue,stack:stack t  

七,虚函数和xxx函数

  • 定义:拥有Virtual 关键字的函数(类的成员函数前+virtual),作用-实现动态绑定

  • 重载:在同一作用域,函数名相同参数不同;返回值可以不同。

  • 重写(覆盖):

    • 不同作用域(基类和派生类);函数名相同;参数列表相同;返回值相同(协变除外)。

    • 基类中成员函数必须有virtual关键字;访问修饰符可以不同。

  • 重定义(隐藏):不同作用域;函数名相同,在基类和父类中只要不构成重写就是重定义

  • 多态:引用父类的对象,调用子类重写的函数

    • 定义:实现多态所必须,父类类型的指针指向子类的实例,执行的时候会执行之类中定义的函数。

 八,深拷贝&浅拷贝&动态内存分配

  • 动态内存分配:程序执行的过程中动态地分配或者回收存储空间的分配内存的方法

  • 浅拷贝:增加了一个指针,指向原来已经存在的内存(多个对象指向一个空间,释放后,导致其它所指空间被释放)

  • 深拷贝:增加了一个指针,并新开辟了一块空间让指针指向这块新开辟的空间 

九,申请&释放

  • C++:new申请  delete释放     面向对象   C中struct进行扩展,作用同class-private,默认访问修饰符public

  • C:malloc申请    free释放       面向过程   没有C++中的类  不支持函数重载  没有引用  默认内链接(上外)

十,指针和引用的区别

  • 指针可以有多级,但是引用只有一级

  • 引用初始化以后不能被改变,指针可以改变所指的对象。 

  • sizeof引用得到的是指向变量的大小,而指针得到的是本身的大小

  • 如果返回动态分配的对象或内存,必须使用指针,否则可能引起内存泄漏

  • 引用不可以为空必须被初始化,不存在指向空值的引用,指针可不初始化,可为空

十一,static 作用

  • static声明的静态变量,只初始化一次(程序开始时,默认初始化为0),调用过程中值不变

  • static声明的,作用域范围有限制,模块内声明则只能在模块内访问,函数内同

十三,僵尸进程&孤儿进程

  • 僵尸进程:一个子进程在其父进程没有调用wait()waitpid()的情况下退出,这个子进程就是僵尸进程

  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程

  • 栈溢出:不断的调用方法压栈,最终超出了栈允许的栈深度,就会发生栈溢出,比如递归操作没有终止,死循环。

  • 栈内存溢出:内存这个大箱子在也装不下栈这个小箱子了。

十四,C++内存泄漏

  • 在类的构造函数和析构函数中没有调用匹配的delete和new,构造函数--类名同,不返回值  如fu(){}

  • 没有将基类的析构函数定义为虚函数

  • 缺少重载赋值运算符

  • 缺少拷贝构造函数

  • 没有正确地清除嵌套的对象指针

  • 避免:string而不是char*,良好的编码习惯,避免使用原始指针,记得用delete释放内存  

求最大公约数   虚函数和纯虚函数区别   new和malloc的区别   C++中的多态是怎么实现的  理解多态

  

 

你可能感兴趣的:(春招,测试)