09-测试开发
09-测试开发
001-执行一个Cucumber测试场景所需的两个文件是什么?
1、步骤定义文件
2、TestRunner文件 这是运行一个Cucumber测试场景需要的两个文件
002-[select * ]和[select 全部字段]对比,各自的优缺点有哪些?
两者的特点如下:
1、 前者要解析数据字典,后者不需要
2、结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
3、表字段改名,前者不需要修改,后者需要改
4、后者可以建立索引进行优化,前者无法优化
5、后者的可读性比前者要高
【注意,在MySQL中,也对select * 有进行一定的优化处理】
003-python 使用什么开发框架起服务
公司的平台用的 django,使用起来非常便捷;对于一些比较小型的业务也会使用 flask 或者最新的 fastapi。
004-用代码实现单例模式
public class SingletonTest { // 1、构造方法私有化 private SingletonTest() {} // 2、创建私有静态内部类 private static class SingletonHolder { // 3、创建静态私有 final 类型的实例对象 private static final SingletonTest singleton2 = new SingletonTest(); } // 4、创建公有静态获取实例的方法 public static SingletonTest getInstance() { return SingletonHolder.singleton2; } }
005-说一下什么是乐观锁和悲观锁?
乐观锁:是指操作数据时认为其他业务方不会修改数据,只有在保存时,才检查数据是否被修改
悲观锁:是指操作数据时认为其他业务方会修改数据,在操作前先将数据锁定、再做修改
006-简单介绍一下JVM由哪些部分组成?
所有线程共享部分:方法区、堆;
线程私有部分:栈、程序记数器、本地方法栈 另外还有类加载器、执行引擎、本地接口等;
007-解释Maven常用的命令
Maven不同阶段有如下一些命令
1、maven validate:确认项目是正确的,并且所有必要的信息都是可用的
2、maven compile:编译项目的源代码
3、maven test:使用合适的单元测试框架对编译后的源代码进行测试
4、maven package:将编译后的代码打包成可分发的格式,比如JAR包
5、maven verify:对集成测试的结果运行检查,以确保满足质量标准
6、maven install:将包安装到本地存储库中,以便本地的其他项目使用依赖
7、maven deplohy:将最终包复制到远程存储库,以便与其他开发人员和项目共享。
008-Cucumber的主要优点是什么?
1、让业务中不会代码的相关人员也可以参与进来
2、Cucumber测试专注于最终用户体验
3、Cucumber测试的编写风格可以让开发者更容易重用代码
4、设置和执行都根据快速和简单
5、是软件测试有效的工具
009-Vue 表单修饰符有哪些
.lazy 通过这个修饰符,转变为在 change 事件再同步
.number 自动将用户输入值转化为数值类型
.trim 自动过滤用户输入的收尾空格
010-添加索引一定能提升查询效率吗?
不一定。
索引只有在命中的情况下才能提升查询效率;某些列虽然定义的索引,但依据这些列作为查询条件时,可能并不会使用索引,需要在工作中对查询语句 作持续的优化。 另外,对于一些数据经常变化的列,添加索引还有可能降低插入、修改的效率,因为要频繁的重建索引
011-为什么要给列添加索引?一定能提高效率吗?
添加索引的目的:加索引的目的是提高按指定列进行查询时的效率,特别是当表的数据量足够多时
是否能提高效率:不一定都能提高效率,因为某列定义的索引,需要单独创建索引页,插入、更新数据效率就会变低,故一般对于频繁个性的列,不定义成索引列
012-docker怎么搭建环境
1、开发会将修改后的项目文件打包成镜像发给我们测试。
2、我们测试会将这个镜像上传到测试服务器,通过dokcer load -i加载镜像
3、获取到镜像后再通过docker run运行容器。
4、通过dokcer ps查看到容易正在运行就可以访问到我们的测试环境了。
013-编写一个使用Cucumber框架的场景大纲示例?
Feature: Scenario Outline
Scenario Outline: Login for Facebook
Given user navigates to Facebook
When Ienter Username as "" andPasswordas ""
Then login shouldbe unsuccessful
Example:
|username |password |
|username1 |password1 |
|username2 |password2 |
014-使用DTO的目的是什么?
保证服务层、控制层的接口只接收需要的数据,只返回必需的数据
015-你使用过的常用的git插件有哪些?
常用的git插件有: – Email Extension – Git – JUnit – Maven Integration – NodeJS Plugin – SSH Plugin – Pipeline – Browserstack
016-说说你们公司后端项目REST接口响应数据的格式。
所有的REST接口响应数据,通常格式保持一致,方便调用方进行处理。常用的格式为,包含code、message、data、total; code:业务代码,一般0表示业务处理成功,999表示失败,也可以使用其他编码 message:业务消息,与code相关的描述信息 data:业务数据,一般当code为0时,携带业务数据返回 total:汇总数量,用于兼容分页请求的响应
017-解释一下什么是箭头函数?
箭头函数是在es6或更高版本中编写函数表达式的简明方法。箭头函数不能用作构造函数,也不支持this,arguments,super或new.target关键字,它最适合非方法函数。
018-什么是Cucumber的场景大纲?它的目的是什么?
使用场景大纲可以对多个数据集执行相同的场景,数据是由表格结构提供的。
019-Vue中v-if与v-show区别?
区别如下:
1、v-if是真正的”条件渲染“,v-show不是;
2、v-if的切换开销更高,v-show的初始渲染开销更高;
3、如果页面显示过程中会频繁切换显示/隐藏,使用v-show;否则,使用v-if
020-描述一下常见的缓存问题和特点?
常见缓存问题有:
缓存穿透:缓存和DB都没有数据,每次请求都穿透到DB
缓存击穿:单个缓存key过期时,有大量访问直接到DB
缓存雪崩:众多缓存key同时过期,导致所有访问都直接到DB
021-什么时候使用Rspec,什么时候使用Cucumber?
当开发人员参与描述步骤和绑定代码的过程时,应该使用Rspec。但是,当产品所有者负责编写特性文件时,应该使用Cucumber。
022-如何自定义一个JMeter函数?
- 添加POM依赖ApacheJMeter_java、ApacheJMeter_core,注意与使用的JMeter版本保持一致
- 添加自定义函数,继承AbstractFunction类
- 在execute方法中添加插件逻辑
- 在getReferenceKey方法中返回自定义名称函数
- 如果函数有参数,在setParameters方法获取传递过来的参数
- 将插件打包成.jar文件,在项目下的target目录中
- 将.jar文件拷贝到JMeter安装目录的lib/ext目录中
- 重新打开JMeter,此时就可以JMeter中使用.jar包中自定义的函数
023-什么是Cucumber的功能文件(featurefile)?
编写Cucumber测试的文件成为功能文件(特性文件),功能文件的扩展名必须是”.feature”。
024-简述数据库设计时,数据冗余的优点和缺点?
优点:空间换时间,一个表冗余更多字段,查询时,不需要join多个表,效率更高 缺点:1、占用存储空间;2、容易带来不一致性
025-CSS中常用的选择器有哪些?
常用的有:类选择器、标签选择器、ID选择器、分组选择器等
026-简述HashMap的原理?
其主要的工作原理如下
1、对要存储的数据使用key-value的形式,对key做hash计算后,按数组存储,查询效率高
2、如果hash计算后,有相同的key,该hash值相同 的使用链表
3、如果链表长度超过8,使用红黑树
027-瀑布模型和螺旋模型的主要区别是什么?
主要区别是螺旋模型在每次需求分析后引入了风险分析,弥补瀑布模型在直到后续某个软件过程阶段出现需求变更工问题导致软件成本高昂、周期严重滞后问题。
028-简述Redis两种数据持久化方式RDB和AOF的特点
RDB:1、二进制持久化到.rdb文件;2、定时fork一个进程进行持久化;3、在定时时间差范围内,会有数据丢失;4、恢复效率高;5、适用于全是备份 AOF:1、将写入、更新、删除缓存的指令以文本形式持久化到.aof文件;2、没有定时时间差,没有数据丢失;3、文件相对较大,恢复时间较长;4、由于有些指令重复执行没有意义,恢复效率低
029-请编写一个Cucumber框架的feature文件示例
Feature:Logintosite
Scenario:Userlogin with valid credentials
Given user is on loginpage
When user enters valid username And user enters valid password
Then login success message isdisplayed
030-简述ArrayList与LinkedList区别?
主要差异如下:
1、存储结构不同,ArrayList是数组,LinkedList是链表;
2、由于1的存储结构不同,其效率也不同,ArrayList检索效率高,但插入、删除等效率低,LinkedList则不同,查询效率低,但插入、删除效率高;
3、容量初值及扩展方式不尽相同
031-简述数据库设计三范式规则?
三范式分别为:
1、第一范式:所有的列都是元子性,一可再分;
2、第二范式:在第一范式的基础上,所有非主键列都完全依赖于主键,而非部分;
3、第三范式:,在第二范式的基础上,所有非主键列都直接依赖于主键,不能传递依赖;
032-Vue中v-bind与v-model区别?
区别为:
前者为单向绑定,可在HTML标签属性添加v-bind实现单向绑定组件data()部分数据
后者为双向绑定,一般用于使用v-model绑定表单元素
033-使用过 Vue SSR 吗?什么是 SSR?
SSR 也就是服务端渲染,也就是将 Vue 在客户端把标签渲染成 HTML 的工作放在服务端完成,然后再把 html 直接返回给客户端。
034-java web应用的三层结构分别是什么?
分别是表现层、业务逻辑层、数据访问层。
035-Maven有哪些不同的插件,他们的作用分别是什么?
maven-jar-plugin:处理 jar 包生成;
spring-boot-maven-plugin:SpringBoot 项目打包;
maven-assembly-plugin:自定义打包结构。
036-Java使用Redis实现分布式锁常用的方式是什么?
实现方式为:
1、自己使用Redis的SETNX指令,先用其原子特性实现;
2、使用分布式锁组件Redission
037-说出至少4种vue当中的指令和它的用法?
v-if:判断是否隐藏;
v-for:数据循环出来;
v-bind:class:绑定一个属性;
v-model:实现双向绑定
038-怎么理解内存泄露和内存释放?
内存泄露:是指程序在申请内存后,无法释放已申请的内存空间
内存释放:将驻留在内存中的数据从内存中释放出来,以提高系统内存资源的利用率,进而提升系统性能。
039-在Cucumber中什么是Before, After, Beforestep 和Afterstep Hooks?
带有@Before注解的将在每个场景(scenario)之前执行
带有@BeforeStep 注解的将在每个步骤(step)之前执行
带有@After 注解的将在每个步骤(step)之后执行
带有@AfterStep 注解的将在每个步骤(step)之后执行
040-My SQL中explain是做什么用的?
explain是对SQL语句进行查询分析的,如索引命中尾部、扫描行数等
041-索引的作用是什么?
添加索引主要是用于加快select时的查询效率。
042-如果要你做一个产品的数据库表设计,你将会怎么做?
进行设计的过程如下:
1、过程:需求分析、概念模型设计、逻辑模型设计、物理模型设计、数据验证、持续迭代
2、过程中将会产生E-R图和物理模型设计文件
043-事务隔离级别分别有哪几种?MySQL默认的事务隔离级别是什么?
事务隔离级别从低到高分别为:读未提交、读已提交、可重复读、串行化; MySQL的默认事务隔离级别为可重复读
044-Cucumber中编写场景时使用的关键字有哪些?
Cucumber常用的关键字有: –Feature –Background –Scenario –Given –When –Then –And –But
045-HTML中常用的表单元素标签有哪些?
传统的HTML表单元素主要通过form、input、select、textarea等标签,分别呈现文本框、单选按钮、筛选框、下拉框、多行文本框等呈现作为用户的输入项。
046-简述需求分析的过程和意义
需要分析主要过程包括:1、获取需求、识别问题、确定边界;2、分析需求、建议产品逻辑模型;3、需求文档化;4、需求验证与评审
需求分析的意义是确定产品实际的需求清单、确定需求边界、并获取业务干系人确认
047-Cucumber中参数化用的是什么符号?
在步骤中可以使用<>来定义参数,在尝试根据步骤定义匹配步骤之前,Cucumber将使用表中的值替换这些参数。
048-如何自定义注解?
Java中自定义注解步骤如下:
1、使用@interface关键字定义,方式类似于类定义 ;
2、有两个关键的元注解:@Target表示自定义注解应用目标,可以是类、属性、方法、参数等;@Retention表示注解的生命周期,可以是针对源代码、class文件和运行时
049-简述Interceptor的原理和应用场景?
原理:通过自定义的Interceptor,并配置到WebMvcConfig中,实现对所有Controller中所有的Action进行拦截;
应用场景:典型的如认证与授权、日志记录等;
050-一个Vue组件Script部分包含哪些重要的属性及钩子方法?
属性有:name、components、props、computed、watch、methods等
钩子方法有:data()、created()、mounted()等
051-JMeter二次开发主要包含哪些内容或组件的开发?
主要是下面几个方向: 1、自定义函数;2、自定义组件(如取样器、配置元件等);3、基于引擎;4、完整的开发
052-CSS中进行height、width度量的尺寸单位有哪些?
px、rem、%、vh\vw等
053-请写出你所了解的服务器中间件及其含义
1、MQ是一种消息中间件,比较主流的消息中间件有ActiveMQ、RabbitMQ和kafka
2、Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
3、Nginx 集群服务器之间的任务的分发,通过Nginx服务实现。
4、es 搜索引擎
054-Redis持久化两种方式是什么?
RDB、AOF;各有特点。
055-vue之中的computed 和 watch 的区别和运用的场景
computed 是计算属性:计算属性依赖其它属性计算值,并且 computed 的值有缓存,职友集当计算值变化才会返回内容,他可以设置getter和setter。 watch是监听器: 监听到值的变化就会执行回调,在回调中可以进行一系列的操作。
计算属性一般用在模板渲染中,某个值是依赖其它响应对象甚至是计算属性而来;而侦听属性适用于观测某个值的变化去完成一段复杂的业务逻辑。
056-列出5个docker命令常用的参数,并解释其作用。
docker run -d -p 27017:27017 --name mymongo mongo
-d 后台运行
-p 指定容器与宿主机端口映射关系
-name 为容器指定一个名称
-P: 随机端口映射,容器内部端口随机映射到主机的端口
**-v: **绑定一个卷
057-请简述后端开发中常见的Entity与DTO的差异
Entity:实体类,常用于在各种数据访问组件中与数据库中的表映射 DTO:数据传输对象,常用于服务层、应用层、控制器层输入/输出参数定义,使得接口更加符合要求、更规范 两者一般会在服务层进行映射
058-有ECMAScript中,数组的常用的操作方法有哪些?
常用的方法有:
forEach:遍历;
filter:按条件过滤;
map:映射异构数据;
some:数组中任一条数据满足个条件返回true,否则返回false;
every:数组中所有数据满足条件返回true,否则返回false
059-简单介绍一下Vue3中的provide/Inject的作用及应用场景
是解决多层次的组件调用通过props传递数据时过于麻烦的问题,只要在祖先组件中使用Provide定义传递的数据,在其多层次的后代组件中,使用Inject获取即可,不要一层一层传递;
但如果有更复杂的组件间数据传递,还可考虑vuex
060-常见的索引有哪些?各有什么特点?
常见索引及特点如下:
聚集索引:数据表数据按聚集索引字段顺序存放、唯一、不能为空,一般主键索引就是聚集索引
唯一索引:索引字段必须唯一,可以有一个空值
普通索引:按照数据库排序规则添加索引页,加快查询效率
061-SpringBoot工程中常用的注解有哪些?
1、SpringBootApplication;2、Repository;3、Service;4、RestController;5、ResponseBody;6、Component等。
062-缓存的作用有哪些?
提高吞吐量、提升性能、加快用户响应、消除热点数据等
063-K8S的简述
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。
是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
064-简述django中的ORM
ORM,即对象关系映射。在django中使用模型类表示数据库里的表,模型类的字段变量表示数据库里的表字段,模型实例表示一条数据。
065-数据库设计的E-R图包含哪些元素?
实体、关系、属性,其中关系包括1对1、1对多和多对多
066-vue-router的两种模式
hash模式:即地址栏 URL 中的 # 符号;
history模式:window.history对象打印出来可以看到里边提供的方法和记录长度。利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。
067-WebSocket常见应用场景有哪些?
常见的应用场景有:1、扫码登录;2、股票行情;3、实时多人游戏;4、基于地理位置的服务等
068-Cucumber使用的是什么编程语言?
Cucumber支持多种不同的编程语言,包括java、JavaScript、PHP、.Net、Python、Perl等
069-Java后端分布式部署如何实现类似多线程的synchronized锁?
使用分布式锁,常用的实现方式有:1、数据库加行锁;2、Redis实现;3、Zookepper实现
070-Cucumber中的Background关键字有什么作用?
Background关键字允许为该功能中的场景添加一些上下文,它可以包含一个或者多个给定步骤,它在每个场景之前运行,但在任何before钩子之后,在功能文件中,将Background放在第一个场景之前,每个功能只能有一组背景步骤,如果你需要不同的场景使用不同的Background步骤,你需要将他们分成不同的功能文件。
071-用一段代码实现一个链表倒序
void List_Invert(Node *head) { if(head == NULL) { printf("列表不能为空!\n"); return ; }
Node *p = head; //上一个节点
Node *q = head->next; //下一节点
head->next = NULL;
while(q != NULL) //原链表实现了倒序
{
p = q;
q = q->next;
//p节点使用用头插法插入到当前链表中
p->next = head->next;
head->next = p;
}
}
072-什么是断言类型?什么是junit断言?
断言用于验证测试用例,并根据结果判断测试用例是否执行通过/失败,断言常见类型有:assertEquals、assertFalse、assertTrue。
073-vue中created与mounted区别
created和mounted都vue生命周期的钩子函数。 在created阶段,实例已经被初始化,但是还没有挂载至el上,所以我们无法获取到对应的节点,但是此时我们是可以获取到vue中data与methods中的数据的;
在mounted阶段,vue的template成功挂载在$el中,此时一个完整的页面已经能够显示在浏览器中,所以在这个阶段,可以调用节点了
074-Spring相关的常用注解有哪些?
Spring常用的注解很多,常用的有:
1、SpringBoot相关:@SpringApplication、@ControllerAdvice、@WebFilter、@Order
2、注入相关:@Configuration、@Bean、@Component、@Service、@Repository、@Resource、@Value等
3、REST相关:@Controller、@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等
4、AOP相关:@Aspect、@Pointcut、@Before、@After、@Around等
5、缓存框架相关:@CacheConfig、@Cacheable、@CachePut、@CacheEvict、@Caching等
6、其他:@Schedule、@PostConstruct等
075-JVM中JIT的作用是什么?
其作用是提高Java字节码的运行效率,将高频代码由解释执行转为编译为机器指令执行。
076-什么是lambda函数?有什么作用?
lambda函数是一个可以接收多个参数并返回单个表达式值的函数。它就是常说的匿名函数,即用即扔,很适合作为参数传入一些高阶函数,而在函数外部不适用的情况。
077-简述Spring中AOP的作用是什么?
其主要作用是:在不影响本身业务逻辑的情况下,对程序中是类型、方法等其他作用切入点实现拦截等处理,广泛应用于Spring中的一些基础工具与框架。
078-网状、层次数据模型与关系数据模型的最大的区别是什么?
最大的差别是描述、组织、存储数据的方式不相同。
网状:符合现实情况,但复杂度相对较高
层次:类似树形式,结构层次清晰
关系:采用行、列二维表形式组织,最容易理解,也是关系型数据库采用的模式
079-简单介绍一下反射机制?
其主要逻辑如下
1、Java程序在运行期间,动态的获取对象的类信息及相关的属性、方法等其他元信息的能力,就是反射机制
2、广泛应用在Spring容器、第三方组件(如MyBatis)、权限拦截等场景
080-列出你在项目中常用的UML图及场景?
1、类图,主要描述复杂代码类间关系 2、时序图,主要描述业务层次、代码模块层次间的调用层次、存活周期情况 3、用例图,多用于需求分析、系统设计阶段参与者、功能的描述 4、状态图,多用于复杂业务对象的状态转换
081-$route和$router的区别
$router为VueRouter实例,想要导航到不同URL,则使用$router.push方法。
$route为当前router跳转对象里面可以获取name、path、query、params等。
082-Jbehave和Cucumber的区别是什么?
JBehave是纯Java框架,而Cucumber是基于ruby的。
JBehave基于story的,而Cucumber基于特性。
JBehave是一个用java编写的BDD(Behavior-Driven-Design)框架, java界的Cucumber。
JBehave的特点
1)纯Java实现,能调用java API的地方就能使用。
2)能够定义和执行基于文本的Story,让我们能够从用户价值出发进行开发。(BDD都是这个目的)。
3)User stories可以放在classpath,也可通过外部URL传进来。
4)User stories可以并发执行且能够指定并发执行的线程数。
5)可以通过一些用户定义的信息把User Stories形成一部完整文档。
6)通过Anotation把Story的步骤对应到Java类中,还能够把自动把Story中的String参数转换成方法对应的参数类型。(How?)
7)基于Anotation的运行配置信息,指定Story对应的Steps类文件
8)支持通过第三方IOC容器(Spring,Guice,PicoContainer,Weld)管理配置信息和Steps类
9)支持通过Groovy写配置信息和Steps文件
10)支持报表,既可以生成可读性良好的报表格式(HTML,TXT ),还支持Json,XML格式供外部程序调用。
11)未实现的步骤会自动标记Pending
12)支持任何语言书写Story
13)可以使用Junit或者任何基于anotation的测试框架运行Story测试
14)支持Maven,Ant集成,通过脚本运行BDD测试脚本。
083-怎么解决redis和数据库数据不一致的问题
不管采用什么方案都无法保证绝对的一致性,规范写流程和读流程后可以在很大程度上保证数据的一致性,如果是高并发场景可以结合redis分布式锁,在效率和一致性上取得平衡。
084-JUnit有哪些常见的注解?
在junit中常用的注解有:@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters
085-用过哪些中间件?
中间件与项目有关,如果是java,常用的是tomcat、reids、RocketMQ、ES、MongoDB
086-redis缓存的实现逻辑,如何测试
1、缓存时间设置合理性。 缓存时间设置,需要根据数据更新的频次合理设置;缓存时间太长会导致用户访问到的数据一直是老的,缓存设置时间太短对数据库访问会比较频繁。所以最好调研清楚实际数据更新的频次,再去设置缓存时间
2、存储逻辑合理性。这个以两个维度去测试: (1)服务端或数据库返回数据正确性。返回异常,不应该缓存;返回数据正常,才缓存; (2)存储缓存时查询条件。比如要缓存歌曲信息,可以查询歌名缓存也可以查询歌手缓存歌曲list;根据业务实际需求确认。
3、缓存读取逻辑合理性。以下是比较合理的逻辑: (1)有缓存,优先读取缓存; (2)无缓存,请求接口或查数据库获取数据;并存储缓存
4、缓存更新逻辑 缓存失效后是否会更新缓存的内容
5、缓存内容 redis缓存具体内容是否正确、格式(list、string)是否合理、实际每次缓存的数据数是否与需求一致
6、缓存数据重复 同样的数据触发保存缓存逻辑之后,应该只有一条在redis缓存中可以查到,重复缓存会浪费资源
087-列出两个TestNG中有但是JUnit没有的注解
如@BeforeSuite 和@BeforeGroups
088-java web应用的三层结构
MVC
089-Cucumber怎么与Selenium WebDriver进行集成?
1、在Maven项目中添加Selenium和Cucumber相关的依赖
2、下载对应浏览器驱动文件
3、编写Cucumber Feature文件,包含Given、When、Then结构自然语言描述编写测试用例
4、在src目录下新建stepDefinitions包,新建类实现之前的feature里面定义的测试步骤
5、在新建类中初始化Driver,实现对应测试步骤
090-什么是Spring中的IoC?
IoC,控制反转。
传统形式下,要使用一个类型的对象,使用方主动new来产生对象,并管理期生命周期 使用IoC后,对象的产生不再主动new,而是将主动权给IoC容器或工具产生对象,使用时直接引用即可,并无需负责对象生命周期 Spring容器即IoC容器。
091-什么是数据的独立性?有几个层次?
数据独立性指应用程序和数据库的数据构造之间相互独立,不受影响 分为物理独立性和逻辑独立性两个层次
092-描述一下你常用的后端HTTP请求组件?
RestTemplate、HttpClient、OkHttp3、RestAssured等
093-Cucumber步骤定义文件的目的是什么?
Cucumber中的步骤定义是一个Java方法,其表达式将其链接到一个或者多个Cucumber步骤,当Cucumber在某个场景中执行一个Gherkin步骤时,它将寻找匹配的步骤定义并执行它。 比如下面的Cucumber场景: Scenario: Login
Given user logins to the site 用户登录到步骤的站点部分(Given关键字后面的文本)将匹配以下步骤定义: public class StepDefinitions{ @Given("user logins to the site") public void user_login_to_site(){ System.out.println("Userisloggedintothesite"); } }
094-请介绍下java web应用的三层结构
表现层(Presentation layer) 表现层可以说是距离用户最近的层,主要是用于接收用户输入的数据和显示处理后用户需要的数据。一般表现为界面,用户通过界面输入查询数据和得到需要的数据。
业务逻辑层(Business Logic Layer) 业务逻辑层是处于表现层和数据访问层之间,主要是从数据库中得到数据然后对数据进行逻辑处理。
数据访问层(Data access layer) 数据访问层是直接和数据库打交道的,对数据进行“增、删、改、查”等基本的操作。
095-Vuex 页面刷新数据丢失怎么解决?
需要做 vuex 数据持久化,一般使用本地储存的方案来保存数据,可以自己存储在 localStorage或cookie中,也可以使用第三方插件
096-请简述MySQL常见的索引用哪些?
常见的索引有:
1、主键索引:是一种特殊的唯一索引,一般为聚集索引,不能为空;
2、普通索引:针对普通列创建的索引,能提高查询效率;
3、唯一索引:与普通索引一样,只是数据必须唯一,可以有一个空值;
4、组合索引:组合多个列进行索引,慎用
097-简述JUnit单元测试步骤。
1、导入依赖包JUnit
2、创建测试类继承于TestCase
3、在测试方法前加上test注解
4、编写测试方法、断言
5、执行测试,查看结果
098-解释Cucumber中使用的关键字的作用
1、Feature:Feature关键字的目的是提供软件特性的高级描述,并对相关场景进行分组
2、Scenario:除了是一个规范和文档,Scenario也是一个测试,总体来说,您的场景是系统的可执行的规范
3、Given:步骤用于描述系统的初始上下文的场景,它通常是发生在过去的事情。
4、When:描述事件或动作的步骤,这可以是与系统交互的人,也可以是由另一个系统触发的事件。
5、Then:用于描述预期结果的步骤
6、ScenarioOutline:用于多次运行相同的场景,使用不同的值进行组合。
7、Background:允许你条件一些背景到场景的功能,可以包含一个或者多个给定步骤
099-JWT token是由那三部分构成
JWT token的内容主要包含三个部分 1、header(头部):头部通常用来声明类型和加密算法
2、payload(载荷):jwt的主要内容部分,包含签发者,所面向的用户、签发时间、过期时间等相关信息
3、signature(签名):使用header中指定的加密算法,对载荷中的内容进行加密,加密等到的签名
100-简述Nginx如何实现负载均衡?
步骤: 1、部署应用:部署同一个应用的多个负载 2、配置Nginx:在Nginx的conf.d目录添加一个conf配置文件;在配置文件中,使用upstream块指向多个应用负载,并可配置策略;在server中,指定域名和端口,并通过指定location的http_proxy,指向upstream 3、配置DNS:将第2步配置的域名指向第2步中的机器IP地址即可 4、访问:通过域名访问,即是负载均衡的访问
101-CSS中按照样式的位置,一般分为几种?
行内样式:一般在标签类使用style属性定义;内部样式:一般定义在head部分;外部样式:一般在网页外部,以单独的.css文件存在。
102-Spring缓存框架有哪几个常用的注解?
包含@EnableCaching、@CacheConfig、@Cacheable、@Caching、@CachePut、@CacheEvict等
103-请简述后端开发中常见的Entity与DTO的差异。
Entity:实体类,常用于在各种数据访问组件中与数据库中的表映射 DTO:数据传输对象,常用于服务层、应用层、控制器层输入/输出参数定义,使得接口更加符合要求、更规范 两者一般会在服务层进行映射
104-Spring MVC和Spring Boot有什么相同和不同?
首先,两者都是基于Spring,但不是一个维度的技术;
其次, Spring MVC是基于Spring的一个Web应用开发框架,主要替代传统的Servlet;
再有, Spring Boot是基于Spring的一个快速开发脚手架,降低了Spring应用的复杂度,主要也用于开发Web应用,尤其是REST的后端接口
105-Axios的请求拦截和响应拦截一般用在什么场景?
请求拦截:主要用于对前端项目所有请求做通用的拦截,如特殊内容传递,像token
响应拦截:对响应信息做特别处理,如对所有请求失败的响应信息做通用提示功能
106-JMeter中能写Java语言代码吗?一般在什么地方写?
可以,一般在BeanShell取样器、前置BeanShell、后置BeanShell中写Java代码
107-前端跟服务端之间接口是怎么转换的
通过JSON格式传递数据
108-Cucumber中的Examples关键字的作用什么?
假设有一个场景需要测试一组不同的测试数据,这时我们可以使用Examples关键字,场景将会通过配置的测试数据依次执行。
109-Cucumber在Feature文件中用于表达场景的语言时什么?
Cucumber使用Gherkin语言在feature文件中使用关键字如Given, Then, And, When等来定义场景。
110-简单介绍一下企业进行接口自动化怎么做?
1、从团队,技术,资源,收益比等方面评估自动化可行性 2、技术选型,确定解决方案,编写自动化测试脚本,比如使用Java的TestNG+RestAssured+Allure 3、代码维护与升级,提高代码执行的稳定性,可扩展性,代码解耦-》封装-》形成框架。 4、与常见的ci工具比如jenkins做集成,提高自动化程度。 5、探索接口自动化测试平台解决方案,让自动化测试的能力能更好的迁移到开发测试团队的其他成员,更好的赋能于团队。****
111-什么是Cucumber标签,为什么要使用标签?
标签是组织特性和场景的好方法,可以用于两个目的
1、运行场景子集
2、将钩子限制到场景的子集
112-dbms读取一条记录时发生哪些事件?
主要经过几个阶段处理:1、查检查询缓存;2、语法解析;3、预处理;4、查询优化;5、执行计划;6、查询执行引擎;7、返回结果
113-你知道的缓存产品有哪些?
Redis、EhCache、Memcached、内存缓存等
