自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 收藏
  • 关注

原创 Springboot代码混淆,别再让代码在线上进行裸奔

简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件图片就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥。比较常用的反编译工具 JD-GUI ,直接把编译好的jar丢进去,大部分都能反编译看到源码:图片那如果不想给别人反编译看自己写的代码呢?怎么做?该篇玩的代码混淆 ,是其中一种手段。我给你看,但你反编译看到的不是真正的代码。先看一张效果示例图 :图片开搞先看一下我们混淆一个项目代码,要做啥?图片。

2025-07-28 17:03:19 166

原创 一次由热部署导致的 OOM 排查经历 !

比较可疑,其他加载器都是spring和jdk的,这个是谷歌的,同时这个类加载器的实例数量和加载的类的数量非常大,同时随着服务的运行在不断的增长。仅仅是类加载器的实例数量大倒还好,毕竟它的。的情况下(使用单例模式),就不会出现这么严重的问题了,但依然存在热部署 agent 对自定义 classloader 的强引用问题。环境的服务加载了很多类也卸载了很多类(这其实是个线上问题,通过这次排查才发现的,后面分析原因),而。方法是线程安全的,代码里的使用姿势不对,修改代码如下,重新发布,不再OOM了。

2025-07-28 17:03:06 610

原创 为什么 Nginx 比 Apache 更牛叉?

一、Apache三种工作模式1、prefork的工作原理2、worker的工作原理3、event 基于事件机制的特性二、如何提高Web服务器的并发连接处理能力三、Nginx优异之处四、Nginx 工作原理五、Nginx 的诞生主要解决C10K问题1、select模型:(apache使用,由于受模块等限制,用的不多);2、poll:poll是unix沿用select自己重新实现了一遍,唯一解决的问题是poll 没有最大文件描述符数量的限制;3、epoll模型:(Nginx使用)

2025-07-28 17:02:49 651

原创 你知道 ping 命令是如何工作的吗?

你知道ping命令是如何工作的吗?一、介绍ICMP协议二、为什么需要ICMP?三、ICMP的格式四、查询报文五、差错报文3-目的不可达4-原点抑制消息11-ICMP超时5-重定向六、ping 的发送和接收过程1.向目的主机发送回显请求2.目的服务器发送回显应答3.源主机显示相关信息七、ICMP—Traceroute命令我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?ping命令是基于ICMP协议工作的。

2025-07-28 17:02:35 676

原创 美团:为什么 MySQL 不推荐使用 join?

但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为sql本身长度有限。2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去in它。2.分布式的分库分表。

2025-07-28 17:02:20 372

原创 SpringBoot + Elasticsearch7.6实现简单查询及高亮分词查询

该文章需要提前准备好Elasticsearch7.6以及ik分词器的环境,如果还没准备好的可以看看。

2025-07-25 14:13:35 354

原创 SpringBoot快速开发利器:Spring Boot CLI

Spring boot CLI是运行spring boot命令的命令行界面。Spring提供了用于创建、运行和测试spring boot应用程序的spring命令。Spring boot CLI应用程序使用groovy语言,通过这种方式,我们用最少的代码行创建我们的应用程序并启动它。使用groovy的Spring boot CLI具有以下特点。Spring boot CLI应用程序使用groovy。我们在应用程序中创建groovy文件,为此我们不需要提供groovy的任何JAR依赖。

2025-07-25 14:13:08 882

原创 Spring Boot 如何解决多个定时任务阻塞问题?

本篇文章介绍了Spring Boot 中 实现多线程定时任务的三种方案,你喜欢哪一种?

2025-07-25 14:12:47 138

原创 Spring Boot 整合 阿里开源中间件 Canal 实现数据增量同步!

数据增量同步的开源工具并不只有Canal一种,根据自己的业务需要选择合适的组件。

2025-07-25 14:11:53 748

原创 更快的Maven来了,速度提升了8倍!

mvnd 是 Maven Daemon 的缩写 ,翻译成中文就是 Maven 守护进程。mvnd 是 apache/maven 的一个子项目,它并不是一个全新的构建工具,而是对 maven 的扩展。它内置了 maven,其实现原理是构建了一个或者多个 maven 守护进程来执行构建服务。1.mvnd 的目标是使用 Gradle 和 Takari 所知的技术提供更快的 Maven 构建。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。

2025-07-25 14:11:33 766

原创 面试官:说一下 final 和 final 的 4 种用法?

final 翻译成中文是“最终”的意思,它是 Java 中一个常见关键字,使用 final 修饰的对象不允许修改或替换其原始值或定义。final 是 Java 中常见的一个关键字,被它修饰的对象不允许修改、替换其原始值或定义。final 有 4 种用法,可以用来修饰类、方法、变量或参数。

2025-07-24 14:03:44 178

原创 SpringBoot + SpringBatch + Quartz整合定时批量任务

其实SpringBatch并没有想象中那么好用,当从数据库中每次取5000条数据后,进入processor中是逐条处理的,这个时候不能不行操作,等5000条数据处理完之后,再一次性执行ItemWriter方法。至于Quartz定时功能,很简单,只要定时创建SpringBatch里面的Job,让这个job启动就好了,此处就不在给出了,贴的代码太多了。由于之前,没有用过SpringBatch,于是上网查了下资料,发现可参考的不是很多,于是只能去慢慢的翻看官方文档。遇到不少问题,就记录一下吧。

2025-07-24 14:03:30 345

原创 Spring Security 和 Shiro 该如何选择?

要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比。

2025-07-24 14:03:12 625

原创 Redis 延时任务,高手养成篇

这样可以看出定时轮由个3个重要的属性参数,ticksPerWheel(一轮的tick数),tickDuration(一个tick的持续时间)以及 timeUnit(时间单位),例如当ticksPerWheel=60,tickDuration=1,timeUnit=秒,这就和现实中的始终的秒针走动完全类似了。该方案是利用JDK自带的DelayQueue来实现,这是一个无界阻塞队列,该队列只有在延迟期满的时候才能从中获取元素,放入DelayQueue中的对象,是必须实现Delayed接口的。

2025-07-24 14:02:57 945

原创 RocketMQ主机磁盘空间有限,如何无限期延长消息存储?

RocketMQ作为国人开源的一款消息引擎,相对kafka也更加适合在线的业务场景,在业内使用的也是非常广泛,很多同学也是非常熟悉它及它的存储机制,所以这里不再对它的原理性东西作太多说明。我们也知道,RocketMQ所有的数据如消息信息都是以文件形式保存到broker节点所在主机上指定的分区目录下,比如消息的数据都是保存在commitlog中,默认保存72小时(在磁盘使用率未达到阈值的情况下)会在指定时间清理过期数据,释放磁盘空间。当然,如果消息量不大且所在磁盘的分区够大,我们可以增加消息的保存时间。

2025-07-24 14:02:39 579

原创 Guava RateLimiter 实现 API 限流,这才是正确的姿势!

Guava提供的RateLimiter可以限制物理或逻辑资源的被访问速率,咋一听有点像java并发包下的Samephore,但是又不相同,RateLimiter控制的是速率,Samephore控制的是并发量。RateLimiter的原理类似于令牌桶,它主要由许可发出的速率来定义,如果没有额外的配置,许可证将按每秒许可证规定的固定速度分配,许可将被平滑地分发,若请求超过permitsPerSecond则RateLimiter按照每秒 1/permitsPerSecond 的速率释放许可。图片。

2025-07-23 19:27:08 145

原创 ZooKeeper的选举机制和同步机制超详细讲解,面试经常问到!

zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。

2025-07-23 19:26:53 665

原创 Java 中的屠龙之术:如何修改语法树?

TreeMaker用于创建一系列的语法树节点,我们上面说了创建JCTree不能直接使用new关键字来创建,所以Java为我们提供了一个工具,就是TreeMaker,它会在创建时为我们创建的JCTree对象设置pos字段,所以必须使用上下文相关的TreeMaker对象来创建语法树节点。具体的API介绍可以参照,TreeMakerAPI,接下来着重介绍一下常用的几个方法。在我们操作抽象语法树的时候,有时会涉及到关于List的操作,但是这个List不是我们经常使用的而是。

2025-07-23 19:26:22 682

原创 老王,快给你的 Spring Boot 做个埋点监控吧!

Counter的作用是记录XXX的总量或者计数值,适用于一些增长类型的统计,例如下单、支付次数、Http请求总量记录等等,通过Tag可以区分不同的场景,对于下单,可以使用不同的Tag标记不同的业务来源或者是按日期划分,对于Http请求总量记录,可以使用Tag区分不同的URL。Gauge通常用于变动的测量值,测量值用ToDoubleFunction参数的返回值设置,如当前的内存使用情况,同时也可以测量上下移动的”计数”,比如队列中的消息数量。下面花一点时间从零开始搭建一个这样的系统,使用CentOS7。

2025-07-23 19:25:42 617

原创 Redis的keys命令到底有多慢?

查找符合正则匹配的key的列表。扫描对象是Redis服务中所有的key,想想都很慢对不对?同时执行keys命令的同时,Redis进程将被阻塞,无法执行其他命令,假如超过了哨兵的配置,还会进行主从切换,切换过程中,如果主节点恢复正常,还可能出现脑裂等一系列问题。所以,生产环境中,建议直接禁用keys命令。

2025-07-23 19:25:26 314

原创 7个妙招,轻松提升 SpringBoot 项目的吞吐量

Jboss下的服务器,Tomcat吞吐量5000,Undertow吞吐量8000。实例就可以作为这次调用的契约,在将来任何场合,用于获得最终的计算结果。(守护)线程,所以,当主线程结束时,这些线程无论执行完毕都会退出系统。这两个方法如果在不指定线程池的情况下,都是在。我们用休眠1秒来模拟一个长时间的计算过程,并将计算结果告诉。方法中,它会在一个新线程中,执行传入的参数。方法,这个方法可能是比较慢的,但这并不影响。线程池中执行,而这个线程池中的所有线程都是。在该示例中,启动一个线程,此时。

2025-07-22 16:29:35 234

原创 SpringBoot 启动时自动执行代码的几种方式讲解

目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用注解实现。当然也可以去实现Spring的与接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载顺序。Spring应用启动过程中,肯定是要自动扫描有@Component注解的类,加载类并初始化对象进行自动注入。

2025-07-22 16:28:12 417

原创 Spring @Bean 和 @Component 注解的区别, 你知道吗?

以上简单介绍了几种 Spring 中的几个注解及代码示例,就我个人而言,均是平时用到且不容易理解的几个,或者容易忽略的几个。当然,这篇文章并没有完全介绍完,在今后还会继续补充完善。

2025-07-22 16:27:31 947

原创 面试官:为什么要用 Spring?它到底解决了什么问题?

第一种传统方式创建对象,就像图一中的齿轮组。如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。图一:高度耦合的齿轮组而用Spring注入对象犹如图二的齿轮,利用第三方xml文件使任意两个齿轮之间无必然联系,B齿轮坏了也影响不到A、C、D齿轮。齿轮组相互之间的依赖关系降到最低。图二:解耦后的齿轮组。

2025-07-22 16:25:46 306

原创 Service 和 Dao 实现,真的有必要每个类都加上接口吗?

本文针对「Service层是否需要接口」这个问题,指出需要接口的理由的问题。以及个人对这个问题的观点,希望对大家有一些帮助。

2025-07-22 16:25:15 708

原创 将 Bean 放入 Spring 容器有哪几种方式?

将bean放入Spring容器中有哪些方式?我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下。

2025-07-21 16:46:02 520

原创 当我把 SpringBoot 的启动 Banner 换成了老师;同事:借一bu说话...

当我们启动SpringBoot项目的时候,控制台会输出SpringBoot的logo以及版本相关的信息!可能很多朋友不知道,这个logo的是可以自定义的,而且自定义起来还非常简单,只需要在resources目录下放上一个banner配置,SpringBoot启动的时候,加载txt文件或者图片文件,就会展示对应的内容;文本格式,SpringBoot 会读取配置项banner.txt和,从配置项中获取真实的文件地址;如果配置中没有配置,会把配置项作为文件去加载;图片格式,SpringBoot 加载配置项。

2025-07-21 16:45:21 446

原创 SpringBoot @Value注解的高级用法,给力

在日常开发中,经常会遇到需要在配置文件中,存储List或是Map这种类型的数据。Spring 原生是支持这种数据类型的,以配置List类型为例,对于.yml对于当我们想要在程序中使用时候,想当然的使用@Value这个问题也是可以解决的,以我们要配置的 key 为test.list为例,新建一个test的配置类,将list在程序其他地方使用时候。可以看见,这种方式十分的不方便,最大的问题是配置和代码高耦合了,增加一个配置,还需要对配置类做增减改动。

2025-07-21 16:45:04 712

原创 SpringCloud集成携程Apollo配置中心详解

/ 和普通的配置方式一样,直接通过@Value获取即可如果是由多个配置项组成的一个配置集合,那我们可以针对起做一个单独的配置对象创建配置文件对象// 默认值就是application,如果配置是配在application命名空间下,就可以不用写value值// 如果是自定义的命名空间,就需要加上对于的名称@Component// 获取配置文件// lombok的get set@Data创建测试接口@Autowiredreturn key;测试。

2025-07-21 16:42:47 248

原创 SpringBoot!你的请求、响应、异常规范了吗?

这段时间在调整老系统相关的一些业务代码;发现一些模块,在无形中就被弄的有点乱了,由于每个开发人员技术水平不同、编码习惯差异;从而导致在请求、响应、异常这一块儿,出现了一些比较别扭的代码;但是归根究底,主要问题还是出在规范上面;不管是大到项目还是小到功能模块,对于请求、响应、异常这一块儿,应该是一块儿公共的模板化的代码,一旦定义清楚之后,是不需要做任何改动,而且业务开发过程中,也几乎是不需要动到他丝毫;所以,一个好的规范下,是不应该在这部分代码上出现混乱或者别扭的情况的;忍不住又得来整理一下这一块儿的东西;

2025-07-21 16:42:30 642

原创 15k+ star 的 SpringBoot 后台管理系统出详细教程了

EL-ADMIN 基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue、Element-UI 的前后端分离的后台管理系统, 项目采用按功能分模块的开发方式,权限控制采用 RBAC 思想,支持数据字典与数据权限管理,支持一键生成前后端代码,支持前端菜单动态路由等。

2025-07-20 20:23:14 671

原创 Spring Boot + Web Socket 实现扫码登录,真香!

最近单位又有一个新Java项目。涉及到扫码登录。之前项目使用的是 ajax 轮询的方式。感觉太low了。所以这次用webSocket的方式进行实现好。废话不多说!咱们开始!!这表是干啥的呢?就是记录一下谁扫码了。谁登录了。User_Token表字段如下:uuid : 用于确保唯一性userId :谁登录的loginTime :登录时间createTime :创建时间 用于判断是否过期state:是否二维码失效 0有效 1失效咱们还需要分析一下子。扫码登录这个业务逻辑都有哪些角色。

2025-07-20 20:23:01 307

原创 天天用的 @Autowire 注解,敢说至少 80% 的人用的不规范

今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?@Autowire提示的警告信息这段是Spring工作组的建议,大致翻译一下:属性字段注入的方式不推荐,检查到的问题是:Spring团队建议:"始终在bean中使用基于构造函数的依赖项注入,始终对强制性依赖项使用断言"如图Field注入警告。

2025-07-20 20:22:47 441

原创 Spring Boot 优雅停服的几种方式;别kill -9了

在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭。而且一些没有执行完的程序就会直接退出。我们很多时候都需要安全的将服务停止,也就是把没有处理完的工作继续处理完成。比如停止一些依赖的服务,输出一些日志,发一些信号给其他的应用系统,这个在保证系统的高可用是非常有必要的。那么咱么就来看一下几种停止springboot的方法。

2025-07-20 20:22:24 939

原创 原来 Spring Boot 如此吃内存,惊呆了。

SprintBoot总体来说,搭建还是比较容易的,特别是SpringCloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的SprintBoot,小公司表示用不起。如今,很多刚诞生的JAVA微服务框架大多主打“轻量级”,主要还是因为SprintBoot太重。有Spring大靠山在,更新、稳定性、成熟度的问题根本不需要考虑。在JAVA系混的技术人员大约都听说过Spring的大名吧,所以不缺程序员……,而且这入手的难度十分低,完全可以省去一个架构师。

2025-07-20 20:21:38 577

原创 MyBatis插入回了“-2147482646“,什么鬼?

前几天在做项目demo的时候,发现有一个很奇怪的现象,就是MyBatis发现更新和插入返回值一直为"-2147482646".无论怎么改,这个值一直不变...是在摸不着头脑,百度和谷歌了一下,有这样的说法原来 是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失。

2025-07-20 20:20:23 437

原创 一个注解,轻松搞定SpringBoot接口防刷

说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考。技术要点:springboot的基本知识,redis基本操作,再把Interceptor注册到springboot中。接着在Controller中加入注解。

2025-07-20 20:19:14 123

原创 SpringBoot整合Hystrix;从入门到实战一文搞定

如下图的过程所示,灾难性雪崩形成原因就大致如此:造成灾难性雪崩效应的原因,可以简单归结为下述三种:服务提供者不可用。如:硬件故障、程序BUG、缓存击穿、并发请求量过大等。重试加大流量。如:用户重试、代码重试逻辑等。服务调用者不可用。如:同步请求阻塞造成的资源耗尽等。雪崩效应最终的结果就是:服务链条中的某一个服务不可用,导致一系列的服务不可用,最终造成服务逻辑崩溃。这种问题造成的后果,往往是无法预料的。

2025-07-20 20:18:59 551

原创 注册中心,ZooKeeper和Eureka该选谁?

摘要:Eureka和Zookeeper是两种常见的服务发现方案。Eureka采用AP原则,保证高可用性,即使全部节点故障也能通过本地缓存提供服务,适合注册中心场景。Zookeeper基于CP原则,强调数据一致性,但在选主或半数节点故障时将不可用。Eureka的去中心化架构和自我保护机制使其在服务发现场景更具优势,而Zookeeper更适合数据存储等强一致性要求的场景。实际应用中,Zookeeper在小规模集群中仍被广泛使用,但理论上Eureka更适合作为服务注册中心。

2025-07-20 20:18:26 565

原创 一个注解!搞定SpringBoot操作日志;舒坦~

此组件解决的问题是:「谁」在「什么时间」对「什么」做了「什么事」本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean。

2025-07-20 20:17:25 608

空空如也

空空如也

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

TA关注的人

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