
Java
文章平均质量分 80
字节跳跃者
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分页查询接口,从2s优化到了0.01s
最近有小伙伴问了这样一个问题:百万商品分页查询接口,如何保证接口的性能?这就需要对该分页查询接口做优化了。这篇文章从9个方面跟大家一起聊聊分页查询接口优化的一些小技巧,希望对你会有所帮助。原创 2025-08-29 14:53:27 · 738 阅读 · 0 评论 -
面试官:SpringBoot 如何实现多租户架构?
最后需要实现一个租户管理的功能,以便在系统中管理不同的租户。具体来说,我们可以使用Spring Cloud的服务注册与发现组件Eureka来注册每个租户的实例,并在管理界面中进行相应的操作。私有云环境指的是由企业自行搭建的云环境,不对外提供服务,主要应用于企业内部的数据存储、管理、共享和安全控制。每个租户的服务都在注册中心以不同的应用名称进行注册,客户端可以通过服务名称来访问对应租户的服务。租户信息的维护包括添加、修改、删除、查询等操作,要求能够根据租户名称或租户ID快速查找对应的租户信息。原创 2025-08-29 14:53:15 · 662 阅读 · 0 评论 -
Nginx 实现动态封禁IP,详细教程来了
以上,便是 Nginx+Lua+Redis 实现的 IP 黑名单功能,具有如下优点:配置简单轻量,对服务器性能影响小。多台服务器可以通过共享 Redis 实例共享黑名单。动态配置,可以手工或者通过某种自动化的方式设置 Redis 中的黑名单。原创 2025-08-29 14:52:21 · 952 阅读 · 0 评论 -
面试官:MySQL一次到底插入多少条数据合适啊?
从上面的对话中,我们可以看到一个很现实的问题:很多人可能知道批量插入可以提高性能,但真正了解背后原因的却不多。所以,本文的目的,就是带领大家一同探索这个话题。所以,为了不让你们变成上面的候选者,在这篇文章中,我们将深入探讨数据库插入的各种策略、技术以及背后的原理。但是,如果一次插入的数据量过大,它可能会暂时阻塞其他操作,影响数据库的响应时间。原创 2025-08-29 14:52:05 · 453 阅读 · 0 评论 -
SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像
本文将为您介绍如何使用 Maven 将 Spring Boot 项目打包成可执行的 JAR 文件,并将 JAR 文件和依赖库分离,以便于在 Docker 容器中部署。Spring Boot 是一个非常流行的 Java 开发框架,它提供了很多便利的功能,例如自动配置、快速开发等等。用于将 Spring Boot 应用程序打包为可执行的 JAR 或 WAR 存档文件,而。被配置为将项目打包为 JAR 文件,并将项目依赖项复制到。,将外部目录中的 lib 复制到容器中的 lib。被配置为将项目依赖项复制到。原创 2025-08-29 14:51:47 · 160 阅读 · 0 评论 -
面试官问我 ,try catch 应该在 for 循环里面还是外面?
try catch 在 for 循环 里面 的时候, 如果 for循环过程中出现了异常,异常被catch抓掉,不影响for循环 继续执行。为啥, 因为 异常try catch 其实一早编译完就标记了 如果从哪儿(from)出现异常,会直接去到(to)的那行代码去。但是要注意一点就是,别在for循环里面去 查库调用第三方啥的,这些操作,如果必要,需要慎重考虑了。在面试的时候,如果真的连上面这个在外面在里面使用效果都没说对,那,真的会去等通知了。怎么用,就需要看好业务场景,去使用了。原创 2025-08-28 13:44:10 · 140 阅读 · 0 评论 -
轻松生成二维码:SpringBoot 与 ZXing 完美结合(综合指南)
在数字化时代,二维码已经成为了信息交流的一种常见方式。它们被广泛用于各种应用,从产品标签到活动传单,以及电子支付。本文将向您展示如何在Spring Boot应用程序中整合ZXing库,以创建和解析QR码。无论您是想为您的产品添加QR码功能,还是为您的移动应用程序添加扫描功能,这篇博客将为您提供一个清晰的指南。QR码,全名Quick Response码,是一种二维码(2D barcode)的类型,最早由日本公司Denso Wave于1994年开发。原创 2025-08-28 13:43:58 · 517 阅读 · 0 评论 -
Spring Cloud 分布式实时日志分析采集三种方案~
第一种部署架构由于资源占用问题,现已很少使用,目前使用最多的是第二种部署架构,至于第三种部署架构个人觉得没有必要引入消息队列,除非有其他需求,因为在数据量较大的情况下,Filebeat 使用压力敏感协议向 Logstash 或 Elasticsearch 发送数据。如果 Logstash 正在繁忙地处理数据,它会告知 Filebeat 减慢读取速度。拥塞解决后,Filebeat 将恢复初始速度并继续发送数据。原创 2025-08-28 13:43:45 · 653 阅读 · 0 评论 -
SpringBoot AOP + Redis 延时双删功能实战
一、业务场景1、此时存在的问题2、解决方案3、为何要延时500毫秒?4、为何要两次删除缓存?二、代码实践三、测试验证四、代码工程及地址在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据 B修改Redis数据请求二:C修改数据库数据 D修改Redis数据并发情况下就会存在A —> C —> D —> B的情况❝。原创 2025-08-28 13:43:29 · 753 阅读 · 0 评论 -
太坑了!Spring Boot 导致堆外内存泄露了!
流程图整个内存分配的流程如上图所示。MCC扫包的默认配置是扫描所有的JAR包。在扫描包的时候,Spring Boot不会主动去释放堆外内存,导致在扫描阶段,堆外内存占用量一直持续飙升。当发生GC的时候,Spring Boot依赖于finalize机制去释放了堆外内存;但是glibc为了性能考虑,并没有真正把内存归返到操作系统,而是留下来放入内存池了,导致应用层以为发生了“内存泄漏”。所以修改MCC的配置路径为特定的JAR包,问题解决。原创 2025-08-28 13:43:02 · 908 阅读 · 0 评论 -
Springboot代码混淆,别再让代码在线上进行裸奔
简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件图片就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥。比较常用的反编译工具 JD-GUI ,直接把编译好的jar丢进去,大部分都能反编译看到源码:图片那如果不想给别人反编译看自己写的代码呢?怎么做?该篇玩的代码混淆 ,是其中一种手段。我给你看,但你反编译看到的不是真正的代码。先看一张效果示例图 :图片开搞先看一下我们混淆一个项目代码,要做啥?图片。原创 2025-07-28 17:03:19 · 237 阅读 · 0 评论 -
一次由热部署导致的 OOM 排查经历 !
比较可疑,其他加载器都是spring和jdk的,这个是谷歌的,同时这个类加载器的实例数量和加载的类的数量非常大,同时随着服务的运行在不断的增长。仅仅是类加载器的实例数量大倒还好,毕竟它的。的情况下(使用单例模式),就不会出现这么严重的问题了,但依然存在热部署 agent 对自定义 classloader 的强引用问题。环境的服务加载了很多类也卸载了很多类(这其实是个线上问题,通过这次排查才发现的,后面分析原因),而。方法是线程安全的,代码里的使用姿势不对,修改代码如下,重新发布,不再OOM了。原创 2025-07-28 17:03:06 · 654 阅读 · 0 评论 -
为什么 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 · 701 阅读 · 0 评论 -
你知道 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 · 700 阅读 · 0 评论 -
美团:为什么 MySQL 不推荐使用 join?
但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为sql本身长度有限。2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去in它。2.分布式的分库分表。原创 2025-07-28 17:02:20 · 407 阅读 · 0 评论 -
SpringBoot + Elasticsearch7.6实现简单查询及高亮分词查询
该文章需要提前准备好Elasticsearch7.6以及ik分词器的环境,如果还没准备好的可以看看。原创 2025-07-25 14:13:35 · 421 阅读 · 0 评论 -
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 · 926 阅读 · 0 评论 -
Spring Boot 如何解决多个定时任务阻塞问题?
本篇文章介绍了Spring Boot 中 实现多线程定时任务的三种方案,你喜欢哪一种?原创 2025-07-25 14:12:47 · 181 阅读 · 0 评论 -
Spring Boot 整合 阿里开源中间件 Canal 实现数据增量同步!
数据增量同步的开源工具并不只有Canal一种,根据自己的业务需要选择合适的组件。原创 2025-07-25 14:11:53 · 879 阅读 · 0 评论 -
更快的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 · 868 阅读 · 0 评论 -
面试官:说一下 final 和 final 的 4 种用法?
final 翻译成中文是“最终”的意思,它是 Java 中一个常见关键字,使用 final 修饰的对象不允许修改或替换其原始值或定义。final 是 Java 中常见的一个关键字,被它修饰的对象不允许修改、替换其原始值或定义。final 有 4 种用法,可以用来修饰类、方法、变量或参数。原创 2025-07-24 14:03:44 · 197 阅读 · 0 评论 -
SpringBoot + SpringBatch + Quartz整合定时批量任务
其实SpringBatch并没有想象中那么好用,当从数据库中每次取5000条数据后,进入processor中是逐条处理的,这个时候不能不行操作,等5000条数据处理完之后,再一次性执行ItemWriter方法。至于Quartz定时功能,很简单,只要定时创建SpringBatch里面的Job,让这个job启动就好了,此处就不在给出了,贴的代码太多了。由于之前,没有用过SpringBatch,于是上网查了下资料,发现可参考的不是很多,于是只能去慢慢的翻看官方文档。遇到不少问题,就记录一下吧。原创 2025-07-24 14:03:30 · 370 阅读 · 0 评论 -
Spring Security 和 Shiro 该如何选择?
要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比。原创 2025-07-24 14:03:12 · 638 阅读 · 0 评论 -
Redis 延时任务,高手养成篇
这样可以看出定时轮由个3个重要的属性参数,ticksPerWheel(一轮的tick数),tickDuration(一个tick的持续时间)以及 timeUnit(时间单位),例如当ticksPerWheel=60,tickDuration=1,timeUnit=秒,这就和现实中的始终的秒针走动完全类似了。该方案是利用JDK自带的DelayQueue来实现,这是一个无界阻塞队列,该队列只有在延迟期满的时候才能从中获取元素,放入DelayQueue中的对象,是必须实现Delayed接口的。原创 2025-07-24 14:02:57 · 958 阅读 · 0 评论 -
RocketMQ主机磁盘空间有限,如何无限期延长消息存储?
RocketMQ作为国人开源的一款消息引擎,相对kafka也更加适合在线的业务场景,在业内使用的也是非常广泛,很多同学也是非常熟悉它及它的存储机制,所以这里不再对它的原理性东西作太多说明。我们也知道,RocketMQ所有的数据如消息信息都是以文件形式保存到broker节点所在主机上指定的分区目录下,比如消息的数据都是保存在commitlog中,默认保存72小时(在磁盘使用率未达到阈值的情况下)会在指定时间清理过期数据,释放磁盘空间。当然,如果消息量不大且所在磁盘的分区够大,我们可以增加消息的保存时间。原创 2025-07-24 14:02:39 · 616 阅读 · 0 评论 -
Guava RateLimiter 实现 API 限流,这才是正确的姿势!
Guava提供的RateLimiter可以限制物理或逻辑资源的被访问速率,咋一听有点像java并发包下的Samephore,但是又不相同,RateLimiter控制的是速率,Samephore控制的是并发量。RateLimiter的原理类似于令牌桶,它主要由许可发出的速率来定义,如果没有额外的配置,许可证将按每秒许可证规定的固定速度分配,许可将被平滑地分发,若请求超过permitsPerSecond则RateLimiter按照每秒 1/permitsPerSecond 的速率释放许可。图片。原创 2025-07-23 19:27:08 · 164 阅读 · 0 评论 -
ZooKeeper的选举机制和同步机制超详细讲解,面试经常问到!
zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。原创 2025-07-23 19:26:53 · 697 阅读 · 0 评论 -
Java 中的屠龙之术:如何修改语法树?
TreeMaker用于创建一系列的语法树节点,我们上面说了创建JCTree不能直接使用new关键字来创建,所以Java为我们提供了一个工具,就是TreeMaker,它会在创建时为我们创建的JCTree对象设置pos字段,所以必须使用上下文相关的TreeMaker对象来创建语法树节点。具体的API介绍可以参照,TreeMakerAPI,接下来着重介绍一下常用的几个方法。在我们操作抽象语法树的时候,有时会涉及到关于List的操作,但是这个List不是我们经常使用的而是。原创 2025-07-23 19:26:22 · 709 阅读 · 0 评论 -
老王,快给你的 Spring Boot 做个埋点监控吧!
Counter的作用是记录XXX的总量或者计数值,适用于一些增长类型的统计,例如下单、支付次数、Http请求总量记录等等,通过Tag可以区分不同的场景,对于下单,可以使用不同的Tag标记不同的业务来源或者是按日期划分,对于Http请求总量记录,可以使用Tag区分不同的URL。Gauge通常用于变动的测量值,测量值用ToDoubleFunction参数的返回值设置,如当前的内存使用情况,同时也可以测量上下移动的”计数”,比如队列中的消息数量。下面花一点时间从零开始搭建一个这样的系统,使用CentOS7。原创 2025-07-23 19:25:42 · 736 阅读 · 0 评论 -
Redis的keys命令到底有多慢?
查找符合正则匹配的key的列表。扫描对象是Redis服务中所有的key,想想都很慢对不对?同时执行keys命令的同时,Redis进程将被阻塞,无法执行其他命令,假如超过了哨兵的配置,还会进行主从切换,切换过程中,如果主节点恢复正常,还可能出现脑裂等一系列问题。所以,生产环境中,建议直接禁用keys命令。原创 2025-07-23 19:25:26 · 352 阅读 · 0 评论 -
7个妙招,轻松提升 SpringBoot 项目的吞吐量
Jboss下的服务器,Tomcat吞吐量5000,Undertow吞吐量8000。实例就可以作为这次调用的契约,在将来任何场合,用于获得最终的计算结果。(守护)线程,所以,当主线程结束时,这些线程无论执行完毕都会退出系统。这两个方法如果在不指定线程池的情况下,都是在。我们用休眠1秒来模拟一个长时间的计算过程,并将计算结果告诉。方法中,它会在一个新线程中,执行传入的参数。方法,这个方法可能是比较慢的,但这并不影响。线程池中执行,而这个线程池中的所有线程都是。在该示例中,启动一个线程,此时。原创 2025-07-22 16:29:35 · 261 阅读 · 0 评论 -
SpringBoot 启动时自动执行代码的几种方式讲解
目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用注解实现。当然也可以去实现Spring的与接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载顺序。Spring应用启动过程中,肯定是要自动扫描有@Component注解的类,加载类并初始化对象进行自动注入。原创 2025-07-22 16:28:12 · 461 阅读 · 0 评论 -
Spring @Bean 和 @Component 注解的区别, 你知道吗?
以上简单介绍了几种 Spring 中的几个注解及代码示例,就我个人而言,均是平时用到且不容易理解的几个,或者容易忽略的几个。当然,这篇文章并没有完全介绍完,在今后还会继续补充完善。原创 2025-07-22 16:27:31 · 980 阅读 · 0 评论 -
面试官:为什么要用 Spring?它到底解决了什么问题?
第一种传统方式创建对象,就像图一中的齿轮组。如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。图一:高度耦合的齿轮组而用Spring注入对象犹如图二的齿轮,利用第三方xml文件使任意两个齿轮之间无必然联系,B齿轮坏了也影响不到A、C、D齿轮。齿轮组相互之间的依赖关系降到最低。图二:解耦后的齿轮组。原创 2025-07-22 16:25:46 · 328 阅读 · 0 评论 -
Service 和 Dao 实现,真的有必要每个类都加上接口吗?
本文针对「Service层是否需要接口」这个问题,指出需要接口的理由的问题。以及个人对这个问题的观点,希望对大家有一些帮助。原创 2025-07-22 16:25:15 · 728 阅读 · 0 评论 -
将 Bean 放入 Spring 容器有哪几种方式?
将bean放入Spring容器中有哪些方式?我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下。原创 2025-07-21 16:46:02 · 538 阅读 · 0 评论 -
当我把 SpringBoot 的启动 Banner 换成了老师;同事:借一bu说话...
当我们启动SpringBoot项目的时候,控制台会输出SpringBoot的logo以及版本相关的信息!可能很多朋友不知道,这个logo的是可以自定义的,而且自定义起来还非常简单,只需要在resources目录下放上一个banner配置,SpringBoot启动的时候,加载txt文件或者图片文件,就会展示对应的内容;文本格式,SpringBoot 会读取配置项banner.txt和,从配置项中获取真实的文件地址;如果配置中没有配置,会把配置项作为文件去加载;图片格式,SpringBoot 加载配置项。原创 2025-07-21 16:45:21 · 469 阅读 · 0 评论 -
SpringBoot @Value注解的高级用法,给力
在日常开发中,经常会遇到需要在配置文件中,存储List或是Map这种类型的数据。Spring 原生是支持这种数据类型的,以配置List类型为例,对于.yml对于当我们想要在程序中使用时候,想当然的使用@Value这个问题也是可以解决的,以我们要配置的 key 为test.list为例,新建一个test的配置类,将list在程序其他地方使用时候。可以看见,这种方式十分的不方便,最大的问题是配置和代码高耦合了,增加一个配置,还需要对配置类做增减改动。原创 2025-07-21 16:45:04 · 791 阅读 · 0 评论 -
SpringCloud集成携程Apollo配置中心详解
/ 和普通的配置方式一样,直接通过@Value获取即可如果是由多个配置项组成的一个配置集合,那我们可以针对起做一个单独的配置对象创建配置文件对象// 默认值就是application,如果配置是配在application命名空间下,就可以不用写value值// 如果是自定义的命名空间,就需要加上对于的名称@Component// 获取配置文件// lombok的get set@Data创建测试接口@Autowiredreturn key;测试。原创 2025-07-21 16:42:47 · 308 阅读 · 0 评论 -
SpringBoot!你的请求、响应、异常规范了吗?
这段时间在调整老系统相关的一些业务代码;发现一些模块,在无形中就被弄的有点乱了,由于每个开发人员技术水平不同、编码习惯差异;从而导致在请求、响应、异常这一块儿,出现了一些比较别扭的代码;但是归根究底,主要问题还是出在规范上面;不管是大到项目还是小到功能模块,对于请求、响应、异常这一块儿,应该是一块儿公共的模板化的代码,一旦定义清楚之后,是不需要做任何改动,而且业务开发过程中,也几乎是不需要动到他丝毫;所以,一个好的规范下,是不应该在这部分代码上出现混乱或者别扭的情况的;忍不住又得来整理一下这一块儿的东西;原创 2025-07-21 16:42:30 · 673 阅读 · 0 评论