画布1
测试工程师技能图谱
  请看前言
    这是一个努力在分享的测试er的总结，正在持续更新中，收藏绝对物超所值！
    项目地址
      https://gitee.com/iewiewiew/wei-notebook
      https://gitee.com/iewiewiew/Learn-Java.git
      https://gitee.com/iewiewiew/Learn-Python.git
      https://gitee.com/iewiewiew/Learn-Go.git
  测试核心
    质量保证
    效能提升
  测试硬实力建设
    基本概念
      测试分类
        阶段
          单元测试
          集成测试
          系统测试
          验收测试
        类型
          功能测试
          接口测试
          性能测试
          安全测试
          自动化测试
      业务测试
        测试流程
          测试流程
            产品需求评审 > 开发设计评审 > 测试用例评审 > 开发联调测试 > 冒烟测试 > 详细测试 > 测试报告
          需求阶段
            需求评审
          开发阶段
            编写测试用例
            测试用例评审
          测试阶段
            冒烟测试
            详细测试
            提交缺陷
            回归缺陷
            每日测试报告
            转交uat验收
            编写测试报告
            测试总结
          生产阶段
            生产跟踪
        测试方法
          等价类方法
            等价列划分设计方法是把所有可能的输入数据划分成若干部分（子集），然后从每一个子集中选取少量具有代表性的数据作为测试用例，测试某等价类的代表值就等于对这一类其他值的测试。
          边界值方法
            边界条件指的是输入和输入等价类中刚好处于边界、或超过边界或小于边界的状态。
            与等价划分的区别：边界值分析不是从某等价类中随便挑一个作为代表，而是使这个等价类的每个边界都要作为测试条件。
          场景法
            通过运用场景来对系统的功能点或业务流程的描述，从而提高测试效果。场景法一般包含基本流和备选流，从一个流程开始，通过描述经过的路径来确定的过程，经过遍历所有的基本流和备选流来完成整个场景。
          因果图法
            因果图法是一种适合于描述对于多种条件的组合、相应产生多个动作的形式的测试用例设计方法。如果程序的功能中含有输入条件的组合情况，应在一开始就选用因果图法。
        测试用例
          测试用例设计
          腾讯文档协作
        缺陷管理
          TAPD
          JIRA
          禅道
      测试左移
        思想
          提前发现问题
        工程化
          精准测试
          自动化测试
          环境治理
          持续集成
        流程优化
          需求、设计、测试方案评审
          产品验收&amp;研发自测规范
          代码管理规范
          版本管理规范
      测试右移
        思想
          利用线上能力验证
        工程化
          线上引流回归
          环境&amp;流量隔离
          线上监控
          巡检工程
        流程优化
          线上验证能力开发规范
          灰度（发布）方案
          线上验证规范
          回退流程
          监控
          线上问题定位流程
          用户反馈
      技术概念
        幂等性
          一个数据，或者一个请求，重复来多次，得确保对应的数据是不会改变的，不能出错。
        分布式
          分布式（distributed）是指在多台不同的服务器中部署不同的服务模块，通过远程调用协同工作，对外提供服务。
        微服务
        集群
          集群（cluster）是指在多台不同的服务器中部署相同应用或服务模块，构成一个集群，通过负载均衡设备对外提供服务。
        分布式锁
    接口测试
      如何做
        入参/请求
          必填校验
          长度校验
          参数类型
        出参/响应
          响应状态码
          响应参数
      JMeter
        基本概念
        HTTP接口
        DUBBO接口
          添加jmeter-dubbo插件
        常用组件
          HTTP请求默认值
            协议
            服务器名称或IP
            路径
            请求头
          用户定义的变量
            名称
            值
          BeanShell预处理程序
            读取jar包
          BeanShell后置处理程序
            读取jar包
          查看结果树
      Mock
        基本概念
          什么是mock
            模拟接口以提供正常的返回值
          为什么要用mock
            1、无法控制第三方系统某接口的返回，返回的数据不满足要求2、某依赖系统还未开发完成，就需要对被测系统进行测试3、有些系统不支持重复请求，或有访问访问频次限制。如不可重复支付，获取敏感信息的接口访问频次不可高于xx等
        easymock
          easy-mock官网：https://www.easy-mock.com/
          安装easy-mock教程：https://github.com/easy-mock/easy-mock/blob/dev/README.zh-CN.md
      MeterSphere
        MeterSphere官网：https://www.fit2cloud.com/metersphere/index.html
        MeterSphere是什么
          MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、性能测试、 团队协作等功能，全面兼容 JMeter、Postman、Swagger 等开源、主流标准，有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试，加速高质量的软件交付，推动中国测试行业整体效率的提升。
      抓包
        常用功能
          修改请求
          修改响应
          延迟响应
        常用工具
          Fiddler
          whistle
          F12
    性能测试
      为什么要做性能测试
      性能测试指标
        QPS
          Queries Per Second，每秒查询数，即是每秒能够响应的查询次数，注意这里的查询是指用户发出请求到服务器做出响应成功的次数，简单理解可以认为查询=请求request。
        TPS
          Transactions Per Second 的缩写，每秒处理的事务数。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时，收到服务器响应后结束计时，以此来计算使用的时间和完成的事务个数。
        RT
          Response Time缩写，简单理解为系统从输入到输出的时间间隔，宽泛的来说，他代表从客户端发起请求到服务端接受到请求并响应所有数据的时间差。一般取平均响应时间。
        并发数
          简而言之，系统能同时处理的请求/事务数量。
    安全测试
      攻击方式
        sql注入
          参考资料
            sqlmap基础使用指南：https://blog.csdn.net/a1176905843/article/details/118927247
            sqlmap基础使用说明：https://www.cnblogs.com/php09/p/10404560.html
          Sqlmap安装
            Windows
              sqlmap下载：https://github.com/sqlmapproject/sqlmap/zipball/master （添加sqlmap到环境变量，注：先安装好Python环境）
            验证是否安装成功
              sqlmap.py --version
          是什么
            SQL注入攻击指的是通过构建特殊的输入作为参数传入WEB后台应用程序，而这些输入大都是SQL语法里的一些组合，通过执行SQL语句而执行攻击者所要的操作，其主要原因是程序没有细致地过滤用户输入的数据，致使非法数据侵入系统。
          防范
            第一是正则过滤（安全狗、D盾等等）、第二是数据库预处理等
            mybatis是如何防止SQL注入的
        xss攻击
          是什么
            xss（Cross-site-scripting），跨站脚本攻击，WEB应用程序直接将来自用户的执行请求送回浏览器执行，使得攻击者可截取用户的Cookie或者Session数据而能假冒直接登入为合法使用者
          防范
            1、对所有用户提交内容进行可靠的输入验证，包括对URL、查询关键字、HTTP头、POST数据等，仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交，对其他的一律过滤
            2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查，以防功能被第三方网站所执行
            3、确认接收的的内容被妥善的规范化，仅包含最小的、安全的Tag(没有javascript)，去掉任何对远程内容的引用(尤其是样式表和javascript)，使用HTTP only的cookie
        ddos攻击
          是什么
            分布式拒绝服务攻击（Distributed Denial of Service）可以使很多的计算机在同一时间遭受到攻击，使攻击的目标无法正常使用
          防范
            高防服务器
            黑名单
            DDoS 清洗
            CDN 加速
        越权攻击
          是什么
            越权访问是指应用在检查授权时存在纰漏，使得攻击者在获得低权限用户帐后，可以利用一些方式绕过权限检查，访问或者操作到原本无权访问的高权限功能
            水平越权
              也可以把其称作访问控制攻击漏洞，Web应用程序在接收到用户的请求时，我们在增删改查某条数据时候，没有判断数据所对应的用户，或者在判断数据的用户时是通过从用户表单参数中获取userid来实现的，这里的话我们可以修改userid来实现水平越权
            垂直越权
              垂直越权又叫做权限提升攻击，具体原因就是web应用没有做用户权限控制，或者只是在菜单上做了权限控制，导致恶意用户只要猜测到其他管理页面的URL，就可以访问或者控制其他角色拥有的数据或者页面，达到权限提升的目的
          防范
            查询请求的SQL在最后加上限制条件归属人为当前登录者，如果不是那么查询结果行数就为0；
      测试工具
        AppScan
          是什么
            AppScan是用于web项目的安全测试工具，扫描网站所有url（自动+手动），自动测试是否存在各种类型的漏洞。
          AppScan安装
      网络安全
        电子签名
        加密算法
          对称加密
          非对称加密
      其它
        如何提高防御机制
          加密、IP访问次数限制、用户锁定机制（用户登录3次后就锁定）
        敏感数据保护
          识别敏感数据：密码、秘钥、会话标识；个人信息、商业机密、客户信息等
          保护：加密、存储位置、传输方式；获取数据脱敏、匿名化
    测试开发
      代码管理
        GIT
          相关资料
            廖雪峰Git学习：https://www.liaoxuefeng.com/wiki/896043488029600
          基本命令
            git init
              初始化本地仓库
            git clone
              clone项目
            git pull
              更新项目
            git add .
              将当前目录文件交给git管理
            git commit
              将文件提交到本地仓库
            git push
              将文件推送到远程仓库
        代码托管平台
          github
            https://github.com/
          gitlab
            https://about.gitlab.com/
          gitee
            https://gitee.com/
        分支管理
          分支命名
        版本管理
      测试平台
        yapi接口管理
        测试报告平台
      Java
        Java菜鸟教程：https://www.runoob.com/java/java-tutorial.html
        开发工具
          IDEA
        环境准备
          JDK
            JDK是什么
              JDK(Java Development Kit) 又称 J2SDK(Java2 Software Development Kit)，是 Java 开发工具包，它提供了 Java 的开发环境(提供了编译器 javac 等工具，用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包，用于解析 class 文件使其得到运行)。
            JDK安装
              下载：https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
              变量值：JDK的安装路径
              变量名：JAVA_HOME
              Path：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
                注：原来Path的变量值末尾有没有;号，如果没有，先输入；号再输入上面的代码
              CLASSPATH：.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
                注意这个变量值前面还有一个点，代表从当前路径
              目前在官网下载低于jdk1.8的java jdk的时候需要登陆:
邮箱：2696671285@qq.com
密码：Oracle123
              查看java是否能用：java、javac
              查看是否安装jdk：java -version
              查看jdk安装位置：java -verbose
          Tomcat
            Tomcat是什么
              Tomcat 服务器是一个免费的开放源代码的Web 应用服务器，属于轻量级应用服务器。
            Tomcat目录
              bin
                bin目录主要是用来存放tomcat的命令，主要有两大类，一类是以.sh结尾的（linux命令），另一类是以.bat结尾的（windows命令）。
              conf
                conf目录主要是用来存放tomcat的一些配置文件。
              lib
                lib目录主要用来存放tomcat运行需要加载的jar包。
              logs
                logs目录用来存放tomcat在运行过程中产生的日志文件，非常重要的是在控制台输出的日志。
              tmp
                temp目录用户存放tomcat在运行过程中产生的临时文件。
              webapps
                webapps目录用来存放应用程序，当tomcat启动时会去加载webapps目录下的应用程序。
              work
                work目录用来存放tomcat在运行时的编译后文件，例如JSP编译后的文件。
            Tomcat安装
              下载：https://tomcat.apache.org/download-80.cgi
              检查是否安装好Tomcat：点击tomcat的bin目录下的startup.bat即可启动Tomcat,在地址栏输入：http://localhost:8080/ （前提是按装好JDK）
          Maven
            Maven是什么
              Maven是一个项目管理工具，可以通过一小段描述信息来管理项目的构建，报告和文档的项目管理工具软件。
            Maven仓库地址
              阿里云Maven仓库地址
                https://developer.aliyun.com/mvn/search
              官方Maven仓库地址
                https://mvnrepository.com/
            Maven安装
              下载：http://maven.apache.org/download.cgi
              配置Maven环境变量
                变量名：M2_HOME
                变量值：D:\install\maven\apache-maven-3.5.0
                Path变量： ;%M2_HOME%\bin; //前面注意分号
              修改本地仓库地址
                默认地址：maven在本机的仓库位于C:\我的文档中\.m2.\repository
                修改：在安装Maven的目录下找到conf文件夹，在文件夹中找到settings.xml文件，复制settings.xml文件放于自己新建的目录下
                &amp;lt;localRepository&amp;gt;D:\eclipse-jee-oxygen-R-win32-x86_64\apache-maven-3.5.4-bin\Repo&amp;lt;/localRepository&amp;gt;
                注：config里面和新建仓库里面的setting.xml文件都要修改
                验证：mvn help:system
              修改成阿里云镜像
                &amp;lt;mirror&amp;gt;
&amp;lt;id&amp;gt;aliyun&amp;lt;/id&amp;gt;
&amp;lt;name&amp;gt;aliyun Maven&amp;lt;/name&amp;gt;
&amp;lt;mirrorOf&amp;gt;*&amp;lt;/mirrorOf&amp;gt;
&amp;lt;url&amp;gt;http://maven.aliyun.com/nexus/content/groups/public/&amp;lt;/url&amp;gt;
&amp;lt;/mirror&amp;gt;
              查看是否按照Maven：mvn -v
        MVC模式
          模型层（Model）
            业务数据的信息表示，关注支撑业务的信息构成，通常是多个业务实体的组合。
          视图层（View）
            为用户提供UI，重点关注数据的呈现。
          控制层（Controller）
            调用业务逻辑产生合适的数据（Model），传递数据给视图层用于呈现。
        Java基础
          3大特性
            封装
              隐藏对象的属性和实现细节，用private进行修饰，仅对外提供访问方式。
            继承
              多个类具有共同的属性（成员变量）和行为（成员方法），将这些公共部分抽取出来定义一个新的类，然后这个抽取出来新的类叫做父类或者超类，其他被抽取的类叫做子类，父类和子类之间具有继承关系，子类可以直接访问父类非私有化成员变量，重写父类非私有化方法，通过super.get()访问父类私有化成员变量。
            多态
              不同类的对象对同一消息做出反应，即同一消息可以根据对象的不同发送不同的行为方式（根据不同对象发送不一样的内容，但是方法名是同一个，比如一个按键在不同页面上有不同的功能）
          8大数据类型
            byte
            short
            int
            long
            float
            double
            char
            boolean
          流程控制语句
            if
              if(布尔表达式) { //如果布尔表达式为true将执行的语句 }
            for
              for(初始化; 布尔表达式; 更新) { //代码语句}
            while
              while( 布尔表达式 ) { //循环内容 }
            switch
              switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 default : //可选 //语句 }
          重载
            要求方法名相同，参数类型，个数，返回类型不同。
          重写
            要求方法名，参数类型，个数，返回类型都相同；子类不能超过父类异常；子类访问级别不能低于父类访问级别。
          集合
            List
              ArrayList
              LinkedList
            Set
              HashSet
              TreeSet
            Map
              HashMap
            Set和List的区别
              1. Set 接口实例存储的是无序的，不重复的数据。List 接口实例存储的是有序的，可以重复的元素。
              2. Set检索效率低下，删除和插入效率高，插入和删除不会引起元素位置改变 。
              3. List和数组类似，可以动态增长，根据实际存储的数据的长度自动增长List的长度。查找元素效率高，插入删除效率低，因为会引起其他元素位置改变 。
          异常
            Exception
            Error
          JDBC
          文件读写
          正则表达式
        设计模式
          单例模式
          工厂模式
        排序算法
          冒泡排序
          快速排序
          归并排序
        数据结构
          栈
          图
          队列
          数组
          链表
        框架
          Spring
            IOC
              Spring IOC 解决的是对象管理和对象依赖的问题。
            DI
            AOP
              Spring AOP 解决的是非业务代码抽取的问题。
          SpringMVC
          MyBatis
        JVM
          JVM分为哪几块
            方法区
            堆
            虚拟机栈
            本地方法栈
            程序计数器
      Python
        Python基础
          Python安装
          数据类型
        Django
        selenium
          8大元素定位方式
            id
            name
            class name
            tag name
            link text
            partial link text
            xpath
            css selector
        PageObject设计模式
          原理
            将页面元素定位和对元素的操作行为封装成一个page类，实现对页面对象和测试用例的分离。一条测试用例可能需要多个步骤操作元素，将每个步骤单独的封装成一个方法，在执行测试用例的时候调用封装好的操作
            类的属性：元素定位
            类的行为：元素的操作
            测试用例：调用所需页面中对象的行为组成测试用例
      vue
      前端基础
        HTML
        CSS
        JQuery
    测试运维
      CICD
        持续集成（Continuous integration，简称CI）
          频繁地（一天多次）将代码集成到主干
        持续交付（Continuous delivery，简称CD）
          频繁地将软件的新版本，交付给质量团队或者用户
        持续部署（continuous deployment，简称CD）
          是持续交付的下一步，指的是代码通过评审以后，自动部署到生产环境
      DevOps
        DevOps（英文Development和Operations的组合）是一组过程、方法与系统的统称，用于促进开发（应用程序/软件工程）、技术运营和质量保障（QA）部门之间的沟通、协作与整合
      Jenkins
      Ansible
        相关文章
          【自动化运维】带你入门ansible
        概念
          ansible是新出现的自动化运维工具，基于Python开发，集合了众多运维工具（puppet、cfengine、chef、func、fabric）的优点，实现了批量系统配置、批量程序部署、批量运行命令等功能。
        安装
          安装ansible命令：yum install ansible -y
          查看ansible是否安装成功：ansible -version
        模块
          file
          shell
          copy
          synchronize
          ....
      Docker
        基本概念
          Docker是什么
            Docker 是一个开源的应用容器引擎，开发者可以打包自己的应用到容器里面，然后迁移到其他机器的docker应用中，可以实现快速部署。
          三个基本概念
            镜像
              相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
            容器
              镜像（Image）和容器（Container）的关系，就像是面向对象程序设计中的类和实例一样，镜像是静态的定义，容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
            仓库
              仓库可看着一个代码控制中心，用来保存镜像。
        Dockerfile
          Dockerfile是Docker用来构建镜像的文本文件,包括自定义的指令和格式。可以通过docker build命令从Dockerfile中构建镜像。
        DockerCompose
          Docker Compose是 docker 提供的一个命令行工具，用来定义和运行由多个容器组成的应用。
      k8s
      prometheus + Grafana
      pipeline
        相关资料
          JenkinsPipeline语法概要：https://mp.weixin.qq.com/s/iaNlN01KLgljMSScx-Z4SA
          Jenkins Pipeline 环境变量使用指南:https://mp.weixin.qq.com/s/359q18BOjVtlzHpTLqpTiQ
        基本概念
          pipeline的代码定义了整个构建过程，通常包括构建应用程序，测试然后交付应用程序的阶段
        声明式pipeline语法
          agent
          post
          steps
          environment
          options
          parameters
          triggers
          stage
          tools
          input
          when
          parallel
      sonar
        安装sonar
          sonar地址：http://ip:9000
        使用sonar
          clean compile -U $SONAR_MAVEN_GOAL
        sonar配置邮件发送
    环境管理
      环境分类
        开发环境
        测试环境
        联调环境
        UAT环境
      搭建测试环境
        购买服务器
        软件安装
          JDK
          Tomcat
          MySql
          Redis
          zookeeper
          dubbo
          dubbo-admin
          mq
      同步测试环境
        代码
        数据库
        系统配置
          disconf
          Apllo
        业务配置
      协调测试环境资源
        发版控制
        环境使用次序
      环境监控
        应用服务
        中间件服务
        cpu
        内存
        磁盘
      环境问题定位
    计算机基础
      Linux
        基本命令
          操作文件
            mkdir、cp、mv、rm
          查看进程
            ps、netstat、lsof
          用户相关
            chown、chmod、groupadd、useradd
          其它命令
            top、kill
        shell
      数据库
        工具
          Navicate
        MySQL
          安装MySQL
            Linux
            Windows
          DDL
            创建数据库
              create database 数据库名称
            删除数据库
              drop database 数据库名称
            创建数据表
              create table Person ( Id_P int NOT NULL, LastName varchar(30), FirstName varchar(30), Address varchar(30), Age int(3), primary key(Id_P) )
            删除数据表
              drop table Person
          DML
            增删改查
              insert into 表的名称（列1，列2，...） values （值，值2，...）
              delete from 表的名称 where 条件
              update 表的名称 set 列名称=新值 where 列名称=某值
              select * from 表的名称 where 条件
            进阶sql
              where、order by、group by、union、like、inner join...on、left join...on、right join...on等语法使用
          同步及备份
            mysqldump
              备份数据库
                mysqldump -h00.00.00.00 -uroot -proot dbname > /tmp/dbname.sql;
              备份数据库并压缩
                mysqldump -h00.00.00.00 -uroot -proot dbname | gzip > /tmp/dbname.sql.gz;
              还原数据库
                mysql -h00.00.00.00 -uroot -proot dbname < /tmp/dbname.sql;
              解压数据库并还原
                gunzip < /tmp/dbname.sql.gz | mysql -h00.00.00.00 -uroot -proot dbname;
            Navicat
              导出：在数据表右键转储SQL文件（结构和数据/仅结构）
              导入：在数据库或者表名上右键，运行SQL文件
              工具--结构同步
              工具--数据同步
            mysqldiff
          数据库事务
            基本概念
              事务的隔离性就是指，多个并发的事务同时访问一个数据库时，一个事务不应该被另一个事务所干扰，每个并发的事务间要相互进行隔离。
            四大特性
              原子性（Atomicity）
                整个事务中的所有操作，要么全部完成，要么全部不完成，不可能停滞在中间某个环节。事务在执行过程中发生错误，会被回滚（Rollback）到事务开始前的状态，就像这个事务从来没有执行过一样。
              一致性（Consistency）
                一个事务可以封装状态改变（除非它是一个只读的）。事务必须始终保持系统处于一致的状态，不管在任何给定的时间并发事务有多少。
              隔离性（Isolation）
                数据库应该保证：事务不应该读取其他事务产生的不一致的中间数据，因为这样会导致对数据库的错误更新。即，每个事务都感觉不到其它事务在并发的
              持久性（Durability）
                在事务完成以后，该事务对数据库所作的更改便持久的保存在数据库之中，并不会被回滚。
            事务的隔离级别
              读未提交
                不会更新丢失，但是会造成脏读，不可重复读，幻读
              读已提交
                解决脏读，但是会造成不可重复读，幻读
              可重复读
                解决脏读，不可重复读，但是会造成幻读（读了就不允许update，但是可insert和delete）
              序列化
                解决脏读，不可重复读，幻读，但是效率很低
            事务使用场景
              A给B转账，A扣除100元但是未提交，此时C读取A账户发现扣了100元，此时A回滚（即100元未扣除），此时C读取到的就是脏数据。
              根据用户ID=123查找用户名为AA，此时另一个事务修改了ID=123用户名未BB，此时再去读ID=123用户名为BB，两次读取值不一致，不可重复读
              第一次查询某个房间有3个人，此时新增或者删除1个人，第二次读取就是4个或者2个人，数据条数不一致
            并发控制
              串行控制
              并行控制
              并发操作带来的数据不一致性
                更新丢失
                  A和B同时给C转500元，但是C只收到了B的转账
                  解决方案 注：不是很理解
                    悲观锁
                      共享锁
                      排它锁
                    乐观锁
                      在数据表中添加一个字段，字段的类型是 timestamp 在插入和修改时 都会自动更新为当前时间 ，根据sql条件进行判断，如果时间不符合，那么更新失败
                脏读
                  读取到未提交数据，导致获取到不准确数据。
                  select不守规矩
                不可重复读
                  （同一个事务中）同一select语句，两次读取到已提交数据，数据内容（数据信息）不一致。
                  update不守规矩
                幻读：
                  （可以不是同一事务）同一select语句， 两次读取到已提交数据，数据内容（数据条数）不一致。
                  insert和delete不守规矩
          存储引擎
          日志
            bin log
            undo log
            redo log
          索引
            1、索引的创建、修改、删除、查看
              普通索引
                create index 索引的名字 on 表名(列名) eg. create index empnoIndex on emp_copy(empno)
                show index from 表名 eg. show index from emp_copy
                drop index 索引的名字 on 表名 eg. drop index empnoIndex on emp_copy
                drop index 索引的名字 on 表名 eg. drop index empnoIndex on emp_copy
              唯一索引
                create unique index 索引名 on 表名(列名)
                drop index 索引的名字 on 表名 eg. drop index empnoIndex on emp_copy
              主键索引
                alter table 表名 add primary key(列名); eg.alter table emp_copy add primary key(deptno)
                alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key;
              组合索引
                create index 索引名 on 表名(列名1,列名2) eg. create index enameIndex on emp_copy(ename,mgr)
            2、索引的分类和各自实现原理
              普通索引
              唯一索引
              主键索引
              组合索引
            3、索引的使用策略
        MongoDB
      网络基础
        相关资料
          《网络是怎样连接》
        HTTP和HTTPS
          HTTP
            端口80
            明文传输
          HTTPS
            端口443
            ssl加密传输
        TCP和UDP
          TCP
            适用场景
              网络会话
              文件传输
              远程登录
            安全性
              安全可靠
            三次握手
              为了防止已经失效的链接请求报文突然又到了服务器，因而发生错误
            四次挥手
          UDP
            适用场景
              语音
              视频
              直播
            安全性
              不安全不可靠
        状态码
          1XX：通知
          2XX：成功
          3XX：重定向
          4XX：客户端错误
            403：Forbidden
            404：Not Found
          5XX：服务端错误
            500：Internal Server Error
              通用的服务器错误响应
            502：Bad Gateway
              只有HTTP代理会发送这个响应代码。它表明代理方面出现问题
        CDN
          CDN服务器可以说是一种缓存服务器。当我们要访问某个网站的资源时，如果该网站的服务器离我们很远，这样的话响应速度就会很慢，为了让响应速度快一些，我们可以把资源分布放在各个地方，然后响应客户端的时候，把离客户端较近的资源传送给他。
        DNS
          Hosts文件是存储本机网址域名与其对应的IP地址的一个文件，在网络请求阶段发挥作用
          DNS是一个全球化的分布式数据库，它所提供的服务就是将域名转换为互联网IP地址。
        get和post
        网络七层协议
          应用层
          会话层
          表示层
          IP层
          TCP层
          物理层
        网络四层模型
          应用层
            HTTP、SSH、FTP
          网络层
            TCP、UDP
          传输层
            IP
          网络接口层
            以太网
      操作系统
        CPU
        内存
        硬盘
        缓存
        IO
      相关知识
        进程和线程
          进程
          线程
        死锁
          死锁条件
          如何预防死锁
    中间件
      zookeeper
        简介
          ZooKeeper来做：统一配置管理、统一命名服务、分布式锁、集群管理。
          ZooKeeper的数据结构，跟Unix文件系统非常类似，可以看做是一颗树，每个节点叫做ZNode。
        Linux安装zookeeper
      dubbo
        简介
          Dubbo是一款高性能、轻量级的开源Java RPC框架，它提供了三大核心能力：1、面向接口的远程方法调用2、智能容错和负载均衡3、以及服务自动注册和发现
        RPC
          Remote Procedure Call / 远程过程调用
        dubbo-admin
          展示dubbo注册服务情况
      MQ
        RokectMQ
        Kafka
      redis
        简介
          Redis 是完全开源免费的，遵守BSD协议，是一个高性能的key-value数据库。
        安装
          Linux
          Windows
        持久化
          简介
            由于Redis的数据都存放在内存中，如果没有配置持久化，redis重启后数据就全丢失了，于是需要开启redis的持久化功能，将数据保存到磁盘上，当redis重启后，可以从磁盘中恢复数据。
          RDB
            原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化
          AOP
            原理是将Reids的操作日志以追加的方式写入文件
      nginx
        简介
        安装
        基本命令
          启动nginx：./nginx
          重启nginx：./nginx -s reload
          停止nginx：./nginx -s stop
      其它
        配置中心
          Apollo
            简介
              https://github.com/ctripcorp/apollo/wiki/Quick-Start
              Apollo（阿波罗）是携程框架部门研发的分布式配置中心，能够集中化管理应用不同环境、不同集群的配置，配置修改后能够实时推送到应用端，并且具备规范的权限、流程治理等特性，适用于微服务配置管理场景。
          Disconf
            简介
              Disconf是一套完整的基于zookeeper的分布式配置统一解决方案。它支持配置（配置项+配置文件）的分布式化管理。
    其它技能
      造数规范
        根据场景一键造数
        数据命名规范
      代码review
  测试软实力建设
    测试能力
      意识
        具有产品意识
        具有owner意识
      流程
        流程控制
        预先评估质量风险
        人力转换成技术能力和流程化，测试设计体现一名测试工程师的产出
      测试能力模型
        项目经验
        自动化测试能力
        持续测试能力
        开发能力
        影响力
        项目管理能力
      软件测试注意点
    沟通能力
      沟通目的
        沟通要围绕这个目的进行交流，在达成一致后，记得形成结论并记录下来
      沟通方式
        沟通是为了解决问题，而不是为了制造问题
      责任心
        做一个靠谱的人
    测试管理
      团队文化
        质量保证
        效率提升
      管理意识
        具有管理意识和对他人负责
        推动各种角色进行高效合理的测试实践
        把质量问题上升为整个研发团或产品团队责任
      向上管理
        确保自己理解上级分配的任务
        及时汇报进度
      向下管理
        放权给组内成员，找到其最擅长的点并发挥优势，不能只让一个人一直做某个领域
        赋能团队每一个人，从自身去学习根本解决问题的能力
      平级管理
        分享提高效率的工具或者方式给小伙伴，共同成长
      团队会议
        周会制度
        技术分享
        测试总结分享
        1v1沟通
      总结报告
        新入职每天学习日报
        月度总结
        年终总结
      务实
        制定OKR考核方式
        人员选择和招聘
        人员梯度建设
          人员BackUp
          人员晋升
        人员学习计划
        人员分工与协作
      务虚
        如何鼓励员工
        如何批评员工
        如何评价员工
        如何激励员工
    文档管理
      测试流程
        测试用例、测试报告模板
        测试计划
        测试数据
        测试用例
        测试报告
      文档结构
        总-分-总
        背景-方案-优缺点-总结
      归纳整理
      常用工具
        有道云笔记
        腾讯文档
        processon
        IDEA+Git+github
      知识管理
        wiki
    学习方式
      十步学习法
        1、了解全局
        2、确定范围
        3、定义目标
        4、寻找资源
        5、创建学习计划
        6、筛选资源
        7、开始学习 浅尝辄止
        8、动手操作 边学边玩
        9、全面掌握 学以致用
        10、乐为人师 融会贯通
        1-6步主要目的是研究，不用反复，7-10步要反复
      复盘四步论
      5Y2H方法
      结构化思维
    测试面试
      2021面试总结
        https://mp.weixin.qq.com/s/MtnQ9qJoB_Okg1LSrHH79A
      面试心态
        be part of something bigger than itself -- 使它成为更大的事情的一部分
        理解对方的提问，以及对方为什么要问这个问题
      面试技巧
        遇到不会的问题反问回去
        把自己所做的工作系统化，高端化
        将所有问题转化为自己经历过的
        遇到自己没有做过的事情，一定如实回答，但是一定要加上自己的见解
        不要抢话、插话、争辩
        别太自满，态度举重若轻，自信、专业、谦虚三者之间需要一个很微妙的平衡
        与其将自己描述为一个全能型人才，倒不如凸显自己在一两个领域的突出能力
      逻辑题
      编写测试用例题
      如何考察求职者
      如何反问面试官
        贵司整个测试体系大概是怎样的？
        贵司招聘的这个岗位主要负责的工作内容是怎样的？
    学习资源
      GitHub
        https://github.com/
      牛客网
        https://www.nowcoder.com/
      知乎
        https://www.zhihu.com/topic/19554298