自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

还是要稳扎稳打

学习笔记

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

原创 Java Stream流操作

Java Stream 是 Java 8 中引入的一个新特性,它的出现主要是为了解决传统操作方式的一些问题,并提供更为简洁、灵活和高效的操作方式,可以大大提高代码的开发效率和质量。因此,在使用 Java 编程时,推荐使用 Stream 流来进行数据处理和操作。Java Stream 是一种处理集合数据的新方法,它提供了一种简单、高效、并行化的方式来处理集合数据。Java Stream 可以用于任何类型的集合数据,包括 List、Set、Map 等。

2023-10-26 17:21:45 218

原创 ARM架构源码编译RXTX LINUX JAVA串口开发项目部署

经过以上配置编译可以实现生成开发所需的串口依赖库。

2023-09-12 10:25:51 436

原创 SpringBoot+AOP+Redission实战分布式锁

在集群环境下非单体应用存在的问题:JVM锁只能控制本地资源的访问,无法控制多个JVM间的资源访问,所以需要借助第三方中间件来控制整体的资源访问,redis是一个可以实现分布式锁,保证AP的中间件,可以采用setnx命令进行实现,但是在实现细节上也有很多需要注意的点,比如说获取锁、释放锁时机、锁续命问题,而redission工具能够有效降低实现分布式锁的复杂度,看门狗机制有效解决锁续命问题。

2023-08-03 00:36:07 1785

原创 批量给数据库表ID字段加上PK约束

批量给数据库ID字段加上PK约束

2023-06-16 10:25:09 164 1

原创 商城购买会员打折满减优惠券商品

商城购买会员打折满减优惠券商品

2023-06-12 14:37:39 733

原创 策略模式-类型统计

策略模式实战

2023-05-26 16:24:18 905

原创 SpringBoot枚举入参实战

前端使用枚举名进行参数传递比传统使用code[1,2,3,4,5]更具语义枚举是一个特殊的类,它表示一组有限的值。在Java中,枚举类型是用于定义命名常量的一种方式。枚举常量是静态的、最终的和公共的,它们可以在整个应用程序中使用,而且具有自己的名称和值。它是将常量分组为一组的一种方法。枚举可以作为常量池使用,这样可以提高代码的可读性和可维护性。枚举在Java中非常有用,因为它们可以减少代码中的硬编码,并使代码更加自然和易于理解。

2023-05-26 10:12:48 4172

原创 责任链模式-参数校验

责任链模式在实际生产开发中的应用

2023-05-25 09:47:08 979

原创 二叉树遍历算法

二叉树几种常见遍历算法

2022-10-21 16:12:37 187

原创 Docker实操

docker学习

2022-10-12 00:04:15 492

原创 Redis锁简单实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、实现总结前言`前提,项目部署在多个节点,业务需求单位时间内存在一个调度,且严格按照顺序执行,【锁时间需严格把控】一、实现@RestControllerpublic class RedisController { public static final Logger log = LoggerFactory.getLogger(RedisController.class); @Resour.

2022-03-31 10:11:54 1670

原创 JDBC工具类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用步骤总结前言结果集封装,借鉴了一些博客资料,注意事项,返回字段的别名需要与javaBean字段名保持一致,如有其它需求可以适当调整一、使用步骤import org.apache.commons.lang3.time.DateUtils;import org.springframework.util.StopWatch;import javax.annotation.PostConstruct;impo.

2022-03-25 16:18:06 119

原创 LocalDateTimeUtils

文章目录前言一、相关方法使用二、测试前言jdk8新特性 LocalDateTime是线程安全的,其内置的方法更多,更好用借鉴地址【https://mp.weixin.qq.com/s/Dd_7yUh3lq3TqE2cjsYXv】一、相关方法使用 /** * 间隔(分钟) */ public static final int INTERVAL = 3; /** * 中国时区(+8) */ public static final Zon

2021-10-27 19:57:08 943

原创 StringUtils工具类

public static void main(String[] args) { System.out.println(StringUtils.isEmpty(null)); System.out.println(StringUtils.isEmpty("")); System.out.println(StringUtils.isEmpty(" ")); System.out.println(StringUtils.isBlank(null)); System.ou

2021-09-03 17:52:55 295

原创 enum的使用案例

enum Enum{ /** * type */ CGSQ("采购申请","您有一条","待审批,项目名称为:"); private String type; private String messgePrefix; private String messgeSplice; public String getType() { return type; } public String getMessgePr

2021-09-03 07:57:38 148

原创 冒泡排序,选择排序,插入排序,快速排序

文章目录一、冒泡排序二、选择排序三、插入排序四、快速排序一、冒泡排序public static void 冒泡(int[] nums){//倒序 boolean b = true; for (int i = 0,n = nums.length; i < n && b; i++) { b = false; for (int j = 0; j < n - i - 1; j++) { if (nums[j] &

2021-08-16 23:45:14 150 1

原创 ThreadPoolExecutor基本使用

@Configurationpublic class ThreadPoolConfig { @Bean("ThreadPool") public ExecutorService buildExcelThreadPool() { //获取cpu数量 int cpuNum = Runtime.getRuntime().availableProcessors(); // 阻塞队列 BlockingQueue<Runnable

2021-08-16 22:33:40 268

原创 RedisTemplate基本使用(Utils)

文章目录前言一、整合二、使用1.基于键的操作2.基于String的操作3.基于hash的操作基于set的操作基于zset的操作基于list的操作前言RedisTemplate基本使用,借鉴了一些网上文章进行整合一、整合<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifa

2021-08-14 19:58:18 517

原创 Mybatis逆向工程配置

文章目录前言一、成果图二、使用步骤1.引入依赖2.引入插件3.配置yml4.配置generator.xml三、运行插件,生成代码前言Mybatis逆向工程配置一、成果图二、使用步骤1.引入依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta

2021-08-13 16:41:47 219

原创 RabbitMQ的基础学习

文章目录前言一、RabbiMQ是什么?二、它能解决什么问题?三、四大核心四、工作原理名词介绍:五、Work Queues六、消息应答前言 关于RabbitMQ的基本学习一、RabbiMQ是什么?RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存

2021-08-09 12:07:07 435

原创 MybatisPlus基本用法

文章目录前言一、MybatisPlus是什么?二、使用步骤1.引入maven依赖2. 配置 MapperScan 注解3.代码生成器配置类三、前言mybatisplus基本学习与使用【官网地址】一、MybatisPlus是什么?MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。二、使用步骤1.引入maven依赖<d

2021-08-05 23:33:24 147

原创 kafka基本使用

文章目录前言一、异步通信原理二、Kafka的应用场景三、订阅模式前言kafka基本学习一、异步通信原理观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)定义对象一种一对多的关系,当目标对象改变状态的时候,则所依赖它的对象会得到通知并自动更新-消息队列用于存放放消息的组件程序员可以将消息放入队列中,也可以从消息队列中获取消息消息队列不是一个永久的存储,是作为临时存放的消息队列中间件:kafka,rabbitmq,zeromq二、Kafka的应用

2021-08-04 16:50:59 111

原创 redis学习

文章目录前言一、Redis是什么?二、Redis配置文件三、Redis三种底层数据结构简单动态字符串链表跳跃表四、redis和memcached的区别五、秒杀场景,如何确保商品不会超卖六、redis五大数据类型应用场景StringListHashSetZSet前言redis学习一、Redis是什么?Redis是NoSQL类型数据库下的一个子产品,基于内存操作,可持久化,规避IO,单进程,单线程写操作的KV非关系型数据库二、Redis配置文件########################

2021-08-03 15:48:38 100

原创 Spring基础原理学习

文章目录前言一、Spring是什么?二、Spring有什么特点三、Spring的xml方式使用四、Spring实现IOC容器的两种方式四、Spring实现DI五、Spring原理概述六、debugSpring初始化过程七、Spring循环依赖前言本次主要是针对于Spring的基础概念和原理进行学习一、Spring是什么?Spring是一个轻量级的开源的JavaEE框架(轻量是指它所引入的jar包数量和体积都比较小,开源带来的好处就是社区活跃,集众人之思去解决问题),也是一个生态,比如说它有很多扩

2021-08-02 16:31:06 144

原创 EasyPOI的使用

文章目录前言一、EasyPOI常用注解?二、使用步骤1.引入依赖2.声明导入导出对象3.调用4.如果数据量一万以上可参考官方文档采用分段的方式进行数据导入和导出三 如过涉及大导入数据有校验的时候,可以考虑使用hibernate-validator总结前言 在实际的开发中,我们操作数据的数据的同时往往需要导出一些数据到excel,使用eaypoi支持多种功能,excel的导出和导入,比如说,普通字段,可隐藏不想导出的字段,支持插入图片,一对一,一对多关系等,满足基本业务需求。【官网地址】一、

2021-07-29 23:36:18 727

原创 MySQL优化层次

文章目录一、连接数优化二、架构层次优化三、慢查询日志四、执行计划五、存储引擎优化和表结构优化一、连接数优化服务端:设置最大连接数设置连接超时时间客户端使用连接池二、架构层次优化减少数据库的压力使用redis集群基于主从复制的读写分离(mycat)分库分表(垂直分库,水平分库)三、慢查询日志通过一些mysql慢日志查询配置,过滤慢查询并优化四、执行计划id 执行顺序分析:如果查询结果的id不同,则先执行id大的子查询如果查询结果的id一样,则从上往

2021-06-21 00:18:18 98

原创 数据库事务

文章目录一、什么是事务?二、数据库四大特性ACID三、事务隔离级别四、事务隔离级别解决方案五、MVCC多版本并发控制一、什么是事务?事务是指数据库执行的最小逻辑单位,即保证一组操作的顺利执行,或者失败回滚为原来的状态。二、数据库四大特性ACID原子性( Atomicity )描述的是数据库的逻辑工作单位,一个事务包含的左右操作都要完成,或者所有操作统一做回滚操作一致性( Consistency )描述的是数据库的的数据在事务操作前后必须要满足业务规则约束,比如说转账前后的金额总和一致,贩卖

2021-06-20 23:19:10 53

原创 MySQL索引分析

文章目录一、索引是什么?二、INNODB存储引擎数据结构三、MyISAM和INNODB的比较四、索引创建原则五、创建索引规则六、索引失效一、索引是什么?索引是数据库管理中的一个排序的数据结构,用于协助快速实现查找、更新表数据没有索引的情况下,则每一次查询都需要从头开始匹配数据,直到找到匹配的数据为止(全表扫描)有索引的情况下,则会先去索引的数据结构(磁盘地址+索引字段的值)里面匹配创建索引字段的值,匹配之后再通过磁盘地址去查找对应的值二、INNODB存储引擎数据结构使用BinaryS

2021-06-20 20:21:13 64

原创 HashSet和TreeSet去重机制

文章目录一、HashSet去重机制1 HashSet底层实现2 HashSet特点3 HashSet去重二、TreeSet去重机制1 TreeSet底层实现2 TreeSet特点3 TreeSet去重一、HashSet去重机制1 HashSet底层实现底层的实现是HashMap,具有和HashMap的数据结构,数组+链表+红黑树2 HashSet特点1.无序,不可重复2.可只能存一个null值3.线程不安全3 HashSet去重主要是通过hashCode()+equals()的方式

2021-06-19 00:38:30 232

原创 break,continue和return用法

for(var i = 1 ; i <= 100; i++){  if(i == 5){     break; //终止当前整个for循环   } }for(var i = 1 ; i <= 10 ; i++){   for(var j = 1 ; j <= 10 ; j++){    if(j == 5){     break;//终止整个内for循环    }  }}lable: for(var i = 1 ; i <= 10 ; i++){ fo.

2021-06-18 22:32:43 46

原创 HashSet.remove()失效

如果重写了添加元素的hashCode()和equasl()方法,修改添加元素的属性值后再把该元素remove掉,可能会操作失败// 代码分析@SuppressWarnings({"all"})public class HashSetTest2 { public static void main(String[] args) { HashSet<Object> pe = new HashSet<>(); // pe添加两个元素

2021-06-18 22:22:49 928

原创 TreeSet自定义Comparator比较器

TreeSet不能添加null元素TreeMap不能添加key=null的元素两者不能保证添加元素的顺序等于输出元素的顺序,是根据比较器来实现排序的例子:@SuppressWarnings({"all"})public class TreeMapTest { private String name; private Integer age; public TreeMapTest(String name, Integer age) { this.name =

2021-06-18 17:34:45 279

原创 HashMap.entrySet()的使用

文章目录一、DEBUG分析二、使用步骤一、DEBUG分析从图上可以看出当第一次往hashMap里面存值的时候,entrySet也会把hashMap的所有元素的引用地址存储起来,至于是怎么在代码中实现的,查阅了一些资料感觉都没有说到位,自己看源码也没看出结果,所以这部分就暂时跳过,现在可以确定的是我们hashMap里面存值的时候,entrySet也会把引用地址存一份,到时候查询的时候也可以通过entrySet来迭代遍历Set<Map.Entry<String,String>>

2021-06-17 23:51:02 712

原创 java比较对象内存地址是否一致

Object.hashCode()打印的是对象的内存地址,但是经过重写之后可能返回的就有可能不是原来的内存地址值// String 类重写了hashCode方法,内容一样返回的hash值就一样public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value

2021-06-17 19:06:31 962

原创 LinkedHashSet底层机制

文章目录一、LinkedHashSet底层结构1 底层使用LinkedHashMap2 底层数据结构二、使用示例一、LinkedHashSet底层结构1 底层使用LinkedHashMapLinkedHashMap是HashMap的一个子类,具有和HashMap相同的存储结构和扩容机制,在此基础上增加了head(头节点)和tail(尾节点)2 底层数据结构Entry 类型数组 + 单向链表 + 双向链表 + 红黑树Entry 类型数组 继承了 hashmap 的node结构,增加了Ent

2021-06-17 18:25:17 1504

原创 HashSet底层机制

文章目录一、二、使用步骤1.引入库一、二、使用步骤1.引入库

2021-06-17 15:19:50 151

原创 ArrayList底层结构和源码分析

文章目录一、ArrayList结构1 属性2 构造器3 方法二、原理概述三、相关代码解读1 add()2 grow()一、ArrayList结构1 属性2 构造器3 方法二、原理概述1.ArrayList中维护了一个Object类型的数组elementData2.new ArrayList()时如果使用的是无参构造器,则初始elementData容量为0,是一个空数组;当第一次添加元素的时候,才会第一次扩容为10(静态常量),如需要再次扩容时,则扩容elementData为1.

2021-06-16 23:58:45 178

原创 遍历List的四种方式

public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("双"); linkedList.add("向"); linkedList.add("链"); linkedList.add("表"); //可迭代 list set map 类型 //Iterator

2021-06-16 15:44:21 738

原创 面试基础题

文章目录前言一、JAVA基础知识1 什么面向对象?2 JVM为什么能实现JAVA跨平台?2.1 概念2.2 为什么要JVM?2.3 执行机制3 ==和equals区别3.1 ==比较的是值3.2 equals默认比较的是内存地址前言本章主要是通过在网上收集的一些面经经验总结出来的面试(属于初级程序员知识储备)一、JAVA基础知识1 什么面向对象?面向对象是一种思想,在Java编程中,万事万物皆对象,也俗称(OOP),相对于传统的面向过程编程,不使用硬编码,可扩展,已维护,不是简单的以当前的

2021-06-13 19:35:32 195

原创 死锁条件及破坏死锁条件

文章目录一、什么是死锁?二、死锁发生的条件三、破坏死锁条件一、什么是死锁? 死锁是指一组线程因为竞争资源而相互等待,导致永久阻塞的现象叫死锁二、死锁发生的条件互斥,共享资源 X 和 Y 只能被一个线程占用(锁的本身以互斥为前提)占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X(可破坏:一次性申请所有需要的资源)不可抢占,其他线程不能强行抢占线程 T1 占有的资源(可破坏:没有竞争到资源的线程主动释放占有的资源)循环等待,线程 T1 等待线程

2021-06-10 20:26:54 700

空空如也

空空如也

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

TA关注的人

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