自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小道仙的后宫

快节奏,慢生活。

  • 博客(490)
  • 资源 (6)
  • 收藏
  • 关注

原创 SkyWalking入门搭建【apache-skywalking-apm-10.0.0】

SkyWalking在Java中使用的是字节方式植入,是完全无代码侵入的VM options 添加,就是刚刚上面下的 java-agentEnvironment variables 添加,指定 SkyWalking的地址效果图操作步骤(idea 2023,其它版本百度操作)配置好后,启动服务会看到下面的日志,就说明 java-agent.jar 读取到了随机访问几下服务的接口,再去刷新SkyWalking 控制台,就可以看到了。

2024-07-21 19:01:18 329

原创 SpringSecurity最新学习,spring-security-oauth2-authorization-server【spring-security-oauth2升级】

默认获取token是在 header中,还要拼接一个前缀 Bearer, 假如想改为从 url中获取 access_token, 只需要重写BearerTokenResolver// URI 中 Token 的参数名@Override// 从 URI 参数中获取 Token= null &&!上面的流程完成了授权和鉴权,但我们拿不到有用的参数,何为有用的参数比如: 用户的 userId不管是Opaque还是Jwt都可以在里面设置一些我们自己的参数——把参数放到 【claims】Opaque。

2024-07-03 07:53:02 694

原创 Nominatim免费的地址解析,逆地址解析,OpenStreetMap开源地图数据【全网最全】

国内的一些地址解析供应商的API都开始付费了,就想找个免费的地址解析和逆地址解析的应用,最终选择了Nominatim + OpenStreetMap。

2024-06-22 14:45:55 856 2

原创 免费开源的地图解析工具【快速上手】

这篇文章和【Nominatim】是相呼应的,在尝试了OSM数据一直有问题之后,通过别人的指点是不是可以换个思路,我的数据只需要精确到市级别,也可以不用OSM这样全的数据(主要原因还是OSM太过庞大了)在网上看到有人发布的一个地址解析和逆地址解析的SDK(下面称为 Geo),觉得是个思路,随即进行了数据测试Geo 文档。

2024-06-22 14:43:11 1104

原创 SpringBoot 热插拔AOP,动态的实现AOP【简单易懂,有大用】

下面就来实现一个动态的添加/删除动态代理的功能,它的源码很简单,但这会打开你的新世界

2024-05-25 17:23:37 761 3

原创 Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】

最近在做系统升级的时候,引发了一个BUG,原本系统是有一个异常处理器A,引入了某个底包中也带了一个异常处理器B,最终走了底包的异常处理器B。在DispatcherServlet里面有一个onRefresh方法,它是重写的父类FrameworkServlet的,在初始化ServletBean的时候会被调用一次,它里面会做很多初始化的操作,其中一个就是获取容器里面的全局异常拦截器。并不是系统任何异常都会被它所拦截,因为我们已经知道它的执行点是在MVC的流程中,所以就只有HTTP异常才会被拦截处理。

2024-05-13 21:59:03 1180

原创 org.mockito.Answers.get()Lorg/mockito/stubbing/Answer

最近在做SpringBoot 版本升级,原本的版本是2.3.1,目标版本是2.7.17,升完之后发现powermock用不了,报标题的错。powermock官方已经不更新了,目前最新的版本停在 2.0.9,只能支持 junit4,所以想解决这个报错的办法有两个。降低 junit所需引入的包。

2024-05-13 21:36:10 434

原创 Dubbo-Admin 实践,Dubbo3 配置多协议,同时提供Dubbo和HTTP协议

Dubbo是支持多协议的,它默认的Dubbo协议已经很好了,正常情况下,使用Dubbo是做服务之间的通信是不需要更换协议的。比如有两个服务的提供者提供相同的服务,可以给它们打上A、B标签,请求的时候可以根据标签去固定请求对应的服务。默认的协议就是 dubbo,所以在使用的时候不需要指定协议,如果使用其它协议需要指定对应的协议。Dubbo不只是作为服务间的通讯,它还涉及服务治理,今天就来一起学习下Dubbo的控制台使用。原本的dubbo协议是不需要提供路径的,现在的HTTP需要提供路径,改造如下。

2024-04-27 19:30:05 1066

原创 免费简单好用的内网穿透工具(ngrok、natapp),微信回调地址配置

在一些特殊的场景下,需要把我们的内网暴露出去,比如写了一个接口或网站想让别人看到,或者进行第三方开发调试的时候需要一个外网可用的回调地址。很早之前不会有这样一个中间页,如果只是临时访问,点一下 【Visit Site】也就可以了,但如果前后端对接或者第三方回调,就难办了。如果第三方不支持ngrok的时候可以使用natapp来替代,不然ngrok可以固定域名还是挺方便的。可以执行Command Line,把token进行设置, ngrok就是上一步下载的可执行文件。官方提供三个解决办法。

2024-04-27 19:08:38 1311

原创 Can not create registry service-discovery-registry、Create zookeeper service discovery failed.

zookeeper连接不上, Create zookeeper service discovery failed.

2024-04-06 10:24:23 437

原创 Dubbo入门项目搭建【Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0】

基于Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0、Jdk1.8 搭建的Dubbo学习Demo。

2024-04-04 11:50:01 1197

原创 RocketMQ 消费者源码解读:消费过程、负载原理、顺序消费原理

看完上面的源码你最少可以回答下面几个问题RocketMQ消费的流程是怎么样的为什么消费者大于queue的时候,消费者就没用了顺序消费如何保证顺序的添加消费者的时候,如何重新分配的。

2024-04-02 22:01:46 986

原创 RocketMQ、Kafka、RabbitMQ 消费原理,顺序消费问题【图文理解】

1. RocketMQ,一个queue只能有一个consumer,消费者是多线程的,但开启顺序消费的时候,会对 queue加锁从而保证顺序2. Kafka,一个 partitions只能由一个consumer的一个线程去消费,基于单线程就保证了顺序性3. RabbitMQ,queue和consumer是多对多的,consumer的多个线程是独立的,要想保证顺序,只能让一个queue只有一个consumer,且consumer只有一个线程(但这样做效率就很低)

2024-03-10 14:57:45 1862 1

原创 Sentinel 规则持久化,基于Redis持久化【附带源码】

sentinel持久化原理:dashboard先把规则推送给A,再由A把规则下发到各个具体的应用服务。这样A就相当于一种中心存储,解决了数据存储的问题,同时A实时下发给应用服务解决了数据一致性的问题。

2024-03-03 16:39:09 1250

原创 Sentinel从入门到“精通”,从源码层面学习Sentinel

Sentinel提出了资源的概念,不管是如何使用本质都是在访问某个“资源”之前,先进行 SphU.entry。所以这个资源并不一定是接口,可以是我们想要限制的任何代码。可能有人好奇为啥dashboard 可以实时的添加/删除规则,如果熟悉代理的朋友应该知道,代理是可以动态的添加和删除的。基于上面实践发现使用Sentinel的限流可以有四种方式原生方式FilterAOP。

2024-02-18 16:05:08 1149

原创 JVM内存调优常用参数

查看某个参数的值:jinfo -flag ParallelGCThreads pid。查看某个参数的值:jinfo -flag G1HeapRegionSize pid。查看当前JDK版本所支持的垃圾回收器有哪些、以及默认使用的回收器。所谓的JVM调优,就是为了保证我们系统的稳定运行。注:pid 可以使用 jps/jcmd 查看。注: jstat -gc 结果描述。

2024-01-28 22:16:19 813

原创 JVM内存区域详解,一文弄懂JVM内存【内存分布、回收算法、垃圾回收器】

堆其实就是一大块内存区域,是用来存放对象的,对于一个应用来说最耗费内存的就是“对象”。因为在运行的过程中会创建无数个对象,所以内存回收(垃圾回收)的时候主要就是针对堆的垃圾进行回收。回收算法是理论,回收器是实践,不同回收器都是基于理论进行真正的实践,在讨论回收器之前需要先了解下面几个点。上面我们谈到内存空间,内存是有限的,想要健康持续的运行下去,就一定要回收“垃圾”。已经知道了哪些对象是可以回收的,那就需要按照某种回收算法,去回收它们。那怎么判定一个对象是不是垃圾呢,就成了新的问题。

2024-01-14 15:51:47 992

原创 一文弄懂@Async代理执行原理(从源码的角度深入理解@EnableAsync 注解开启原理)

一直只知道 @Async是通过代理来实现的,在同一个方法里面调用为什么不可以,只是懵懂知道一点,抽时间刚好研究一下它的原理,发现和 @Transactional 的实现原理完全一样。

2023-12-16 10:35:56 418

原创 基于MyBatis二级缓存深入装饰器模式

装饰器模式是一种能够在不改变原对象代码的情况下,动态地为对象添加新功能的设计模式。通过将对象包装在装饰器类中,可以透明地、在运行时选择性地、以任意顺序地应用这些功能。最终效果是通过组合不同的装饰器,扩展原对象功能,使系统更灵活可扩展。

2023-12-10 18:36:00 265

原创 布隆过滤器,Redis之 bitmap,场景题【如果微博某个大V发了一条消息,怎么统计有多少人看过了】

Bitmap是一种精简而高效的数据结构,通过二进制位存储大规模布尔值信息,常用于快速处理用户在线状态、权限管理以及行为记录等应用场景。可以简单把它想象成是趋于无限大的数组,每个位置只能存储 1 和 0。它可以快速统计出有多少个 1,也可以快速统计某个区间内有多少个 1。基于此我们可以创建一个 bitmap, key 就是这条消息的id,每个位置就对应一个用户,1 就表示看过。

2023-12-02 17:12:20 256

原创 ES 8.x开始(docker-compose安装、kibana使用、java操作)

其实可以简单把ES中的索引(index)理解成表,那对于表的操作,肯定就是创建表、增删字段,以及对表中数据的增删改查。这里使用docker-compose来安装,方便后续迁移,Elasticserach和kibina一起安装。配置文件有两个,一个是ES的配置文件,一个docker-compose的配置文件。除了用id精准匹配,使用ES更多的是做高亮搜索,比如想要搜索 tags中带。查询 my-index-two 索引中,id = 2,的数据。索引,添加一条 id = 2,的数据。的索引,里面有三个字段。

2023-11-27 22:08:02 730

原创 一文弄懂MySQL锁机制【记录锁、间隙锁、临键锁,共享锁、排他锁,意向锁】

没有使用索引做更新相关操作会锁表。通过唯一/主键索引等值加锁,只会锁具体的行,非唯一索引则不一定,SQL优化器会基于数据分布选择记录锁,或临键锁。只有在RR级别下才有间隙锁,目的是为了解决幻读,如果操作的数据是跨多个范围,就会加多个区间的间隙锁。MySQL默认的锁就是【临键锁】,所以在执行SQL的时候,记录锁和间隙锁是会同时存在的。范围是左开右闭的区间。

2023-11-10 23:17:10 3088 2

原创 Java日志源码详解,SpringBoot日志 slf4j、logback、log4j

在读取配置文件的时候无非就几种情况,既然有多种情况,那肯定是有一个优先级的——即下面的排序指定自己的配置文件 (logging.config: classpath:logback.xml)默认读取的配置文件,本质上和【1】一样,只是文件的位置不同logback自己的默认配置文件 (“logback-test.groovy”, “logback-test.xml”, “logback.groovy”, “logback.xml”)

2023-09-24 21:46:47 716

原创 EasyExcel导出模板实现下拉选(解决下拉超过50个限制)

先来看看最终实现效果,如果效果是你想要的,再看看实现逻辑。EasyExcel本身是支持设置下拉校验的,但有个问题,一旦下拉数据超过50个左右的时候就无法正常展示,当然,现在这个问题得到了解决。如果你之前使用过EasyExcel那上面主流程代码你将会很熟悉,下拉选相较于之前的导出只是多注册了一个 Handler。

2023-09-03 17:33:27 1347

原创 Java进阶之Dump文件初体验

最近线上频繁的内存告警,同事A通过分析dump文件解决了这个问题,我当然是不会放过这种学习的机会。

2023-07-30 19:29:50 3787

原创 Spring事务源码解析【一次一篇文章弄懂】

上一篇文章我们已经知道了Java中Spring的事务,尤其是声明事务,这篇文章我们来深入探讨一下Spring的声明事务是如何实现的。首先Spring的声明事务是基于AOP实现的,说到AOP我们就要搞清楚两点:1. 何时何地基于什么规则生成的代理对象2. 生成了代理对象后,拦截器做了什么

2023-07-23 12:26:51 536 1

原创 Spring使用@Transactional 管理事务,Java事务详解。

声明事务声明式事务是通过配置的方式来管理事务的行为,声明式事务的好处是可以将事务管理与业务逻辑相分离,提高了代码的可读性和维护性。编程事务编程式事务是通过编写代码显式地管理事务的开始、提交和回滚。使用编程式事务可以更加灵活地控制事务的细节,但需要更多的代码来处理事务管理,可能导致代码的冗余和增加了复杂性。

2023-06-24 22:04:42 3903

原创 Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

2023-05-28 15:21:48 4330

原创 RocketMQ 消费者运行原理,Consumer 集群消费、广播消费

上次我们整体的看了一下RocketMQ Consumer 的消费过程,今天再来聚焦看一下 Consumer 是如何进行集群消费和广播消费的。

2023-05-23 22:54:21 1155

原创 RocketMQ之 Consumer,消费者消费原理解析

每个使用了 @RocketMQMessageListener 注解的消费者,都会被解析成一个 ListenerContainerListenerContainer 在解析出来后,就被开启了,它会运行一个死循环的代码(如果当前线程不终止的话,会一直运行),这段代码会不停的去 pull 消息如果 pull到了消息,就会被丢入一个线程池,等待资源去处理消息。

2023-04-16 19:07:16 1314

原创 谈谈我理解的SpringCloud和Kubernetes的区别

个人觉得它们最大的区别在于一个是为了解决Java微服务架构问题,一个是容器架构和语言无关,所有功能都是自己这个架构所自带的,只是为了解决架构的某些问题而产生的。

2023-03-26 10:36:25 3859 1

原创 K8S、kubernetes no resolver defined to resolve could not be resolved (3: Host not found) 问题解决

K8S、kubernetes no resolver defined to resolve could not be resolved (3: Host not found) 问题解决

2023-03-01 10:57:06 1511

原创 Java线程池运行原理,线程池源码解读【Java线程池学习二】

但随着时间的推移在闲下来的时候我突然想,当任务进入了队列之后是怎么取出来的呢?然后列举了几个问题毫无疑问想要解决上面的问题,那只有研究源码,下面我们就来看下 ThreadPoolExecutor 的源码,此次目的就是解决上面的问题,先对线程池的核心工作原理进行理解,后面我们再来对线程池来一个全面的解读。1. 添加的一个任务是怎么运行的?2. 任务丢到了队列,怎么取出来呢?3. 过了时间怎么销毁线程?4. 怎么拒绝的?5. 线程池,这个池是什么? 线程怎么放进去?

2023-02-19 13:08:37 428

原创 线程池最优使用策略【Java线程池学习一】

本篇博客的主要目的是指导如何在Java中优雅的使用线程池。这篇博客的内容是截止一周前我对线程池的理解,简单说就是工作了三年的人对线程池的理解。使用多线程的时候要注意 全局变量 和 异常处理对我以往的面试来说(一年多工作经验的时候),掌握下面的理论知识就很充足了。

2023-02-12 21:40:28 795

原创 Java锁之ReentrantLock(源码详解)

ReentrantLock 这个Java中重要的锁,我想可能很多人只是听过,并没有使用过,我在看RocketMQ客户端源码的时候发现大量的使用了这个ReentrantLock,从而引起了我的兴趣,下面我们一起从源码的角度来学习ReentrantLock。我们先来看一下ReentrantLock的继承关系。

2023-01-12 21:46:27 975

原创 java线上问题排查工具——Arthas

Arthas 支持修改每个类的日志级别,这里只演示修改整个系统的日志级别 https://arthas.aliyun.com/doc/logger.html。上面的监控虽然很好,但在实际的项目中,我们的访问量很大,我们想要监控某个请求这时候通过参数过滤将会是完美的方案。新的class 加载到JVM 里面去。打印整个栈的信息,太长了感觉没啥用。方法一就没什么好说了,来看方式二。查看当前堆和非堆的内存使用情况。,生成 class的方式有2种。

2022-12-28 21:12:43 615

原创 经典算法之LRU算法

LRU算法算是个常见的算法,很有必要去了解它,现在我们就来看看什么是 LRULRU 的全称是 Least Recently Used(最近最少使用),就如它的含义一样,最近最少使用的。在实际的场景中大多会把它当作一种 淘汰策略它的应用场景也很简单,我们的存储空间总是有限的,一旦超过了最大限度就必须要淘汰一些数据,那淘汰哪种数据才算是合理的呢?合理的方式有很多,不同的场景也不一样,但淘汰 最近最少使用的数据,在绝大部分场景下都是合理的,所以LRU算法很常见。

2022-12-07 22:39:25 1105 1

原创 记一次服务宕机、优化全流程(以后也可以装X了)

服务宕机可能很多人第一反应就是限流,我们也做了,如果不限流一个 pod都起不来,以前对于限流也没有什么思考,现在觉得:限流的第一步是要考虑你的系统最大并发量,不然限流就是个借口。exhibition 服务在1.5w/min 的时候就开始挂机,顶峰4.5w, 或许我们的服务达不到4.5w,但绝对不会是1.5w。

2022-11-19 17:03:26 1133

原创 深入理解MyBatis一级缓存和二级缓存【超详细源码解析】

深入理解MyBatis一级缓存和二级缓存【超详细源码解析】一级缓存的作用域为何是 sqlSession、二级缓存的作用域为何是 mapper怎么理解 一、二级缓存都是基于 PerpetualCache 的HashMap的本地缓存为什么一级缓存无法被关闭怎么才能使用二级缓存?如果使用了二级缓存一级缓存还有用么如果一级缓存不可以关闭,那在分布式的系统中,如何解决数据一致性问题如果开启了二级缓存,那缓存的命中顺序将是如何呢

2022-11-04 16:55:48 1168 1

原创 Maven插件初体验【附源码】

学过Java的小伙伴对Maven一定很熟悉了,但对于Maven除了用来进行版本管理之外,你还用它做过什么呢?或许很多人和我一样,用了几年的Maven压根就没想过Maven除了版本管理还可以做其它事情。

2022-10-19 17:09:56 1097

mybatis-generator-gui-0.9.0

window界面版,代码生成器。最简单的代码生成器,资源共享

2019-03-22

springmvc实现上传文件到七牛云

此包包含了springmvc单独运行的jar包,和java上传文件到七牛云的jar包

2018-08-14

java上传文件到七牛云需要的jar

此包是java上传七牛云所需要的官方jar包,从七牛云文档上copy的代码加上此包,直接使用

2018-08-14

okio-1.6.0.jar

内容如标题所示。 用七牛云上传文件异常。可以用此包

2018-08-14

hibernate基本配置

本资源,是hibernate配置的基本资料,因为写了个关于hibernate基本配置的博客,为了方便读者操作,便一同公布这个配置资料。

2018-06-14

表单校验-validate

此包里面有,validate的详细文档,和相对应的js包。也有我自己写的关于validate的校验规则,和自定义校验(判断用户名是否存在)。

2018-05-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除