05 2022 档案
摘要:### 前言 Kotlin是一种可以运行在Java虚拟机上的静态类型编程语言,由JetBrains公司(开发IDEA的那个)设计开发并开源。 ### 程序入口点 ```kt fun main(args: Array) { println("Hello world") } ``` 类似java的mai
阅读全文
摘要:前言 Swagger可以让我们根据API生成在线文档,且可以在线测试,极大的简化了手工编写文档的工作。 简单使用 添加maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifa
阅读全文
摘要:前言 这里我们以SpringBoot项目为例,Spring会帮我们自动配置DispatcherServlet和RequestMappingHandlerMapping及RequestMappingHandlerAdapter。 具体可以查看DispatcherServletAutoConfigura
阅读全文
摘要:前言 我们在Spring整合Mqtt简单使用的基础上继续分析。 代码示例 配置消息处理器 import java.util.UUID; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.springframewo
阅读全文
摘要:前言 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅模式的轻量级通讯协议,构建于TCP/IP协议之上, 优点是低开销,低宽带占用,适用于物联网、小型设备等弱网环境。 Linux下安装Mqtt服务器 使用Docker安装
阅读全文
摘要:前言 当我们进行单元测试时,可能某个依赖的服务还没有开发完成(如RPC或HTTP调用),这种情况下我们就可以对依赖服务创建一个模拟对象,这样我们就可以更加关注于当前的测试类,而不是依赖的服务类。Mockito是一个强大的模拟测试框架,可以让我们很方便的创建模拟对象并进行行为验证。 添加maven依赖
阅读全文
摘要:前言 计算机使用二进制来存储所有数据,对于整数,直接转成二进制就可以了,如int类型的15,二进制表示为 00000000 00000000 00000000 00001111 对于浮点数,如何转换成二进制呢,答案是使用IEEE 754标准。 原理 IEEE 754规定,对于32位的浮点数,最高1位
阅读全文
摘要:前言 之前学习了基于比较的各种排序算法java实现各种排序算法(比较排序),今天再学习一下非比较排序。 计数排序 代码实现 以对所有学生的成绩排序为例 import java.util.Arrays; import java.util.Random; public class CountingSor
阅读全文
摘要:前言 Java中HashMap使用链地址法来解决hash冲突,底层使用数组加链表的结构,Java8之后,对底层结构进行了优化。 当链表长度大于8时,就会转换成红黑树(如果此时数组长度小于64,先扩容), 当红黑树节点数量小于6时,再次转换成链表。 但我们知道,红黑树是一个二叉搜索树,所以要求Map的
阅读全文
摘要:前言 SQRT分解是一种数据结构,使用分组的思想来解决区间问题,如求区间和,区间最大最小值等。支持动态更新指定索引的值。 将一个包含N个元素的数组分成sqrt(N)组,就是对N开平方。如18个元素,sqrt(18)=4.24,所以分成5组,最后一组不足4个。 原理 以求区间和为例,对数据分组,提前计
阅读全文
摘要:问题描述 多数元素是指出现次数大于数组总长度一半的元素,如数组[1,3,3,3,5,7,3],数组长度为7,元素3出现了4次,大于7/2=3,所以元素3为多数元素。 遍历计数法 import java.util.HashMap; import java.util.Map; import java.u
阅读全文
摘要:前言 Spring对事务的支持依赖于SpringAOP的实现。 简单使用 create table test_db.tb_user( u_id int auto_increment primary key, -- 主键自增 u_name varchar(20) null, -- 用户名 u_age
阅读全文
摘要:前言 Spring从3.0开始支持JavaConfig配置,具体来说就是可以完全通过注解来开启Bean扫描,声明Bean,导入properties文件等。 主要有以下注解: @Configuration: 标识此Bean是一个配置类,接下来开始解析此类 @ComponentScan: 开启注解扫描,
阅读全文
摘要:前言 通过前面的博客我们已经对Spring的IOC容器有了一定的了解,它的底层实现为DefaultListableBeanFactory,这是一个BeanFactory, ApplicationContext在BeanFactory容器的基础上又增加了很多功能,如事件分发,国际化等。相关类图如下 可
阅读全文
摘要:前言 AOP(Aspect Oriented Programming)面向切面编程,通过在运行期对切入点(如指定类的指定方法)创建代理对象,来完成对业务功能的增强,适用于日志监听,事务处理等场景。SpringAOP是在IOC容器的基础上实现的。 AOP的各种概念 通知(Advice): 定义在连接点
阅读全文
摘要:前言 Spring提供了@Conditional注解在自动扫描Bean时可以根据条件来判断是否注册BeanDefinition。 简单使用 看一下@Conditional注解的声明,Spring4.0版本才提供。 @Target({ElementType.TYPE, ElementType.METH
阅读全文
摘要:前言 在项目中使用Spring,我们都会使用它的自动扫描Bean的功能,今天就来分析一下自动扫描的原理。 简单使用 import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.spri
阅读全文
摘要:前言 Spring提供了@Autowired注解让我们可以很方便的注入依赖的Bean,提供了@Value注解可以让我们从properties文件或yml文件中注入属性值。 @Autowired注解使用 import org.springframework.beans.factory.annotati
阅读全文
摘要:前言 循环引用又叫循环依赖,比如A依赖B,B又依赖A,Spring不支持构造器注入方式的循环依赖,支持属性注入的循环依赖。 这里关注的情况是Bean都是singleton(单例),对于prototype(原型)的情况,暂时不管。 构造器注入 这里为了分析原理,没有使用强大的ApplicationCo
阅读全文
摘要:前言 FactoryBean可以看做一个工厂Bean,它的getObject()方法可以生产另外一个Bean,且生产的Bean也由Spring管理。 简单使用 import lombok.Getter; import lombok.Setter; import org.springframework
阅读全文
摘要:前言 Spring中一个Bean的创建过程是十分复杂的,这里通过源码来简单分析一下。 原理分析 相关类图如下 DefaultListableBeanFactory就是IOC容器的最终实现,既实现了BeanFactory接口,也实现了BeanDefinitionRegistry接口, 所以它不仅是Be
阅读全文
摘要:前言 我们定义的所有Bean,不管是通过XML文件定义的,或者通过@Component注解定义的,或者通过@Bean注解定义的, 最后都会转换成一系列的BeanDefinition对象,保存到BeanDefinitionRegistry(注册表)中。 BeanDefinition和Bean实例的关系
阅读全文
摘要:前言 ConversionService表示类型转换服务,如将字符串转换为Long,字符串转换为日期等。在处理属性和创建Bean对象等很多场景都会使用到。 ConversionService 相关类图如下 默认实现为DefaultConversionService,默认增加了很多类型转换器,如字符串
阅读全文
摘要:前言 Environment表示当前Spring程序运行的环境,主要管理profiles和properties两种信息。 profiles用来区分当前是dev(开发)环境还是test(测试)环境或者prod(生产)环境。 properties表示所有的属性,包括操作系统环境变量,如PATH,JDK相
阅读全文
摘要:前言 Spring使用Resource接口来抽象所有使用的底层资源,对不同的来源有不同的实现,如Classpath资源(ClassPathResource),文件资源(FileSystemResource)等。 class文件、properties文件、yml文件都可以看做Resource。 Res
阅读全文
摘要:项目打包 编写Dockerfile Dockerfile是一种描述文件,可以让我们更灵活的构建自己的镜像。 # Docker image for springboot file run # VERSION 0.0.1 # Author: SZZ # 基础镜像使用openjdk FROM openjd
阅读全文
摘要:前言 我们可以通过定时任务来做数据库备份或者清理文件等工作。 查看定时任务 crontab -l 添加定时任务 crontab -e 格式如下 f1 f2 f3 f4 f5 program # f1 f2 f3 f4 f5 program 通过#号注释 参数含义为 * * * * * - - - -
阅读全文
摘要:前言 HTTPS在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,安全基础为SSL(安全套接字协议)。 简单原理 总的来说,先通过非对称加密传输密钥,之后用该密钥对数据进行对称加密。 客户端向服务器发起HTTPS请求,连接到服务器的443端口 服务器端有一个密钥对,即公钥和私钥,是用来
阅读全文