![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
长期研究java后端的前沿技术,深耕分布式系统的一站式解决方案
fengchengwu2012
做技术就要追求卓越
展开
-
Sping事件发布机制
对应于观察者模式中的主题,事件源发生某事件是特定事件监听器被触发的原因。Spring的ApplicationEvent是事件类,事件源soruce作为ApplicationEvent的一个属性维护,有用户自定义传入。事件发布器可以认为是事件监听的容器,对外提供发布事监听器的接口,通过publishEvent方法维护事件和事件监听器之间的映射关系,并在事件发生时负责通知事件监听器。Spring事件发布机制是一种非常重要的通信方式,使用观察者设计模式,可以用于状态通知、业务解耦、异步处理的业务场景。原创 2024-06-20 17:44:59 · 162 阅读 · 0 评论 -
graalvm编译springboot3 native应用
云原生时代容器先行,为了更好的拥抱云原生,spring boot3之后,推出了graalvm编译boot项目,利用jvm的AOT( Ahead Of Time )运行前编译技术,可以将javay源码直接构建成机器码二进制的文件,无需jdk静态编译为class字节码,运行时jre解释执行,这样就无需依赖java环境运行,部署到容器中可以直接启动运行。原创 2024-06-12 23:54:04 · 722 阅读 · 1 评论 -
vscode搭建java开发环境
三、SprignBoot项目启动配置。二、setting配置文件。原创 2023-08-15 16:41:43 · 2240 阅读 · 0 评论 -
java函数式编程
Lambda 表达式是 JDK8以后 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 java提供两类常用的函数,Consumer消费函数,Supplier供给函数。使@FunctionalInterface注解定义函数接口。 在项目开发中,有时候流程控制if语句比较多,可以使用函数编程有效的消除if嵌套原创 2024-05-08 22:22:46 · 7071 阅读 · 0 评论 -
Spring Boot设置io临时目录
在部署springboot项目,使用MultipartFile上传文件会出现以下异常出现这种情况的原因是由于在部署项目的时候没有指定应用的临时io目录,spring会直接使用操作系统的临时目录,而操作系统的临目录会在一定的周期类回收,导致隔一段时间后上传文件会出现上述问题。原创 2024-03-26 11:29:31 · 673 阅读 · 0 评论 -
Java stream使用TreeSet去重
在使用stream处理集合的时候,有些场景需要使用指定的字段去重,去重的方法有很多,今天介绍一种,通过TreeSet去重。原创 2024-03-20 00:27:01 · 297 阅读 · 0 评论 -
java泛型
java泛型用法原创 2024-03-18 16:53:36 · 387 阅读 · 0 评论 -
JAVA使用JNA调用.so(.dll)动态库
有写开发场景需要调用第三方c/c++的动态库,jdk本身有jni可以实现调用,但是jni的使用非常麻烦,这里提供另一个神器,那就是JNA。原创 2024-03-11 15:37:50 · 7882 阅读 · 0 评论 -
LocalDate计算某月份的日期
locatedate计算某个月份所有日期原创 2024-03-04 23:39:09 · 401 阅读 · 0 评论 -
JAVA集成微信支付V3版JSAPI下单
微信支付jsapi预下单、参数签名原创 2024-02-29 15:00:27 · 7518 阅读 · 0 评论 -
LocalDate 、LocalTime、LocalDateTime基础用法
java新日期类型原创 2023-06-08 10:37:43 · 180 阅读 · 0 评论 -
java stream reduce操作加减乘除
java stream reduce原创 2024-01-20 23:30:27 · 636 阅读 · 0 评论 -
Java Stream 判断字符串是否存在
java stream 流式处理字符串过滤原创 2024-01-12 14:03:22 · 944 阅读 · 0 评论 -
Java Stream 拼接字符串
java stream 字符串拼接原创 2024-01-11 11:19:04 · 1997 阅读 · 1 评论 -
CompletableFuture多线程执行并发任务工具封装
多线程非阻塞原创 2023-01-17 11:56:39 · 868 阅读 · 0 评论 -
Java8 Stream分组统计、扁平化操作
java8 stream api 流失操作利器原创 2022-12-16 11:52:49 · 1183 阅读 · 0 评论 -
Mybatis批量增删改查
mybatis批量插入、修改、查询、删除原创 2022-12-15 16:28:42 · 185 阅读 · 0 评论 -
Juc并发编程之CompletableFuture多任务并行
CompletableFuture allof anyof 多任务并行原创 2022-10-14 22:08:05 · 2051 阅读 · 0 评论 -
Java Stream将List<Object>转为Map<Object,Object>
集合流式处理,可涵盖大多数场景对List转Map操作原创 2022-08-20 15:35:09 · 1310 阅读 · 0 评论 -
java SPI实战
本文以实战场景为背景,描述spi的具体使用过程原创 2022-07-06 16:08:27 · 768 阅读 · 0 评论 -
nacos客户端日志输出路劲配置
#指定应用服务端口-Dserver.port=8086#指定客户端日志目录-DJM.LOG.PATH=D:/usr/local/profile/logs/ncaos#客户端缓存配置目录-DJM.SNAPSHOT.PATH=D:/usr/local/profile/logs/ncaos/config#客户端缓存注册服务目录-Dcom.alibaba.nacos.naming.cache.dir=D:/usr/local/profile/logs/ncaos#指定缓存注册服务的子目录-Dna.原创 2022-03-25 11:23:11 · 7866 阅读 · 3 评论 -
Spring Boot 集成canal、RocketMq同步异构数据
一、canal环境搭建1、下载canal服务至指定目录,解压压缩文件 wget -P ./ https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz tar -zxf canal.deployer-1.1.5.tar.gz2、修改配置文件 修改canal.propertiesvim canal.propertiescanal....原创 2021-09-24 17:40:35 · 909 阅读 · 0 评论 -
java 虚拟机栈
1、虚拟机栈 虚拟机栈(stack)是由一个个的栈帧组成,对应着每一的java方法的调用,且线程私有; 栈帧由局部变量表、操作数栈、动态链接、返回方法地址四部分组成; 栈是一个运行时的单位,解决程序如何执行,数据如何处理的,只有进栈出栈操作,不存在内垃圾收问题,而堆(heap)则是处理数据存储问题,解决数据存储在哪里。2、栈帧解析(1)局部变量表 定义一个数字数组, (2) 操作数栈(3)动态链接(4)返回地址 ...原创 2021-08-02 01:02:35 · 445 阅读 · 0 评论 -
spring解决循环依赖的源码依据
spring的ioc容器在处理循环依赖的时候采用的是三级缓存,其实就是将已经初始化的spring bean 放到一级缓存singletonObjects,以及缓存又被称作"单例池";将已经实例化但还未初始化的spring bean 放到二级缓存earlySingletonObjects中;将存放创建spring bean的原始工厂存放到三级缓存singletonFactories,所谓的三级缓存其实就三个Map。源码查看org.springframework.beans.factory.suppor..原创 2021-07-22 09:38:15 · 109 阅读 · 0 评论 -
死锁原因及解决方案
在应用程序开发的过程中,有时候线上会遇到死锁问题,死锁一般有操作系统级别的死锁和应用程序级别的死锁,操作系统级别的死锁通常发生的是进程死锁,应用程序级别的死锁通常是线程的死锁,本文主要谈谈线程死锁问题。 一、java线程死锁 1、死锁的原因 (1) 因竞争资源发生死锁现象:系统中供多个线程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象 (2)推进顺序不当发生死锁 2、线程死锁的条件...原创 2021-07-08 14:54:44 · 3432 阅读 · 0 评论 -
Spring Boot集成 Druid数据库密码加密
1、使用AES对称加密数据库密码public class AesUtils { private final static String KEY="112b3b4d5e6f7m8n"; private static final String KEY_ALGORITHM = "AES"; /**"算法/模式/补码方式"*/ private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; private stati原创 2021-07-06 15:34:19 · 322 阅读 · 0 评论 -
spring整合kafka
1、导入pom依赖,kafka的客户端版本要与kafka的服务端版本一致 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.5.12.RELEASE</version>原创 2021-07-02 09:59:47 · 1069 阅读 · 0 评论 -
redis缓存击穿、缓存穿透、缓存雪崩
在大型项目中,为了减小数据库的负载压力,经常将一些热点数据存到redis缓存中,这样在获取数据是从redis缓存中去取,可以有效的缓解数据库压力,但是由于缓存过期,会造成一些意外情况,给数据库带来灾难性的压力,最常见的几种情况是缓存击穿、缓存穿透、缓存雪崩,下面聊一下这几种情况的场景和相应的解决方案:1、缓存击穿:(1)现象说明:某 个热点数据存到redis中,key在某一时刻过期,恰好在这一瞬间大量的请求打过来,由于redis里缓存数据不存在,请求直接打到DB数据库,造成数据库压力过大...原创 2021-06-25 09:39:20 · 124 阅读 · 0 评论 -
SpringBoot整合Rocketmq
1、linux安装rocketmq,官网下载安装包原创 2021-06-16 19:02:57 · 474 阅读 · 0 评论 -
seata分布式事务处理技术
微服务开发中,多数据源,跨进程调用的事务问题是老生常谈的问题,以下介绍springcloudalibba的中间件seata,实现分布式事务处理的方案:原创 2021-06-07 22:44:33 · 10351 阅读 · 1 评论 -
CRC-16/CCITT算法实现
1、C语言版本#include <stdio.h>#include <stdlib.h>#include <string.h>//截取指定长度的字符串char* substring(char *dst,char *src,int start,int len) { char *p=dst; char *q=src; int length=strlen(src); if(start>=length||start<0) return NU原创 2021-05-09 18:02:11 · 1120 阅读 · 0 评论 -
Idea启动Maven项目后台页面乱码处理
1、打开Run Configurations2、选择Run,如果是debug模式选择debug,填入环境变量JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 JAVA_OPTS=-Dfile.encoding=UTF-8原创 2020-10-29 18:02:55 · 146 阅读 · 0 评论 -
设计模式——桥接模式
一、桥接模式的特点: 1、实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。 2、对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。 3、桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。 4、桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程 ...原创 2020-09-07 17:35:25 · 1352 阅读 · 0 评论 -
Java切割文件、合并文件
java后端开发,有时候会碰到大文件操作,这时候就需要堆大文件进行分割操作,左后最合并导入依赖工具:<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId></dependency>自定义工具类:/** * @version v1.0 * @description: {单文件切割 、碎片文件合并} *原创 2020-07-01 19:04:22 · 2967 阅读 · 0 评论 -
java接口加签验签方法
计算字符串ascii值 public int getStrAscii(String s){ int asciiValue=0; if(StringUtils.isNotBlank(s)){ int len=s.length(); char[] chars = s.toCharArray(); for(char ch: chars){ asciiValue原创 2020-05-21 17:43:15 · 2594 阅读 · 0 评论 -
java设模式之抽象工厂
一、抽象工厂的特点二、需求:一个制造工厂同时生成汽车和手表两种产品,工厂可定制生产宝马汽车、奔驰汽车、浪琴手表、劳力士手表,向客户出售指定产品创建步骤1、抽象需要生产的产品/** *抽象产品 */public interface Product { //产品出售 void sellProduct();} 2、抽象生产工厂/** * 抽象产品 */public interface AbstractFactory { //生产特.原创 2020-05-17 22:17:35 · 175 阅读 · 0 评论 -
java8新特性之Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的...原创 2020-05-16 11:27:47 · 189 阅读 · 0 评论 -
SpringBoot集成ActiveMQ
一、Centos搭建activemq服务器环境: 1、mq官网下载最新的压缩包:http://activemq.apache.org/download.html 2、将mq压缩包移动到指目录解压 3启动mq服务,前提需要安装jdk环境 cd apache-activemq-5.15.6/bin/linux-x86-64 ...原创 2018-10-19 16:33:23 · 248 阅读 · 0 评论 -
SpringBoot文件(本地虚拟路径和远程ftp)上传
一、测试中图片上传到本地硬盘 1、配置本地文件上传虚拟路径(二种方式) (1)方式一:yaml配置文件server: port: 8081#配置文件上传的虚拟路径web: upload: img: C:/Users/wuchengfeng/Desktop/workplace/web/img/spring: mvc: #访问图片、ht...原创 2018-10-24 17:54:19 · 1658 阅读 · 0 评论 -
商城SKU后台设计
一、数据库表设计 1、 规格属性表:(通过p_spec_id和spec_id维护规格和属性的关系)DROP TABLE IF EXISTS `t_spec`;CREATE TABLE `t_spec` ( `id` int(11) NOT NULL AUTO_INCREMENT, `p_spec_id` varchar(255) CHARACTER SET utf8mb4...原创 2018-11-06 17:40:40 · 26011 阅读 · 1 评论