![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
MyBatis-Plus整合SpringBoot 快速上手,值得收藏!!!
MyBatis-Plus 是一个为了简化开发效率而生的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其整合到 Spring Boot 项目中,可以让开发过程更加便捷。原创 2024-02-23 10:56:08 · 361 阅读 · 0 评论 -
Java8 的 Stream 流加上 Lambda 表达式更加优雅
stream和parallelStream的简单区分:stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。原创 2024-06-06 09:17:56 · 835 阅读 · 0 评论 -
Springboot3.x 实现考试系统中接打电话的识别与处理
我们可以在考试系统中有效地识别和处理考生接打电话的行为,提升考试的公正性和有效性。如果有更进一步的需求,可以结合机器学习和大数据分析技术,进一步优化和完善解决方案。原创 2024-06-03 09:25:32 · 473 阅读 · 1 评论 -
java加密算法之对称加密算法AES
AES(Advanced Encryption Standard)是美国联邦政府采用的一种对称加密标准,它在2001年取代了DES成为新的加密标准。AES是由比利时密码学家Vincent Rijmen和Joan Daemen共同提出的,其原名为Rijndael加密算法。原创 2024-05-31 11:57:18 · 791 阅读 · 0 评论 -
基于Java的SM4(ECB模式,CBC模式)对称加解密实现
加密算法依赖了groupId:org.bouncycastle中的bcprov-jdk,Bouncy Castle (bcprov-jdk15to18)提供了JDK 1.5 to 11 可使用的大量标准加密算法实现,其中包含了SM2,SM3,SM4。* @param key 密钥 (十六进制字符串: B6D8C12920418AFEA57514132E16039A)* @param content 待加密内容(普通字符串: 1234567812345678aa1100)原创 2024-05-31 11:49:33 · 1220 阅读 · 0 评论 -
java中SM2加密算法的实操代码
我们指定了算法为"EC",提供者为"Bouncy Castle"。在上面的代码中,我们使用Cipher类来进行加密操作。我们指定了算法为"SM2",提供者为"Bouncy Castle"。然后,我们使用init方法初始化加密器,并指定加密模式为Cipher.ENCRYPT_MODE,以及使用公钥进行加密。我们指定了算法为"SM2",提供者为"Bouncy Castle"。然后,我们使用init方法初始化解密器,并指定解密模式为Cipher.DECRYPT_MODE,以及使用私钥进行解密。原创 2024-05-31 10:41:52 · 894 阅读 · 0 评论 -
Java互斥锁样例代码 互斥锁 实现
比如这样的场景:一个线程需要从一个链表中取数据来处理,但是这个链表在某些时候为空,那么则这个线程需要等待(pthread_cond_wait)这个链表有数据后,在继续执行。在读的模式下,可以多个线程同时获取到锁,以至于可以做到多个读线程并发的目的,但是对于写操作,还是串行的。同时如果一旦这个读写锁已经被线程A锁住,后后面因为另一个线程B需要加写锁,那么需要阻塞等待,此时在一个线程C需要加读锁,此时也会组撒,但是一旦A释放锁,那么线程B的占用的锁的优先级会更高,因为写锁的优先级比读锁的优先级高。原创 2024-05-28 16:25:09 · 315 阅读 · 0 评论 -
Java编程写出优雅代码的操作技巧
不整洁的代码随着时间的增加而增加时,生产力会随之降低.导致的结果就是:代码不易扩展或扩展容易引发其他问题程序崩溃加班增加公司成本(加人)甚至可能造成公司倒闭一图胜千言。原创 2024-05-28 09:13:11 · 557 阅读 · 0 评论 -
Java Nio FileChannel堆内堆外数据读写全流程分析及使用
如果在进行native调用的时候发生了GC,会导致HeapByteBuffer的内容出现错误。具体详细的说明可以看看这篇MappedByteBuffer VS FileChannel:从内核层面对比两者的性能差异。java nio中文件读写不管是普通文件读写,还是基于mmap实现零拷贝,都离不开FileChannel这个类。这里说的仅仅是FileChannel基于堆内存(HeapByteBuffer)的文件读写。实际构造的是HeapByteBuffer,也就是JVM的堆内存。就可以看到使用频率。原创 2024-05-27 09:48:30 · 707 阅读 · 0 评论 -
理解函数式接口 @FunctionalInterface
在 Spring Boot 框架中,经常使用的 CommandLineRunner、ApplicationRunner 等等都是函数式接口。@FunctionalInterface 注解是 Java Lang 包中的一个注解,用于标识一个接口是函数式接口。在一些异步操作或模板方法中,我们可以使用函数式接口来传递回调函数,从而实现定制化的操作。在测试类的 main 方法中,我们使用 Lambda 表达式调用了函数式接口。以上就是函数式接口的整理,函数式接口是指只包含一个抽象方法的接口。原创 2024-05-13 09:21:07 · 1159 阅读 · 0 评论 -
Java 编程写出优雅的代码
通过命名、类、函数、测试这四个章节,使我们的代码变得整洁.不整洁的代码随着时间的增加而增加时,生产力会随之降低.导致的结果就是:代码不易扩展或扩展容易引发其他问题程序崩溃加班增加公司成本(加人)甚至可能造成公司倒闭一图胜千言。原创 2024-05-10 09:44:51 · 784 阅读 · 0 评论 -
CompletableFuture:Java 8 中的异步编程利器
CompletableFuture 是 Java 8 引入的 java.util.concurrent 包下的一个类,它代表一个异步计算的结果,可以是已完成、正在进行或尚未开始。CompletableFuture 提供了一种灵活、类型安全的方式来表达异步操作的生命周期,包括创建、组合、处理结果以及处理异常。其设计灵感来源于函数式编程中的 Promises/Futures 模式,旨在简化异步编程模型,提高代码的可读性和可维护性。原创 2024-04-18 10:13:58 · 716 阅读 · 0 评论 -
深入掌握 OSS:最完美的 OSS 上传方案!
代码是这样的: const OSS = require('ali-oss') async function main() { const config = { region: 'oss-cn-beijing', bucket: 'guang-333', accessKeyId: '', accessKeySecret: '', } const client = new OSS(config);它是用 key-value 存储的,没有目录的概念,阿里云 OSS 的目录只是用元信息来模拟实现的。原创 2024-04-15 09:47:47 · 483 阅读 · 0 评论 -
快30倍!JSON序列化是Jackson?是Gson?
这次测试了三个 JSON 序列化的例子,综合来看,!性能测试的运行环境:JMH:1.37javajava经过五轮测试迭代,有了这样的数据:先解释下吞吐量:吞吐量(Throughput) = 完成的操作数量(Operations)/ 消耗的时间(Time)吞吐量就是每秒能完成的序列化操作数,吞吐量越大,性能越好。在 JMH 结果中,fastjson 平均每秒能完成序列化操作,是第二名 Gson 的 30 倍,是第三名 Jackson 的 300 倍!原创 2024-03-14 13:33:40 · 847 阅读 · 0 评论 -
RSA 密钥格式详解
PEM格式包含几种报文头"-----BEGIN PUBLIC KEY-----": PKCS#8 格式公钥"-----BEGIN PRIVATE KEY-----": PKCS#8 格式私钥"-----BEGIN RSA PUBLIC KEY-----": PKCS#1 格式公钥"-----BEGIN RSA PRIVATE KEY-----": PKCS#1 格式私钥。原创 2024-03-13 16:02:25 · 1029 阅读 · 0 评论 -
Java中的equals()与==的区别与用法
/如果当前字符串对象和传入的字符串对象的编码方式相同 if (coder() == aString.coder()) { //如果当前字符串和传入的字符串都是Latin1编码,则调用StringLatin1类的equals方法进行比较;} // 如果是String类型的实例 if (anObject instanceof String) { ////Object类型的对象强制转换为String类型 String anotherString = (String)anObject;// 输出 false。原创 2024-03-09 22:01:13 · 855 阅读 · 0 评论 -
Java 框架体系读懂函数式接口、Lambda表达式、Stream
• 函数式接口是 Java 8 引入的一种接口,它只包含一个抽象方法。函数式接口的存在是为了支持 Lambda 表达式,使得我们可以使用更简洁、更灵活的方式编写匿名函数。• @FunctionalInterface 注解是可选的,推荐使用。该注解会让编译器强制检查接口是否满足函数式接口定义。• 首先定义一个函数接口,函数作用是对传入的元素进行操作,最后返回操作后的元素。复制// 自定义函数接口1.2.3.4.5.• 自定义的 MyStream 类来使用自定义的函数接口。复制。原创 2024-03-08 11:09:14 · 923 阅读 · 0 评论 -
Java 中不用BeanUtil.copy了,咱试试这款神级工具(超详细)
MapStruct是一个利用注解和编译时代码生成技术的Java Bean映射工具,通过在接口上定义映射规则并自动创建实现类,极大地简化了对象转换过程。相比于手动编写映射代码及运行时反射工具如Dozer,MapStruct提供了更高的性能、更好的可读性和易于维护性。它支持灵活的字段映射配置、自定义转换逻辑,并可通过组件模型适应不同框架,是提升开发效率与降低维护成本的理想对象映射解决方案。原创 2024-03-07 13:36:39 · 844 阅读 · 0 评论 -
分布式ID生成之雪花算法详解
这个实现同样遵循了雪花算法的基本结构,包括1位符号位、41位时间戳、10位机器标识(5位数据中心ID和5位工作机器ID)以及12位序列号。在分布式系统多节点的情况下,所有节点的时钟并不能保证不完全同步,所以有可能会出现不是全局递增的情况。机器 ID 位:适用于分布式环境下对多节点的各个节点进行标识,可以具体根据节点数和部署情况设计划分机器位 10 位长度,如划分5位表示进程位等。自增、有序、适合分布式场景,生成时不依赖于数据库,完全在内存中生成,每秒能生成数百万的自增 ID,存入数据库中,索引效率高。原创 2024-03-05 10:01:43 · 809 阅读 · 0 评论 -
Java - 高并发下单例模式安全性保障
在高并发环境下,实现单例模式以确保线程安全,通常需要避免使用懒汉式单例(懒汉式单例在多线程环境下可能会创建多个实例),而采用饿汉式单例或者同步锁来保证实例的唯一性和线程安全。这里使用了 `synchronized` 关键字来同步 `getInstance` 方法,但这会带来性能开销,因为每次调用 `getInstance` 都需要进行同步。双重检查锁定是一种在实例未被创建时才同步的方法,它既实现了懒加载,又保证了线程安全。饿汉式单例在类加载时就完成了实例的初始化,因此天生就是线程安全的。原创 2024-03-03 11:24:45 · 228 阅读 · 0 评论 -
Java 集合操作方法让你精通lambda表达式
Java复制代码public static Map toMap(Collection collection, Function原创 2024-02-29 11:17:28 · 924 阅读 · 0 评论 -
JAVA常用的DOS命令
语法为“jar [options] [jar-file] [manifest-file] [entry-point] [files]”,其中“options”是打包选项,“jar-file”是要创建的JAR文件名,“manifest-file”是JAR文件的清单文件,“entry-point”是指定JAR文件的主类,“files”是要包含在JAR文件中的文件列表。语法为“jmap [options] [pid]”,其中“options”是生成快照选项,“pid”是Java进程的进程ID。原创 2024-02-21 13:36:13 · 390 阅读 · 0 评论 -
Java 8 新特性-日期时间API之LocalDate类
需要注意的是,这个方法并不会对输入的天数进行有效性检查,因此如果输入的天数超出了给定年份的范围(例如,在2月输入了30),那么创建出来的 LocalDate 对象可能不准确。这个方法返回的是一个长整型(long)的值,它将此本地日期与指定的时间和作为参数传递的偏移量相结合,以计算epoch-second值,该值是从1970-01-01T00:00:00Z开始经过的秒数。LocalDate的lengthOfMonth()方法用于获取此LocalDate表示的月份的长度,即该月份的天数。原创 2024-02-15 22:58:54 · 542 阅读 · 0 评论 -
SpringBoot 优雅实现超大文件上传的小技巧
通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。这里的“s”表示synchronous(同步)的意思。原创 2024-02-06 10:14:34 · 821 阅读 · 0 评论 -
Java实现基于清除后分配规则的垃圾回收器
以上实现的垃圾回收器使用了基于清除后分配的算法,通过标记和清除两个步骤,可以回收无用的对象,并释放其占据的内存空间。在清除阶段,遍历所有对象,将未被标记的对象加入到垃圾对象集合中,最后清除这些垃圾对象并释放内存。指针更新时,需要更新对象内部的指向其他对象的指针,确保指向的对象是有效的。从根对象(如堆栈、全局变量)开始,递归地遍历所有可达的对象,并将其标记为活动对象,即不被回收的对象。遍历整个堆,将未标记的对象(即未使用的对象)释放掉,并将这些空间标记为可用空间以供后续的对象分配使用。原创 2024-02-06 10:03:12 · 632 阅读 · 0 评论 -
【架构】Excel导入数据使用双异步后,从 191s 优化到 2s
大数据量Excel的数据快速导入数据库中,优化策略和实施方案,在大数据量Excel数据导入数据库时,我们需要考虑数据量、数据结构、导入效率以及数据一致性等因素。下面是一些适用于大数据量Excel数据快速导入数据库的策略:分批导入:将大数据量的Excel文件分成多个小文件,然后分别将这些小文件导入数据库。这种方式可以有效降低单次导入的数据量,提高导入效率。异步快速读取Excel文件:使用合适的数据库客户端工具或者编写程序代码,快速读取Excel文件中的数据。原创 2024-02-05 14:45:32 · 1074 阅读 · 0 评论 -
【架构】利用DUCC配置平台实现一个动态化线程池
当前项目中使用的是Spring 框架提供的线程池类ThreadPoolTaskExecutor,而ThreadPoolTaskExecutor底层又使用里了JDK中线程池类ThreadPoolExecutor,线程池类ThreadPoolExecutor有两个成员方法setCorePoolSize、setMaximumPoolSize可以在运行时设置核心线程数和最大线程数。原创 2024-02-05 10:17:11 · 743 阅读 · 0 评论 -
【Java】Guava的使用,轻松应对复杂并发场景
该异步任务模拟了一个耗时操作,等待2秒后返回结果。Guava提供的并发工具当然不仅仅只有ListenableFuture、CountDownLatch、CyclicBarrier等,还有很多其他的,博主这里算是抛砖引玉吧,把我用过的,我认为比较好用的,在这里给大家梳理总结一下,如果大家用到了其他更好用的,欢迎在评论区告诉,一起深入交流。具体来说,其中ListenableFuture是Guava对Java Future的扩展,它允许你注册回调函数,当Future的计算结果可用时,这个回调函数会被执行。原创 2024-02-04 11:48:56 · 434 阅读 · 0 评论 -
【架构】超级实用的IntelliJ IDEA插件,开发更高效
IDE是开发人员的必备武器,拥有一个好的IDE不仅能提高工作效率,还能让开发人员更加享受编码的乐趣。Intellij IDEA广受欢迎,被认为是最佳的IDE之一,同时加上一些优秀的插件,会让开发人员的工作更加轻松愉快。本文推荐10个Intellij IDEA最佳插件。原创 2024-02-04 09:32:35 · 511 阅读 · 0 评论 -
【Java】StringRedisTemplate 如何判断是否存在key stringutils判断对象
如果要那样拆分,我们必须给 "." 进行转义,String[] strArray = str.split(".") 修改为 String[] strArray = str.split("\\.") 即可。去掉字符串两端的控制符(control characters, char <= 32) ,如果变为 null 或 "" ,则返回 ""isBlank(String str)去掉字符串两端的空白符(whitespace) ,如果变为 null 或"" ,则返回""原创 2024-01-29 10:43:59 · 464 阅读 · 0 评论 -
【Java】URL 特殊字符转义 Java encode url 特殊字符转义
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。比如,从http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,浏览器不会重新向服务器请求index.html。为什么要转义字符:如果你的表单使用get方法提交,并且提交的参数中有“&”等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待。原创 2024-01-26 16:24:07 · 574 阅读 · 0 评论 -
java线程池线程复用
忽视,什么都不会发生。4. CallerRunsPolicy: 执行任务,哪来的去哪里 5. 实现RejectedExecutionHandler接口,可自定义处理器 =================线程池的默认拒绝策略为 AbortPolicy========================线程池:事先创建若干空闲的线程放入一个池中(容器),当一个任务提交到线程池时,线程池就会启动一个空闲的线程去处理任务,当任务结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。原创 2024-01-26 14:10:25 · 825 阅读 · 0 评论 -
【Python】Python Moviepy模块之视频添加图片水印
set_start方法用于设置开始显示的时间点,set_end方法用于设置结束显示的时间点。这里需要注意,如果水印开始时间不是视频开始时间,那么水印的持续时长需要原视频时长减去水印开始时间,不然新的视频会被拉长。假设原视频5秒,设置水印开始时间是第3秒,如果水印持续时长仍是原视频时长,那么新视频将会是5+3=8秒,当原视频播放完了,还有3秒会是一直显示水印的一个黑屏。5.5 相对于视频的左中位置。5.6 相对于视频的正中位置。5.7 相对于视频的右中位置。5.8 相对于视频的中上位置。原创 2024-01-19 17:28:33 · 575 阅读 · 0 评论 -
【架构】分布式支付系统的幂等性原理与实践
在支付系统中,只要幂等被击穿,基本上都会出现资损事件。曾经碰到一个真实案例,上游域把某个幂等字段组成规则的取值变了,但是下游不知道,导致下游幂等失败,对同一笔业务处理了2次,直接资损数十万美金。一般情况下,支付系统的幂等性能力要求比电商系统要求更高,如果用户在电商下单多了,只要没有支付,用户还是可以忍受的,但一旦多扣了用户的钱,后果就会比较严重。在数据库前面可以加一层缓存来提高性能,但是缓存只用于查询,查到数据认为就返回幂等成功,但是但不到,需要尝试插入数据库,插入成功后再刷新数据到缓存。原创 2024-01-15 09:26:16 · 1731 阅读 · 0 评论 -
【架构】API接口安全防护救命的11招
alert("反射型 XSS 攻击")原创 2024-01-11 16:02:52 · 1126 阅读 · 0 评论 -
【SQL】正则匹配 动态sql语句中取表名 java sql正则表达式匹配字母
c d') 说明:[ ] 中的字符是或的关系,[\s\,\;regexp_substr('杭州市萧山区阡陌路299号XXX公寓', qh.str_qhmc) as str_substr。==说明:==通过拼接的表达式的形式和使用 [ ]的形式效果一样,但是对于有 “|” 的字符串,则不能使用拼接的形式;如果一个正则表达式要重复使用多次次,出于效率的考虑,可以预编译该正则表达式,后面则无需编译这个步骤,直接匹配;---匹配以 "mx"或"zb"开头的字符串。---匹配以 "mx"或"zb"开头的字符串。原创 2023-12-24 14:45:03 · 684 阅读 · 0 评论 -
【JAVA】 SPL(Structured Process Language)兼顾 SQL 和 Java 的优点及性能
Java 具备良好的灵活性,可以应对复杂计算,但要实现高性能计算不仅需要考虑各种情况,还要从头开始,复杂度过高,再考虑到依赖数据库存储,Java 也同样不具备性能优势。相比之下,SPL 综合了 SQL 和 Java 的共同优点,不仅语法简洁,使用灵活,并内置了大量的高性能算法和高性能文件存储充分保障计算性能,更能满足当代应用的需要。从计算类库的角度来看,SPL 有了这些比 Java 和 SQL 丰富的算法以后,数据处理的工作就是针对这些算法的选用和组合,简单方便的同时性能也更高。原创 2023-10-19 12:26:50 · 477 阅读 · 0 评论