
java
文章平均质量分 79
强哥叨逼叨
微信公众号:强哥叨逼叨
展开
-
Jmeter压测Nacos注册中心的Dubbo接口
Jmeter压测Nacos注册中心的Dubbo接口原创 2022-08-08 13:44:45 · 1551 阅读 · 3 评论 -
Spring Security基于Oauth2的SSO单点登录功能
本文主要介绍 同域 和 跨域 两种不同场景单点登录的实现原理,并使用 Spring Security 来实现一个最简单的跨域 SSO客户端。对Spring Security基于Oauth2的SSO单点登录功能感兴趣的朋友一起看看吧一、说明单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。本文主要介绍同域和跨域两种不同场景单点登录的实现原理,并使用Spring Security来实现一个最简单的跨域SSO客户端。二、...转载 2022-04-28 15:45:36 · 1497 阅读 · 0 评论 -
一次完整的JVM堆外内存泄漏故障排查记录
前言记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。本文的主要内容:故障描述和排查过程 故障原因和解决方案分析 JVM堆内内存和堆外内存分配原理 常用的进程内存泄漏排查指令和工具介绍和使用故障描述8月12日中午午休时间,我们商业转载 2022-04-11 11:38:23 · 471 阅读 · 0 评论 -
你该不会也觉得Dubbo参数回调中callbacks属性是用来限制回调次数的吧?
点击关注强哥,还有100多G的面试资料等你来拿哈喽,大家好,我是强哥。前些天,一个同事在使用Dubbo的参数回调时,骂骂咧咧的说,Dubbo的这个回调真是奇葩,居然会限制回调次数,自己不得不把callbacks属性值设置的非常大,但是还是会怕服务运行太久后超过回调次数限制,后续的回调就无法正常执行。突然被他这么一说,我倒是有点奇怪,正常来说Dubbo一个这么牛逼的框架不应该会有这样的限制才对啊。于是,强哥便开始对这个callbacks产生了兴趣,官网和百度找了一番也没有找到具体这个属性的详.原创 2022-04-07 19:03:54 · 1053 阅读 · 0 评论 -
Spring Cloud Function现SPEL 表达式漏洞,SPEL 表达式是个啥?
点击关注强哥,查看更多精彩文章呀哈喽,大家好,我是强哥。Spring Cloud Function现SPEL漏洞近日,Spring Cloud Function 官方测试用例曝光了 Spring Cloud Function SPEL 表达式注入漏洞,可利用该漏洞通过注入SPEL 表达式来触发远程命令执行。“由于Spring Cloud Function中RoutingFunction类的apply方法将请求头中的“spring.cloud.function.routing-expre原创 2022-03-30 13:42:50 · 910 阅读 · 0 评论 -
致敬Gif之父,使用Java生成Gif图片
点击关注强哥,查看更多精彩文章呀哈喽,大家好,我是强哥。据美国媒体报道,美国计算机科学家、GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)于当地时间3月14日因新冠肺炎去世,享年74岁。1987年,他创建了图形交换格式(GIF)来压缩图像;2012年,GIF被牛津美国词典评为年度词语;2013年,斯蒂芬凭借发明GIF获得韦比终身成就奖。首先,为GIF之父的离世表示惋惜。GIF图片是我们日常生活中使用非常广泛的图片格式,尤其是那些充斥着智慧的表情包,如果没有GIF,.原创 2022-03-28 20:09:44 · 1880 阅读 · 0 评论 -
Java 18 正式发布
点击关注强哥,查看更多精彩文章呀哈喽,大家好,我是强哥。就在昨天,3月22日,Oracle正式推出Java 18,最新的Java开发工具包 (JDK) 提供了九个JDK增强建议 (JEP) 的更新和改进。其中包括Java API文档 (JEP 413) 中添加代码片段的功能,这简化了在API文档中添加示例源代码,以及用于原型设计和测试的简单Web服务器 (JEP 408)。强哥之前有为大家总结了Java 9~Java 17的重要更新点,有兴趣的大家可以去回顾一下:赶紧收藏,Jav原创 2022-03-23 11:16:36 · 1153 阅读 · 0 评论 -
没弄懂深浅拷贝你也敢用缓存?
点击关注强哥,查看更多精彩文章呀哈喽,大家好,我是强哥。缓存对于我们大家来说并不陌生,在我们日常开发中,常用的缓存大概分以下几种类型: 用Java Map或Guava的Cache做服务内部缓存; H2、Derby、HSQLDB等内存数据库做缓存; Redis、Memcache等类型的分布式缓存; 而其中,最简单的肯定就是第一种服务内部的缓存了。强哥前些天就是用了Guava做了缓存,结果因为代码写的有些乱,就出了个匪夷所思的问题。搞了半天最后才发现问题所在。在原创 2022-03-15 09:59:33 · 2668 阅读 · 1 评论 -
Java如何对一个对象进行深拷贝?
本文转自:https://www.cnblogs.com/xinruyi点击关注强哥,查看更多精彩文章呀在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。而深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。如下图描述:了解了浅拷贝和深拷贝的区别之后,本篇博客将教大家几种深拷贝的方法。拷贝对象首先,我们定义一下需要拷贝的简单对象。转载 2022-03-11 11:56:59 · 377 阅读 · 0 评论 -
如何实现java主线程等待子线程执行完毕之后再执行?
本文转自:问题:如何实现java主线程等待子线程执行完毕之后再执行? - jseven - 博客园点击关注强哥,查看更多精彩文章呀工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的场景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线程的流程, 往往需要让主线程指定后, 等待子线程的完成. 这里有几种方式. 站在主线程的角度, 我们可以分为主动式和被动式. 主动式指主线程主动去检测某个.转载 2022-03-11 11:52:57 · 5321 阅读 · 0 评论 -
不懂这些,你敢说自己知道Java标准输入输出流?
哈喽,大家好,我是强哥。今天我们来讲讲Java的标准输入输出流,哈哈,虽然是基础,但是往深了挖挖,还是有许多干货的。我们先来看个面试题。说说获取用键盘输入常用的两种方法方法 1:通过 ScannerScannerinput=newScanner(System.in);Strings=input.nextLine();input.close();方法 2:通过 BufferedReaderBufferedReaderinput=newBuffer...原创 2022-02-22 23:11:53 · 692 阅读 · 0 评论 -
这本书,带你扫盲Java
书中有许多名词强哥之前在其他零散的教程里看过,可是在这本书里大都囊括了,比如:内存逃逸、ZGC、C1/C2编译器、Java协程、读屏障、写屏障等等。许多知识原本只知道它的表面意思,可是具体的来龙去脉却不得而知。看了书之后,理清了其中许多的前因后果。而第3版2019年12月上市,更是基于新的JDK13,更新了许多新版本JDK的一些内容以及与旧版本JDK原创 2022-02-04 10:48:08 · 325 阅读 · 0 评论 -
Java 9~Java 17主要更新了什么?
springboot 3要强迫使用Java17了,那Java9~Java17都主要更新了什么?原创 2022-01-28 23:32:15 · 2338 阅读 · 2 评论 -
java方法句柄-----1.方法句柄类型、调用
本文转自:java方法句柄-----1.方法句柄类型、调用 - 笨拙的小菜鸟 - 博客园方法句柄 方法句柄(method handle)是JSR 292中引入的一个重要概念,它是对Java中方法、构造方法和域的一个强类型的可执行的引用。这也是句柄这个词的含义所在。通过方法句柄可以直接调用该句柄所引用的底层方法。从作用上来说,方法句柄的作用类似于2.2节中提到的反射API中的Method类,但是方法句柄的功能更强大、使用更灵活、性能也更好。实际上,方法句柄和反射API也是可以协同使用的,下面会具体介转载 2021-12-27 20:23:22 · 2076 阅读 · 0 评论 -
JAVA日志MDC追踪快速定位问题源头
原文链接:https://blog.youkuaiyun.com/a183400826/article/details/101519219一、了解MDCMDC是什么 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能,也可以说是一种轻量级的日志跟踪工具。MDC能做什么 那么通过MDC的概念,我们可以知道,MDC是应用内的线程级别,不是分布式的应用层级别,所以仅靠它无法做到分布式应用调用链路跟踪的需求。转载 2021-12-27 14:37:52 · 882 阅读 · 0 评论 -
jvm常用命令
任何一个JVM参数的默认值可以通过java -XX:+PrintFlagsFinal -version |grep JVMParamName获取,例如:java -XX:+PrintFlagsFinal -version |grep MetaspaceSize原创 2021-12-16 16:02:42 · 420 阅读 · 0 评论 -
spring data jpa 分页查询
本文转自:https://www.cnblogs.com/hdwang/p/7843405.html法一(本地sql查询,注意表名啥的都用数据库中的名称,适用于特定数据库的查询)public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1", countQuery = "SELECT co转载 2021-08-19 15:34:21 · 1007 阅读 · 0 评论 -
(每日一题)Tomcat类加载器为什么要破坏双亲委派机制?
首先解决上面的问题,必须搞懂两点,什么是双亲委派机制?Tomcat使用Java双亲委派机制有什么问题?什么是双亲委派机制?很多人可能觉得Java的双亲委派机制这个是非常基础的问题,这有什么好解释的。可是,从强哥面试过的许多候选人来看,经常这种最基础的问题,往往能够将许多候选人卡住。所以,还是在这里不厌其烦的和大家简单的说下。一句话解释如果一个类加载器需要加载类,那么首先它会把这个类请求委派给父类加载器去完成,每一层都是如此;一直递归到顶层,当父加载器无法完成这个请求时,子类才会尝试去加载。原创 2021-06-23 10:50:17 · 1028 阅读 · 0 评论 -
(每日一题)什么是HappensBefore规则?有什么用?
今日问题有如下代码:class VolatileExample { int x = 0; volatile boolean v = false; public void writer() { x = 42; v = true; } public void reader() { if (v == true) { // 这里 x 会是多少呢? } }}假设线程 A 执行 writer() 方法,按照 volatile 语义,会把变量原创 2021-06-21 17:15:25 · 289 阅读 · 0 评论 -
Garbage First Garbage Collector Tuning
原文地址:https://www.oracle.com/technical-resources/articles/java/g1gc.htmlLearn about how to adapt and tune the G1 GC for evaluation, analysis and performance.TheGarbage First Garbage Collector (G1 GC)is the low-pause, server-style generational garbage ..转载 2021-05-18 14:25:55 · 193 阅读 · 0 评论 -
内存可见性,指令重排序,JIT。。。。。。从一个知乎问题谈起
转自:https://www.cnblogs.com/stevenczp/p/7978554.html在知乎上看到一个问题《java中volatile关键字的疑惑?》,引起了我的兴趣问题是这样的package com.cc.test.volatileTest;public class VolatileBarrierExample { private static boolean stop = false; public static void main(String[]转载 2021-05-11 16:10:46 · 256 阅读 · 0 评论 -
一次非典型的CPU告警的排查2021-05-08
原文链接:https://blog.youkuaiyun.com/lonely_bin/article/details/99461571最近线上频繁收到CPU超过阈值的告警, 很明显是哪里出了问题.于是排查了一番, 到最后找到罪魁祸首的时候, 突然意识到这次是一次很有意思的"非典型"的CPU的问题, 所以这里特意记录一下.为啥说它是非典型呢, 因为在我的经验里, 典型的CPU飙升通常都是业务代码里面有死循环, 或是某个RPC性能过低阻塞了大量线程等等,而这次的CPU问题却是由GC引起的, 因吹斯汀来看看排查转载 2021-05-08 11:12:26 · 419 阅读 · 0 评论 -
Spring Security与OAuth学习-初篇
聊聊你对Spring-Security的理解?聊聊你对OAuth2的理解?JWT和OAuth2有什么关系?Spring-Security和OAuth2怎么结合嘞?你有自己搭建过认证服务器吗?不知道大家对于上面的几个问题被问及的时候会心里发慌。强哥发现,大多数小伙伴对于一些工作中使用较少的知识,或者说是平常都在用,但是不需要自己去实现的知识,主动学习的积极性都比较低。就拿OAuth2来说,打个最简单的比方,我们玩王者荣耀时经常会弹出选择使用微信或者QQ授权登录的界面,选择微信.原创 2021-02-19 14:39:03 · 243 阅读 · 0 评论 -
JVM 常见命令
jstat 命令及含义解析:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html查看Java默认使用垃圾回收器:java -XX:+PrintCommandLineFlags -versionjmap导出堆快照:jmap -dump:format=b,file=[文件名] pid原创 2020-12-29 15:13:00 · 168 阅读 · 0 评论 -
JVM——深入分析对象的内存布局
本文转自:JVM——深入分析对象的内存布局阅读目录概述 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 估算对象大小 参考资料概述一个对象本身的内在结构需要一种描述方式,这个描述信息是以字节码的方法存储在方法区中的。Class 本身就是一个对象,都以 KB 为单位,如果 new Integer() 为了表示一个数据就占用KB级别的内存就有点不值了,下面讲解 JVM 是如何做的。为了表示对象的属性、方法等信息,不得不需要结构描述。..转载 2020-12-24 10:41:47 · 144 阅读 · 0 评论 -
maven将依赖一起打进jar里(解压依赖和不解压依赖方式)
使用maven-assembly-plugin插件。打包方式分两种,一种是把第三方jar包解压成class再加入进我们的jar包中,另一个则是不解压直接把jar包加入我们的jar中。解压依赖的方式:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId>...转载 2020-10-28 16:34:10 · 3045 阅读 · 0 评论 -
翠竹林 Java 实现对Sql语句解析
最近要实现一个简易的数据库系统,除了要考虑如何高效的存储和访问数据,建立表关系外,对基本的sql查询语句要做一个解析,这样我们才能知道用户的查询要求;因为时间关系,参考了已有的一篇文章,并对其实现中出的小问题给予更正,在这里跟大家共享一下。原文请查阅http://www.cnblogs.com/pelephone/articles/sql-parse-single-word.html第一步:先对sql语句进行预处理;对于用户,我们应该接受各种形式的查询语句书写,单行或者多行,语句中单个空格或者多个空转载 2020-07-20 11:44:16 · 340 阅读 · 0 评论 -
从源码研究如何不重启Springboot项目实现redis配置动态切换
上一篇Websocket的续篇暂时还没有动手写,这篇算是插播吧。今天讲讲不重启项目动态切换redis服务。背景多个项目或微服务场景下,各个项目都需要配置redis数据源。但是,每当运维搞事时(修改redis服务地址或端口),各个项目都需要进行重启才能连接上最新的redis配置。服务一多,修改各个项目配置然后重启项目就非常蛋疼。所以我们想要找到一个可行的解决方案,能够不重启项目的情况下,修改配置,动态切换redis服务。如何实现切换redis连接刚遇到这个问题的时候,想必如果对spring-b原创 2020-06-03 22:35:48 · 1491 阅读 · 0 评论 -
SpringMVC异步处理模式分析(DeferredResult/SseEmitter等)
1. 背景Tomcat等应用服务器的连接线程池实际上是有限制的;每一个连接请求都会耗掉线程池的一个连接数;如果某些耗时很长的操作,如对大量数据的查询操作、调用外部系统提供的服务以及一些IO密集型操作等,会占用连接很长时间,这个时候这个连接就无法被释放而被其它请求重用。如果连接占用过多,服务器就很可能无法及时响应每个请求;极端情况下如果将线程池中的所有连接耗尽,服务器将长时间无法向外提供服务!在常规场景中,客户端需要等待服务器处理完毕后返回才能继续进行其它操作,这个场景下每一步都是同步调用,如客户端调用转载 2020-05-09 16:39:35 · 1306 阅读 · 0 评论 -
Java类加载器及自定义
Java类加载器的作用是寻找类文件,然后加载Class字节码到JVM内存中,链接(验证、准备、解析)并初始化,最终形成可以被虚拟机直接使用的Java类型。类加载器种类有两种类加载器:1 启动类加载器(Bootstrap ClassLoader)由C++语言实现(针对HotSpot VM),负责将存放在<JAVA_HOME>lib目录或-Xbootclasspath参数指定的路...转载 2020-04-28 11:40:54 · 301 阅读 · 0 评论 -
解决swagger返回map复杂结构不能解析 Resolver error at definitions
解决:@Configurationpublic class SwaggerConfig { @Autowired private TypeResolver typeResolver; @Bean public Docket controllerApi() {// ParameterBuilder ticketPar = new Par...原创 2020-04-23 17:34:12 · 6895 阅读 · 1 评论 -
SpringBoot默认200个线程对于Websocket长连接够用吗?(一)
上篇推文从源码剖析SpringBoot中Tomcat的默认最大连接数中我们知道,SpringBoot的内嵌Tomcat默认的最大连接数为200。那么,这个默认值对于项目中引入了WebSocket使用长连接后,是否足够用呢?今天强哥就带大家一起从源码的角度来分析一下。我们还是从上一篇推文给的代码入手(需要源码的小伙伴可后台回复:WebSocket获取)。强哥想了想,要判断200个线程是否够,可能...原创 2020-03-27 14:08:53 · 15736 阅读 · 11 评论 -
Java NIO原理与简单实现
Java NIO 简介JAVA NIO有两种解释:一种叫非阻塞IO(Non-blocking I/O),另一种也叫新的IO(New I/O),其实是同一个概念。它是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。NIO是一种基于通道和缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存...转载 2020-03-10 17:33:34 · 374 阅读 · 0 评论 -
10分钟看懂, Java NIO 底层原理
1.1. JavaIO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。先强调一个基础知...转载 2020-03-10 17:12:04 · 923 阅读 · 1 评论 -
Java导出Excel解决乱码及导出文件打开不可读需修复的问题
工具代码:public class FileUtil { public static void download(String filename, HttpServletResponse res) { String filePath = "./template/" + filename; try (OutputStream os = res.getO...原创 2020-03-10 14:55:08 · 6314 阅读 · 1 评论 -
Java使用POI操作Excel合并单元格
合并单元格的方法:指定 4 个参数,起始行,结束行,起始列,结束列。然后这个区域将被合并。CellRangeAddress region = new CellRangeAddress(startRow, endRow, startCol, endCol);sheet.addMergedRegion(region);合并的简单示例:public class TestExcel {...转载 2020-02-13 20:04:26 · 2669 阅读 · 0 评论 -
从源码剖析SpringBoot中Tomcat的默认最大连接数
上篇推文为什么你的websocket只能建立256个连接?推出后,有许多小伙伴问:关键是怎么解决256这个问题。嗯,可能是我的标题起的有点问题,不过如果有认真阅读文章的话,应该会知道,其实256的限制是Chrome浏览器对WebSocket进行的限制。不过,对于一个客户端来说,假如一个窗口建立一个WebSocket连接的话,想要达到256个连接,需要打开256个窗口,这个一般来说很少出现。所以大家...原创 2020-01-20 20:03:36 · 21078 阅读 · 5 评论 -
为什么你的websocket只能建立256个连接?
WebSocket想必大家都不陌生,当我们的程序需要实时高效的获取后端的返回结果时,除了早期大家用到的前端轮循的机制之外,当前比较简单好用的莫过于WebSocket了。当然,这篇文章不是WebSocket的科普文,按照惯例:强哥出品,必属精品的原则(哈哈,自吹一波)。我们就不在这里介绍WebSocket是什么以及如何在Springboot上使用了,大家有兴趣的可以自行百度。当我们在后端项目...原创 2020-01-18 00:16:04 · 20114 阅读 · 7 评论 -
Springboot配置log4j2异步输出日志
强哥之前有发过一篇文章:聊一聊项目中的日志配置,其中讲述了项目log4j日志配置文件中,通过修改一些参数实现日志分期保存以及保存文件个数限制相关问题以及相应的处理方式。当然如果日志量过大还是推荐项目中接入ELK将日志放入搜索引擎中进行后期的查询处理。今天我们还是来讲讲日志,不过,不是关于日志的保存,而是关于在项目中遇到需要在程序中多处输出日志且每次的日志量都很大时,我们可以如何处理来提高程序的...原创 2020-01-15 23:37:45 · 5682 阅读 · 0 评论 -
ServletContextListener使用详解(监听Tomcat启动、关闭)
在Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。 当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理。在ServletContextListe...转载 2020-01-03 11:22:51 · 568 阅读 · 0 评论