1:RESTful规范是什么,怎么实现?
REST是一种软件架构风格,提供了一组设计原则和约束条件。每一个对象都通过URL来表示,对象用户负责将状态信息打包进每一条信息内,客户端的无状态请求在头部包含方法信息,即get post put delete(增删改查)。
当我们想表示一个网络资源的时候,可以使用两种方式:
传统风格资源描述形式:
http://localhost/user/saveUser
保存用户信息
http://localhost/user/getById?id=1
查询id为1的用户信息
Rest风格描述形式:
http://localhost/user
http://localhost/user/1
传统方式一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,因为会程序的人读取了你的请求url地址,就大概知道该url实现的是一个什么样的操作。在REST中按照不同的请求方式代表不同的操作类型。
- 发送GET请求是用来做查询
- 发送POST请求是用来做新增
- 发送PUT请求是用来做修改
- 发送DELETE请求是用来做删除
所以REST的优点有:
1.隐藏资源的访问行为,无法通过地址得知对资源是何种操作
2.书写简化
上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范 。这种架构设计项目可以降低开发的复杂性,提高系统的可伸缩性。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts......
根据REST风格对资源进行访问称为==RESTful==
后期我们在进行开发的过程中,大多是都是遵从REST风格来访问我们的后台服务。
2:前后端交互数据格式?
前后端交互常用的数据格式有:json、xml、form表格。
2.1.json(主流数据格式)
使用json数据结构,传输效率高,解析简单,是目前最流行的一种数据交互格式。
2.1.1 数据交互方式
- 基本类型
{“键” : 值, “键” : “值”,…},以大括号开始,键的名称加上冒号,然后跟上对应的的值,若有其他键值对则以逗号进行分割。
{
"name": "小新",
“age": 18,
"sex": true
}
- 数组类型
[{“键” : 值, “键” : “值”},{“键” : 值, “键” : “值”},…],以中括号开始,其间的数据通过逗号进行分割。
[
{
“name”: “小新”,
“age”: 3,
“sex”: true
},
{
“name”: “妮妮”,
“age”: 3,
“sex”: false
}
]
- 对象嵌套
由上面两种类型组成,因为值的不固定性,可以演变出各种各样的嵌套类型。
{
“class”: “小二班”,
“teacher”: {
“Chinese”:"小花老师",
“math”: “吉永老师”
},
“students”: [
{
“name”: “小新”,
“age”: 3,
“sex”: true
},
{
“name”: “妮妮”,
“age”: 3,
“sex”: false
}
]
}
2.2 XML(较少使用)
具有跨平台、跨语言的特点。XML又称为可扩展标记语言,是指跨语言的数据格式。目前json正在慢慢取代它的地位,但在各个地方我们还是能经常见到,所以了解它也是我们的必须之课。
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
-
所有XML元素都须有关闭标签
在html中,经常会看到没有关闭标签的元素,但在xml中,省略关闭标签是非法的,所有元素都必须有关闭标签。
- xml标签对大小写敏感
xml元素使用xml标签进行定义,xml标签对大小写敏感。在xml中,标签与标签是不同的,必须使用相同大小写来编写打开标签和关闭标签。
- xml必须正确嵌套
正确嵌套是指元素是在元素内打开的,那么它必须在元素内关闭。
- xml文档必须有根元素
xml文档必须有一个元素是所有其他元素的父元素,该元素称为根元素。
- xml的属性值必须加引号
与html类似,xml也可拥有属性,且属性值须加上引号。
2.3 Form表格
这个格式会把数据转成name1=value1&name2=value2这样的格式,在调试器中会显示form data,然后是对应的键值。
3:Ajax异步请求如何实现?
即异步的
JavaScript
和XML
,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页。Ajax
的原理简单来说通过XmlHttpRequest
对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript
来操作DOM
而更新页面
实现过程:
实现
Ajax
异步交互需要服务器逻辑进行配合,需要完成以下步骤:
创建
Ajax
的核心对象XMLHttpRequest
对象通过
XMLHttpRequest
对象的open()
方法与服务端建立连接构建请求所需的数据内容,并通过
XMLHttpRequest
对象的send()
方法发送给服务器端通过
XMLHttpRequest
对象提供的onreadystatechange
事件监听服务器端的通信状态接受并处理服务端向客户端响应的数据结果
将处理结果更新到
HTML
页面中
4:MQ是什么?
尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq_哔哩哔哩_bilibili
RocketMQ基础知识总结 | JavaGuide(Java面试+学习指南)
引用两个比较好的讲解
5:单元测试是什么?
针对程序模块(软件设计的最小单位)进行的正确性检验测试工作。程序单元是应用的 最小可测试部件 。在面向过程编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
单元测试的优点:
1:单元测试可以为重构提供信心,降低重构的成本。我们要像重视生产代码那样,重视单元测试。
2:提高代码质量。由于每个单元有独立的逻辑,做单元测试时需要隔离外部依赖,确保这些依赖不影响验证逻辑。因为要把各种依赖分离,单元测试会促进工程进行组件拆分,整理工程依赖关系,更大程度减少代码耦合。这样写出来的代码,更好维护,更好扩展,从而提高代码质量。
3:减少 bug。一个机器,由各种细小的零件组成,如果其中某件零件坏了,机器运行故障。必须保证每个零件都按设计图要求的规格,机器才能正常运行。一个可单元测试的工程,会把业务、功能分割成规模更小、有独立的逻辑部件,称为单元。单元测试的目标,就是保证各个单元的逻辑正确性。单元测试保障工程各个“零件”按“规格”(需求)执行,从而保证整个“机器”(项目)运行正确,最大限度减少 bug。
4:快速定位 bug。如果程序有 bug,我们运行一次全部单元测试,找到不通过的测试,可以很快地定位对应的执行代码。修复代码后,运行对应的单元测试;如还不通过,继续修改,运行测试.....直到测试通过。
5:持续集成依赖单元测试。持续集成需要依赖单元测试,当持续集成服务自动构建新代码之后,会自动运行单元测试来发现代码错误。
6:在测试过程中找到了什么bug?
- 异常信息提示未按照给出的处理实现(通常在测试过程中,异常类的测试可能测试得不够全面);
- 可以绕过身份验证,大多是需要用户登录才能访问的接口,却发现能够不带用户token 也能访问接口;
- 密码安全问题,在APP 端输入的密码掩码展示了,但是通过抓包,发现接口请求参数里边的密码明文展示;
- 提现输入框,金额可以输入负数(未校验);
输入框为空/最大值判断;为空、最大值显示。设计时,应统一规范规则,特别是输入框最大值。还有内容为空时页面如何展示。(一般应为文字内容过多或为空时,页面排版错乱。内容为空时,会显示:NULL。图片数据为空,会保留为空的图片数据位置。链接为空时,点击图片,会刷新页面。)
重复性判断。 如身份证号,手机号等唯一性的值,提交时应有重复性的判断。(如导入时手机号重复,用户的部分信息应更新显示为最新的数据。)
输入框文本内容判断未加限制。像手机号不能输入非数字以外的字符,长度的限制;这些在输入或者提交的时候应加判断,不允许非法输入。
功能未实现或只实现了部分/功能实现错误。这类问题在测试过程中也经常出现,提交测试的版本有的只实现了部分功能,未实现产品需求说明书里的全部功能,或者功能与需求不一致,测试时流程走不通。