奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
使用AOP+SPEL实现业务日志收集
/ 如果@Log可以多个标注的话,可以:Log[] annotations = method.getAnnotationsByType(Log.class);// 如果@Log可以多个标注的话,可以:Log[] annotations = method.getAnnotationsByType(Log.class);// TODO 可以把返回值设置进spel变量中,或者自定义全局的变量。// 可以把返回值设置进spel变量中,或者自定义全局的变量。// 定义Parser,可以定义全局的parser。原创 2024-07-30 16:44:29 · 1 阅读 · 0 评论 -
不建议Java 直接使用POI,推荐EasyExcel操作Excel
(一)监视器(不能Spring容器管理,每次读取Excel都需要新new一个,如果需要使用Spring容器对象,则通过构造函数传入):由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器(这个是必须实现的,所以我们要兼容所有的对象,监听器的泛型使用Object类型)(二) 读Excel:1、EasyExcel.read(...) ---》它有三个重载的方法2、sheet() --》指定读取的sheet,doRead --》执行读取数据操作。原创 2024-07-30 16:31:57 · 1 阅读 · 0 评论 -
Java 安全防御性编程:让系统坚不可摧
面对复杂多变的运行环境、不可预测的用户输入以及潜在的编程错误,如何确保软件在遭遇异常情况时依然能够稳定运行,是每位开发者必须面对的挑战。防御性编程(Defensive Programming)正是为解决这一问题而生的一种编程范式,它强调在编程过程中预见并防范潜在的错误和异常情况,从而增强软件的健壮性和稳定性。防御性编程是一种积极主动的编程策略,它要求开发者在编写代码时,不仅要关注功能的实现,更要关注代码的健壮性和稳定性。•注意断言的使用场景:断言主要用于开发和测试阶段,用于捕获那些理论上不应该发生的错误。原创 2024-07-30 16:17:26 · 1 阅读 · 0 评论 -
SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地
我们还创建了一个动态数据源,它可以根据需要切换到不同的数据源。我们需要创建一个动态数据源来管理多个数据源,自定义一个javax.sql.DataSource接口的实现,这里只需要继承Spring为我们预先实现好的父类AbstractRoutingDataSource即可。以下是一个示例,我们定义了两个数据源:主数据源和从数据源,并且我们使用Druid数据源来管理它们。接下来,我们要针对于多数据源和及动态数据源进行实现对应的落地方案,希望可以帮助到大家,动态数据源: 通过AOP在不同数据源之间动态切换。原创 2024-01-11 13:21:42 · 184 阅读 · 0 评论 -
【Java】 Java编程中实现10亿数据判重
以 Java 中的 int 为例,来对比观察 BitMap 的优势,在 Java 中,int 类型通常需要 32 位(4 字节*8),而 BitMap 使用 1 位就可以来标识此元素是否存在,所以可以认为 BitMap 占用的空间大小,只有 int 类型的 1/32,所以有大数据量判重时,使用 BitMap 也可以实现。原创 2024-02-20 11:29:50 · 487 阅读 · 0 评论 -
【Java】接口幂等实战方案
比较专业的术语:其任意多次执行所产生的影响均与第一次执行的影响相同。大白话:多次调用的情况下,接口最终得到的结果是一致的。在我们日常的开发中,一些重要的接口还是需要大家谨慎对待,即使是前任开发留下的接口,没有任何改动,当有人咨询的时候,其实就要好好去了解一下里面的实现,看看方案有没有问题,看看技术实现有没有问题,这应该也是每一个程序员的基本素养。原创 2024-01-22 15:27:27 · 123 阅读 · 0 评论 -
【Java】JDBC 插入中文到 MySQL 数据库时显示乱码
如果数据库默认字符集不是 `utf8` 或 `utf8mb4`,需要通过修改数据库的配置文件(如 `my.cnf` 或 `my.ini`)来指定字符集。2. JDBC 连接字符串未指定编码:在创建数据库连接时,如果未在 JDBC 连接字符串中指定 `characterEncoding` 参数,或者指定的编码格式与数据库不兼容,也可能导致中文乱码。6. 使用统一的编码格式:在整个应用程序中使用统一的编码格式,比如全部使用 `UTF-8`,避免在处理中出现编码转换。修改后需要重启 MySQL 服务。原创 2024-01-23 08:50:33 · 276 阅读 · 0 评论 -
java如何判断字符串是不是中文
System.out.println(str + " 不包含中文字符");System.out.println(str + " 不包含中文字符");System.out.println(str + " 包含中文字符");System.out.println(str + " 包含中文字符");Java中的正则表达式提供了匹配中文字符的模式,可以使用这个模式判断字符串是否包含中文字符。以上是几种常见的判断是否为中文字符的方法,根据实际需求选择合适的方法即可。// 判断字符串是否为中文字符。原创 2024-03-27 10:06:22 · 3058 阅读 · 2 评论 -
【Java】 Java中HashMap和TreeMap的区别
HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。由于采用了Hash函数,对于Map的普通操作性能是稳定的,但如果使用iterator访问Map,为了获得高的运行效率最好在创建HashMap时不要将它的容量设得太大。Map包含了一系列“键(key)-值(values)”之间的映射关系,一个Map对象可以看作是一个“键-值”对的集合,在该集合中可以通过一个键找到其对应的值。//如果此映射包含指定键的映射,则返回true。原创 2024-01-22 09:52:30 · 21 阅读 · 0 评论 -
【Java】正则表达式的使用
用户名://取反,除了含有 a、b或 c字母的串(包括单个字符) ,匹配其他任意单个字符。//表示从小a到z,大A到Z,0-9,以及下划线(并集)中任意的一位。//表示从小a到z,大A到Z,0-9(并集)中任意的一位。//表示从小a到z,大A到Z(并集)中任意的一位。//带[],表示a或b单个字符合法。原创 2024-01-28 10:53:32 · 189 阅读 · 0 评论 -
Java遇上泛型:类型安全的魔法之旅
泛型是jdk1.5之后出现的新特性,其本质是参数化类型(type parameters),通过参数化类型让代码可以应用于多种类型。原创 2024-03-06 10:55:39 · 157 阅读 · 0 评论 -
【Java】Java集合HashMap API
答:把key对象通过hash()方法计算哈希值,然后用这个哈希值对数组长度取余数,来决定该key对象存储在数组中的位置,当这个位置有多个对象时,再以链表结构存储,jdk1.8之后,当链表长度大于8时,链表转换为红黑树(二叉树)存储;答:扩充的算法是:当前数组容量<<1(相当于乘2),扩大一倍,每次扩充表示哈希表重新散列(重排序,重新计算每个对象的存储位置),扩充次数多了影响性能.这样的目的,是为了取值更快,存储的数据越大,性能消耗越少,表现越明显;map.put(1,"贝贝");//forEach取值。原创 2024-01-22 09:37:46 · 45 阅读 · 0 评论 -
Java中运用数组的四种排序方法
插入排序是选择一个数组中的数据,通过不断的插入比较***进行排序。不同的方法效率不一样,下面是不同的算法的比较和数据交换时的大O表示。JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法。选择排序法是将数组的***个数据作为***或者最小的值,然后通过比较循环,输出有序的数组。冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者***值一个一个的遍历出来。冒泡排序:比较O(N2) 数据交换O(N2)选择排序:比较O(N2) 数据交换O(N)原创 2024-01-20 15:50:21 · 20 阅读 · 0 评论 -
【Java】 常用知识点、代码工具、思想方法
Java常用知识点、代码工具、思想方法提取方法时注意参数的传递,思考是否是地址传递,改变该变量后会不会改变其他地方的同名变量。原创 2023-08-17 13:10:17 · 114 阅读 · 0 评论 -
java里面maven是解决jar包依赖
从上图中可以发现,Jodis已经引用了更高版本的Guava 23.0,我们可以直接Shade它,因为20.0和23.0是兼容的。根据上述依赖原则,生效的依赖是3.4.6版本的,但是Jodis中依赖的是较高版本3.4.11(被忽略了),其调用的ZK构造方法在低版本中并不存在,故抛出NoSuchMethodError。Maven具有传递依赖(transitive dependency)的特性,即如果组件A依赖组件B,组件B依赖组件C,那么A就会自动产生对C的依赖,以此类推。如果反过来的话,就会选择X 3.0。原创 2024-04-26 09:22:41 · 271 阅读 · 0 评论 -
Python自动化:按文件后缀分类移动并批量修改图片文件名称
source_dir文件夹下有若干文件,看起来相当乱,源文件夹示例如下:现在我们准备做以下几件事情:1.将所有文件按照后缀名称分类2.新建文件后缀名称的文件夹,新建图片文件夹3.根据文件后缀名称移动到对应的文件夹,图片移动到图片文件夹4.修改图片文件夹下所有文件的名称试想我们人为手动处理的话,是很繁琐的,并且容易出错,所以这里使用Python来自动化处理1.只使用Python自带的库,无需安装下载第三方库2.文件数量大时运行耗时未进行测试3.不能用于文件夹下的子文件夹。原创 2024-01-16 11:30:04 · 382 阅读 · 0 评论 -
Java引用类型解析:掌握强引用、软引用、弱引用
在Java中,引用是一种机制,用于在进行垃圾回收时确定对象是否可被回收。Java中的引用主要分为强引用、软引用、弱引用和幻象引用。强引用是最普通的引用类型。如果一个对象具有强引用,垃圾回收器绝不会回收它,即使内存不足。可能导致内存泄漏,因为强引用的对象只有在显式地被设置为null时才能被垃圾回收。当系统内存充足时,软引用不会被回收,但在内存不足时会被垃圾回收。弱引用在下一次垃圾回收时就会被回收,不考虑内存是否充足。软引用在系统即将发生内存溢出之前,会被垃圾回收器回收。对象的生命周期需要与引用保持一致。原创 2024-05-20 10:18:31 · 305 阅读 · 0 评论 -
byte与string的两种转换方式和底层实现
byte和string的两种转换方式。不过Go语言提供给我们使用的还是标准转换方式,主要是因为在你不确定安全隐患的情况下,使用强转化方式可能不必要的问题。原创 2024-03-29 15:31:57 · 135 阅读 · 0 评论 -
【Java】 java 静态注入类
通过上述示例,我们可以看到,静态注入类是一种简单且有效的管理类之间依赖关系的方式。它通过将依赖关系注入到类的静态成员中,实现了依赖对象的共享和复用。然而,静态注入类也存在一些局限性,例如无法在运行时动态切换依赖对象、多线程环境下的同步问题等。因此,在使用静态注入类时,我们需要根据具体情况权衡利弊,并确保正确使用。关系图下面是示例代码中类之间的关系图:erDiagram。原创 2024-01-08 10:15:20 · 1189 阅读 · 0 评论 -
【MySQL】MySQL 提高数据库的稳定性
例如,腾讯公司申请的专利中提出了一种新的数据同步方法,以提高数据同步的效率和稳定性。10. 性能和稳定性测试:通过严格的性能和稳定性测试,确保数据库系统在各种负载和故障场景下都能表现稳定。8. 系统架构的合理设计:在系统设计阶段就考虑高可用性和故障转移能力,采用如负载均衡、冗余存储和分布式架构等技术,以提高系统在面对故障时的恢复能力。9. 应对故障的策略:制定和实施有效的故障应对策略,如备份恢复、故障转移和自动故障修复等,以确保在发生故障时能够迅速恢复服务。4. 索引优化:合理的索引可以显著提升查询速度。原创 2024-01-30 13:53:51 · 524 阅读 · 0 评论 -
【Java】Java多线程:数据一致性问题及解决方案
例如,如果两个线程同时对同一个变量进行增加操作,最终的结果可能不是预期的两倍值,因为两个线程可能会读取同一个旧值,然后各自增加后写回,导致其中一个线程的修改被覆盖。在面向对象的编程语言Java中,多线程编程是一个强大的工具,可以使我们能够构建高效率和高并发的应用程序。java.util.concurrent.atomic包提供了一组原子类,例如AtomicInteger、AtomicLong等,它们使用高效的机器级指令(例如compare-and-swap)来保证单个变量操作的原子性。原创 2024-01-06 15:26:36 · 832 阅读 · 0 评论 -
java 调用jmeter
由于算法和设计模式的优化是通用的,对Java有效的优化算法和设计模式,对其他编译语言也基本同样适用,因此不能从根本上改变Java程序与编译型语言在执行效率方面的差异。“一次编程,到处使用”的Java软件概念原本就是针对网上嵌入式小设备提出的,几经周折,目前SUN公司已推出了J2ME(Java 2 P1atform Micro Edition)针对信息家电的Java版本,其技术日趋成熟,开始投入使用。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。原创 2024-01-26 14:00:39 · 289 阅读 · 0 评论 -
json 在线转换 java json数据转换
/{"root":{"id":"1","text":"复选框","layout":"map","children":[{"id":"1.1","text":"必填项验证","side":"right"},{"id":"1.2","text":"选中后状态","side":"left"},{"id":"1.3","text":"未选择状态,默认显示样式","side":"middle"}]}}1、第一个例子是递归遍历JSON,遇到数组的时候,数组中有超过一个对象,删除第一个对象之后的所有对象。原创 2024-01-31 14:52:17 · 664 阅读 · 0 评论 -
Java 提高生产力:这10个Lambda表达式必须掌握
Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。1. 使用Lambda表达式进行集合遍历 未使用Lambda表达式: List list = Arrays.asList("apple", "banana", "orange"); f原创 2024-03-17 15:21:10 · 14 阅读 · 0 评论 -
Spring Cloud中实现Feign声明式服务调用客户端
然后Feign会根据接口方法的注解信息,进行构建HTTP请求,并将相关请求发送给服务提供者,目前Feign支持多种HTTP请求,包括但不限于GET,POST等,并且支持请求参数,请求头等的配置。当我们在代码中调用Feign接口的方法的时候,实际上就是在调用我们Feign生成的代理对象的方法,代理对象会根据接口定义的方法信息,将我们的请求转发到相应的代码提供者。然后重启FeignApplication。那么我们应该在那里调用这个接口呢?原创 2023-12-24 11:49:06 · 1617 阅读 · 0 评论 -
【Java】java中解析TLV标记字符串
在本例中,9F08是标记,后跟长度字段和数据。我可以使用当前的输入字符串获取所需的字段,但是可能会出现这样的情况,即标记(“9F08”)也可能位于另一个字段的数据部分。我不知道如何继续进行这项工作。原创 2023-12-20 17:24:44 · 403 阅读 · 0 评论 -
搞懂跨域问题SpringBoot助你畅通无阻
跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。原创 2024-04-21 16:22:24 · 83 阅读 · 0 评论 -
【Java】Java实现100万+ 的高并发、高性能设计
现百万级并发编是一项综合性的技术,同时,它与现实生活中 的场景有着紧密的联系。搞懂并发编程有三大核心问题分工问题同步问题互斥问题本文就对这三大核心问题进行简单的介绍。原创 2023-10-20 12:27:00 · 241 阅读 · 0 评论 -
【Java】Spring中BeanUtils.copyProperties的坑及解决
如果需要将源对象中的属性拷贝到目标对象中,包括目标对象中继承自父类的属性,可以使用其他的 Java 对象映射工具,比如 Hutool的 BeanUtil、Apache Commons BeanUtils 和 Dozer 等。方法是基于 Java 反射实现的,它可以将源对象中的属性拷贝到目标对象中,并支持类型转换和自定义转换器。方法是基于 Java 反射实现的,它只能访问源对象中的属性,无法访问目标对象中继承自父类的属性。方法进行属性拷贝时,只会拷贝源对象中定义的属性,而不会拷贝目标对象中继承自父类的属性。原创 2023-12-05 14:42:42 · 3649 阅读 · 1 评论 -
【Java】java静态对象注入 静态类注入bean
静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。但是自己比较喜欢封装工具类,并通过@Component注解成功能组件,但是功能组件中的方法一般都是静态方法,静态方法只能调用静态成员变量,于是就有了下面的问题。在Spring官方文档中描述,在初始化Spring bean时,如果检测到某个bean实现了这两个接口中的一个,那么就会自动调用该豆所实现的接口方法。可以看到,无论是在静态方法中,还是在手动新的实例中,我们都成功获取了的的的的IoC容器所管理的豆。原创 2024-01-08 11:37:25 · 618 阅读 · 0 评论 -
处理大量请求的策略与技术
控制并发是确保系统稳定性和性能的关键。通过使用线程池、异步编程、限流与排队、负载均衡、数据库连接池、缓存策略以及持续的监控与调优,可以有效地处理大量并发请求,为用户提供高质量的服务。在实际应用中,应根据系统的特点和需求选择合适的策略和技术组合。原创 2024-06-04 10:02:10 · 457 阅读 · 0 评论 -
【JAVA】java常用字符串操作技巧
/将文本中的所有"时"和"使"都替换为"是" String newStrfirst=intro.replaceAll("[时使]","是");endIndex 表示结束索引,截取的字符串中不包括结束索引对应的字符,如果不指定 endIndex,则表示截取到目标字符串末尾。在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。调用时,括号中是需要提取字符串的开始位置,方法的返回值是提取的字符串。原创 2023-12-30 15:49:52 · 900 阅读 · 0 评论 -
【JAVA】 Java 性能比较差的代码写法及替换方案
String []str=“假发、假发店、造型、发型设计”.split(“、”);原创 2023-10-07 17:44:26 · 115 阅读 · 0 评论 -
Java 垃圾收集器的秘密:深入理解JVM性能调优
新生代中的对象在经历了一定数量的Minor GC(垃圾收集只针对新生代的收集称为Minor GC)后,如果仍然存活,它们会被移动到老年代。如果在Survivor空间中相同年龄所有对象的大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无需等到-XX:MaxTenuringThreshold设置的年龄。JVM提供了丰富的GC相关参数,通过调整这些参数(如新生代与老年代的比例、触发Full GC的阈值等),可以微调垃圾收集的行为,优化性能。原创 2024-03-17 10:17:17 · 11 阅读 · 0 评论 -
编写高性能的Java代码
在一个大型金融交易系统的优化过程中,通过使用JVisualVM分析工具,成功发现了系统中CPU密集型的热点代码,并对其进行了优化,从而提高了系统的并发处理能力。例如,在一个电子商务网站中,通过使用内存缓存来缓存商品信息和用户数据,成功减少了数据库的访问次数,提升了页面的加载速度。同时,对于一些复杂的查询操作,我们引入了缓存机制,减少了数据库的访问次数。性能分析和调优是优化Java代码的关键步骤之一,通过使用专业的性能分析工具,我们可以深入了解程序的执行情况,发现潜在的性能瓶颈,并采取相应的优化措施。原创 2024-03-24 17:24:16 · 13 阅读 · 0 评论 -
java 保存二进制转图片 java二进制转文件
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fa8Z3FlZ-1597894499680)(D:%5C%E5%88%98%E9%9B%A8%E5%85%B5%5C%E5%9B%BE%E7%89%87%5CDataOutputStream%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E5%9B%BE.PNG)]所有的文件都是以二进制文件存储的,所以从本质来讲,所有的文件都是二进制文件。这就是为什么Java的类文件存储为二进制文件的原因。原创 2024-04-14 11:43:59 · 32 阅读 · 0 评论 -
Java之Stream流
Collections.addAll(list, "张无忌-男-32", "周芷若-女-18", "赵敏-女-19", "张强-男-26", "张三丰-男-45", "张翠山-男-24", "张良-男-23", "王二麻子-男-48", "谢广坤-男-56");Collections.addAll(list, "张无忌-20", "周芷若-18", "赵敏-19", "张强-30", "张三丰-69", "张翠山-25", "张良-29", "王二麻子-54", "谢广坤-58");原创 2024-01-18 09:10:33 · 26 阅读 · 0 评论 -
【Java】Java 中的 synchronized 关键字高效使用
当一个线程访问一个对象的同步方法时,它会持有与该对象相关的锁,直到同步方法完成为止。在上面的例子中,任何时刻只有一个线程可以执行 `increment` 或 `getCount` 方法,因为这些方法都是同步的,并且它们在同一把锁上同步——即 `Counter` 对象的 `this` 锁。任何想要进入 `increment` 方法的线程必须先获得这个 `lock` 对象的锁。这时,你指定一个锁对象,线程在进入同步代码块之前必须持有该锁。通常,使用对象的自然锁(如方法的 `this` 锁)是最简单的方法。原创 2024-02-05 09:21:11 · 13 阅读 · 0 评论 -
【Java】优化 Spring Boot 项目的性能
排除不必要的 Spring Boot 启动项,例如 `spring-boot-starter-web` 如果你不需要内置的 Tomcat。- 使用更高效的数据结构,如 `ConcurrentHashMap` 替代 `HashMap`。- 使用 Spring Profiles 指定环境,避免在启动时加载不需要的环境配置。- 使用 JVM 参数调整堆内存大小,如 `-Xmx` 和 `-Xms`。- 减少 synchronized 块的使用,优化线程竞争。- 优化 SQL 查询,使用索引、合理设计表结构等。原创 2024-02-15 22:10:26 · 579 阅读 · 0 评论 -
【Java】Java rsa密钥对生成 rsa加密算法java实现
System.out.println("生成的公钥文件为:" + PUBLIC_KEY_FILE + ", 生成的私钥文件为:" + PRIVATE_KEY_FILE);(公钥加密体制中,一般用公钥加密,私钥解密)其中,n 是两个大质数 p、q 的积,参数 n 用二进制表示时所占用的位数,就是所谓的密钥长度,目前市场上常用的密钥长度多是1024位。总结:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;其中 (n,e1) 为公钥,(n,e2) 为私钥。原创 2024-01-09 09:23:37 · 294 阅读 · 0 评论