- 博客(81)
- 收藏
- 关注
原创 Redis Sorted Set 排行榜系统设计指南
具有自动排序、高效查询、支持并发更新等特性。本文档详细介绍如何使用 Redis Sorted Set 设计一个完整的、可生产使用的排行榜系统。Redis Sorted Set(ZSET)是实现排行榜系统的。适用场景:游戏、电商、社交、直播等排行榜场景。最后更新:2026-03-18。
2026-03-18 13:41:12
403
原创 Zuul网关与Tomcat连接数配置详解
配置项作用建议值(4核8G)最大TCP连接数1000TCP等待队列长度200工作线程数200最小空闲线程20连接和线程是解耦的,不是 1:1 关系Tomcat NIO 模型下,连接等待时不占用工作线程配置要匹配服务器硬件资源,过大反而降低性能通过压测验证最优配置值。
2026-03-18 11:10:40
396
原创 IntelliJ IDEA Maven 按钮区别详解:Reload vs Sync
对比项ReloadSync强度强(全量重建)弱(增量更新)速度较慢较快解析 pom.xml全量重新解析增量检测是否覆盖状态是否使用场景出问题 / 大改动日常开发Reload = 重建整个 Maven 项目状态(彻底但慢)Sync = 同步变更(轻量但可能不彻底)根据实际情况选择合适的操作,可以提高开发效率并减少不必要的等待时间。
2026-03-17 17:34:33
332
原创 MySQL 索引下推(Index Condition Pushdown, ICP)机制详解
索引下推(Index Condition Pushdown,简称ICP)是MySQL 5.6 版本引入的一种查询优化技术,默认开启。将 WHERE 条件的部分过滤逻辑从 MySQL 服务器层下推到存储引擎层执行,从而减少不必要的回表操作,降低 I/O 开销。特性说明引入版本MySQL 5.6+默认状态开启核心作用减少无效回表,降低 I/O 开销执行计划标识适用索引二级索引(非聚簇索引)索引下推是 MySQL 查询优化的重要机制之一,合理使用可以显著提升查询性能!
2026-03-16 15:34:04
256
原创 MySQL 中 MVCC 和锁的关系与配合
MVCC 像一个高效的阅览室:允许多人同时阅读(快照读),有人做笔记(写操作)时也不影响他人阅读。锁机制像一个庄重的签约室:一旦有人进去签约(当前读/修改),门就会锁上,其他人必须在门外等待,确保签约过程的绝对安全和私密。正是这种“读靠快照,写靠锁,两者自动切换”的机制,让 InnoDB 在高并发下既能保证数据一致性,又能维持出色的性能。
2026-03-15 20:50:56
299
原创 Java WebSocket 使用示例汇总
没有消息代理配置,就无法实现“服务器推送”和“订阅/发布”功能。WebSocket 退化为一个双向通信的管道,但无法利用 STOMP 的主题广播机制。若只需点对点通信(如向特定用户发送消息),可结合和用户队列,但用户队列底层仍依赖代理(/user前缀由代理特殊处理)。因此,简单内存代理是最轻量的实现方式,在大多数基于 STOMP 的应用中必不可少。
2026-03-15 20:50:24
320
原创 Java WebSocket 使用示例汇总
没有消息代理配置,就无法实现“服务器推送”和“订阅/发布”功能。WebSocket 退化为一个双向通信的管道,但无法利用 STOMP 的主题广播机制。若只需点对点通信(如向特定用户发送消息),可结合和用户队列,但用户队列底层仍依赖代理(/user前缀由代理特殊处理)。因此,简单内存代理是最轻量的实现方式,在大多数基于 STOMP 的应用中必不可少。
2026-03-15 20:40:08
400
原创 Java类加载机制与JVM启动过程详解
本文系统梳理了Java类加载机制与JVM启动过程的核心要点。Java类加载分为加载、验证、准备、解析、初始化五个阶段,可通过"Let's Very Patiently Run It"口诀记忆。类加载器按双亲委派模型触发,遵循按需加载原则,不会预加载所有类。JVM启动主要通过java命令触发,创建进程后初始化环境并加载主类执行main方法。整个过程展现了Java运行时环境的高效性与安全性设计。
2026-03-15 20:39:19
402
原创 TCP四次挥手详解
TCP四次挥手是断开连接的标准流程,通过客户端和服务端的四次交互实现双向关闭。关键步骤包括:客户端发送FIN请求、服务端确认ACK、服务端发送FIN、客户端确认ACK并等待2MSL。常见异常状态(如TIME_WAIT、CLOSE_WAIT)可通过ss/netstat工具排查,内核参数调优可解决高并发场景问题。理解四次挥手机制对诊断网络连接异常和性能优化至关重要。
2026-03-15 20:37:50
483
原创 Percona-Toolkit-实用工具指南
Percona Toolkit 提供两个核心数据库管理工具:pt-online-schema-change 用于在线表结构变更,通过创建影子表和触发器实现无锁DDL操作;pt-archiver 用于数据归档和清理,支持分批处理数据并控制性能影响。文档详细介绍了每个工具的工作原理、基本语法、使用示例和常用参数,包括安全建议和适用场景。pt-online-schema-change 适合添加列、修改表结构等操作,而 pt-archiver 可将旧数据归档到文件或另一张表,也可直接安全删除。
2025-09-17 14:32:41
691
原创 Groovy集成指南:线上问题排查利器
本文介绍了在生产环境中集成Groovy脚本引擎的实现方案,通过动态执行代码提高问题排查效率。方案基于Spring Boot框架,包含GroovyLoader、BackDoorGroovyController等核心组件。文章详细说明了集成步骤:首先添加Groovy、Spring Boot Web等Maven依赖;然后定义ILoader接口作为脚本执行规范;最后实现Groovy加载器,负责编译脚本并注册到Spring容器,支持动态获取Bean实例。该方案通过HTTP接口暴露执行入口,无需重启应用即可运行脚本,为
2025-08-14 10:23:28
814
原创 如何优雅的使用锁
本项目基于 Spring AOP 实现,通过注解的方式简化了锁的使用,并对锁的使用方式进行了统一管理,而且还可与 Spring 的一起使用,默认提供了单机锁和分布式锁实现。
2024-01-22 11:48:26
1090
原创 当 Spring 事务遇到锁
近期项目遇到不少并发问题,解决的方式就是加锁,但是错误的加锁方式遇到 Spring 事务可能并不能达到预期效果。
2024-01-05 17:02:51
1180
1
原创 Java 处理重复文件名(类似谷歌下载重复文件处理) - leetcode 缺失的第一个正数 应用
最近在刷 leetcode 的时候遇到了一道算法题缺失的第一个正数,发现正好可以应用到最近的一个小功能里,功能很简单,就是类似于谷歌浏览器下载重复文件会在重复的文件后面加序号 “(1)”,用这个算法刚好可以实现。
2023-10-31 10:34:11
511
原创 Linux 常用命令
VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器。VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与VI编辑器完全兼容。
2023-10-21 11:33:51
420
原创 JVM 基础工具
*基础工具:**用于支持基本的程序创建和运行**安全:**用于程序签名、设置安全测试等**国际化:**用于创建本地语言文件**远程方法调用:**用于跨Web或网络的服务交互**Java IDL与RMI-IIOP:**在JDK 11中结束了十余年的CORBA支持,这些工具不再提供**部署工具:**用于程序打包、发布和部署性能监控和故障处理工具**WebService工具:**与CORBA一起在JDK 11中被移除REPL 和脚本工具。
2023-10-21 11:29:38
224
原创 Elastic Search 中文拼音搜索补全实战
搜索提示是搜索框一个比较基础的功能,他赋予了搜索框生命,提高了用户的搜索体验。本文通过仿写 boss 直聘首页职位公司搜索,来实现一个自己搜索提示功能。
2023-07-03 17:49:56
4581
2
原创 Spring Filter 学习
title: Spring Filter 学习date: 2022-6-30tags:实现 接口后实现其三个方法,业务逻辑写在方法内即可。2.2 将 Filter 注入到 Spring 中2.2.1 方式一:通过 + 注入步骤一:在自定义 Filter 中添加 注解步骤二:在启动类上加上 注解,使 Spring 可以扫描到自己定义的 Filter。2.2.2 方式二:通过 + 的方式自己注入Filter步骤一:在 Filter 上添加 注解。步骤二:将该过滤器注入到 Spring
2022-07-01 23:38:57
521
原创 springcloud学习(十)-Sleuth(服务的追踪)
title: springcloud学习(十)-Sleuth(服务的追踪)date: 2021-2-2在整个微服务架构中,微服务很多,一个请求可能需要调用很多很多的服务,最终才能完成一个功能,如果说,整个功能出现了问题,在这么多的服务中,很难定位到问题的所在点,出现问题的原因是什么,所以我们可以通过 Sleuth 来解决这个问题。Zipkin 官网 https://zipkin.io/pages/quickstart。2.2 编写配置文件2.3 测试[外链图片转存失败,源站可能有防盗链机制,建议将
2022-06-15 00:09:41
390
原创 springcloud学习(九)-Config(服务的动态配置)
title: springcloud学习(九)-Config(服务的动态配置)date: 2021-1-31tags:Config 可以解决的问题:创建一个名为 07-config 的 Maven 子项目。2.3 编写启动类添加 @EnableConfigServer 注解来开启 Config 服务。2.4 编写配置文件2.5 测试访问路径 http://localhost:8083/master/customer-xxx.yml。修改 Coustomer ,使其连接 Config Serv
2022-06-15 00:09:18
1016
原创 springcloud学习(八)-Stream(服务间消息传递)
title: springcloud学习(八)-Stream(服务间消息传递)date: 2021-1-30tags:Stream 就是在消息队列的基础上,对其进行封装,可以是我们更方便的去使用。Spring Cloud Stream应用由第三方的中间件组成。应用间的通信通过输入通道(input channel)和输出通道(output channel)完成。这些通道是有Spring Cloud Stream 注入的。而通道与外部的代理(可以理解为上文所说的数据中心)的连接又是通过Binder实现的。
2022-06-15 00:09:09
1131
原创 springcloud学习(七)-Sidecar(多语言支持)
title: springcloud学习(七)-Sidecar(多语言支持)date: 2021-1-28tags:在 SpringCloud 的项目中,需要接入一些非 java 程序或第三方接口(无法接入eureka,hystrix,feign等组件的程序)。所以我们可以通过启动一个代理的微服务去和非 java 的程序或第三方接口进行交流,然后再把代理的微服务计入 SpringCloud 的相关组件中。将一组紧密结合的任务与主应用程序共同放在一台主机(Host)中,但会将它们部署在各自的进程或容器中。
2022-06-15 00:09:01
2260
1
原创 Spring Cloud-Gateway(网关)
title: Spring Cloud-Gateway(网关)date: 2021-4-28tags:SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cl
2022-06-15 00:08:39
826
原创 springcloud学习(六)-Zuul(网关)
title: springcloud学习(六)-Zuul(网关)date: 2021-1-26tags:Zuul 是 Netflix OSS 中的一员,是一个基于 JVM 路由和服务端的负载均衡器。提供路由、监控、弹性、安全等方面的服务框架。Zuul 能够与 Eureka、Ribbon、Hystrix 等组件配合使用。Zuul 的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:动态路由动态地将客户端的请求路由到后端不同的服务,做一些逻辑处理,比如聚合多个服务的数据返回。请求监控可以对整个系统的
2022-06-14 23:57:06
574
原创 springcloud学习(五)-Hystrix(服务的隔离及熔断器)
title: springcloud学习(五)-Hystrix(服务的隔离及熔断器)date: 2021-1-25tags:Hystrix 是 Netflix 针对微服务分布式系统采用的熔断保护中间件,相当于电路中的保险丝。在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix 是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix 通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。在微服务架构下,很多服务都相
2022-06-14 23:54:17
549
原创 springcloud学习(四)-Feign(服务间的调用)
title: springcloud学习(四)-Feign(服务间的调用)date: 2021-1-20tags:Feign 可以帮助我们实现面向接口编程,就直接调用其他服务,简化开发。Feign 是一个声明式的 REST 客户端,它能让 REST 调用更加简单。Feign 供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。而 Feign 则会完全代理 HTTP 请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Spring
2022-06-14 23:52:50
659
原创 springcloud学习(三)-Ribbon(负载均衡器)
title: springcloud学习(三)-Ribbon(负载均衡器)date: 2021-1-18tags:Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。Robbin是帮助我们实现服务与服务之间的负载均衡。通过 Run/Debug Configurations 启动两个 Search
2022-06-14 23:52:09
241
原创 springcloud学习(二)-Eureka(服务的注册与发现)
title: springcloud学习(二)-Eureka(服务的注册与发现)date: 2021-1-16tags:Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能。Eureka可以帮助我们维护所有服务的信息,以便服务之间的相互调用。创建一个 springboot 父工程,并命名为 first-springcloud 。2.2创建 Eureka 的 Se
2022-06-14 23:51:18
444
原创 springcloud学习(一)-spring cloud简介
title: springcloud学习(一)-spring cloud简介date: 2021-1-13tags:“微服务”一词来源于 Martin Fowler 的《Microservices》一文。微服务是一种架构风格,即将单体应用划分为小型的服务单元,微服务之间使用 HTTP 的 API 进行资源访问与操作。简而言之,微服务体系结构是一种将单个应用程序开发为一组小型服务的方法,每个应用程序在自己的进程中运行,并与轻量级机制(通常是 HTTP 资源 API)通信。这些服务围绕业务功能构建,可通过全
2022-06-14 23:50:02
227
原创 算法中常用的数据类型 Java 实现类
title: 算法中常用的数据类型 Java 实现类date: 2022-4-29updated: 2022-4-29tags:算法中常用的数据类型 Java 实现类
2022-06-14 23:43:50
212
原创 Java优先级队列(Priority Queue)
title: Java优先级队列(Priority Queue)date: 2021-6-13updated: 2021-6-13tags:优先级队列是逻辑结构是小根堆,存储结构是动态数组(到达上限,容量自动加一)的集合类。添加(插入):查看(只返回根节点元素,不删除):取出(返回根节点元素,会删除源数据):删除(如果有多个相同元素,只会删除第一个):还有就是一些 collection 类通有的方法,不多说了记住!!!所有会破坏堆的特性的方法(比如插入删除等)的源码里最后都会加一个建堆方法( sift
2022-06-14 23:43:34
1680
原创 RabbitMQ-延迟队列
title: RabbitMQ-延迟队列date: 2021-1-15tags:,首先,它是一种队列,队列意味着内部的元素是的,元素出队和入队是有方向性的,元素从一端进入,从另一端取出。其次,,最重要的特性就体现在它的属性上,跟普通的队列不一样的是,,所以延时队列中的元素是都是带时间属性的,通常来说是需要被处理的消息或者任务。简单来说,延迟队列存储的对象是对应的延时消息,所谓“延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。是 RabbitM
2022-06-14 23:39:57
316
原创 RabbitMQ学习(五)-RabbitMQ的应用
title: RabbitMQ学习(五)-RabbitMQ的应用date: 2021-1-13tags:将之前的 spring boot 整合 ElasticSearch 的项目再整合上 RabbitMQ。1.2 编写配置文件1.3 编写配置类1.4 修改 Service 层从之前通过 RestTemplate 传递信息,变为 通过 RabbitMQ 传递消息。二、修改 search 模块2.1 导入相关依赖同上。同上。同上。添加一个将 json 转为对象的静态方法。.........
2022-06-14 23:39:39
198
原创 RabbitMQ学习(四)-RabbitMQ的其它操作
title: RabbitMQ学习(四)-RabbitMQ的其它操作date: 2021-1-12tags:RabbitMQ的事务:事务可以保证消息的100%传递,可以通过事务回滚去记录日志,后面定时再发送当前消息。但是事务的操作效率太低,加入事务后效率比不加事务慢至少100倍。可以确保生产者将消息发动到exchange中,但并不能保证消息发送到queue中。2.2 批量Confirm方式channel.waitForConfirmsOrDie():当你发送的全部消息,有一个失败时,则直接全部失败,
2022-06-13 00:03:17
377
1
原创 RabbitMQ学习(三)-springboot整合RabbitMQ
title: RabbitMQ学习(三)-springboot整合RabbitMQdate: 2021-1-11tags:创建一个名为springboot-rabbitmq的springboot项目。1.3 编写配置文件二、具体实现2.1 编写RabbitMQ的配置类编写一个名为RabbitMQConfig的配置类,进行exchange和queue的声明和绑定。2.1 发布消息通过rabbitTemplate的convertAndSend()方法进行消息的发布,他需要三个参数:2.2 监
2022-06-13 00:03:04
305
原创 RabbitMQ学习(二)-Rabbit的使用
title: RabbitMQ学习(二)-Rabbit的使用date: 2020-12-14tags:2.3 创建工具类连接RabbitMQ2.4 测试最简单的消息模型:一个生产者、一个默认交换机、一个队列和一个消费者。3.2 创建消费者步骤:通过getConnection静态方法获取连接对象通过连接对象获取channel管道通过channel的queueDeclare()方法创建一个队列,此方法需要五个参数:参数1 String queue 指定要创建的队列的名称参数2 b
2022-06-13 00:02:57
844
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅