当前位置:   article > 正文

总结面试题_接口自动化测试用例覆盖率为50%时成功率为

接口自动化测试用例覆盖率为50%时成功率为

网络相关

1、三次握手、四次挥手

三次握手:

为什么是三次握手而不是两次?

为了确保通信双方都有能力发送并接受响应;

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

6726cba6c13927af2d98126bb9ab0a17.png

简单理解:

1.客户端发送连接请求报文给服务器端

  • 服务器端可以确认:客户端发送正常,服务器端接口正常

2.服务器端接收到报文后进行确认,返回报文给客户端

  • 客户端可以确认:客户端发送正常,客户端接受正常,服务器端发送正常,服务器端接收正常

3.客户端收到报文后再给服务器端发送报文,告诉服务器端我收到了

  • 服务器端确认:服务器端发送正常,客户端接收正常

从而建立了连接 这个就是三次握手

四次挥手:

25f27e11f7de859e1c824b8543bf32d0.png

 

客户端发起断开连接:

1.客户端给服务器端发送FIN报文 表示要断开连接

  • 表示客户端不再发送报文,但是客户端可以接受报文

2.服务器端发送ACK报文给客户端 说我收到了

  • 表示服务器端知道客户端不再发送报文

3.服务器端给客户端发送FIN报文 我可以断开连接了

  • 表示服务器端也不再发送报文给客户端

4.客户端收到后给服务器端发送ACK报文 服务器端收到后进入close状态,2MSL时间后客户端进入close状态

2、浏览器中输入网址 点击回车之后,一些列的操作?

  • 首先DNS对域名进行解析,映射到对应的IP
  • IP解析成功后,浏览器向服务器发起连接(涉及到TCP三次握手),构建请求
  • 服务器处理并响应,返回响应结果
  • 浏览器得到响应进行解码,渲染显示
  • 页面显示完成后,浏览器发送异步请求

DNS域名解析:

683b4c6946a92c5b17891f4fd166e62e.png

  • 在浏览器缓存中查找映射
  • 在(系统缓存)本地主机host文件查找映射
  • 在路由器缓存查找映射
  • 在DNS服务器的缓存中查找域名映射
  • 在根域名服务器中匹配对应域名映射

3、C/S和B/S的说明:

BS:

  • 浏览器服务器架构,通过浏览器打开
  • 系统更新 不需要用户更新浏览器 就可以访问最新内容
  • 广域网,不需要专门的网络硬件环境
  • 面向不可知的用户群体,对信息安全掌控能力弱
  • 无缝升级,维护开销小

CS:

  • 客户端服务器架构,需要安装客户端
  • 系统更新 需要手动更新客户端
  • 使用局域网(局部专用网络)
  • 面向固定用户群,对信息安全掌控能力强,一般高度机密的系统采用CS架构
  • 升级困难

4、常见状态码表示含义

  1. 1xx:请求已接收,继续处理中
  2. 2xx:请求被成功接收
  3. 3xx:重定向
  4. 4xx:客户端错误
  5. 5xx:服务器错误
  • 200:服务器端成功处理请求,客户端请求成功
  • 400:客户端请求语法错误
  • 403:请求被禁止,无权限
  • 404:请求的资源不存在
  • 500:服务器发生未知错误
  • 503:服务器临时过载或系统维护

5、get和post的区别

get和post都是HTTP请求两种基本方式

get:

  • 一般用于获取数据,对应查询操作
  • 参数拼接在url中,在地址栏中可见,不安全,传递参数最大限制2KB(因url长度受限)
  • 进行接口测试时:可以在浏览器中直接访问

post:

  • 一般用于提交数据,对应新增修改等操作
  • 参数在请求体中,安全,传递参数限制大

 

6、HTTP和HTTPS的区别

9fb3844fe380b5cf0fb140aaf0201826.png

HTTP:

  • HTTP超文本(文本,图片,声音)传输协议
  • 基于TCP协议:应用层
  • ISO七层模型
  • 端口默认:80
  • 基于请求与响应模式、
  • 无状态:

协议对客户端没有状态存储,对事物处理没有记忆功能;

后续的处理中需要前面的信息,就必须重传

  1. cookie:set-cookie 在客户端 cookie中包含sessionId
  2. session:在服务器端
  3. token:服务器发给客户端的,服务器端不需要sessionId,用一些加密算法替换在服务器端保存的压力,服务器端需要消耗资源进行计算
  • 无连接:一个连接只处理一个请求,服务器处理完请求后,给客户端响应后 会自动断开

connection:keep-alive字段实现长连接

  • 缺点:明文传输协议,不安全

HTTPS协议:

  • 超文本传输安全协议(在HTTP基础上加了SSL协议)
  • 对数据加密,对身份认证,验证数据完整性
  • 基于SSL协议(安全套接字协议:靠证书验证),端口443
  • 安装证书就可以正确解析内容
  • SSL证书收费,延长页面加载时间,缓存不如HTTP

SSL连接:依靠证书验证服务器的身份,并为浏览器和服务器之间的通信加密

979b7e50b058695a19982fac09a4c1dc.png

  • 握手:建立TCP连接,验证服务端身份,分发通信主密钥

客户端发起一条到服务端的TCP连接,随后的数据传输都在这条TCP连接上

  • 密钥导出:

TCP连接建立完成后,客户端向服务器端发送报文,服务端用证书回应

客户端从证书中提取

  • 数据传输:

7、流行的接口有哪几种?什么协议

协议:计算机之间为了能够实现网络通信而达成的一种约定,有了这种约定,不同厂商的生产设备,不同的操作系统组成的计算机之间就可以实现通信

HTTP、HTTPS:

  • 使用应用层协议
  • 应用层协议:定义了用于在网络中进行通信和传输数据的接口

DUBBO:

  • 使用传输层协议
  • 管理端到端的数据传输
  • 比HTTP协议快
  • 使用socket长连接
  • 使用provider和customer模式进行服务
  • 分布式服务框架

8、HTTP协议有什么特点,体现在哪些方面

  1. 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。
  2. 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
  3. 无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,connection:keep-alive
  4. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。

9、cookie、token、session的原理、区别

cookie:

  • 存储在客户端,key-value形式保存
  • 服务端生成
  • 每次客户端发送请求会带上这个标识
  • 浏览器端保存的cookie数量有限
  • session_id会存在 cookie 中,每次请求 cookie 中的所有信息都会传送给服务器,服务器通过 session_ id 来识别是否是同一个用户的请求。不是同一个用户的话,就会要求用户重新登录
  • 不可跨域名性
  • 禁止cookie就无法得到session

session:

  • 在服务器端, 记录用户的请求状态,一般默认时间是30min。
  • 用户关闭浏览器 session被销毁
  • 为什么会有这种机制? 因为http请求是无状态的
  • 访问服务器比较多,需要存储的session比较多,服务器端压力比较大
  • web服务器做了负载均衡,用户的请求从服务器A被转发到服务器B,服务器B没有保存用户的session信息,不能正确访问,因此服务器端需要将session复制到服务器B
  • 相比较cookie session存储更安全

token:

  • 用户通过用户名密码发送请求,服务器端进行验证
  • 服务器端返回签名的token给客户端,客户端存储在cookie或者local storage里
  • 客户端发送请求会携带token
  • 服务器端只需要验证token(不需要在服务器端存储用户信息)

 

10、fiddler的高级用法:设置断点对数据进行篡改

11、TCP 、UDP

UDP:

  • 不可靠,无连接
  • 首部开销小,8个字节,传输效率高
  • 用于实时通讯,QQ语言,视频等
  • 面向报文

TCP:

  • 可靠,面向连接
  • 首部开销大,固定长度20个字节
  • 面向字节流

12、HTTP请求报文组成

  • 请求行:请求类型 URI 协议版本
  • 请求头:host、referer、content-type、cookie
  • 空行:请求头到此为止
  • 请求数据:

13、HTTP响应报文组成

  • 响应行:协议版本、状态码、描述状态的短语
  • 响应头:content-encoding、content-length、content-type
  • 响应体:

14、DNS域名系统:进行域名与IP之间的解析

查询范围:浏览器缓存、本地host文件、路由器缓存、DNS服务器缓存、根域名服务器

15、IP:

  • 固定长度
  • IPv4---32位
  • IPv6---128位

面试-性能测试相关

1、普通压测步骤:

  • 同接口测试正常配置即可
  • 特别说明:线程配置

number of thread:线程数,运行的线程数设置,一个线程对应一个用户

Ramp-up period(seconds): 线程启动开始运行的时间间隔,单位秒,即所有线程在多长时间内开始运行

如果线程设置50 时间间隔为10秒:表示50个线程在10秒内启动,每秒启动5个线程;如果设置0秒,表示50个线程立即启动

下图中表示:200个线程1秒内启动

80671e442207a4bc28de45c8513cda5f.png

2、分布式压测如何进行

产生原因:

一台机器的资源不足以支撑压测需求,我们需要分布式执行,即就是一台控制机带着N多台执行机同时跑脚本

85b95ef0cacb5b0e350faadc97ceb194.png

原理:

  1. 一台调度机master,其他机器称为执行机slave
  2. 执行时,master会把脚本发送到每台slave上,slave拿到脚本后开始执行,slave执行时不需要启动GUI,通过命令行模式执行
  3. 执行完成后,slave会把结果回传给master,master会收集所有的slave信息并汇总

远程运行的逻辑:

  1. 远程机首先启动agent(运行jmeter-server.bat)
  2. 控制机连接上远程负载机(修改配置文件,会自动探测并连接)
  3. 控制机发送指令(脚本及启动命令)启动线程(参数化文件或依赖包需要手工拷贝到远程负载机)

e2b61656be69dd30b3baaf7177d54732.png

5abdd5ba4e6a322feb890ad76f37bdf6.png

e2cf7f23665682a3276008e64ee011fb.png

8be4f34148294485b60d404ccb9cd874.png

d02f97297ee825bb8526613c15505015.png

 

3、压测数据库

 

4、接口之间有关联关系,比如前一个接口的响应中有当前接口的入参

fdb0b106ba7b32cd898e659980c3eb1a.png

提取器:

  • json提取器:$.data.libraryId

如果返回值中有数组,则$.data[0].xx

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcyNTU3Mg==,size_16,color_FFFFFF,t_70

正则表达式提取器:“libraryId”:(\d+)

说明:\d 匹配数字 +重复一次或多次

正则表达式提取器举例:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcyNTU3Mg==,size_16,color_FFFFFF,t_70

5、压力测试关注的性能指标:

面试-自动化测试相关

1、UI自动化测试 如何截图、什么时候截图、上传图片操作?

  • File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

FileCopyUtils.copy(file,new File(""));

  • 编写监听器类 实现ITestListener,在onTestFailure中进行截图
  • 上传图片/附件:type属性是file,driver.findElement(By.id("")).sendKeys("文件/图片路径");
  •  

2、常用的定位元素方法:

ID、className、name、tag_name、link_text、partial_link_text、xpath、cssSelector

3、postman中如何实现接口之间的关联

4、接口未全部提测,怎么实现接口脚本间的自动关联

5、若请求的接口需要先登录后才可请求,如何进行接口测试

6、dubbo接口如何测试

 

7、接口测试断言从哪些方面设计?

  1. 状态码:200 400 404 500 503
  2. 返回值
  3. 数据库校验
  4. 空校验、字段校验(异常检验、环境校验、前置条件异常)
  5. 幂等性
  6. 流程节点限制

8、三种等待时间的区别和场景应用

(1)显示等待:等待某个条件成立时继续执行;

使用:只关心某一个元素是否出现,不关心其他元素时 可以使用显示等待;

即:当前元素出现,进行下一步操作,其他元素是否出现没有关系

WebDriverWait webDriverWait = new WebDriverWait(driver,3);

WebElement element = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("")));

(2)隐式等待:等待页面元素全部加载完成

使用:全局概念,需要页面所有元素全部加载完成才会执行后续操作;

driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 单位自己指定

(3)强制等待:固定时间的休眠

Thread.sleep(3000); 单位是毫秒

9、谈谈你对自动化分层思想的理解

  1. 业务逻辑
  2. 关键字驱动
  3. 数据驱动
  4. 配置文件

10、自动化用例在什么环境下运行,如何批量运行

docker容器+jenkins+git

11、有没有独立搭建过自动化测试框架,遇到过哪些问题

 

12、测试开发在企业中具体做什么?

 

13、之前项目做过自动化测试吗?如何推进的

  1. 使用selenium+python
  2. 实现原理:unittest、pytest
  3. 数据驱动Excel
  4. 关键字驱动
  5. 遇到了哪些问题?如何解决的

14、selenium中元素定位正确但是操作失败,6种解决办法全搞定

  • 页面元素没有加载出来---------》添加等待时间
  • 浏览器没有最大化打开,导致元素被隐藏,定位不到-------》将网页最大化 driver.maximize_window()
  • 网页中存在多个frame框架,所定位的元素不在当前frame中--------》切换到对应frame中 driver.switch_to_frame(); 注意切换到主页面 switch_to_default_content();切换到上一级frame switch_to_parent_frame();
  • 元素属性是动态的,看着定位正常,但是随着鼠标移动点击不同位置,元素的属性发生变化---------》换元素的固定属性来进行定位
  • 页面元素在页面打开后被其他弹出窗口遮挡----------》添加关闭弹出窗口步骤

15、自动化接口测试 业务覆盖率、测试案例覆盖率

  • 接口覆盖率:50%
  • 测试案例覆盖率:20~30%
  • 自动化主要用于日常线上回归
  • UI自动化脚本用于日常线上回归:业务覆盖率

16、如何判断验证哪些字段?举例:对于创建人 创建时间这些字段如何判断正确性?

 

17、java垃圾回收机制

18、说一下自动化测试框架

接口自动化测试框架介绍:

java+testng+httpcilent+extentreports+poi+jpaRepository

封装了:

  • 实体类:字段与表结构的映射
  • 继承dao层:数据库操 继承JpaRepository
  • 读取Excel类
  • 监听器类 实现IReporter
  • test方法:@test测试方法 和@dataprovider数据提供方法
  •  

 

UI自动化测试框架介绍:

 

 

19、接口测试在什么阶段做:

接口开发完成了,可以随时介入进行测试

20、如何理解接口自动化测试

  • 通过代码驱动测试 而不是人工测试
  • 手工测试回归花费时间比较多,自动化测试

21、HTTP和HTTPS在测试中的区别:

 

22、Get请求接口一个小知识点

String param = URLEncodedUtis.formate(List,utf-8");

把list转换成key=value&key2=value2的形式

ad475542fdc3352083d0318e47dd7573.png3623dd819d530b496e321bb436e901f2.png

 

公司面试题汇总

北森:

一面

自我介绍

为什么要做测试

软件测试的理解

bug生命周期

测试方法

测试用例的编写

性能测试和安全性测试

测试流程

找到bug需要做的事情

项目

url自动化测试

黑盒白盒

等价类

junit的使用方法

为什么要来北森,了解我们公司吗

职业规划

(只问测试相关的内容,没有别的)

二面

自我介绍

对于测试的理解

为啥做测试

http请求类型

项目(问的满细的)

你的项目怎么测试

了解的自动化测试工具

未来规划

蓝牙耳机测试

啥时候能实习

反问。

 

一面:

  1. 自我介绍当然少不了,因为一面和二面面试官不一样。
  2. 设计给定的登陆页面的测试用例。
  3. TCP和UDP的区别。
  4. TCP和UDP在测试时会有什么区别(这题我不是特别会)。
  5. 接下来就是深挖简历了。。。

一面:

自我介绍

对测试的理解

测试的工作

设计摄像头的测试用例

你发现了一个bug后该怎么做

如果开发不认为这是一个bug,你怎么做

怎样判定是不是一个bug

drop和delete的区别

having短语的使用

数据库多表连接命令

Linux中在A目录下打开B目录的命令

Linux修改用户权限

http和https的作用

OSI七层模型

Python的元组和列表的区别(因为我会Python所以会问)

链表和数组的区别

 

40分钟

1.自我介绍

2.项目:TestNG、Appium、postman

如何让一些测试用例在回归的时候重跑

TestNG框架、标签

ui自动化的原理

3.你用过postman 对于Http协议有什么了解么?

4.状态码304、503

5.你比较擅长的语言是java是吧,简单说一下Map

6.编程:整型数组,求出最大组合的数:[11,2] 输出211.... 测试一下你的方法:测试用例

7.在做项目的时候遇到过哪些坑呢?如何解决的?

8.职业规划

9.能不能提前实习

10.反问

说一下快排的思路

SQL内连接,左链接,右链接

  • 你对于java最熟悉的是哪部分?
  • 我回答的集合,简单介绍了hashmap,然后引发了一系列问答
  • 你为什么要学习这些个集合?

 

面试过程

1.自我介绍

2.为什么从开发转测试

3.测试和开发的区别

4.web app测试不同点

5.了解微服务吗

6.阿里云服务器

7.前端语言

8.测试工作风险评估

9.怎么保证测试用例覆盖率

10.测试流程

11.https怎么加密的

12.说一下tcp ip

13.后端用了哪些技术框架

14.评价自己优缺点

15.开发提测晚,或出现不可解决的问题,怎么办

16.一个高效的bug

17.性能测试,为什么会导致cpu 内存过高

18。自动化用例有多少条,跑一个自动化需要多久

 

 

 

1、自我介绍

2、自动化接口测试

  1. 具体怎么做的
  2. 自己搭建的框架吗?---》是否在工作中应用到了---》起到了哪些作用?
  3. 封装了哪些类
  4. 接口测试 会校验哪些内容?
  5. 如何判断的接口返回----》判断哪些字段
  6. 业务覆盖率30%、测试案例覆盖率 怎么计算的?
  7. Excel读取 写入?
  • 一个系统 HTTP请求替换成 HTTPS请求,你会怎么测呢
  • HTTP和HTTPS的区别
  • 522124895c82c5defb9ac45bcc4f9de1.png
  1. 线上质量bug频频爆发 如何处理呢
  2. 印象深刻的bug
  3. 如何判断测试案例是否写的比较好呢
  4. 如何保证测试案例覆盖率
  5. 面对开发提测晚 如何应对
  6. testng的优缺点吗?

软件测试知识

1、测试分为哪几个阶段

单元测试,集成测试,系统测试,验收测试,回归测试

2、谈谈你之前测试的项目流程,以及每个阶段的输出

  • 需求评审、
  • 系分评审:数据库表设计、接口设计
  • 测试计划编写:测试范围、测试内容、人员分配、时间安排
  • 测试案例编写
  • 测试案例评审
  • 测试
  • 产品验收
  • 测试报告
  • 发布
  • 线上回归

3、谈谈敏捷模式

 

4、黑盒测试 测试案例设计方法,举例说明:

  1. 等价类
  2. 边界值
  3. 因果图
  4. 正交实验
  5. 场景法
  6. 错误推断

5、测试计划包含哪些内容

  1. what:做什么
  2. why:为什么做
  3. where:在什么环境下测试
  4. when:什么时候测试
  5. who:谁来测试
  6. how:如何测试

6、测试报告包含哪些内容

项目背景、测试范围以及测试内容、bug清单、测试结论、测试风险(客观原因无法测试的内容,一些未修复的bug说明原因)

7、购物车测试

 

8、微信朋友圈点赞、抢红包

 

9、视频测试:下一集或自动跳转

 

10、判断测试案例是否写得好:

  • 以较少的用例覆盖尽可能多的需求和测试点
  • 以较少的用例在合理的时间内发现更多的问题

11、印象深刻的bug

前端:

  1. 列表中新增/修改/删除一条记录,提示成功后列表数据未变化-----》页面没有刷新
  2. 新增数据,限制字段不能为空,有默认值 提交时提示字段未输入
  3. 有查询条件时 翻页后列表显示内容不正确----》前端没有将关键字正确传递

后端:

  1. 输入客户信息,手机号码不能重复:经常在修改时 手机号码正确未重复 就不能保存 提示以重复/修改了 和系统已有手机号重复了 但是保存成功了
  2. 批量导入数据(Excel中数据不多),会提示导入中,很长时间过去了 还是导入中-----》排查到是因为Excel中有很多几十万空行 有样式(类似于清除数据),后端会一直解析Excel 导致一直提示“导入中”

12、线上质量bug频频爆发怎么处理

  1. 复盘-分析bug的产生原因:漏测?环境导致?
  2. 漏测:及时补充测试案例,在之后的测试中避免,线上回归更加仔细
  3. 线上环境巡检配置(或类似手段),确保及时发现问题

13、如何分析一个bug是前端还收后端问题

抓包工具/浏览器开发者工具抓包:

  1. 查看前端是否正确请求接口(是否调用了接口、接口调用是否正确)、
  2. 参数是否正确、
  3. 返回的响应值、
  4. 查看日志

14、浏览器访问失败,可能原因:(同17)

  1. 查看域名是否正确

15、系统运行很慢,如何判断是硬件问题还是软件问题

  • 检查系统是否中毒
  • 检查软件/硬件配置是否符合软件的推荐标准
  • 确定当前系统是否独立,没有对外提供或者消耗CPU资源的服务
  • 检查与服务器的连接 或者 访问有问题造成的
  • 在系统没有负载的情况下,查看性能监视器,确认应用程序CPU 内存的访问情况

16、bug的生命周期

发现、提交、分配、确认、修复、验证、关闭,如果验证不正确 再次打开、分配、确认、修复、验证、直到关闭

17、测试一个web页面时,页面显示空白,可能什么原因,如何排查?

  • 排除本身页面就是空白的
  • 网络原因导致:发送超时,接收超时,服务器超时
  • 地址是否正确
  • 域名错误,无法解析对应的IP
  • 浏览器F12 查看请求、参数、响应是否正确---从而判断是前端问题还是后端问题
  • 后端问题:在进一步查找日志 通过日志定位问题

18、电梯 楼梯间上下按钮的测试

单个电梯场景:

  • 外观:
  1. 是否存在上下按钮,位置排列是否日常习惯
  2. 是否有当前电梯所在楼层显示
  3. 如果在最低层,是否有向下按钮
  4. 如果在最高层,是否有向上按钮
  • 功能
  1. 电梯是否能够正常运行
  2. 电梯达到最大负荷,在
  • 安全

多个电梯场景:

  •  

数据库

1、SQL查询增删改查、子查询、关联查询、分组查询、分组过滤

  1. 增 insert into table_name(字段) values(xxx)
  2. 删 delete from table_name where xxx="xxx"
  3. 改 update table_name set xx=“xx” where xx = "xx"
  4. 查 select * from tableName where xx="xx"
  5. 子查询:嵌套在查询语句中查询
  6. 关联查询: 内连接inner join on:两表的公共部分的记录 左连接left join on:返回左表中的所有记录(包含和右表中相等的记录),右表中没有匹配到的显示null 右连接right join on:返回右表中的所有记录(包含和左表中相等的记录),左表中没有匹配到的显示null
  7. 分组查询:group by 分组字段
  8. 分组过滤:having

where:用于在初始表中筛选查询符合条件的数据,作用在行上

having:筛选出符合条件的组,作用于组上

执行顺序:SFWGHO租户

select、where、group by、having、order by

select region、sum(money) from tableName group by region

按照表中一个或者多个字段,将数据进行分组,一般用于数据进行分类汇总,select后面的字段,只要是group by后面的字段;如果展示其他的列,需要使用聚合函数(sum、max、min、average)

9、drop和delete的区别:

drop:删除表

delete:清空表数据

2、优化SQL方式

  • 用连接查询代替子查询
  • 在where和order by字段上 适当创建索引
  • 用select 字段名代替select *
  • 如果只查询一条数据,可以使用limit 1

3、子查询和关联查询哪个效率高?

关联查询效率高

4、为什么select * 效率低

  1. 不需要的列会增加数据传输时间和网络开销
  2. 对于无用的大字段,会增加IO操作

5、什么是索引、如何创建 查询索引、索引为什么可以提高查询效率、索引的使用应该注意什么

  1. 数据库当做一本字典,索引就是这个字典的目录,一般会针对where条件后面的字段创建索引
  2. 创建简单索引:creat index index_name on table_name (colum_name) alter table table_name add index index_name('cloum_name')
  3. 创建唯一索引:creat unique index index_name on table_name (colum_name)
  4. 创建复合索引:creat index index_name on table_name (colum_name1,colum_name2,...)
  5. 删除索引:drop index index_name on table_name
  6. 根据索引名称查询索引字段:select * from table_name where index_name="xxx"
  7. 查询索引:show index from table_name
  8. 索引的原理是btree:二叉树算法
  9. 举例:select * from tableName where id = 4(表中有11条数据):如果不加索引,会一个一个查下去,11次;如果加索引,会取中间一个数,大于右边移动、小于左边移动,每次减半,最多4次

6

3 9

1 2 4 5 7 8 10 11

优点:

  • 提高查询效率
  • 创建唯一索引,保证数据库表中每行数据的唯一性
  • 加速表和表之间的连接

6、索引是不是越多越好

不是

  • 索引会占用物理空间,空间换时间的概念
  • 索引可以提高查询效率,但是会降低insert update、delete效率
  • 不常用的列不要建立索引
  • 经常频繁更新的列不要创建索引,影响插入和更新效率
  • 数据变更需要维护索引,意味着索引越多维护成本越高

7、什么事ORM,为什么要用ORM

8、如何将查询的数据汇总到Excel、txt文件

9、关系型数据库和非关系型数据库的区别

关系型数据库(MySQL、Oracle、SQLserver、postgresql)

数据结构是表,由二维表及其的联系组成的一个数据组织

  • 易于维护:都是表结构,格式一致
  • 使用方便:SQL语言通用,可以写复杂查询
  • 复杂操作:支持SQL语句,可用于一个表以及多个表之间非常复杂的查询
  • 读写性能差,尤其是海量数据的读写效率
  • 固定的表结构,不灵活
  • 高并发读取需求,硬盘io是一个很大瓶颈

非关系型数据库:(MongoDB、Redis、nosql)

是一种数据结构花存储方式的集合,可以是文档或者键值对

  • 格式灵活:存储数据的格式可以使key-value,文档,图片
  • 速度快:使用硬盘或者随机存储器作为载体
  • 高扩展性
  • 成本低,nosql部署简单,基本都是开源软件
  • 不支持SQL
  • 无事务处理

数据结构相对复杂,复杂查询稍欠缺

算法

1、闰年判断

能被4整除且不能被100整除 或 能被400整除

24f3b3b6464d4c4ddd2fd03a7638722f.png

2、IP判断

public static void main(String [] args){

System.out.println("请输入任意IP:");

Scanner scanner = new Scanner(System.in);

String input = scanner.next();

boolean flags = isIp(input);

if (flags){

System.out.println("是IP");

}else {

System.out.println("不是IP");

}

}

 

private static Boolean isIp(String input){

if( input == null || input == ""){

System.out.println("IP为空");

return false;

}

if(input.length()<7 || input.length()>15){

System.out.println("IP长度不对");

return false;

}

if(input.startsWith(".") || input.endsWith(".")){

System.out.println("IP开始或结尾是.");

return false;

}

 

String [] arr = input.split("\\.");

if(arr.length != 4){

System.out.println("IP位数不对");

return false;

}

for (int i=0;i<arr.length;i++){

if(arr[i].length()>1 && arr[i].charAt(0)=='0'){

System.out.println("IP每位数格式不对");

return false;

}

 

for (int j=0;j<arr[i].length();j++){

if(!Character.isDigit(arr[i].charAt(j)) || (arr[i].charAt(j)<'0' && arr[i].charAt(j)>'9')){

return false;

}

}

}

for (int i=0;i<arr.length;i++){

int temp = Integer.parseInt(arr[i]);

if(i==0){

if(temp<1 || temp>255){

return false;

}

}else {

if(temp<0 || temp>255){

return false;

}

}

}

return true;

}

 

3、素数判断

描述:除了1和它本身以外不再有其他的除数整除

e8f0033d098ecdc6853fd8075db2c6d4.png

 

4、输出1+11+111+1111+11111的值

public static void main(String [] args){

System.out.println("请输入任意数字:");

Scanner scanner = new Scanner(System.in);

int input = scanner.nextInt();

if(input<1){

System.out.println("請輸入正確的數");

return;

}

//1----10^0

//2----10^0+10^1

//3----10^0+10^1+10^2

int sum = 0;

int temp = 0;

for (int i=0;i<input;i++){

temp += Math.pow(10,i);

sum += temp;

}

System.out.println(sum);

}

5、斐波那契数列

算法描述:斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……

特别指出:第0项是0,第1项是第一个1。

这个数列从第三项开始,每一项都等于前两项之和

b9fb0fb85302c051ea7bf208057624cd.png

6、冒泡排序

算法描述

1. 比较相邻两个数据如果 第—个比第二个大,就交换两个数

2. 对每一个相邻的数做同样1的工作,这样从开始一队到结尾—队在最后的数就是最大的数。

3. 针对所有元素上面的操作,除了最后一个

4. 重复1~3步骤,知道顺序完成。

9480b7ad5e0e433f42537129f8acf051.png

7、选择排序

算法描述:

1. 在一个长度为 N的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。

2. 第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。

3. 重复以上操作直到第n-1次遍历最小的数和第 n-1 个数交换,排序完成。

b5ec1b18d2472bcc28b79e4813bd53a0.png

 

8、快速排序

算法描述

1. 从数列中挑出—个元素作为基准。

2. 重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(—样大可任意·边)完成后基准处在分区的中间位置。

3. 通过遍归调用把小于基准元素和大雨基准元素印乃子序列进行排序。

efe3d52a6d4b21eb009f193a31d90c98.png

linux

1、循环创建目录:

mkdir -p a/b/c

2、创建文件:

touch a.txt

3、替换 sed:-i 修改文件内容

(1)全文替换所有的hi为hello:

sed -i ‘s/hi/hello/g’ a.txt

(2)替换每行第二个hello为world

sed -i ‘s/hello/world/2’ a.txt

(3)替换第2行所有内容为‘new’:

sed -i '2c new' a.txt

(4)替换第2到6行内容为newtest:替换后4行内容变成1行newtest

sed -i '2,6c newtest' a.txt

4、查看文件内容:

(1)cat:查看全部内容

(2)head:查看前x行 head -n x c.txt

(3)tail:查看后x行 tail -n x c.txt

(4)tail -f 动态查看 tail -20f c.txt 动态查看近20行内容

(5)查看日志中的关键字 并返回关键字所在行:cat a.txt | grep 'xxx'

(6)如何快速定位到日志中的报错信息:

5、统计某个字符出现的次数

(1) 以行统计 出现多少行: cat a.txt | grep ‘hi’ | wc -l

(2) 如果一行中重复出现,统计一次: cat a.txt | grep ‘hi’ | wc -l

如果一行中重复出现,统计多次: cat a.txt | grep -o ‘hi’| | wc -l

6、awk:

在文件或者字符串中指定的规则浏览和抽取信息。把文件逐行读入,以空格为默认分隔符将每行切片,然后再进行后续的处理

7、xargs:

给命令传递参数的过滤器,善于把标准数据转换为命令行参数,在这里则将获取前一个命令的标准输出然后转换为命令行参数

8、一个超级常用的命令:杀掉java进程

ps -ef | grep java | grep -v grep | awk ‘{print $2}’ | xargs kill -9

linux日志关键字查找:grep 关键字1 文件名 | grep 关键字2 | more

9、chmod:修改权限 rwxr-xr--

  • chmod 777 a.txt
  • chmod a+r a.txt
  • chmod o+r a.txt
  • chmod g+r a.txt
  • chmod u+r a.txt
  • o-代表other;g-代表group;u-代表user;a-代表所有角色

修改文件/文件夹的访问权限

-R 进行递归的持续变更,连同次目录下的所有文件都变更

10、chown:修改所属者

chown [–R] 属主名 文件名

chown [-R] 属主名:属组名 文件名

  • chown root:root a.txt 将文件a.txt所属主和所属组都改为root
  • chown root a.txt

11、chgrp:更改文件所属组

chgrp [-R] 属组名文件名

  • chgrp root a.txt

12、显示当前用户名:whoami

13、切换为root:su -root

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/979768
推荐阅读
相关标签
  

闽ICP备14008679号