自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小白

大家好,我是一名Java coder,欢迎大家阅读我的博客,希望能够对你有所帮助

  • 博客(26)
  • 收藏
  • 关注

原创 集合数据转换

生成树形结构public class Menu { private Integer id; private String name; private Integer parentId; private List<Menu> childList; public Menu(Integer id, String name, Integer parentId) { this.id = id; this.name = name;

2021-11-11 23:37:09 415

原创 自定义监听器实现

自定义监听器实现为了便于理解SpringBoot的监听器,现在手写实现一个监听器监听器必须三大对象:事件监听器广播器事件在JDK层面有定义一个EventObject事件类型,在Spring层面有定义一个ApplicationEvent。但为了确保我们的事件与JDK、Spring都没有关系。所以我们单独定义一个事件类型public interface WeatherEvent { /** * 获取天气状态 */ String getWeather();

2021-06-30 23:31:42 750

原创 配置文件读取、实体注入

配置文件配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的application.propertiesapplication.ymlYAML语法基本语法k:(空格)v:表示一对键值对(空格必须有)以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级的server: port: 8081 path: /hello属性和值是大小写敏感值的写法字面量:普通值(数字,字符串,布尔)k: v:字面直接来写字符串默认不用加上单引号或者双引

2021-06-20 10:00:14 2461

原创 位图算法实现

位图的使用场景如果我们要存储1到1亿之间的数字,支持排重该如何做呢,可以采用位图。见下面的代码,用位图会极大的节省查找、插入的效率。一次位运算即可,同时也极大的节省了内存空间,现在只需1亿个2进制,即12MB左右。如果用散列表至少需要40MBpublic class BitMap { private int[] bits; private int limit; public BitMap(int limit) { this.limit = limit; bits = new

2021-04-24 17:49:49 157

原创 Spring多模块打包

多模块打包在Spring Cloud工程中,一个父工程来统一约束子工程的版本与环境,可以将profile也指定在父工程中,父POM父Pom中定义profile环境<profiles> <profile> <id>dev</id> <properties> <profileActive>dev</profileActive> </pr

2021-04-14 08:32:08 131

原创 通过Builder模式创建对象

通过学习Spring源码发现其BeanDefinitionBuilder用来构建BeanDefinition实例,以实现实例化与属性设置的链式调用,所以也尝试着去链式封装直接上 建造者 工具类public class Builder<T> { // 用来保存实例对象 private final Supplier<T> instantiator; // 用于保存Consumer对象,其 修改器 private List<Consumer<T>&g

2021-03-30 07:55:04 440

原创 Spring 依赖注入、依赖查找

依赖查找根据Bean名称查找public class User { private Integer id; private String name;}实时查找@Configurationpublic class UserConfig { @Bean public User user() { User user = new User(1, "wangrui"); return user; }}AnnotationConfigApplicationCont

2021-03-21 22:39:36 141

原创 Spring Bean创建及生命周期

注册Spring BeanXML配置元信息Java注解元信息@Bean@Component及其派生注解@ImportJava接口继承ImportSelectorImportBeanDefinitionRegistrarJava API注册普通Bean命名方式:BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)非命名方式:BeanDefinitionReaderUtils#registerWith

2021-03-21 17:05:48 140

原创 Spring 依赖查找、依赖注入

依赖查找根据Bean名称查找public class User { private Integer id; private String name;}实时查找@Configurationpublic class UserConfig { @Bean public User user() { User user = new User(1, "wangrui"); return user; }}AnnotationConfigApplicationCont

2021-03-20 23:56:22 298 2

原创 Spring Validator 数据校验

在SpringBoot中工程中通常需要对数据作校验,而有些时候前端传入的参数只能是特定值。可以考虑定义一个枚举类工程pom<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version>

2021-03-19 21:57:48 157

原创 HashMap源码分析

HashMap源码分析数组结构HashMap由数组+链表/红黑树 组成。当数组某一元素Hash冲突达到8时,会转变为红黑树。当长度小于6时,又会转变为链表基本属性// 实际存储的key-value键值对的个数transient int size;// 阈值,当table == {}时,该值为初始容量(16);当table被填充了,也就是为table分配内存空间后,threshold一般为 capacity*loadFactory// HashMap在进行扩容时需要参考thresholdin

2021-03-09 22:07:35 118

原创 一致性Hash原理及其算法实现

概述一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出,设计目标是为了解决热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用原理现在一致性hash算法在分布式系统中也得到了广泛应用,具体在计算一致性hash时采用如下步骤:求出服务器(节点)的哈希值,并将其配置到0~2^32-1的圆上采用同样算法求出存储数据键的哈希值,并映射到相同的圆上然后按数据

2021-03-09 20:46:01 185

原创 两数、三数之和

两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍你可以按任意顺序返回答案输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] int[] twoSum(int[] nums, int target) { int numsSize =

2021-03-08 20:47:09 127

原创 Comparable/Comparable

比较器分为java.util.Comparator、java.lang.Comparable区别Comparable:属于内部比较器,不可以传nullComparator:属于外部比较器,可以传nullComparator对整数列表排序(升序)List<Integer> list = Arrays.asList(1, 4, 2, 6, 2, 8);// Comparator.naturalOrder()使用其的前提是对象需实现Comparable接口,会调用其comparel

2021-03-08 08:04:57 377

原创 Java8 时间转换器

效果@Autowiredprivate ConversionService conversionService;@Testvoid contextLoads() { // 2021-03-07 14:47:57 String localDateTime = conversionService.convert(LocalDateTime.now(), String.class); // 2021-03-07 String localDate = conversionService.c

2021-03-07 14:52:28 314 4

原创 LRU缓存

Redis中在缓存数据时,存在淘汰机制。其中有一个LRU最近最少使用淘汰机制LRU 缓存设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目它应该支持以下操作: 获取数据 get 和 写入数据 put获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果

2021-03-07 14:19:10 232

原创 Java工具之扩展Optional

在使用Optional时,其核心为一个Predicate(value != null;)+Consumer,当其Predicate为true时,执行Consumer而我封装的这个OptionalFilter,其核心为Predicate+Function,其Predicate可以为用户自定义,在执行ifPresent、ifPresentOrElse时可以带返回值,可以极大的简化if/if…else的书写方式工具类代码如下:import java.util.NoSuchElementException;

2021-03-07 11:10:25 417 4

原创 二进制运算

提及位运算,对绝大多数Java程序员来说,是一种既熟悉又陌生的感觉。熟悉是因为你在学JavaSE时肯定学过,并且在看一些开源框架(特别是JDK源码)时都能看到它的身影;陌生是因为大概率我们不会去使用它。当然,不能“流行”起来是有原因的:不好理解,不符合人类的思维,阅读性差……位运算在low-level的语言里使用得比较多,但是对于Java这种高级语言它就很少被提及了。虽然使用得很少但Java也是支持的,毕竟很多时候使用位运算才是最佳实践位运算在日常开发中使用得较少,但是巧妙的使用位运算可以大量减少运行开

2021-03-07 10:57:16 3169 1

原创 Java8 时间

特此说明:此文章来源于初学Java8时间API时的笔记格式化编码字母描述示例G纪元标记ADy四位年份2001M月份July or 07d一个月的日期10hA.M./P.M. (1~12)格式小时12H一天中的小时 (0~23)22m分钟数30s秒数55S毫秒数234E星期几TuesdayD一年中的日子360F一个月中第几周的周几2 (second Wed. in Jul

2021-03-06 22:02:26 345

原创 mapstruct基本使用

依赖<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version></dependency><!-- 版本一定要在3.6.0以上,若版本低,则会报找不到属性的错误 --><plugin>

2021-03-06 21:58:12 216

原创 gson基本介绍

public class Message { private String id; private String name; private String age;}public class Classroom { private String number; private String house; private Message message;}Json格式字符串转换为对应的Java对象{"id":"1","name":"name_one

2021-03-06 21:54:31 245

原创 Apache StringUtils工具类

判空函数StringUtils.isEmpty(String str) // 判断字符串是否为""或者nullStringUtils.isNotEmpty(String str)StringUtils.isBlank(String str) // 先去空格在按照isEmpty规则来StringUtils.isNotBlank(String str)StringUtils.isAnyBlank(CharSequence… css)StringUtils.is

2021-03-06 21:46:49 1188

原创 枚举

简介枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性枚举类使用枚举的Class对象需求:需要一次性获取到所有的枚举值对象:DayEnum[] values = DayEnum.values();DayEnum[] enumConstants = DayEnum.class.getEnumConstants();// 判断某个class是否为枚

2021-03-06 21:27:37 197 2

原创 JDK8 集合之List、Map新增方法

listreplaceAllpublic void testList() { List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5); list.replaceAll(t -> t + 10); System.out.println(list);}toArraypublic void testList2() { List<Integer> list = Lists.newArray

2021-03-06 21:14:29 1131

原创 链表

单链表链表技巧总结// 对于快慢指针,定位中间元素// 若为偶数,取中间元素时为:n/2+1 ,例如为4,则3号元素在中间 这种方式对于偶数多循环一次// while (fast != null && fast.next != null) {// 若为偶数,取中间元素时为:n/2 ,例如为4,则2号元素在中间// while (fast.next != null && fast.next.next != null) {链表实体定义@ToString@Al

2021-03-06 20:41:30 181

原创 SpringBoot基于AOP多数据源

SB整合MP多数据源在实际工作过程中,可以会遇到需要配置动态数据源的问题,本小节提供SB整合MP的动态多数据源问题,支持service层接口、实现类、Mapper接口 添加数据源注解实现方案。本小节还在项目启动时添加了ApplicationReadyEvent事件让其可以在提前缓存对应关系动态数据源切换// 定义数据源对应枚举常量public enum DataSourceType { MASTER, SLAVE}public class DynamicDataSourceContex

2021-03-06 20:28:51 2328 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除