- 博客(117)
- 资源 (1)
- 收藏
- 关注
原创 java group by常见用法
上面五个全是reducing的特例。如果业务上要的不是简单加减,而是自定义合并逻辑(比如字符串拼接、复杂加权),用reducing// 找薪资最高的员工a : b));// 求和(identity 是初值,相当于 stream().mapToInt().sum())
2026-08-28 15:58:21
214
原创 maven多版本包导致java.lang.NoClassDefFoundError
发生这种说明是maven某个依赖版本有多个依赖版本,应剔除最近引入的。1.先搜索一下ZipEncodingHelper这个类位于哪个依赖包下。2.根据类找到在commons-commpress。一般情况会选择把最新引入的那个排除掉。会找到多个,如何判断取哪个。2.在idea工具里。2.具体情况具体而定。
2026-07-31 14:36:28
212
原创 讲讲 Redis 集群为什么只有 0 号数据库?
Redis Cluster 只支持,所有 key 通过 CRC16 落到槽位,而槽位分片是整个集群的数据一致性基础。,会导致相同 key 在不同 DB 中产生不同槽位,使节点无法判断 key 的真正归属。,迁移需要处理所有 DB,甚至槽位元数据会无法维护。。多数据库需求应通过来实现,不推荐使用 Redis 的 DB 概念。Redis 集群(Cluster 模式)之所以只支持 0 号数据库,根本原因在于其与存在设计上的冲突。在单机版 Redis 中,SELECT。
2026-03-01 15:48:15
567
原创 Java方法返回多个值
Triplet (三个元素)Quartet (四个元素)Quintet (五个元素)Sextet (六个元素)Septet (七个元素)Ennead (九个元素)Decade (是个元素)Octet (八个元素)Unit (一个元素)Pair (两个元素)
2025-12-30 09:42:36
186
原创 springMvc
处理器适配器是适配controller和servlet的关联,然后controller(handler)又是各种不同的请求,但是servlet底层都是固定的request和response处理。MVC容器初始化时,处理器映射器mapping注册是通过后置处理器来完成的,实现了InitializingBean接口。MVC 进行进行容器初始化,并且将IOC阶段的web容器作为当前容器的父容器,因为MVC实例。先处理拦截器中的前置处理操作,如果前置处理返回false,那么直接调用拦截器的最终通知。
2025-10-26 13:18:44
429
1
原创 Kafka的概念
2、消费的原理:segment(topic+分区) + index(offset)+二分查找+顺序查找。基于时间:默认是保存7天 ----》----log.retention.hours=168。kafka元数据是保存在zookeeper服务器节点上的(znode),包括topic,分区属性。生产者Producer,消费者(组),kafka节点(集群),zookeeper节点(集群)Partition:topic分区,比如订单分为已支付,未支付,已发货,待发货。
2025-10-26 13:17:58
393
原创 maven mvn 安装自定义 jar 包
sqljdbc4-3.0.jar 是连接 Microsoft SQL Server 数据库比较旧版本的一个 jar 包,线上的 maven 仓库都没有收录,因此,下载到这个 jar 包后,只能手动通过 mvn install 命令安装。格式:mvn install:install-file -Dfile=.jar -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dpackaging=jar。-Dfile=.jar 文件绝对路径。
2025-10-09 11:12:00
542
原创 Apache Commons ConvertUtils
对于框架不支持的特殊类型(如枚举、自定义日期格式),需注册自定义转换器:// 注册枚举转换器(字符串转枚举)
2025-09-01 15:29:21
550
原创 何实现在上亿条的用户搜索日志中找到Top100的关键词
(2)创建一个长度为n(如2048)的哈希表数组,用来统计每个小文件中关键词出现的频率。服务端开启多线程并行遍历大文件切割出来的小文件,然后对每个用户搜索的关键词进行哈希取模运算,通过计算的结果将关键词统计到哈希表数组中。(1)将用户搜索的日志文件(一个大文件)切割成若干个小文件(如设置每个小文件大小为512KB)(3)使用小顶堆(小顶堆适用于解决统计频率最高的TopN的问题)统计前x位的关键词。(1)使用“分而治之”的思想,将大文件分割为小文件(可以使用哈希取模法切割文件)。
2025-07-24 09:52:56
254
原创 敏感数据加密后如何实现模糊查询
内存解密方案的优点是简单方便,缺点是每次将加密后的数据整表加载到内存中然后解密再匹配,随着业务的发展,业务数据量会越来越大,那么很容易造成OOM。如果在数据库里面的数据已经加密了,此时我们将这些数据查询到内存中,然后进行解密操作,最后在解密后的数据中进行模糊查询来筛选出符合条件的数据。如果要查询186手机号开头的用户信息,首先通过186手机号在明文表中查询对应的用户id,然后通过用户id去用户表中查询对应的用户数据。(2)如果支持敏感字段的模糊检索,那么加密的密文随原文长度增长而增加。
2025-07-22 09:45:08
1113
原创 Cookie、Session、Local Storage和Session Storage区别
(5)Session保存在服务端,常用于用户认证(存储用户的登录状态,判断用户是否已经登录)、购物车功能(存储用户在购物车中的商品信息)、记录用户偏好设置(存储用户的个性化设置,如语言、时区等)、保存游戏状态(在游戏中存储用户的进度和状态)等场景,但是使用 Session时需要考虑安全性问题(如XSS攻击、CSRF攻击),确保用户数据的安全。Session由服务端生成,它代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的,Session对象用来存储特定用户会话所需的信息。
2025-07-21 15:58:16
943
原创 flowable表结构
此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。1.全局参数, 默认三个参数next.dbid, IdGenerator区间, schema.history, 自动执行sql历史, schema.version, 当。记录机制基于Activiti引擎的事件机制的一般用途,并默认禁用。
2025-07-16 15:33:39
748
原创 SpringBoot中如何引入第三方的SDK
在项目中经常会遇到使用第三方SDK情况,即就是第三方生产的jar包,但是这个不能上传到maven仓库中,由于我们的项目需要依赖到这个SDK,那么我们可以通过以下的几步就可以轻松的引入SDK到我们项目中。(1)三方的jar包放到项目的src/main/resources目录下。(2)添加maven依赖。
2025-07-09 17:43:30
521
原创 Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
循环依赖处理示例分析(AService ↔ BService):1、AService实例化,其ObjectFactory被存入三级缓存2、 AService开始属性填充,发现需要BService3、 触发BService加载流程:3.1、 BService实例化,其ObjectFactory存入三级缓存3.2、 BService开始属性填充,发现需要AService。
2025-07-03 11:18:33
1331
原创 JVM的场景优化
这么做的结果就是,过了一段时间后,OOM依然会出现。死锁并没有第一种场景那么明显,web应用肯定是多线程的程序,它服务于多个请求,程序发生死锁后,死锁的线程处于等待状态(WAITING或TIMED_WAITING),等待状态的线程不占用cpu,消耗的内存也很有限,而表现上可能是请求没法进行,最后超时了。混合回收的基于复制算法的,所以大对象的复制会比较耗时,如果某个老年代的Region超过85%的对象是存活的,那他不会被回收,通过 -XX:G1MixedGCLiveThresholdPercent 设置。
2025-07-02 15:26:07
749
原创 flowable工作流的学习demo
需要注意的是,Authentication.setAuthenticatedUserId(currentUserId) 方法设置的当前用户ID在任务完成时对历史表产生影响是在任务监听器中触发的,例如在 “complete” 事件的任务监听器中执行了设置当前用户ID的操作。通常在开启一个新的流程实例、完成任务或者进行其他涉及用户身份的操作时,我们可以通过 Authentication.setAuthenticatedUserId() 方法设置当前用户的身份信息,以保留用户与相应操作的关联。
2025-06-14 22:58:51
840
原创 idea配置迁移
注意:最重要一点,如果安装idea时经过设置的,最好把原先\Roaming\JetBrains\IntelliJIdea2022.3.2复制到D:/software/IntelliJ IDEA 2022.3.2/config、\Local\JetBrains\IntelliJIdea2022.3.2复制到D:/software/IntelliJ IDEA 2022.3.2/system里面的数据原封不动的复制一份到目标目录,然后重启idea就可以了。更改IDEA的默认设置目录。
2025-06-14 20:09:51
549
原创 Java并发容器框架
/ node数组最大容量:2^30=1073741824// 默认初始值,必须是2的幕数//数组可能最大值,需要与toArray()相关方法关联//并发级别,遗留下来的,为兼容以前的版本// 负载因子// 链表转红黑树阀值,> 8 链表转换为红黑树//树转链表阀值,小于等于6(tranfer时,lc、hc=0两个计数器分别++记录原bin、新binTreeNode数量,<=UNTREEIFY_THRESHOLD 则untreeify(lo))
2025-06-10 14:09:42
1088
原创 高并发下的计数器,为什么阿里不推荐使用 AtomicLong
LongAdder 是 JDK1.8 由 Doug Lea 大神新增的原子操作类,位于 java.util.concurrent.atomic 包下,LongAdder 在高并发的场景下会比 AtomicLong 具有更好的性能,代价是消耗更多的内存空间。LongAdder 是 Google 开源的一个高性能计数器实现。它采用了一种分段锁的策略,将一个 long 型的变量分割成多个 16 字节的段,每个段都使用一个独立的 AtomicLong 进行更新。
2025-06-04 14:14:38
1009
原创 synchronized实现原理
synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法进入临界区,同时还可以保证共享变量的内存可见性。
2025-05-30 13:45:18
720
原创 springboot文件上传下载
SpringBoot中,类型可以精确控制HTTP响应,为文件下载提供完善的HTTP头信息。• 完全控制HTTP响应和头信息• 适合各种资源类型的下载• 支持动态生成的文件下载• 需要精确控制HTTP响应的场景• 动态生成的文件下载• 自定义缓存策略的文件服务。
2025-05-30 11:17:41
785
原创 多线程的一些概念
两个或两个以上的线程持有不同系统资源的锁,线程彼此都等待获取对方的锁来完成自己的任务,但是没有让出自己持有的锁,线程就会无休止等待下去。线程竞争的资源可以是:锁、网络连接、通知事件,磁盘、带宽,以及一切可以被称作“资源”的东西。如上图所示,Thread-1持有资源Object1但是需要资源Object2完成自身任务,同样的,Thread-2持有资源Object2但需要Object1,双方都在等待对方手中的资源但都不释放自己手中的资源,从而进入死锁。
2025-05-29 11:29:18
748
原创 ReentrantReadWriteLock读写锁
读取锁和写入锁都支持锁获取期间的中断;Condition支持。仅写入锁提供了一个 Conditon 实现;读取锁不支持 Conditon ,readLock().newCondition() 会抛出 UnsupportedOperationException。
2025-05-28 14:12:54
394
原创 volatile底层原理详解
Java语言规范对于volatile定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能够被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量。首先我们从定义开始入手,官方定义比较拗口。通俗来说就是但是它并不能保证多线程的原子操作。这就是所谓的线程可见性。。
2025-05-28 13:50:12
784
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅