1、分组查询?
user表?<br /> id username phone age sex<br /> 查询出username不重复的用户名?<br /> <br /> 1 zhangqigao 1234567 22 男<br /> 2 zhangqigao 3456778 23 男<br /> 3 gaogao 5686382 24 男<br /> <br /> 删除user表中的所有数据?<br /> delete from user<br /> <br /> <br /> <br /> <br /> 思路:<br /> 先查询出 有重复,再排除这些重复<br /> select * from user where username not in (<br /> select username from (<br /> select username,count(1) from user group by username having count(1) > 1) as a )
一、linux操作系统
起源:unix操作系统 -> mini unix
1、目录结构:
 切换到根路径: cd  /
 /bin: binary 二进制  存放命令的目录
 /boot:  启动目录,初始化
 /dev: device 设备目录,或者存储目录
 /etc: 配置文件目录,所有的配置文件,包括:my.cnf,network配置等等
 /home: 家目录,创建的用户,会在这个目录下创建对应的用户目录
 /lib:library 图书馆,提供linux操作所需的库函数
 /opt: options 操作目录,安装一些软件操作部分会在目录。安装jira,默认在这个目录下
 /root: root用户的家目录
 /sbin: 是super user 的使用命令的目录,比如:root用户才有的操作权限,或者是sudo 后面跟着命令
 /tmp: temp 临时文件存储目录。
 /usr: 部署应用程序的目录,比如说部署tomcat:/usr/local下
 /var: 可变化的,一般动态日志会存放在:/var/log中
2、linux 常用命令
 说明:每一个linux命令都是由一个英文单词 或者 多个英文单词缩写
 1、cd : change directory
1. 相对路径 和 绝对路径
   相对路径:以当前路径为基准:cd /usr(绝对路径);cd local。相对路径后面没有/
   绝对路径:是以根路径为基准: cd /usr :绝对路径时候/
2. 点(.)和点点(..)
   . : 表示当前路径
   .. :上一级路径
   返回上一级上一级:cd ../../ 或者 返回多重上级:cd ../../../../
3. 直接输入cd 命令 返回到哪一级目录:
2、ls: list
 -ll = ls -l ll是ls -l的别名<br />     -rw-r--r-- 1 root root      372 May  3 10:40 gaogao.text<br />   <br />     -           rw-               r--                r--<br />     文件类型    用户权限(user)    用户组(group)    其他用户(other)<br />   <br />     1.文件类型:<br />   -:普通文件<br />   d: 目录<br />   l:链接文件<br />     2、权限:<br />   r w x<br />   4 2 1<br />   7: 这是一个 8进制的数  <br />   1 1 1: 转8进制  1(2**2)  1(2**1)  1(2**0)
3、chmod: change mode 更改权限
 3种:1、给所有的加权限:<br />       1、chmod +x gaogao.text<br />       2、chmod -rx gaogao.text<br />     
2、单独添加
   1、给用户添加r和x :chmod u+rx gaogao.text<br />       2、给用户组添加 r: chmod g+r gaogao.text<br />       3、给其他用户添加 r: chmod o+r gaogao.text<br />       4、给所有减去 r权限: chmod a-r gaogao.text<br />     
3、根据 进制 赋权限
   1、所有用户权限: chmod  777 gaogao.text<br />       1、所有权限: chmod  6(rw)4(r)4(r) gaogao.text
4、chown: change owner 更改用户
   1.给某个文件更改所属用户
   chown mysql(用户名) gaogao.text(注:mysql这个用户名必须存在)
   2. 给某个文件同时更改用户和用户组
   chown mysql:mysql gaogao.text
   3. 给某个文件夹以及文件夹下面的所有文件全部更改用户和用户组
   chown -R mysql:mysql aaa/(前提是aaa是目录)
5、chgrp: change group 更改所属组
6、ps: process 进程
 1.查看tomcat进程:<br />   ps -ef|grep tomcat<br />   ps -aux|grep tomcat<br />     grep: Global Regular Expression Print(全局正则表达式)<br />   
7、rm:remove 删除
 rm -fr aaa<br />     或者<br />     rm aaa  -fr<br />     f:force强制<br />     r:recursive 递归的<br />   <br />     排除删除:删除除ddd 以外的文件<br />     ls|grep -v ddd|xargs rm -fr {}
8、tar:压缩解压缩
 压缩:tar -zc(compress)vf  aaa.tar.gz aaa 把aaa压缩成 aaa.tar.gz<br />     解压缩:tar -zx(extract)vf  aaa.tar.gz  <br />     我要解压缩到指定路径: tar -zxvf aaa.tar.gz -C /usr/local
9、netstat :网络
 查看端口对应的进程:<br />   netstat -anlp|grep 8080<br />   lsof(list open file) -i:8080
10、查看文件
 1、cat<br />   一次性加载所有文本内容<br />   cat gaogao.text<br />   cat -n gaogao.text<br />     2、less<br />   按百分比查看文件内容<br />   less gaogao.text<br />     3、more<br />   按页查看文件内容<br />   more gaogao.text<br />     4、head<br />   查看 前面行数内容<br />   head -2 gaogao.text<br />     5、tail<br />   查看倒数 行数的文本内容<br />   tail -n 2 gagao.text
11、输出重定向
 > :表示覆盖的方式输出到文件中 语法:命令 > 文件名<br />     如:ll(命令) > gaogao(文件名)<br />   ps -ef|grep tomcat(命令) > gaogao(文件名)<br />     >> : 表示追加的方式输出到文件中  语法: 命令 >> 文件名<br />     如:ll(命令) >> gaogao(文件名)<br />   
12、tomcat应用服务器
 1、tomcat目录结构<br />   tomcat是干嘛的?<br />       tomcat属于跨平台应用服务器,是给前端提供接口的。<br />       既支持linux系统,又支持window系统,还支持mac系统<br />       .sh结尾叫shell脚本,是linux或者mac系统执行的文件    <br />       .bat结尾叫批处理脚本,是windows执行的文件<br />   目录结构:<br />       /bin:执行文件夹: 启动脚本 startup  关闭脚本:shutdown.<br />       /conf:配置文件。配置tomcat端口或者其他的配置,server.xml,默认端口号8080<br />       /lib: 给tomcat运行提供的库函数,或者jar包<br />       /logs: 是tomcat运行产生的日志文件夹,重点日志名:catalina.out<br />       /temp: 临时文件,tomcat运行生产的临时文件夹<br />       /webapps: 部署真正的 java后台程序(.war文件)的文件夹<br />       /work:tomcat运行时产生的进程文件(几乎用不到)
2、日志级别
   日志级别:
       debug(调试) -> info(信息) -> warn(警告) -> error(报错) -> critical(奔溃)
   
   debug: 调试,输入所有的日志信息
   info:信息,只输出java的类名
   warn:警告,只输出不符合语法规范的信息
   error: 报错,只输出程序报错的日志信息
动态看日志:
   tail -f(follow) catalina.out -n 300<br />       tail -300f catalina.out<br />   一般bug:debug:不满足需求<br />     error:程序报错
二、接口测试
1、http协议:
1、http:超文本传输协议,属于应用层的协议
2、请求和响应
 1、请求:<br />   请求头(header):<br />       accept:接受数据格式<br />       cookie<br />       请求参数(get)<br />   请求体(body):<br />       请求参数(post)<br />     
2、响应
   响应头:
       Connection:keep-alive 表示长连接
       Content-Encoding:gzip 文件已被压缩
       status: 状态码
       …
   响应体
       返回json格式的字符串
3、状态码:
 1xx:信息<br />     2xx:成功<br />   200<br />     3xx:重定向<br />   302<br />     4xx:客户端<br />   403权限<br />   404不存在<br />     5xx:服务端<br />   500服务器错误
4、请求方法:
 get、post、delete、put、patch<br />     GET: 获取资源<br />     POST:新增资源<br />     PUT: 更新资源(全部更新) => {"id":1,"name":''帅高高',"age":13}<br />     PATCH: 部分更新 => {"id":1,"age":13} => 选择性的更新<br />     DELETE: 删除资源
5、post和get方法的区别?
 1、get的请求参数是在header中,post的请求参数是在body中。<br />     2、get的请求参数因为是在header,所以有传参字符数限制,post的请求参数是在body中<br />     没有传参字符数限制。<br />     3、post方法比get方法安全是相对的,抓包都抓到,只不过请求的时候,一个放手上(get),<br />     一个放在口袋里面(post)<br />    2、抓包?
1、fiddler、charles(花瓶)
 原理:采用代理的原理。
 所有的工具的录制功能,都是采用代理的原理。
    3、接口测试
1、接口测试工具 postman、jmeter。
2、参数化
 1、参数数据存放:<br />   1、存放在内存中 => jmeter存放在一个全局变量中,引用: ${变量名}<br />   2、存放在磁盘中 => 保存在csv文件<br />     2、参数目的:<br />   根据不同场景,传入不同参数,以求达到对应的测试结果
3、关联
 1、关联的定义:<br />   上一个接口出参,是下一个接口入参<br />     2、关联:<br />   1.为了方便使用,关联的参数不能写死。<br />   2.上一个接口出参应该保存在一个变量中,下一个接口的入参直接引用这个变量。<br />     3、关联的目的:<br />   接口与接口之间相互有联系
4、断言
 1、断言的时候,当你的实际结果与预期结果相符,则直接跳过<br />     如果你的实际结果与你的预期结果不符合,直接报错<br />     <br /> <br />   a.查询字符串: login?username=tom&password=123 => postman get方法:parms<br />   b.rest风格url: regist/tom/123=>  path名/值1/值2  => postman get方法:header
三、面试常问的问题?
1、测试和开发的比例?<br /> 1、1:5或者 1:4<br />    2、你还有什么想问的吗?<br /> 结束语<br /> 你们迭代:2个星期
3、自我介绍?
 1、基本情况的介绍:姓名   毕业时间  毕业院校  来自哪里 工作年限。
 2、从事工作内容:工作业务
 3、优缺点:
     优点:沟通能力较强、性格比较外向、工作态度比较负责,工作信心,认真负责等等。
     缺点:性子比较直爽,说话比较直接,但是努力积极改进中。
4、为什么离开上一家公司?
 思路:千万不要是上一家公司的原因,不要怪罪于你的领导
     逼不得已,无可奈何的选择后,跟你们领带沟通过了
5、你是非计算机专业,为什么入软件测试这一行?
 填报志愿的第一志愿就是计算机专业,分数不够,被调剂到xxx专业。
 毕业之后,发现我有同学入软件测试这一行,发现这一行门槛相对较低。
 我后面毅然决然的辞去之前的工作,进入软件测试行业,后面我还是挺喜欢这个行业。
 
6、你怎么判断是前端还是后端bug?
 1、抓包获取接口,然后 通过postman请求这个接口,如果接口报错,
 则是后端bug,排查思路:cd /usr/local/tomcat/logs;tail -f catalia.out
 不报错:查看数据,对数据进行核对,核对没有问题,则排除后端问题
 2、如果后端没有什么问题,则是前端bug,=>F12 查看前端是否报错。
 
7、测试流程?
 强调一点:每一个迭代都是流程
 需求评审 -> 测试计划 -> 功能点或者测试用例的编写 -> 评审 ->  
 用例执行(失败,追踪bug的生命周期) -> 测试报告 -> 预发布环境 -> 生产环境  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
