不才Jerry
万物伊始,效率本源。大道至简,代码之禅。
展开
-
Redis实现延时队列-工具类
第一种方式适合简单的延时任务消费逻辑,并且对资源消耗要求较高的场景,但可能存在资源浪费和性能问题;第二种方式适合集成到Spring Boot项目中,可以利用Spring的特性进行任务调度,但可能无法及时准确地消费到达时间的延时任务,特别是在任务调度频率较低的情况下。根据实际场景和需求,可以根据优缺点选择合适的方式来实现延时消息队列。原创 2023-11-18 15:08:22 · 500 阅读 · 0 评论 -
MPJ: MyBatis-Plus-Join连表查询
mybatis plus 封装的 mapper 不支持 join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表 join,要不然就没必要采用关系型数据库了。或者 clone 代码到本地执行 mvn install,再引入以上依赖。那么有没有一种不通过硬 SQL 的形式,通过框架提供 join 能力呢?MPJLambdaWrapper 还有很多其他的功能。原创 2023-11-18 15:07:03 · 486 阅读 · 0 评论 -
Java实现的插件化策略模式
2023-11-16 15:13:23.465 INFO 5043 — [ main] c.d.m.s.l.ContextBaseDealListener : 注册:register -> class com.demo.mytest.strategy.service.impl.BaseDocumentService, [DOCUMENT]原创 2023-11-18 15:05:06 · 623 阅读 · 0 评论 -
Java实现MQTT传输协议通信
MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现支持 QoS报文小等特点,占据了物联网协议的半壁江山。MQTT是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范。遥感数据汽车智能家居智慧城市医疗医护精简,不添加可有可无的功能。发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递。允许用户动态创建主题,零运维成本。原创 2023-05-23 17:43:25 · 1297 阅读 · 0 评论 -
线程池提高百万级数据插入效率
spring容器注入线程池bean对象。模拟多线程 测试 2000003条数据。创建多线程批量插入具体业务方法。耗时如下:耗时1.67分钟。创建异步线程 业务类。原创 2023-04-20 16:23:12 · 131 阅读 · 0 评论 -
自定义线程池ThreadPoolExecutor详解
ThreadPoolExecutor 线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。原创 2023-03-01 10:53:20 · 503 阅读 · 0 评论 -
40行代码完全理解java线程池工作流程
40行代码完全理解java线程池工作流程线程测试Demo线程测试Demo结论在注释中,建议自己跑一跑。import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;public class Th原创 2021-12-02 17:48:13 · 376 阅读 · 0 评论 -
ElasticSearch用法和IK分词器
ElasticSearch用法和IK分词器ElasticSearch 是什么?为什么选择ES?ES提供的能力ES常用使用场景ES架构ES 基本概念ES 数据类型ElasticSearch , Kibana 和 elasticsearch-head第一个HelloWorld(v6.8)分词器常见入门问题1. ES 6.8 IK分词器bug2. 日期格式设置错误3. 设置匹配度 优化查询结果ES的Java客户端选择1. ES提供了两个JAVA REST client 版本2. TransportClient3原创 2021-02-17 22:19:03 · 614 阅读 · 0 评论 -
Java Stream 流高级使用全解
Java Stream 流高级使用全解一 基本汇总1. 创建流2. 中间操作3. 终止操作二 经验累积1. 统计1.1 取最大值1.2 取最小值1.3 取总和值1.4 取平均值2. 过滤2.1 获取最近时间3. 排序3.1 根据字段排序4. 分组4.1 获取字段出现次数4.2 过滤并获取指定字段列表Java 强大的 stream 流处理,必会!无状态:指元素的处理不受之前元素的影响;有状态:指该操作只有拿到所有元素之后才能继续下去。非短路操作:指必须处理所有元素才能得到最终结果;短路操作:指遇原创 2020-12-26 18:38:56 · 3896 阅读 · 3 评论 -
Java 线上问题快速排查思路(最全)
Java 线上问题快速排查思路-最全一 服务器层面1.1 磁盘1.1.1 问题现象1.1.2 排查思路1.1.2.1 利用 df 查询磁盘状态1.1.2.2 利用 du 查看文件夹大小1.1.2.3 利用 ls 查看文件大小1.1.3 相关命令1.1.3.1 df1.2 CPU过高1.2.1 问题现象1.2.2 排查思路1.2.2.1 利用 top 查询CPU使用率最高的进程1.2.3 相关命令1.2.3.1 top二 应用层面2.1 Tomcat假死案例分析2.1.1 发现问题2.2.2 查询日志2.2.原创 2020-12-26 18:36:34 · 1354 阅读 · 0 评论 -
Java 8 stream 流获取 list 中最大值、最小值、总和值、平均值
// liststatic List<Employee> empList = new ArrayList<Employee>(); private static void initEmp(){ empList.add(new Employee("张三",30)); empList.add(new Employee("张三1",96)); empList.add(new Employee("张三2",23)); empList.add(new Employee("张原创 2020-09-25 15:56:23 · 28616 阅读 · 0 评论 -
Regex正则表达式基本用法与核心语法
Regex正则表达式核心语法提炼1. 正则表达式 基本使用1.1 执行正则方法1.2 常用规则1.3 常用正则案例 × 752. 正则表达式 语法明细(查询)2.1 普通字符2.2 非打印字符2.3 特殊字符2.4 限定符2.5 定位符2.6 选择与反向引用2.7 预定义字符/元字符2.8 方括号与圆括号正则表达式在线测试:https://tool.oschina.net/regex/1....原创 2020-05-07 18:41:10 · 656 阅读 · 0 评论 -
【Java】高质量代码:10条基本类型使用准则
10条基本类型使用准则1. 用偶判断,不用奇判断2. 用整数类型处理货币3. 不要让类型默默转换4. 边界,边界,边界!5. 不要让四舍五入亏了一方6. 提防包装类型的 null 值7. 谨慎包装类型的大小比较8. 优先使用整型池9. 优先选择基本类型10. 不要随便设置随机种子不积跬步,无以至千里。不积小流,无以成江海。 —— 荀子《劝学篇》Java中8种基本类型:byte / char ...原创 2020-04-26 10:10:41 · 259 阅读 · 0 评论 -
Java注解、自定义注解、注解信息解析详解
Java注解、自定义注解、注解信息获取使用1. Java 注解1.1 Java 注解作用1.2 Java 注解分类1.3 Java 元注解 - 注解的注解2. 自定义注解3. 注解信息获取3.1 获取并执行自定义注解修饰的方法(标记注解)3.2 获取注解参数信息用于数据库初始化(完整注解)4. 常用注解说明4.1 JDK 内置注解4.2 Junit 单元测试注解4.3 Servlet 配置注解5....原创 2020-04-16 19:11:13 · 470 阅读 · 0 评论 -
Java设计模式:静态代理、装饰者、动态代理详解
静态代理、装饰者、动态代理1. 静态代理设计模式1.1 静态代理 - 实现步骤1.2 静态代理 - 逻辑图 & 源码示例1.3 静态代理 - 缺点2. 装饰者设计模式 - 类似静态代理2.1 装饰者模式 - 实现步骤2.2 装饰者模式 - 逻辑图 & 源码示例2.3 装饰者模式 - 缺点3. 动态代理设计模式【最优】3.1 动态代理设计模式 - 实现步骤3.2 动态代理设计模式 -...原创 2020-04-15 18:08:13 · 550 阅读 · 0 评论 -
Java反射实现通用编程的应用
Java的反射、代理设计模式1. Java的反射应用 - 通用编程1.1 执行任意对象的 set 方法1.2 执行任何方法1.3 创建任何对象 - 配置文件2. 代理设计模式2.1 静态代理设计模式 - 实现2.1.1 静态代理的特点2.2 动态代理设计模式 - 更优2.2.1 动态代理的特点1. Java的反射应用 - 通用编程实体类public class User { priv...原创 2020-04-14 21:39:29 · 236 阅读 · 0 评论 -
【Java】高质量代码:20条通用准则
Java开发中通用的方法和准则1. 不要在常量和变量中出现易混淆的字母2. 不要让常量变成变量3. 三元操作符的类型必须一致4. 避免带有变长参数的方法重载5. 别让 null 值和空值威胁到变长方法6. 重写变长方法也循规蹈矩7. 警惕自增的陷阱8. 不要让旧语法困扰你1. 不要在常量和变量中出现易混淆的字母包名全小写、类名首字母全大写、常量全部大写并下划线分割、变量采用驼峰命名等,这些是最...原创 2020-03-24 22:23:50 · 324 阅读 · 0 评论 -
【Java】Comparable和Comparator两接口区别总结
Comparable 和 Comparator 的区别1. Comparable 自然排序比较2. Comparator 定制排序比较3. 两者的比较总结Java 中为我们提供了两种比较机制:Comparable 和 Comparator。两个词的意思都是比较的意思,但实际又是 可比较的 和 比较器。所以很是疑惑。。。1. Comparable 自然排序比较java.lang pu...原创 2020-03-23 19:50:47 · 296 阅读 · 0 评论 -
【Java】JavaSE中易混淆概念汇总(一图胜千言)
JavaSE中易混淆概念汇总1. 四个访问修饰符的访问范围2. 三大关键字的修饰和作用3. 四种内部类的区别和特点4. abstract 抽象类与interface 接口5. Set集合元素不重复的基本逻辑6. 八种包装类和包装类缓冲区问题7. 异常处理基本架构类型8. 常用数据集合体系汇总9. synchronized同步锁与ReentrantLock重入锁10. 字节流与字符流1. 四个访问...原创 2020-03-22 13:06:29 · 319 阅读 · 1 评论 -
【Java】实现FTP文件下载功能简单IO流逻辑
download下载功能简单IO流逻辑Server 端IO处理逻辑Client 端IO处理逻辑区别 字符流 与 字节流 各自的功能和过滤流的使用场景。Server 端IO处理逻辑try { // 字符流:创建 Clinet/Server 交互输入输出字符流(收发字符串) BufferedReader br = new BufferedReader(new InputStreamRea...原创 2020-03-21 18:28:17 · 935 阅读 · 0 评论 -
【Java】三种单例模式的实现和优劣对比
Java三种单例模式① 单例模式:饿汉式(线程安全、占资源)② 单例模式:懒汉式(不安全、需要同步)③ 单例模式:懒汉式(线程安全,静态内部类)单例(singleton):只允许创建一个该类的对象。① 单例模式:饿汉式(线程安全、占资源)天生线程安全(无锁)、类加载时创建(不用也会被创建,占用资源)public class TestSingleton { public stati...原创 2020-03-21 12:18:18 · 435 阅读 · 0 评论 -
【Java】反射机制实现工厂模式和通用编程写法
Java工厂模式和通用编程1. 工厂模式2. 通用编程1. 工厂模式开发中有一个非常重要的原则“开闭原则”,对拓展开放、对修改关闭;工厂模式主要负责对象创建的问题;可通过反射进行工厂模式的设计,完成动态的对象创建。public class TestNewInstanceForFile { public static void main(String[] args) thr...原创 2020-03-21 11:46:36 · 242 阅读 · 0 评论 -
【Java】jdk1.8新特性及用法总结
Java8新特性及用法总结1. 接口中的实现方法2. Lambda 表达式3. 方法引用 ::4. 函数式接口 × 4① Predicate 接口(断言、返回真假)② Consumer 接口(消费、有去无回)③ Supplier 接口(创造、无中生有)④ Function 接口(传递、返回数据)5. (未完待续)1. 接口中的实现方法① 使用 default 关键字就可以给接口增加一个非抽象的...原创 2020-03-20 22:51:12 · 546 阅读 · 0 评论 -
【Java】反射机制介绍与Class类的基本使用
Java反射机制与Class类1.Java反射机制1.1 Java的反射机制是什么1.2 Java的反射的应用场合1.3 Java反射的常用类1.4 反射使用步骤2. Class类2.1 常用方法和示例2.2 获取Class对象的3种方法2.3 反射创建对象的2种方法3. 工厂设计模式1.Java反射机制1.1 Java的反射机制是什么在运行状态中,对于任意一个类都能够知道这个类所有的属性和...原创 2020-03-19 18:24:07 · 387 阅读 · 0 评论 -
【Java】socket发送带空格的字符串被自动换行问题的解决
String sendMsg = input.next(); // 如果输入了带空格的字符串,会被读出为换行String sendMsg = input.nextLine(); // 使用nextLine()【解决方案】这样在接收方 readLine()的时候到\n就会被正确读取。原因:next()方法把输入的空格自动解析为\n处理,算是一个坑吧。对比:...原创 2020-03-18 23:17:25 · 2202 阅读 · 0 评论 -
【Java】网络编程之Socket相关类的使用
文章目录1. InetAddress类2. Socket类 & ServerSocket类1. InetAddress类位置:java.net构造方法为默认default(包内可见),通过类内静态方法获取对象常用方法:byte[] getAddress()返回此 InetAddress对象的原始IP地址。static InetAddress[] getAllByName(...原创 2020-03-18 20:39:43 · 301 阅读 · 0 评论 -
【Java】File类与FileFilter过滤接口的使用
文章目录1. File类2. FileFilter接口实现过滤指定文件1. File类文件和目录路径名的抽象表示形式。public class File extends Object implements Serializable, Comparable<File>构造方法:没有无参构造。File(File parent, String child...原创 2020-03-17 18:13:23 · 283 阅读 · 0 评论 -
【Java】基本字符流输入输出类的使用
文章目录1. 基本字符输入输出类结构2. 抽象父类:Writer & Reader2.1 实现类:字符过滤流 PrintWriter & BufferedReader2.2 实现类:桥转换流 OutputStreamWriter & InputStreamReader2.3 实现类:字符节点流 FileWriter & FileReader1. 基本字符输入输出类...原创 2020-03-17 18:02:36 · 776 阅读 · 0 评论 -
【Java】基本字节流输入输出类的使用
文章目录1. 基本字节输入输出流实现类2. 输入输出字节流的分类3. 抽象父类:InputStream & OutputStream3.1 实现类:字节节点流 FileOutputStream & FileInputStream3.2 实现类:字节过滤流(缓冲流)BufferedOutputStream & BufferedInputStream3.3 实现类:字节过滤流(...原创 2020-03-16 18:28:22 · 1011 阅读 · 0 评论 -
【Java】读写.properties配置文件详解
文章目录1. ".properties"配置文件介绍2. Eclipse中怎么创建properties文件3. Properties 类的特点4. 读写.properties配置文件(非常简单)1. ".properties"配置文件介绍后缀名为.properties是一种属性配置文件。这种文件以key=value格式存储内容,Java中可以使用Properties类来读取这个文件Str...原创 2020-03-15 15:43:03 · 2594 阅读 · 0 评论 -
【Java】ReentrantLock重入锁与synchronized同步锁区别详解
文章目录1. 两者优劣特点对比(详细)2. ReentrantLock 的3个高级功能功能①:等待可中断功能②:公平锁机制功能③:锁可绑定多个条件ReentrantLock实现类(Lock接口)详解:【Java】Lock锁接口和实现类详解synchronized关键字线程同步详解:【Java】线程的基本同步方式和常用方法1. 两者优劣特点对比(详细)比较点Sychronized关...原创 2020-03-15 13:12:20 · 529 阅读 · 0 评论 -
【Java】常用数据集合体系和特点(汇总)
文章目录1. Collection体系集合1.1 List 表① ArrayList 类(数组)② Vector 类(数组、线程同步)③ LinkedList 类(链表)④ CopyOnWriteArrayList 类(线程安全且高效的List)1.2 Set 集合① HashSet 类(HashCode)② LinkedHashSet 类(记录插入顺序)③ TreeSet 类(二叉树-自动排序)...原创 2020-03-14 22:02:31 · 629 阅读 · 1 评论 -
【Java】Queue、BlockingQueue和队列实现生产者消费者模式
文章目录1. Queue接口 - 队列1.1 ConcurrentLinkedQueue类(线程安全)2. BlockingQueue接口 - 阻塞队列2.1 ArrayBlockingQueue类(有界阻塞队列)2.2 LinkedBlockingQueue类(无界阻塞队列)3. 源码:BlockingQueue实现生产者消费者模式1. Queue接口 - 队列public interfac...原创 2020-03-14 21:29:15 · 553 阅读 · 0 评论 -
【Java】线程安全的集合汇总(方法+类)
文章目录1. Collection体系下线程安全集合2. CopyOnWriteArrayList类(线程安全的List)3. CopyOnWriteArraySet类(线程安全的Set)4. ConcurrentHashMap类(线程安全的Map)1. Collection体系下线程安全集合Collection体系集合下,除Vector以外的线程安全集合(蓝色):Collections工...原创 2020-03-13 22:48:23 · 506 阅读 · 0 评论 -
【Java】Lock锁接口和实现类详解
文章目录1. Lock接口2. ReentrantLock类(重入锁/递归锁) - Lock接口实现类3. ReentrantReadWriteLock类(读写锁) - ReadWriteLock接口实现类1. Lock接口public interface Lock {}提供更多实用性方法,功能更强大、性能更优越。常用方法:① void lock() // 获取锁,如锁被占用,则等待...原创 2020-03-13 22:41:03 · 1636 阅读 · 0 评论 -
【Java】线程池的创建和获取、异步并发计算方式
文章目录1. 线程池概念2. 线程池原理3. 获取线程池 - Executor接口 & Executors工具类4. Callable接口5. Future接口6. 线程的异步与同步1. 线程池概念现有问题:线程是宝贵的内存资源、单个线程约占1MB的空间,过多分配易造成内存溢出;频繁的创建及销毁会增加虚拟机回收频率、资源开销,造成程序性能下降。线程池:线程容器,可设定线程...原创 2020-03-13 22:35:56 · 334 阅读 · 0 评论 -
【Java】生产者与消费者模式的简单版本×2(源码)
文章目录1. Java生产者与消费者实现 - 极简版(单个商品)2. Java生产者与消费者实现 - 简单版(多个商品)1. Java生产者与消费者实现 - 极简版(单个商品)public class TestProductCustomer { public static void main(String[] args) { Shop shop = new Shop(); // 共享资源...原创 2020-03-12 20:33:34 · 439 阅读 · 0 评论 -
【Java】synchronized同步锁详解
文章目录1. Java锁的种类1.1 乐观锁1.2 悲观锁1.3 自旋锁1.4 其他种类锁...2. synchronized同步锁(悲观锁)2.1 synchronized 作用范围2.2 synchronized 核心组件2.3 synchronized 实现1. Java锁的种类1.1 乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低。每次去拿数据的时候都认为别人不会...原创 2020-03-12 18:37:39 · 1422 阅读 · 2 评论 -
【Java】线程的基本同步方式和常用方法
文章目录1. 线程的同步方式1.1 同步代码块1.2 同步方法2. 线程的常用方法2.1 Thread构造方法2.2 Thread静态方法2.3 Thread成员方法1. 线程的同步方式线程为什么是不安全的?当多线程并发访问临界资源时,如果破坏原子操作,可能会造成数据不一致。临界资源:共享资源(同一对象),一次仅允许一个线程使用,才可以保证正确性;原子操作:不可分割的多步操作,被视作一...原创 2020-03-12 18:17:40 · 217 阅读 · 0 评论 -
【Java】JVM线程调度和进程调度方式
文章目录1. Java线程调度的方式1.1 抢占式调度1.2 协同式调度2. JVM线程调度实现(抢占式)3. 进程调度算法3.1 优先调度算法3.2 高优先权优先调度算法3.3 基于时间片的轮转调度算法1. Java线程调度的方式1.1 抢占式调度抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制。系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些...原创 2020-03-11 20:24:18 · 2349 阅读 · 0 评论