第 5 章 Spring 应用的测试 - 《Java 研发自测》
为了更好地理解 Spring 相关的测试内容,这里延续前面购买灯泡的类比。在现代社会中,人们大都使用一些具有装饰性或者功能性的灯具。在这种灯具中,灯泡有可能被放到某个灯槽中,或者被包裹在富有艺术感的金属材料里面。因此,我们也就不得不按照厂商的要求来测试或者组装,以实现相应的功能。软件开发也是一样,掌握了 JUnit 和 Mockito 的相关知识后,虽然可以编写大部分测试,但是如果项目中使用了 Spring,它独特的依赖注入方法还是可能会让我们有些无所适从。客观地说,测试需要与业务代码所处的生态环境相结合,这是无法逃避的事实,我们得想办法解决它。Java 开发中目前最流行的体系就是 Spring 生态,日常工作中需要结合 Spring 来实现的测试需求非常多,而且比较重要,但大部分讲解单元测试或 TDD 的图书都很少涉及 Spring 相关知识。基于此,本章将围绕 Spring、Spring Boot 来讲解如何编写单元测试,目标是在 Spring Boot 这种主流的 Spring 框架下,充分利用其技术体系来完成测试(不一定只是单元测试)。我在写这章内容时使用的 Spring Bo ...
第 6 章 RESTful API 测试 - 《Java 研发自测》
API 测试属于集成测试的范畴,手动进行 API 测试有很多方法,例如:
使用 Curl 命令。
使用 Postman。
使用 Swagger 附带的 UI (用户界面)工具。
这些方法都有一个共同的问题,就是实现自动化的反复执行比较困难。比较好的做法是通过编码的方式进行 API 测试,最好放到代码仓库中以自动化的形式完成,并集成在 CI (持续集成)流水线中。在一些企业中有专门的 API 测试平台管理相关测试。这种方式的灵活性会稍弱并与企业内部的基础设施强关联,因此本章选用的工具都是基于开源软件实现的。本章的目标是介绍如何基于源代码编写可以维护的 API 测试,涵盖的内容有:
RESTful API 测试工具集。
第三方 API 的处理。
6.1 RESTful API 测试工具集
Spring Boot 的 spring-boot-starter-test Starter 项目已经为我们准备了一套测试工具,不过为了让 API 测试更有效和便利,除了 Spring 测试套件以外,还需要准备一些额外的基础设施。例如,REST Assured 可以作为 API 测试的基本框架, ...
限流算法
限流是指在系统面临高并发、大流量请求的情况下,限制新的流量对系统的访问,从而保证系统服务的安全性。常用的限流算法有计数器固定窗口算法、滑动窗口算法、漏斗算法和令牌桶算法,下面将对这几种算法进行分别介绍,并给出具体的实现。本文目录如下,略长,读者可以全文阅读,同样也可以只看感兴趣的部分。
计数器固定窗口算法
原理
计数器固定窗口算法是最基础也是最简单的一种限流算法。原理就是对一段固定时间窗口内的请求进行计数,如果请求数超过了阈值,则舍弃该请求;如果没有达到设定的阈值,则接受该请求,且计数加1。当时间窗口结束时,重置计数器为0。
代码实现及测试
实现起来也比较简单,如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182package project.limiter;import java.util.concurrent.at ...
Gradle 详细手册
导语
本文在Gradle文档基础上进行了提取整理,篇幅较长,请按需阅读
Gradle概述
Gradle是专注于灵活性和性能的开源构建自动化工具,一般使用Groovy或KotlinDSL编写构建脚本。 本文只使用Groovy
Gradle的特点:
高性能
Gradle通过仅运行需要运行的任务来避免不必要的工作。 可以使用构建缓存来重用以前运行的任务输出,甚至可以使用其他计算机(具有共享的构建缓存)重用任务输出。
JVM基础
Gradle在JVM上运行。熟悉Java的用户来可以在构建逻辑中使用标准Java API,例如自定义任务类型和插件。 这使得Gradle跨平台更加简单。(Gradle不仅限于构建JVM项目,它甚至附带对构建本机项目的支持。)
约束
和Maven一样,Gradle通过实现约束使常见类型的项目(例如Java项目)易于构建。 应用适当的插件,您可以轻松地为许多项目使用精简的构建脚本。 但是这些约定并没有限制您:Gradle允许您覆盖它们,添加自己的任务以及对基于约定的构建进行许多其他自定义操作。
可扩展性
您可以轻松扩展Gradle以提供您自己的任务类型甚至 ...
苍穹外卖项目:
登录和相关的CRUD:
Nginx教程_54笨鸟Nginx 从入门到实践,万字详解!_nginx_前端下午茶_InfoQ写作社区
相关概念:
12345678910111.DTO是数据传输对象是一种用于封装数据并将其从应用程序的一个子系统发送到另一个子系统的对象。2.N 层应用程序中的服务层最常使用 DTO 在其自身和 UI 层之间传输数据。这里的主要好处是它减少了分布式应用程序中需要通过线路发送的数据量。他们还在 MVC 模式中制作了很棒的模型。3.DTO 的另一个用途是封装方法调用的参数。如果方法采用四个或五个以上参数(把这些参数封装为一个DTO对象),这可能很有用。java这种单值返回对象,可以将多个不同的对象封装在一个DTO对象里面,然后返回该对象,并把该对象传递给其他应用程序。4.DTO类型的对象, 不应该掺杂任何业务逻辑; 只包含获取和设置属性的方法, 以及用于序列化或反序列化的解析器。5.如果想从数据库传输一些信息,但其中包含一些敏感信息,那么我们可以使用 DTO,只传输必要的信息。6.DTO的好处之一:用于在服务器和客户端进程通信的时候,可以一次性传递更多的信息。 ...
幂等
HTTP请求的幂等:
Http请求的 GET , HEAD , PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
幂等问题产生原因:
实现幂等的方案:
Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?-CSDN博客1.数据库唯一主键2.数据库乐观锁:3.防重Token:4.分布式锁保证接口幂等:
12345678910111213141516171819202122 RLock lock = redissonClient.getLock(LOCK_USER_REGISTER_KEY + requestParam.getUsername()); try {// tryLock表示尝试获取锁,获取成功返回true否则返回false if (lock.tryLock()) { try { int inserted = baseMapper.insert(BeanUtil.toBe ...
mybatis-plus
前言:
采用的是黑马的mybatisPlus教程!mybatis教程!使用的springboot3和JDK17完成的!和黑马的有点区别!
知识点:
1.Hutool 是一个由 Java 编写的强大、完善且易用的 Java 工具类库,它封装了很多常用的 Java 方法,包括但不限于日期时间处理、字符串处理、文件操作、网络请求、加密解密、数据验证、反射工具等。通过引入 hutool-all 依赖,开发者可以方便地在项目中使用 Hutool 提供的各种便捷工具方法,以减少重复造轮子的工作,提高开发效率2.@RequiredArgsConstructor 是 Lombok 库中的一个注解,它能够自动生成构造方法。当类中包含 final 或者非 null 的不可变字段时,Lombok 会为这些字段生成一个构造器,确保在创建对象实例时必须为这些字段提供值。3.接口中可以有default修饰的方法!default修饰的方法为默认方法可以不用重写!
123456789101112131415161718192021@Servicepublic class UserServiceImpl ex ...
搜索的技巧:
视频Google 和 Baidu 的 16 个高级搜索技巧,干货满满!建议收藏学习!-腾讯云开发者社区-腾讯云
搜索引擎技巧(重要):
1.精确搜索:双引号
精确搜索,就是在你要搜索的词上,加上双引号,那个 Google 搜索引擎,就会完全的匹配你所要的词
2.站内搜索:site
这是一个比较常用的搜索方法,site 搜索,就是在站内进行搜索.语法是:site:stackoverflow.com ,其中 site:后面加上你要搜索的网站地址。一般程序猿解决问题,用 site:stackoverflow.com,大部分解决不了的问题,都会有答案了。
intitle - 搜索范围限定在网页标题(也就是intitle后面的内容是标题的一部分)
搜索范围限定在包含 keyword 的网页标题中,这也是最普通的搜索。intitle: 和后面的关键词之间不要有空格。
allintitle 限定标题多个关键字:
12allintitle:李子柒 微念上面的意思是搜索结果的标题中要出现李子柒和微念两个关键词
inurl 搜索范围限定在 url 链接中
搜索范围限定在 url 链接中.网页 ...
知识点拾遗:
什么是服务器?
服务器是指一种计算机硬件或软件,它为其他计算机或设备提供数据或服务。Web服务器是一种特殊的服务器,它主要用于接收客户端请求并返回网页内容。Web服务器可以处理HTTP请求并返回HTML、CSS、JavaScript等文件,以便在浏览器中显示网页。简单来说,Web服务器主要负责处理向浏览器发送HTML以供浏览1服务器不仅可以是硬件,也可以是软件。服务器软件运行在计算机硬件上,它能够接收客户端请求并提供相应的服务。服务器可以运行多种操作系统,包括Windows Server、Linux和Unix等。选择哪种操作系统取决于服务器的用途和管理员的喜好。不同的操作系统有不同的特点和优势,例如Linux和Unix通常被认为更稳定且更安全,而Windows Server则提供了更好的图形用户界面。机房是一个专门用于存放服务器和其他计算机设备的房间。它通常配备了空调、电源、防火和安全措施,以确保服务器能够在安全、稳定的环境中运行。服务器通常会被安装在机房内的机架上,并通过网络连接到其他设备。这样,管理员就可以在一个集中的位置管理和维护所有服务器。
浏览器上面搜索框和下面的搜索框有 ...
错题:
线程是_____的一个动作流,能够与其他线程并发执行。
线程是进程的一个动作流,能够与其他线程并发执行。一个进程可以包含多个线程,每个线程都有自己的执行路径,可以独立地执行代码。线程之间可以共享进程的资源,如内存、文件句柄等,这使得线程之间的通信变得更加容易。线程的并发执行可以提高系统的处理能力和资源利用率,但也需要开发人员特别注意线程安全问题。
动作流,控制流,数据字典分别是什么?
动作流(Action Flow)是指描述系统中各种操作和动作之间的执行顺序和依赖关系的一种模型。动作流通常用于描述业务流程、工作流程等,可以帮助人们更好地理解和管理复杂的业务逻辑。控制流(Control Flow)是指程序中各种语句之间的执行顺序和流程控制,例如条件语句、循环语句、跳转语句等。控制流描述了程序的执行路径,可以帮助开发人员更好地理解和控制程序的执行逻辑。数据字典(Data Dictionary)是指系统中各种数据元素的定义、属性和关系的说明文档。数据字典通常包括数据元素的名称、数据类型、长度、取值范围、含义、来源、关系等信息,可以帮助开发人员更好地理解和管理系统中的数据。数据字典也是数 ...