JAVA
文章平均质量分 79
BLF2
这个作者很懒,什么都没留下…
展开
-
Spring Data Redis 报错 WRONGPASS invalid username-password pair问题解决
spring data redis版本:3.2.5redis server版本:社区版6.0.2。原创 2024-07-25 19:51:47 · 799 阅读 · 0 评论 -
Spring Boot集成logback出现log.dir_IS_UNDEFINED问题
logging:log:(不要使用和-- 部分配置 --> < configuration debug = " false " scan = " false " >原创 2024-07-04 11:00:42 · 663 阅读 · 0 评论 -
Spring Boot使用Logback将某些日志输出到单独的文件
重构了某个接口,想监控下新接口各个处理过程的时间,从而评估和监控日常性能。监控使用Spring自带的。原创 2024-04-30 17:32:38 · 1330 阅读 · 1 评论 -
SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶
查看Flink日志发现了JSON解析失败,Flink是从Kafka拿数据,Kafka本身不处理数据,Kafka前面是埋点收集服务,这个服务是SpringWebFlux+ReactorKafka做的,收集到数据后对数据做一些解码(如UrlDecode,Base64Decode或者Aes解密等),写入日志并且扔进Kafka。仔细比对了大量日志,发现只有MacOs和Windows下的微信打开小程序时会出现这个问题,安卓,iOS系统的微信小程序不会出现这个问题,分别使用了一台Macos和Windows,成功复现。原创 2024-04-27 00:01:21 · 751 阅读 · 3 评论 -
JVM学习之垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池等。转载 2024-01-15 23:54:34 · 404 阅读 · 1 评论 -
JVM学习之垃圾回收相关概念
1、一般的垃圾回收算法至少会划分出两个年代,年轻代和老年代。但是单纯的分代理论在垃圾回收的时候存在一个巨大的缺陷:为了找到年轻代中的存活对象,却不得不遍历整个老年代,反过来也是一样的。2、如果我们从年轻代开始遍历,那么可以断定N, S, P, Q都是存活对象。但是,V却不会被认为是存活对象,其占据的内存会被回收了。这就是一个惊天的大漏洞!因为U本身是老年代对象,而且有外部引用指向它,也就是说U是存活对象,而U指向了V,也就是说V也应该是存活对象才是!而这都是因为我们只遍历年轻代对象!转载 2024-01-15 23:53:24 · 92 阅读 · 0 评论 -
JVM学习之垃圾回收概述和相关算法
垃圾回收概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。转载 2024-01-15 23:51:40 · 75 阅读 · 0 评论 -
JVM学习之字符串常量池
在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。如果不是用双引号声明的String对象,可以使用String提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。2、使用 intern() 方法:由于数组中字符串的引用都指向字符串常量池中的字符串,所以程序需要维护的 String 对象更少,内存占用也更低。常量池就类似一个Java系统级别提供的缓存。转载 2024-01-15 23:49:54 · 108 阅读 · 0 评论 -
JVM学习之执行引擎
执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部。转载 2024-01-15 23:47:03 · 100 阅读 · 0 评论 -
JVM学习之对象的实例化内存布局与访问定位
因此一般来说(由字节码中跟随invokespecial指令所决定),new指令之后会接着就是执行init方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完成创建出来。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。在Java程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。所有属性设置默认值,保证对象实例字段在不赋值可以直接使用。转载 2024-01-15 23:45:41 · 42 阅读 · 0 评论 -
JVM学习之方法区
原文链接:https://github.com/youthlql/JavaYouth方法区栈、堆、方法区的交互关系从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。栈、堆、方法区的交互关系下面涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中转载 2024-01-15 23:44:10 · 111 阅读 · 0 评论 -
JVM学习之堆
从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。1、每个线程都有一个TLAB空间2、当一个线程的TLAB存满时,可以使用公共区域(蓝色)的。转载 2024-01-15 23:42:37 · 163 阅读 · 0 评论 -
JVM学习之虚拟机栈
具体问题具体分析如果只有一个线程才可以操作此数据,则必是线程安全的。如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。/*** 面试题:* 方法中定义的局部变量是否线程安全?具体情况具体分析* 何为线程安全?* 如果只有一个线程才可以操作此数据,则必是线程安全的。* 如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。转载 2024-01-15 23:40:33 · 189 阅读 · 0 评论 -
Redis不支持集群错误——ERR This instance has cluster support disabled
我没公司RedisServer权限,公司的RedisServer不是集群部署,就是单个,那就只能从配置上修改一下了,Configuration从Cluster变成Standalone即可。说明RedisServer不支持集群,网上很多文章都是修改Server配置重启解决此问题的,这不再赘述。最近手动配置了Redis的连接池。原创 2023-08-18 11:43:37 · 1692 阅读 · 0 评论 -
nginx+lua写入kafka报buffered messages send to kafka err: not found broker
[error] 9#0: *4029703 [lua] producer.lua:272: buffered messages send to kafka err: not found broker, retryable: true, topic: xxx, partition_id: 11, length: 2原创 2023-03-13 20:34:03 · 665 阅读 · 0 评论 -
python定时任务执行shell脚本切割Nginx日志-慎用
docker+python+shell切割Nginx日志原创 2023-02-01 19:27:50 · 823 阅读 · 0 评论 -
Zuul迁移至Spring Cloud Gateway踩坑记录
Zuul1.x已经不维护了,需要迁移。这里记录一下从Zuul1.x迁移到Spring Cloud Gateway 3.x遇到的坑原创 2022-11-29 13:46:41 · 1776 阅读 · 0 评论 -
记一次服务CPU过高排查
查看到CPU过高,于是根据CPU线程占用排查问题原创 2022-09-30 16:38:22 · 1362 阅读 · 0 评论 -
记一次生产环境内存占用过高的排查
生产环境出现内存使用较大的情况,没有OOM,但K8s服务重启了,查一下原因原创 2022-08-26 14:00:10 · 868 阅读 · 0 评论 -
StringRedisTemplate 分布式锁
StringRedisTemplate 分布式锁原创 2022-07-14 15:10:46 · 2504 阅读 · 0 评论 -
Docker容器只有JRE没有JDK使用Jattach导出内存快照
Docker容器里面只有JRE没有JDK使用jattach导出内存快照原创 2022-07-01 14:44:21 · 2109 阅读 · 2 评论 -
Spring Boot Nacos配置无法覆盖@Value定义的默认值
SpringCloud Swagger2 Nacos配置无法覆盖@Value设置的默认值原创 2022-06-03 18:08:48 · 3747 阅读 · 0 评论 -
K8s部署Spring Boot Admin,Actuator监控(不使用主机名通信)
---------------- 特别感谢:wang dayu 同学整理 ----------------集成说明1.由于环境上部署无法访问pod地址,需要将client的客户端服务 url和管理网址进行转换覆盖pod的地址2.插件需要严格遵守与springboot,springcloud版本兼容性,具体对应关系请参考该地址:https://blog.csdn.net/q283614346/article/details/121146721以下集成案例以springboot 版本1.5.7.RE原创 2022-03-12 21:03:40 · 1504 阅读 · 0 评论 -
JUC笔记(二)
打断park的线程: public static void main(String[] args) throws InterruptedException { Thread myThread = new Thread(()->{ System.out.println("park---->"); LockSupport.park(); System.out.println("unpark---->"); Syste原创 2022-01-23 20:08:14 · 429 阅读 · 0 评论 -
JUC笔记(一)
同步和异步这个概念相对于调用者来说,如果调用者需要等待方法返回后才能继续运行,就是同步,如果不需要等待方法返回即可继续运行,就是异步。在多线程里,同步的扩展意思是多线程之间协调一致。IO操作IO操作不占用CPU,但是线程被阻塞创建和启动线程直接使用ThreadThread thread = new Thread(){ @Overide public void run(){ }};//必须调用start启动线程thread.start()使用Run原创 2022-01-03 16:29:54 · 346 阅读 · 1 评论 -
对接OKTA 使用SAML2.0协议
对接OKTA 使用SAML2.0协议缘起给客户做项目,客户要求内部使用okta登陆,使用SAML2.0协议,需要对接。okta初探OKTA是SSO,SAML协议的交互流程大致如下浏览器打开需要登录系统登陆界面,系统登陆界面只有一个登陆按钮,没有输入用户名密码的地方(原因是OKTA使用域账户登陆的时候,能直接获取域账户名,除了这个还有好多客户端都支持,比如Apple账户)点击按钮,跳转到OKTA页面,这个页面只有一个loading动画,个人猜测里面有获取当前域账户名的代码然后再次一个原创 2021-05-07 18:44:29 · 4443 阅读 · 15 评论 -
Minio+Nginx+Https访问
Minio+Nginx+Https访问缘起最近感觉OSS比较有意思,然后发现网上有一款开源的软件Minio,算是OSS技术的的开源实现吧,最近玩了一下。想搞一下Https访问,但是Minio官方文档里面实在没看太懂,就想曲线救国,用Nginx转发一下,本次记录做法和期间遇到的问题。版本Nginx 1.16.1Minio RELEASE.2021-01-08T21:18:21ZJava 1.8u255Https 腾讯云申请的ssl证书Minio Java客户端版本: <depende原创 2021-02-25 23:19:34 · 10701 阅读 · 24 评论 -
一头扎进caffeine cache的大坑
一头扎进caffeine cache的大坑caffeine号称性能做好的本地cache,最近手头有个小项目,想用caffeine作为本地缓存缓存一下用户的token,然后配置大概如下: private static final Cache<String, String> userTokenCache = Caffeine.newBuilder() // 数量上限 .maximumSize(10000) // 过期机制原创 2021-02-03 12:57:02 · 3849 阅读 · 0 评论 -
深入浅出jdk动态代理和cglib动态代理
jdk动态代理代理模式生活中我们可以见到各种各样的代理,比如租房子找中介,比如驾校招生代理。他们有一个共同点就是他们只算作中间人,但不是最后真正的执行者,房子中介租房的时候,房子主人并不是他,驾校招生代理在招人的时候,只是登记你的信息,具体去哪练车,还是要看驾校的,这就是代理通俗上描述的样子。在代理设计模式中,其实很类似。某个接口定义了一些方法,有一个实现类实现了它,然后有个代理类也实现了这个接口,并持有实现类实例,代理类的接口实现本质上是调用实现类的逻辑,在调用前后可以增加一些逻辑,也可以控制是否原创 2020-08-29 23:10:09 · 402 阅读 · 0 评论 -
项目复盘之回到上海后的第一个项目,我受益匪浅
项目复盘之回到上海后的第一个项目,我受益匪浅随着jxlife项目接近尾声,我也接到了项目组调离的通知,即将开往新的项目组,回想这个项目的点点滴滴,有很多感慨。为了后面走的更加顺利特此进行复盘,将项目中的优点继续发扬光大,将项目中的缺点尽量挖掘,并寻求最佳解决方案。优点按项目工期如期完成这个似乎不是我个人的优点,是我们团队的优点,在我们团队负责的这一块,都是按照计划中的时间节点按时交付,所幸个人没有拖后腿,希望再接再厉项目bug数低于预期这个依旧不是我个人的优点,是大家共同努力的结果,在大家冒烟原创 2020-08-11 00:44:40 · 239 阅读 · 0 评论 -
使用Redis锁处理数据库并发问题
缘起数据库描述:字段类型约束备注idintPK自增主键当前系统客户id字符串UNIQUE_INDEX由当前系统生成调用方系统客户id字符串UNIQUE_INDEX由调用方生成姓名字符串NOT NULL性别字符串NOTNULLF-女 N-男其它业务字段问题无关,不再描述存在此场景:某个用户接口提供查询和保存功能,调用方传入用户信息查询条件,若是存在此用户,则返回查询到的业务主键(此主键在应用内生成),如果未查询原创 2020-07-17 15:37:19 · 574 阅读 · 0 评论 -
一次因时区问题引发的血案——尽量别改全局配置
一次因时区问题引发的血案——尽量别改全局配置缘起测试报bug说传入的生日时间戳是651078000000(对应时间是1990-08-20 00:00:00),但是存在数据库是1990-08-19,事关我写的微服务,便决定查一下。还没解决问题,先发现了feign的bug通过postman使用测试给的数据测试了一下,发现还真是有这个问题,怎么会差一天呢,然后考虑到我们微服务之间是使用feign调用的,序列化和反序列化使用的是fastjson,我用postman直接调用微服务序列化和反序列化是jacks原创 2020-06-30 14:30:01 · 732 阅读 · 0 评论 -
Mysql中类型为DATE,Java中为java.util.Date,日期对比问题
缘起字段名为birthday,java中的类型为java.util.Date,数据库字段为DATE类型,resultMap映射为<result column="birthday" property="birthday" jdbcType="DATE"/>传入一个日期(格式为"yyyy-MM-dd"),在数据库中使用where birthday=#{birthday}居然不相等????解决添加jdbcType,where birthday=#{birthday,jdbcType=DATE},原创 2020-05-19 20:29:06 · 1277 阅读 · 1 评论 -
面试题之劝君莫学java
劝君莫学javajava基础HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。答:实现原理是邻接表,数组加链表的方式,为了防止链表过长,当链表达到某个特定条件(长度超过8)的时候,会转化为红黑树HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。答:HashMap在当前元素个数超过当前容量的0.75的时候,会发生扩容,容量扩展为原来的2倍,其中的元素会重新计算hash值,重新放到扩容后的hashmap中。每次是2的n次幂是因为优化hash算法,降低碰撞概率原创 2020-05-19 19:04:21 · 375 阅读 · 0 评论 -
jvisualvm定位JVM内存溢出,死锁,分析GC日志
OOM定位创造一个会OutOfMemoryError的程序import java.util.LinkedList;import java.util.List;public class OutOfMemoryDump { /** * JVM 参数 * -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOu...原创 2020-01-01 14:52:11 · 1964 阅读 · 0 评论 -
frp + Nginx实现内网穿透 配置多个子域名访问内部服务
Nginx转发 + frp内网穿透 配置多个子域名访问内部服务缘起公司搬家,新家不能装专线,静态ip消失,改为动态IP了,这样内部服务器在外网就没法访问了,所幸我们有一台云服务器,有公网ip。这里只提示写这篇博客的原因,下面的操作是在我个人腾讯云服务器(带公网ip)和个人PC上测试使用,亲测通过。公司阿里云服务器是生产环境,拿来测试会影响线上。环境准备已备案的域名一个带公网ip的云服务...原创 2019-12-29 14:28:02 · 5504 阅读 · 4 评论 -
数据权限设计之Mybatis拦截器追加sql的where条件
缘起需求:数据权限设计要求使用mybatis拦截器拦截Statement的prepare,对即将执行的sql进行拦截并添加权限需要的条件。解决方案对sql的where部分进行追加条件,需要重写sql。工具类使用Duird包中包含的工具类,如下:private static String contactConditions(String sql, Map<String, Object&...原创 2019-11-08 22:18:20 · 7534 阅读 · 2 评论 -
Docx4j生成word表格(无问题),用Libreoffice转换为pdf格式乱掉问题
缘起最近做了一个项目,用Docx4j生成word,然后转换为pdf展示,在前面的博文java docx4j动态生成表格,保存为word,并通过Libreoffice转PDF已经给过较为完美的解决方案,但是实现起来发现有些表格(较长)在转换成pdf时格式乱掉。原因起初以为是文本过长没法显示,后来用了各种分割方案都不行,最后发现是文本中带回车换行导致的解决方案在写入表格数据之前将所有的\n替...原创 2019-10-25 12:16:46 · 2949 阅读 · 3 评论 -
spring boot 拦截器HandlerInterceptorAdapter的postHandle和afterCompletion无法获取response返回值问题
缘起有一个需求,在进入controller之前验证调用次数是否超过限制,在响应之后判断是否正常返回,对调用次数进行+1,发现带@RestController的类和带@ResponseBody的方法在被调用后response会直接写入输出流,在postHandle和afterCompletion这两个方法执行之前就已经把数据返回,导致这两个方法里面的response根本获取不到响应数据。解决方案...原创 2019-10-24 21:19:31 · 12513 阅读 · 0 评论 -
Mybatis Plus 3.0.x版本 Dots are not allowed in element names,please remove it from问题处理
缘起今天收到同事如题目面试那样的一个反馈,于是用debug定位到了报错的地方:org.apache.ibatis.builder.MapperBuilderAssistant#applyCurrentNamespace里面,debug发现currentNamespace为null,base为mapper方法的全限定名,于是抛出Dots are not allowed in element na...原创 2019-10-22 18:18:46 · 3088 阅读 · 0 评论