美文网首页
FOR JOB | 打开测试工程师的门

FOR JOB | 打开测试工程师的门

作者: 三金姐姐 | 来源:发表于2020-03-20 23:53 被阅读0次

    ©一颗斯特拉

    有人喜欢创造世界,他们做了开发工程师。
    有人喜欢挑毛病,所以他们做了测试工程师。

    开始准备一个公司「测试开发工程师」岗位的面试,在此记录下准备过程。


    part 1 学习一览

    据牛客网资料,一般来说,在测试岗位的面试中,算法与数据结构语言基础这两个占比最大,其次是软件测试用例(包含测试基础知识),这三者占到面试的一半左右。之后紧跟的是计算机网络数据库

    01测试理论
    知识点 内容
    理论学习 黑白盒测试与测试方法、测试流程、功能性测试、非功能性测试(安全、性能、兼容三个方面)
    测试用例的编写 excel、思维导图来写测试用例
    分层测试 页面测试、接口测试、单元测试
    02专业基础
    知识点 内容
    编程 c++(多态)、python3(深拷贝与浅拷贝)
    数据结构 链表:反转、环相关问题、删除中间元素
    树:遍历
    字符串:反转、文本的规范化、关键字查找及过滤
    算法 算法复杂度(时间、空间)、动态规划、常见排序算法、递归与非递归、深度优先与广度优先
    linux 常用的查询端口号,终止进程之类的指令
    sql 概念:数据库范式、主键与外键、内联接、视图(什么是视图、如何使用、有什么用、注意事项)、各种常用函数
    操作:如何安装数据库、表的创建,删除和更新、数据的插入,删除和更新、子查询(一般子查询、标量子查询、关联子查询)
    03计算机网络
    知识点 内容
    计算机网络体系结构
    操作系统 深入了解操作系统、产品平台(iOS或安卓等)的特性
    TCP协议
    UDP协议
    HTTP协议
    TCP/HTTP原理、HTTPS与HTTP区别、TCP与UDP的区别、常见状态码
    Socket
    其他知识 在浏览器中输入url地址、IP地址、ICMP协议、Ping的过程、路由器与交换机的区别
    04操作系统
    知识点 内容
    操作系统 深入了解操作系统、产品平台(iOS或安卓等)的特性
    05自动化测试
    知识点 内容
    UI自动化测试
    接口自动化测试 深入了解操作系统、产品平台(iOS或安卓等)的特性

    part 2 课程笔记

    课程1:5天软件测试从入门到精通

    B站:https://b23.tv/av20436259/p1

    01测试前景和重要性

    【课堂笔记】
    1.目前国内软件工程师的数量远远超过软件测试师的数量,而在微软,这两者数量比是1:1。所以未来,互联网行业对软件测试师的需求会大增。

    2.bug的经济损失:
    软件bug对我们的生活,工作都会带来毁灭性的破坏。据悉,每年的软件bug会让整个市场经济带来近600亿美元的损失。

    3.成立软件测试部门的原因:

    • 软件测试能提前发现软件存在的缺陷
    • 社会分工要求软件测试越来越精细
    • 专人负责,责任到位

    4.为什么开发不能做测试
    (1)思维定式
    人都是有局限性的,如果交付使用了,才发现问题,那么会存在退款的风险,影响公司的声誉和生存的空间、时间。
    (2)测试力度
    由于开发把软件比喻为自己的孩子,自然对自己的孩子动起手来,要受到感情影响,力度不够。
    (3)关注度
    开发若既做开发又做测试,他的有效时间很难又来专一的解决问题,自然软件的质量就不能得到保证。

    02硬件系统

    【课堂笔记】
    1.一个完整的计算机系统,是由硬件系统和软件系统两大部分组成的。
    计算机的硬件主要分为主机和外设两部分,都是指那些构成计算机系统的物理实体,它们主要由各种各样的电子器件和机电装置组成。


    计算机硬件系统的设计

    2.内存
    room只读存储器、ram随机存储器、断电数据会消失。

    3.外存
    硬盘(如C盘是电脑硬盘主分区之一)、软盘ab(存储的数据非常小)、光盘。

    4.输入设备
    如键盘、鼠标。

    5.输出设备
    如屏幕。

    03软件系统

    【课堂笔记】
    1.计算机系统分类:
    ①硬件系统
    ②软件系统
    (1)系统软件:

    • 桌面操作系统:Windows 用户群体大;macOS 开发者使用较多、Linux 软件较少)
    • 服务器操作系统:Linux 安全、稳定、免费;Windows Sever 付费、占有率低
    • 嵌入式操作系统:Linux 运行稳定、文件很小,一般是使用在机顶盒、电话、程控交换机、手机、PDA
    • 移动设备操作系统:iOS ;Android(基于Linux)

    (2)应用软件:qq、迅雷、游戏、ppt…

    04bs架构和cs架构

    【课堂笔记】
    1.什么是B/S架构:
    Browser-Server:浏览器和服务器(供所有电脑访问数据的那个电脑,提供服务的)架构。从浏览器里打开的网页都叫B/S架构(比如 百度、淘宝、微博等网站)。
    特点:服务器端更新了,那么用户端就要更新。

    2.什么是C/S架构:
    Client-Server:客户机和服务器结构。这种结构与B/S最显著的区别是需要安装客户端,通过客户端程序来访问应用系统。所以更新时,既要更新服务端,也要更新客户端。

    3.B/S与C/S软件的区别:

    不同点 C/S B/S
    硬件环境 建立在局域网(局部专用网络)上,小范围的网络环境(只给装了客户端的用户提供服务,相对于B/S架构来说),局域网之间再通过专门服务器提供和数据交换服务 建立在广域网上,不需要专门的网络硬件环境
    安全要求 一般面向相对固定的用户群(如QQ聊天的用户都是装了QQ的群体),对信息安全控制能力强,一般高度机密的信息系统采用 B/S建立在广域网上,对安全的控制能力弱,面向不可知的用户和用户群
    系统维护 C/S程序由于整体性,必须整体考查,升级困难,多建立在Windows上,表现方法有限(比如关闭一个网页,不能有动画的关闭过程),对程序员要求较高 B/S系统无缝升级,维护开销小,有更加丰富的表现形式,开发难度较低
    处理问题 C/S处理用户固定安全需求高,要求相同操作系统(不一定,比如QQ现在可以跨系统了) B/S面向所有用户,分散广,对系统要求小

    以后测试的时候,先要分析它的架构再测试。

    05二进制

    【课堂笔记】
    1.人类世界描述数据用的是十进制,计算机世界描述数据使用二进制。二进制是用0和1两个数码来表示的数,它的基数为2,进位规则是“逢二进一”。
    计算机内信息的表示形式是二进制数字编码,各种类型的信息(数字、文字、声音、图像,甚至是键盘按键、鼠标点击等等)必须转化成二进制数字编码的形式,才能在计算机中进行处理。

    2.为什么要使用二进制?
    计算机是由各种电子元器组成的,其中有最重要的基础电子原件就是半导体,也就是熟悉的二极管、三极管等。
    半导体通过逻辑电路传递和处理数字信号,它能按照一定的条件去控制信号的通过或不通过。逻辑电路通常只有两个状态,开关的接通与断开,这两种状态刚好可以用1表示开,0表示关

    3.常见存储单位
    位:计算机中表示信息的最小单位,用来表示一个二进制(0或1)的信息,用bit表示;
    字节:八位二进制信息为一个字节,字节是计算机处理信息的最小单位B表示。
    1B=8bit
    1kb=1024B
    1MB=1024kb
    1GB=1024MB(兆)
    1TB=1024GB
    1PB=1024TB
    注意:一般都是1024(2的十次方)为单位,不是一个整数。

    06语言分类

    【课堂笔记】
    1.计算机程序就是一组需要CPU处理的二进制数据。

    2.计算机编程语言

    语言 介绍
    机器语言 由0和1组成的二进制数
    汇编语言 为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进;
    用一些简介的英文字母,符号串来替代一个特定的指令的二进制串,更容易识别,运行效率最高
    高级语言 主要是相对汇编语言而言,它并不是某一种具体的语言(汇编是一种语言),而是包括了很多编程语言,比如C、C++、Python。
    大大的简化了中间过程

    不管哪种语言,最终都化为机器语言。

    07osi七层模型❤️

    【课堂笔记】

    1.OSI七层模型描述了网络活动的特点: OSI七层模型
    ①应用层:所有应用程序的网络在此展开

    ②表示层:表示数据形式,完成对传数据的转化(数据的加密解密)
    ③会话层:负责建立、维护、拆除会话(session缓存,把数据缓存到一个地方)
    ④传输层:负责建立一个可靠的端到端的链接
    ⑤网络层:负责路由寻址和广播
    ⑥数据链路层:负责将上层(上面5个层)数据封装成帧(计数单位)
    ⑦物理层:只负责传输0或1二进制比特(bit)流,不解释

    08IP地址分类

    【课堂笔记】
    1.TCP/IP协议
    定义:网络通讯协议
    ①应用层:应用程序之间相互沟通的层
    ②传输层:提供了数据传送,应用程序之间的通信服务
    ③网络互联层:负责提供基本的数据封包传送功能,让每一块数据包都能够达到目的的主机
    ④网络接口层:接收数据,并进行传输

    2.IP地址
    IP地址是指互联网协议地址。它是IP协议提供的一种统一的地址格式,它为互联网上的网络和每一台主机分配一个逻辑地址,用来屏蔽物理地址的差异。好比门牌号。
    ipv4地址:4段数字组成(地址已经枯竭)
    ipv6地址:6段数字组成(可以让每粒沙子都分配地址)
    地址分类:
    A类:第一组数组是1到126
    B类:第一组数组是128-191
    C类:第一组数组是192到223
    保留IP地址(只能用在局域网中)

    09dos基础操作

    【课堂笔记】
    暂无

    10服务器域名

    【课堂笔记】
    1.域名就是我们常见的网址,好比家里的门牌号,通过域名(门牌号)才能找到你的网站代码(家)。

    2.空间、服务器、云存储
    服务器比空间、云存储的安全性更高。
    虚拟空间:网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件。

    11测试课程介绍

    Note:这节课开始就讲测试啦
    【课堂笔记】
    1.课程涵盖Web自动化测试、移动端自动化测试、接口自动化及性能测试。

    2.企业项目实战
    从手工测试到自动化测试,每一阶段均加入企业实战项目,设计热门电商项目,移动社交项目,全程通过项目实践将知识融会贯通。

    3.全栈测试人才
    课程内容立足当前测试领域主流技术框架,覆盖每一层级,单元测试,接口测试,UI测试,以技术为驱动,不仅强调传统测试基础,更重视测试开发技能提升,打造复合型测试人才。

    12测试目的、定义、原则

    【课堂笔记】
    1.过程
    20世纪60年代 证明 表明软件能够工作
    20世纪70年代中期 检测 发现错误
    20世纪90年代 预防 管理质量

    2.什么是软件测试?
    在规定的条件下对程序进行操作,从而发现错误,对软件质量进行评估的一个过程。

    3.目的
    是想以最少的人力,物力和时间找出软件中潜在的各种错误与缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患以及带来的商业风险

    4.定义
    使用人工和自动手段来进行程序,目的在于检验是否满足了需求。

    5.原则
    ①所有的测试都应追溯到用户需求(视频网站,点击后最大化)
    ②应当把“尽早和不断地测试”作为座右铭
    ③测试工作应该由独立的专业的软件测试机构来完成
    ④Pareto原则,测试发现的错误中80%很可能起源于20%的(新)模块中
    ⑤设计测试用例(测什么、怎么测)时,应该考虑各种情况
    ⑥对测试出的错误结果一定要有一个确认的过程(描述缺陷报告)
    ⑦制定严格的测试计划
    ⑧完全测试是不可能的,测试需要终止(不影响用户使用的bug来不及改可放到下一次)
    ⑨注意回归测试(指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,二次测试)的关联性
    ①〇妥善保存一切测试过程文档

    13软件质量模型❤️

    【课堂笔记】
    1.软件产品质量模型(IOS/IEC9126)对产品质量模型对产品设计时需要考虑的地方进行了高度概括。
    六大特性:
    功能性
    可靠性:尽量不出问题;出了问题不影响主体功能;影响了主体功能要尽快恢复
    易用性:用户体验要好
    效率
    可维持性:更新
    可移植性:跨越不同系统平台

    14软件质量模型保证(SQA)

    【课堂笔记】
    1.定义:是一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确的
    目的:使软件过程对于管理人员来说是可见的。

    2.QC/QA
    QC:检验产品的质量,保证产品符合客户的需求,是产品质量检查者
    QA:审计过程的质量
    工作关系:QC进行质量控制,QA确保QA按照步骤执行

    15测试流程

    【课堂笔记】

    1. 测试流程
    16登录界面分析

    【课堂笔记】

    1.有了“航班预订系统需求说明书(包含登录模块和订单模块)”,据此写一份测试用例文档。 excel中写登录模块测试用例
    16web标准和五大浏览器

    【课堂笔记】
    1.web前端技术指的不是某一项技术,而是一系列技术的集合,主要包括:

    • html 结构标准:负责网页结构的搭建
    • css 样式标准/表现标准:负责网页的美化工作
    • js 行为标准:负责网页的行为动作

    2.行业词条
    Internet 互联网
    WWW 万维网(资料空间) world wide web万维网,简称www或3w
    URL 统一资源定位器(网络地址)
    HTTP 超文本传输协议
    W3C 万维网联盟(它是一个组织不是某一个公司)
    网站 多个网页的集合(首页、内容页、列表页)
    网页 网页文件就是后缀名以.html或者.htm结尾的文件。文字,图片,超链接
    浏览器 观看网页最终效果的平台

    3.五大浏览器厂商
    ie
    谷歌
    火狐
    苹果
    欧朋
    注:目前我国的浏览器都是在这五大浏览器的基础上研发的。

    17第一个html网页

    【课堂笔记】
    1.定义
    超文本标记语言

    2.HTML4.0.1和XHTML1.0(目前较常用的版本),后者是前者的严谨版。现在最新的为HTML5.0。

    3.html语法规定
    标签、标记符号 <>又称为尖括号
    html语言必须写在标签符号里
    html中的标签大多数都是成对出现
    关闭符号/

    课程2:老男孩带你快速入门测试!

    B站:https://b23.tv/av61405885/p4
    3星:虽然老师有的时候讲话逻辑有点不清,但是还是能理解的。授课方式比较有趣,充斥着表情包和段子,内容易懂。能让人在短时间内了解测试工作。

    04测试方法分类

    【课堂笔记】
    1.软件的生命周期
    制作-->测试-->运维

    2. 软件测试分类
    05黑白盒测试

    【课堂笔记】
    1.黑盒测试
    黑盒测试又称为功能测试,可以得到软件的实际使用效果报告。
    对软件的界面和功能进行测试。
    需要根据说明书、用户手册进行功能测试。
    要求多组数据,多次测试才能得到准确的报告。
    优点:

    • 不需要了解程序内部的代码和实现,比如,去检测一个空调是否好坏,不需要知道它里面都有什么,仅仅从外部的功能性检验。
    • 可以从用户角度出发,清晰判断和预测用户会用到哪些功能,可能遇见那些bug,并且进行及时的修复。
    • 还能验证产品的需求文档,检验研发的完成度。
    • 为下一步自动化检验打下基础。

    缺点:

    • 不涉及代码检测,测试覆盖度比较低。
    • 存在大多数UI测试,图形化测试,难以自动化,因为图形化的页面可能存在经常变化。

    2.白盒测试
    能打开黑盒子,看到里面的东西,并且对内部的程序代码进行检测。可以从里之外透彻地发现问题。安全度更高。
    优点:

    • 能够帮助代码的研发人员增加代码的测试覆盖率,提升代码的质量。
    • 有利于自动化的实现。

    缺点:

    • 程序代码中可能包含很多代码路径。白盒测试不可能测试所有代码。
    • 白盒测试出发点在于检验代码的运行逻辑,而非判断研发人员写的代码是否正确,是否漏掉了哪些检测功能点。
    • 检测大型系统,成本高。
    06软件开发模型

    【课程笔记】
    1.软件开发生命周期-瀑布型生命周期


    瀑布型生命周期

    2.软件开发模型


    软件开发模型
    07软件开发模型

    【课程笔记】
    1.测试新人如何写测试用例,以“手游”为例:


    测试用例

    2.安全性测试角度
    xss攻击
    sql注入
    暴力破解
    密码加密

    3.完整的测试用例
    测试用例设计角度:
    功能性
    安全性
    压测性
    兼容性
    “好的测试用例”一定是一个完整的集合,能够覆盖等价类,以及各种边界值才行

    08自动化测试

    【课程笔记】
    1.自动化指的是:有机器设备在没有人为干预或者较少干预的情况下,按照人为的设计要求,自动检测、处理、判断、操控,以实现预期目标的过程。

    2.测试500个账号
    人工做太累,让机器做。

    3.自动化测试本质是测试脚本开发,即写一段代码去检测。

    4.自动化测试
    优点:

    • 自动测试可以代替大量的重复性机械劳动,测试工程师可以有更多时间测试新的业务功能
    • 自动化测试可以大幅度提升回归测试(二次测试)的效率
    • 当有人类无法执行的任务时,自动化测试的作用更加强烈,例如24小时长时间的压力测试

    缺点:

    • 自动化测试无法解决所有的手动测试,大多数情况用于解决重复性高,机械化的事情
    • 自动化测试其实比较脆弱,比如,由于开发人员的一个手误,写错了一处代码,测试工程师并不知道,费了很大劲写的测试脚本,人家改一处代码,测试可能重写测试脚本,脚本维护成本较高
    • 自动化测试是按部就班地完成预先定义好的步骤,因此不存在“智能”,遇见问题没有处理能力
    • 只有人为的功能测试,才能够发现更多的软件缺陷,自动化测试优势在回归测试
    • 自动化测试脚本编写需要具备编程能力

    5.自动化测试场景

    • 软件研究时间长,功能变化少
    • 图形化测试
    • 移动端测试
    • 并发场景

    6.自动化测试阶段
    单元:单独的一个个体,系统的一部分(比如组成电视的不同电子板)
    单元测试:
    电子元件-->python代码中的函数
    电子版-->python代码的模块文件
    机器组装检验-->软件开发中的测试流程

    09测试工程师的核心技能(温馨提示:写简历或面试介绍的时候围绕这些去思考)

    【课程笔记】
    1.高级测试开发
    负责产品系统测试
    理解产品需求,进行不限于黑白盒的测试,性能,安全,移动端测试
    开发自动化测试平台
    熟悉mysql
    熟悉python/java /shell等语言
    熟悉接口、移动端测试工具

    2.测试开发
    核心:测试
    开发技能用于辅助测试工作

    3.测试工程师分为:
    业务功能测试
    测试开发

    4.想要成为优秀测试工程师需要的技能:
    风险分析:因此在指定测试计划的时候就得提前预估测试过程中可能存在的风险,以及发生风险时的一些应对策略。
    测试用例的设计:无论什么类型的测试环境,都能够设计出高质量的测试用例,能够高覆盖率的找出软件缺陷。
    者必须的深入理解北侧软件的功能和使用目标群体特性,还得熟悉软件具体的运行环境以及技术架构。
    快速学习能力
    缺陷分析能力
    沟通写作能力:需要了解产品的需求并不断和开发人员协调、沟通。

    5.移动端APP的测试用例


    移动端APP的测试用例
    10你了解性能测试吗

    【课程笔记】
    1.性能测试是确定软件在测试环境下的速度,稳定性与伸缩性等特征,指满足产品的性能目标以及资源利用率等。

    2.网站类应用和手机软件,都以终端用户感受的响应速度来描述性能好坏。
    非交互式应用,例如,取款机、燃机充值机不那么看速度而是看安全性。

    3.客户眼中的性能
    主观响应时间
    软件系统处理时间
    网络传输时间
    前端测试
    后端测试

    4.开发人员如何看待性能
    高效算法
    缓存机制
    进线程并发
    SQL优化
    库表分离
    资源压缩
    资源加密

    5.运维人员如何看待性能
    大量用户并发负载
    服务器健康状态
    磁盘容量
    内存消耗
    CPU消耗
    数据库调优
    内核调优

    6.测试人员如何看待性能
    性能瓶颈定位
    性能测试场景测试
    性能测试工具二次开发
    架构知识储备
    性能指标:
    并发用户数(在食堂的人)
    系统响应时间(进食堂到出食堂的时间)
    系统吞吐量(单位时间内,吃完饭离开食堂的学生)

    11移动端测试

    【课程笔记】
    1.手机网络环境切换:手机网络受限于地理环境如办公室的WIFI、地铁的弱网环境以及4G网络切换。
    手机移动端的限制:电脑屏幕大,可展示信息多;手机屏幕小,需要重点展示信息,以及精准度可能较低。

    2.移动端测试方法
    UI测试:手机屏幕大小
    交叉事件测试:也称为中断测试,指的是当app在执行过程中,有其他应用中断当前的应用的测试过程。一般属于手工测试
    兼容性测试:APP兼容安卓与IOS、APP兼容不同分辨率、APP兼容4G 2G wifi、APP兼容主流软件,能够跳转
    流量损耗测试:APP业务功能消耗流量、APP下载消耗流量、APP升级消耗流量
    弱环境测试:信号强弱
    移动端耗电量测试:APP后台损耗电量、APP前台不执行业务功能耗损电量、APP执行业务功能损耗电量
    移动端边界测试:临界场景测试、内存临界、磁盘临界、权限临界、电量临界

    12网站架构测试

    【课程笔记】

    课程3:软件测试工程师入门到上班

    B站:https://b23.tv/av77832454/p1

    01python字典

    1.现实中的字典是一对多,程序中的字典是一对一
    定义:

    my_dict={key1:value1,key2:value2,…}

    想获取某个值根据键来获取。

    • 字典和列表一样,也能存储多个数据,且数据类型没有要求
    • 列表中找某个元素时,是根据下标进行的
    • 字典中找某个元素时,是根据键进行的
    • 字典的每个元素由2部分组成,键:值
    02软件缺陷

    1.软件缺陷的描述是软件缺陷报告的基础部分,需要使用简单、准确、专业的术语来描述缺陷。

    03接口测试

    项目
    内部接口
    软件内部功能,模块调用的实现
    外部接口
    软件与第三方对接功能
    登陆
    支付

    04大项目:学生管理系统测试 学生管理系统测试

    课程4:算法

    01算法复杂度(时间、空间)

    1.大O(big O)表示法
    给定两个正值函数fg。如果存在正整数cN,对于所有的n\leq cg(n),则f(n)=O(g(n))

    2.算时间复杂度的时候是按照最差的情况算的。把和数据量有关的提出来。

    3.时间复杂度的意义:当数据量趋向于正无穷的时候,看哪个算法更好。它粗描了算法流程和数据量的关系。

    4.具体PK两个算法的时候,先看时间复杂度。如时间复杂度相同,做实验确定常数项。

    5.额外空间复杂度

    6.O(1) \leq O(\log{N}) \leq O(N) \leq O(N^{k}) \leq O(k^{N}) \leq O(n!)

    7.常见优化状况,两个方向:数据状况、问题性质。
    【拓展】
    对数器
    如验证自己写的选择排序程序A对不对:
    找到系统提供的排序方法B作为参考。生成随机样本,A、B结果都一样,将A、B的结果进行比较。
    实际情况是A、B都可能出错。设计对数器是因为随机样本的大小是可以控制的,中间有出错的易于人工介入,用打印函数或调试的方法,把A、B方法都改对。这个时候通过了,是最快的方式。
    注:每个软件都有生成随机数的函数。

    02常见排序算法

    1.选择排序
    如N个数升序排列:
    step1:0到N-1位置找最小值(注意是找到最小的再交换,不是找到了小的就交换)和第0位置交换。
    step2:1到N-1位置找最小值,和第1位置交换。
    ···
    stepN-1:N-2到N-1位置找最小值,和第N-2位置交换。
    时间复杂度:O(N^{2})
    额外空间复杂度:O(1)

    2.冒泡排序
    如N个数升序排列:
    round1
    step1:0到1位置哪个大,谁跑后面去。
    step2:1到2位置哪个大,谁跑后面去。
    ···
    stepN-1:N-2到N-1位置哪个大,谁跑后面去。
    round2
    step1:0到1位置哪个大,谁跑后面去。
    step2:1到2位置哪个大,谁跑后面去。
    ···
    stepN-1:N-3到N-2位置哪个大,谁跑后面去。
    ······
    roundN-1
    step1:0到1位置哪个大,谁跑后面去。
    时间复杂度:O(N^{2})
    额外空间复杂度:O(1)

    3.插入排序
    如N个数升序排列:
    使0到i(i=1,2...N-1)位置有序。
    step1:从1位置往前看,前面大就交换,否则停止。
    step2:到0位置或前面小停止。
    这里的时间复杂度与数据的具体状况有关,这是与前两者排序的区别。
    时间复杂度:O(N^{2})(算法流程按照最差情况来估计时间复杂度,但是做实验一定比前两者好。)
    额外空间复杂度:O(1)
    【拓展】对有序数列查找某元素——二分法
    在一个有序数组中,找某个数是否存在
    在一个有序数组中,找>=某个数最左侧的位置
    局部最小值问题
    如N个升序排列的数,要找n:
    时间复杂度:O(\log_2{N})。多少次才能分成只有一个数。

    04递归与非递归

    如在arr[]中找最大值。

    05双指针

    1.指向指针的指针:指向指针数据的指针变量。

    2. 有关指针的数据类型的小结

    课程5:C++

    chap1 抽象数据类型

    抽象数据类型不是程序的一部分,因为用编程语言编写的程序需要定义数据结构,而不只是数据结构上执行的操作。诸如C++之类的面向对象语言(OOL)与抽象数据类型有着直接的联系,这种语言将OOL作为一个类来实现。

    2.C + + 对 C 语言作了很多改进

    • 增加了一些新的运算符,使得 C + + 应用起来更加方便。
    • 改进了类型系统,增加了安全性。
    • 引进了引用的概念,使用引用作函数参数带来了很大方便允许函数重载,允许设置缺省参数,这些措施提高了编程的灵活性,减少冗余性。又引进了内联函数的概念,提高了程序的效率。

    3.C++ 新增布尔型(bool),其值为true或false。

    4.使用内联函数时应注意的问题
    (1)内联函数也遵循定义在前,调用在后的原则
    (2) 在 C + + 中,需要定义成的内联函数不能含循环、switch和复杂嵌套的 if 语句。
    (3) 递归函数是不能被用来做内联函数的。
    (4) 编译器是否将用户定义成的内联函数作为真正的内联函数处理,由编译器自行决定。
    【注】内联函数建议编译器将指定的函数体插入并取代每一处调用该函数的地方,从而节省了每次调用函数带来的额外时间开支。

    5.使用重载函数时应注意的问题
    (1) 重载函数必须具有不同的参数个数或不同的参数类型,若只有返回值的类型不同是不行的。
    (2) 当函数的重载带有默认参数时,应避免二义性。

    6.作用域的种类
    程序级——外部函数和外部变量
    文件级——内部函数、外部静态类变量、用宏定义所定义符号常量。
    函数级——函数的形参和在函数内定义的自动类变量和内部静态类变量以及语句标号
    块级——定义在分程序中、if 语句中、switch 语句中以及循环语句中的自动类变量和内部静态类变量。

    7.存储类型

    • 自动类型(auto)
    • 静态类型(static)
    • 寄存器类型(register)
    • 外部类型(extern)
    chap2

    1.面向对象程序设计的基本特点
    ①抽象——对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
    ② 封装——将抽象得到的数据成员和代码成员相结合,形成一个有机的整体。
    ③继承
    ④多态——类中具有相似功能的不同函数使用同一个名称来实现。

    2.类——是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。

    3.定义类时应注意的问题
    (1)在类体中不允许对所定义的数据成员进行初始化,也不能指定除 static 之外的任何存储类型。
    (2)类中的数据成员的类型可以是任意合法的数据类型,包括整型、浮点型、字符型、数组指针、引用、另一个类的对象。
    (3)一般地,在类体内先说明公有成员,后说明私有成员。若成员前面没有类似的“public:”或 “private” ,则所定义的成员是 private(私有)。
    (4)经常习惯地将类定义的说明部分或整个定义部分放到一个头文件中。

    4.构造函数与析构函数


    构造函数与析构函数

    5.友元


    友元 6.继承与派生 继承与派生 7.多态性与虚函数 多态性
    chap10 指针

    1.变量的指针:变量的地址。

    2.指针变量:专门用来存放另一变量的地址的变量。

    1. (*p1)++相当于a++
      p1++不相当于a++,因为和++是同一级别的单目运算符,结合顺序是从右往左。

    4.指针引用数组元素:

    p+i=a+i=&a[i]
    (p+i)=(a+i)=a[i]
    p[i]=a[i]=*(p+i)

    1. 前自增运算符:先自增再做其他操作;
      后自增运算符:先做其他操作再自增。

    6.数组作为函数参数时,数组形参无需写明它的元素数目,是因为函数并不为数组参数分配内存空间,形参只是一个指针。因此数组形参可以与任何长度的数组匹配。如果函数需要知道数组的长度,它必须作为一个显式的参数传递给函数。

    7.指针数组:其元素均为指针类型数据的数组。

    8.两个指针变量可以相减(两个指针之间的元素个数)
    两个指针变量比较,结果为布尔值。

    9.引用(别名)与指针的区别
    (1)指针是通过地址间接访问某个变量,而引用是通过别名
    直接访问某个变量。
    (2)引用必须初始化,而一旦被初始化后不得再作为其他
    变量的别名。

    10. 指针

    part 3 实战演练

    模块1:数据库

    01数据库连接 连接查询
    02数据库的索引

    索(Index):用于加速数据访问的数据库对象。

    03数据库事务特性(如何理解)

    转账:大乔500 小乔200
    update set account=500-100 where name='大乔'
    update set account=200+100 where name='小乔'
    1.事务的四大特性是什么
    2.数据库死锁的原因
    3.原子性

    04数据库存储过程

    存储过程,也翻译为存储程序,是一条或者多条SQL语句的集合。
    存储过程和函数都是为了可重复的执行操作数据库的sql语句的集合。存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的sql。不需要重复编译
    减少网络交互,减少网络访问流量
    过程存到服务端,用call从服务端传输。如银行,普通员工不知道核心数据

    05表单和视图的区别视图的原理和适用场景

    试图就是查询

    create view v_students as
    select name , sex, age from student

    1.视图的作用
    不想暴露给别人的信息隐藏,可以写别名。限制数据访问。
    简化复杂查询。
    更新视图更新的是表。
    2.视图分类
    简单视图——是指基于单个表所建立的不包含任何函数、表达式以及分组数据的视图。
    复杂视图——是指包含函数、表达式或者分组数据的视图。
    连接视图——是指基于多个表所建立的视图。
    只读视图——是指只允许执行 SELECT 操作,而禁止任何DML 操作的视图。

    06数据库去重

    在列名前加DISTINCT

    模块2:python

    模块3:数据结构

    01堆和栈的区别
    02单链表中倒排

    模块4:测试项目

    01ATM机取钱的全流程
    02常用软件(qq 微信)微信常用功能,为发红包设计测试用例性能测试和并发测试呢
    03有给你一个登陆界面,你如何测试?
    04POS机如何测试
    05对一支笔进行测试

    模块5:测试基础

    01兼容性测试是什么

    对性能测试了解吗?用过什么性能测试工具没有?一般测试从什么时候开始?单元测试和系统测试有什么不同?白盒测试一般是谁去做?

    模块6:编程基础

    ——未完待续——

    相关文章

      网友评论

          本文标题:FOR JOB | 打开测试工程师的门

          本文链接:https://www.haomeiwen.com/subject/wqemshtx.html