- 博客(57)
- 资源 (1)
- 收藏
- 关注
原创 自定义限流方案(基于 Redis + 注解)
*** 限流的时间窗口,单位:秒* 比如 60 就是 60 秒内最多 N 次*//*** 时间窗口内允许的最大访问次数*//*** 限流的 key,默认空表示自动生成(类名#方法名)* 可以写上 "#ip" 表示按 IP 限流(在切面里处理)*//*** 是否按 IP 维度限流*/
2025-11-12 09:27:49
476
原创 Zookeeper 分布式锁实战版
想快:用 Curator 的想懂:看原生“临时顺序节点 + 监听前驱”想稳:锁路径分业务 + finally 释放 + 超时兜底。
2025-11-09 08:53:33
1382
原创 统一发包管理(Maven 仓库)详细步骤
适用于希望在公司/团队内部统一管理 Java 构件(JAR、POM、源码包)、实现统一依赖来源、防止“本地有但别人拉不到”的情况,并方便与 CI/CD 对接的场景。下面以为例说明,也可替换为 JFrog Artifactory、阿里云制品库等。
2025-11-08 08:14:57
678
原创 一篇文章让你打通nginx的任通二脉
Nginx(Engine X)是一款高性能的 Web 服务器、反向代理服务器及邮件代理服务器。以轻量、高并发、稳定著称,被广泛用于网站架构中。
2025-11-06 12:55:01
420
原创 Spring Boot 统一异常处理,这样写才优雅!
统一异常处理不是简单捕获,而是构建"可维护、可追踪、可演化"的错误体系。优雅的开发者,不仅要让代码能跑,还要让错误能"说话"。🚀。
2025-10-29 09:00:00
826
原创 annotation-logging-guide
Loggable/** 是否记录入参 *//** 是否记录返回值 *//** 业务标签,便于筛选 */可作用于类或方法;方法优先级高于类。
2025-10-28 18:08:16
781
原创 SpringBoot两级缓存实现
本方案实现: - ✅ 高性能读写路径(Caffeine + Redis)\✅ 简洁无侵入整合 Spring Cache\✅ 支持多实例缓存一致性广播\✅ 可自由扩展到多级缓存或多数据源缓存场景推荐使用场景:高并发读多写少的服务,如用户资料、配置中心、商品详情、字典表等。标签:Spring Boot|Redis|Caffeine|缓存一致性|分布式缓存。
2025-10-25 09:47:36
203
原创 SpringBoot2_Nacos_DynamicTp教程
基于 Spring Boot 2.x + Nacos 的 DynamicTp(Dromara)详细接入步骤,按“依赖 → Nacos 配置 → 应用配置 → 启动注解/代码使用 → 监控与告警 → 常见坑”组织。所用版本与示例均以官方文档的最新稳定说明为准(1.2.2 线)
2025-10-25 06:31:40
679
原创 ELK(Elasticsearch + Logstash + Kibana + Filebeat)采集方案
≥ 20.x、命令)里边有你的 Logback JSON 文件,如:(行级 JSON,包含字段)如果你用的是我上一条给的 Spring Boot + Logback 配置,只要确定它的 JSON 日志落在这个目录即可。
2025-10-24 14:34:38
190
原创 IO模型详解
假设应用程序的进程发起IO调用,但是如果内核的数据还没准备好的话,那应用程序进程就一直在阻塞等待,一直等到内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次IO操作,称之为阻塞IO。如果内核数据还没准备好,可以先返回错误信息给用户进程,让它不需要等待,而是通过轮询的方式再来请求。这就是非阻塞IO,流程图如下:非阻塞IO的流程如下:非阻塞IO模型,简称NIO,。它相对于阻塞IO,虽然大幅提升了性能,但是它依然存在性能问题,即频繁的轮询,导致频繁的系统调用,同样会消耗大量的CPU资源。可以考虑IO复用
2024-06-23 07:55:52
1105
1
原创 RabbitMQ延时队列(实现定时任务)
消息的TTL(Time To Live)就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置存活时间,就是队列没有消费者连着的保留时间。对每一个单独的消息单独的设置存活时间。超过了这个时间,我们认为这个消息就死了,称之为死信。如果队列设置了TTL,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。
2024-06-23 07:17:40
961
原创 RabbitMQ如何保证消息可靠
消息不会丢失,会重新变为Ready,下一次有新的Consumer连接进来就发给他。* 我们收到很多消息,自动回复给服务器ack,只有一个消息处理成功,宕机了。* @param correlationData 当前消息的唯一关联数据(这个是消息的唯一id)* 1、默认是自动确认的,只要消息接收到,客户端会自动确认,服务端就会移除这个消息。* 3、消费端确认(保证每个消息被正确消费,此时才可以broker删除这个消息)。* 只要消息没有投递给指定的队列,就触发这个失败回调。
2024-06-23 06:16:09
1270
原创 如何写出高效的代码?
Arrays.asList 返回的 List 并不是我们期望的 java.util.ArrayList,而是 Arrays 的内部类ArrayList。内部类的ArrayList没有实现add方法,而是父类的add方法的实现,是会抛出异常的呢。就是不同的关键业务,分配不同的线程池,然后线程池参数也要考虑恰当哈。之前写过几篇线程池的,觉得还不错,有兴趣的朋友可以看一下哈。或者说,只是一个字符串变量,直接初始化字符串常量就可以了,没有必要愣是要new String().rollbackFor属性设置错误。
2024-06-23 05:57:22
721
原创 设计模式之单例模式
1.单例模式的定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象 的方式,可以直接访问,不需要实例化该类的对象。1.非线程安全懒汉模式public class SingletonDemo { private static Sin...
2018-11-13 11:09:40
264
原创 MQ如何实现消息延时
一、缘起很多时候,业务有“在一段时间之后,完成一个工作任务”的需求。例如:滴滴打车订单完成后,如果用户一直不评价,48小时后会将自动评价为5星。一般来说怎么实现这类“48小时后自动评价为5星”需求呢? 常见方案:启动一个cron定时任务,每小时跑一次,将完成时间超过48小时的订单取出,置为5星,并把评价状态置为已评价。假设订单表的结构为:t_order(oid, finish...
2018-11-03 14:17:43
1470
原创 什么时候用MQ
1.起因引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题2.MQ是干嘛的消息总线(Message Queue),后文称MQ,是一种跨进程的通信机制,用于上下游传递消息。 在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只...
2018-10-31 08:51:50
1449
2
原创 DNS轮询
经常有人会说DNS轮询是过时的技术,是可以被其他方案替代的,nginx前端加入lvs和keepalived可以替代“DNS轮询”,F5能搞定接入层高可用、扩展性、负载均衡,可以替代“DNS轮询”,“DNS轮询”究竟是不是过时的技术,是不是可以被其他方案替代,接下来本文将要做细致讨论。1.面临的问题nginx、lvs、keepalived、f5、DNS轮询,每每提到这些技术,往往讨论的是接入...
2018-10-29 14:20:58
8652
4
原创 架构 秒杀系统优化思路
1.秒杀为什么难做?1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,票是有限的,库存一份,瞬时流量...
2018-10-26 21:38:59
279
原创 企业高并发成熟解决方案思考
要想解决高并发的问题,先需要弄清楚企业整体架构高并发发生在二处:1.负载均衡 2.数据库处分析完企业整体架构之后 1:开始搭建负载均衡服务器 2:演示负载均衡服务器的效果第一种:解决方案 DNS场景:我说的大数据量处理是指同时需要对数据进行检索查询,同时有高并发的增删改操作; 大数据量的处理例如腾讯,盛大,动辄数以亿计的帐号,怎么能这...
2018-09-18 14:29:23
1110
原创 关于分布式集群间实现Session共享的思考
1.开篇针对企业,为了应对庞大的用户访问压力,目前大多数大型网站服务器都采用集群部署的方式;针对个人,仅一台服务器而言,也会安装多个tomcat进行错时更新,保证更新后台业务时服务不断开,即模拟了集群的运行方式。在此集群中,我们就不得不考虑一个用户鉴权的问题,即在不同服务上如何保证用户均已登录,并能获取相同的用户登录信息。2.java web 公认的用户鉴权机制说此部分之前先了解几个概念: 1.请...
2018-04-02 20:21:14
778
原创 Java Spring WebSocket实现后端消息主动推送
这篇文章将介绍如何构建一个简单的WebSocket消息推送Demo使用eclipse建立maven项目后引入相关的依赖jar包,如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/X...
2018-03-30 14:54:53
15395
1
原创 Tomcat实战-调优方案
最近项目跑着发现速度有点慢,然后就分析了一下原因,发现tomcat采用的都是默认配置,于是决定对tomcat调优。我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。1.服务器资源:服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已...
2018-03-19 19:56:57
667
原创 生活感悟
已经差不多1年没有写过博客了,这一年工作也比较忙,这一年还是把主要精力发在了生活上,这一年已经慢慢适应了南昌的生活,从北京回到南昌这样一个生活节凑相对慢的城市,但是技术还是需要不断学习啊,革命需要继续,所以从下周开始,决定开始重新写写博客了....................
2018-03-17 21:09:16
284
转载 Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
今天工作任务比较轻松,研究了一下Dubbo中间件Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)标签: Dubbospringmvczookeeper负载均衡2014-11-14 08:14 56411人阅读 评论(48)收藏举报分类: SpringMVC(10)
2017-02-24 17:19:26
795
1
原创 JVM调优:基本垃圾回收算法
我们可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):
2017-02-16 06:43:58
375
原创 JVM调优总结概念
数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,return
2017-02-16 05:53:33
385
原创 java八大排序算法之冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作
2017-02-15 06:16:03
414
原创 java并发基础
当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题。 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1的这个过程不是原子操作。要想对i进行递增,第一步就是获取i的值,当A获取i的值为0,在A将新的值写入A之前,B也获取了A的值0,然后A写入,i变成1,然后B也写入i,i这个时候依然是1. 当然java的内存模型没有上面这么
2015-09-11 11:11:30
429
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅