自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Groovy 简介

Groovy 是一种基于 Java 虚拟机(JVM)的动态编程语言,结合了 Python、Ruby 等脚本语言的灵活性和 Java 的强大生态。它完全兼容 Java 语法,同时提供了更简洁的语法糖、动态类型、闭包等特性,适合快速开发、脚本编写和领域特定语言(DSL)设计。

2025-07-24 23:59:24 208

原创 JDK代理怎样实现的

JDK动态代理要求目标类必须实现接口,CGLIB则可以直接代理普通类。JDK代理生成速度更快,但调用效率略低于CGLIB。Spring框架会根据目标类情况自动选择代理方式。JDK8及以上版本对反射调用做了优化,性能差距已显著缩小。类,因此只能代理接口。代理类会实现目标接口的所有方法,并在方法调用时转发给。代理对象在运行时动态生成,无需手动编写代理类代码。JDK动态代理基于Java反射机制实现,核心类为。对于频繁调用的代理方法,可以考虑缓存。JDK动态代理生成的类默认继承。完成,运行时生成的类名通常以。

2025-07-15 23:15:31 312

原创 MQ用在哪几种场景

通过MQ,系统间只需发送消息,无需直接依赖,降低耦合度。在需要耗时操作的业务中,如用户注册后发送邮件或短信通知,MQ可以将这些非核心业务异步处理,避免阻塞主流程,提高系统响应速度。在需要耗时操作的业务中,如用户注册后发送邮件或短信通知,MQ可以将这些非核心业务异步处理,避免阻塞主流程,提高系统响应速度。在高并发场景下,如秒杀活动,MQ可以缓存请求,按服务处理能力逐步消费,避免瞬时流量压垮系统。在高并发场景下,如秒杀活动,MQ可以缓存请求,按服务处理能力逐步消费,避免瞬时流量压垮系统。

2025-07-15 23:14:38 447

原创 bootstrap.yml和apllication.yml文件有什么区别?

是 Spring Cloud 上下文(Bootstrap Context)的配置文件,优先于应用主上下文加载。它通常用于配置 Spring Cloud 相关组件(如配置中心、服务注册中心等)的连接信息。这使得 Spring Cloud 组件能优先获取必要的配置(如 Config Server 的地址),再通过远程配置覆盖本地配置。是应用主上下文的配置文件,用于定义应用自身的配置(如数据库连接、业务参数等)。通过远程配置中心(如 Spring Cloud Config)获取的配置会覆盖。

2025-07-15 23:06:23 353

原创 开发过程,导出功能,遇到数据量超万的怎么处理

导出任务提交到线程池异步处理,生成文件后存储到服务器或云存储(如OSS、S3),通过邮件或消息通知用户下载链接。记录任务状态(如Redis),防止重复提交。采用分页或分批查询方式,每次处理固定数量(如1000条),减轻内存压力。若允许分片下载,前端可分多次请求小数据块,后端按范围返回数据(如按时间区间或ID分段)。确保导出使用的SQL语句高效,避免全表扫描。通过分布式锁(如Redis锁)或数据库乐观锁控制并发导出任务数,避免系统过载。对于文本类数据(如CSV、JSON),使用。压缩输出,减少传输时间。

2025-07-15 23:00:14 356

原创 RabbitMQ怎么保证消息不失效和可靠传输,不被重复消费,如果一条消息同时有多个消费者,要怎么分配给哪个消费。实现原理

RabbitMQ 通过多种机制确保消息的可靠传输和不重复消费,同时支持多消费者场景下的消息分配。通过上述机制,RabbitMQ 在分布式系统中实现了高可靠性的消息传递。

2025-07-15 22:57:29 371

原创 redis从左插入数据、和从右插入数据怎么实现

命令,分别用于在列表的左侧(头部)和右侧(尾部)插入数据。(后插入的值在左侧)。(后插入的值在右侧)。

2025-07-15 22:52:44 238

原创 Redis的缓存穿透

缓存穿透可以通过布隆过滤器、缓存空值、接口校验和限流熔断等多种方式解决。实际应用中可以根据场景选择单一或组合方案。布隆过滤器适合高频查询且数据量大的场景,缓存空值适合数据变化不频繁的场景,接口校验和限流熔断则适合防御恶意请求。

2025-07-15 22:47:52 253

原创 为什么InnoDB存储引擎选择使用B+tree索引结构

B+树的节点通常设计为与磁盘块大小匹配,减少磁盘I/O次数。B+树的矮胖特性(低高度、多分支)使得查询路径短,通常只需3-4次I/O即可定位数据。B+树非叶子节点仅存储键值和指针,不存实际数据,使得单个节点能容纳更多键值。B+树的所有数据记录存储在叶子节点,且叶子节点通过指针连接成链表。B+树在数据库索引中广泛应用,尤其是InnoDB存储引擎。)只需定位起始节点后顺序遍历链表,避免回溯非叶子节点。B+树叶子节点按键值排序,适合等值查询和排序操作。语句可直接利用索引的有序性,避免额外排序开销。

2025-07-14 00:33:00 192

原创 java中对象的强复制、浅复制

浅复制仅复制对象的引用,不复制对象内部的实际数据。两个对象共享同一内存地址的成员变量,修改其中一个会影响另一个。深拷贝会递归复制对象及其所有成员变量,生成一个完全独立的新对象,修改其中一个不会影响另一个。如Apache Commons的。

2025-07-13 23:28:22 258

原创 SpringBoot中登录校验Cookies、Session、JWT登录校验方法比较

Cookies是一种存储在客户端的小型数据片段,常用于跟踪用户会话。服务器通过Set-Cookie头部将Cookie发送给客户端,客户端在后续请求中自动携带该Cookie。Session是一种服务器端存储机制,用于保存用户状态。服务器创建Session后,通过Cookie或URL重写将Session ID传递给客户端。JWT是一种基于JSON的开放标准,用于在客户端和服务器间安全传输信息。JWT由三部分组成:头部、载荷和签名。

2025-07-13 23:28:08 288

原创 防止MQ消息丢失的方法

在Java中防止消息队列(MQ)消息丢失,可以从生产端、MQ服务端和消费端三个层面进行优化。

2025-07-11 00:25:41 444

原创 MyBatis中#和$符号区别

符号时,参数值会直接拼接到SQL语句中,不会生成预编译的占位符。这种方式适用于动态表名或列名,但存在SQL注入风险。符号时,MyBatis会生成预编译的SQL语句,参数值会被安全地替换为占位符。这种方式可以有效防止SQL注入。符号直接拼接SQL,若参数值来自用户输入且未过滤,可能导致SQL注入。符号生成的预编译SQL可被数据库缓存,提高重复查询效率。符号用于参数替换,但两者的处理方式不同。符号每次拼接SQL,无法利用缓存。符号通过预编译机制避免此问题。符号会生成预编译的占位符(即。符号会直接替换为参数值。

2025-07-05 12:22:43 447

原创 BIO,NIO,AIO的区别

特性BIONIOAIO阻塞类型同步阻塞同步非阻塞异步非阻塞线程模型一对一多路复用(单线程多连接)回调驱动复杂度低中高适用场景低并发、短连接高并发、短连接高并发、长连接性能瓶颈线程资源编程复杂度系统支持选择建议BIO:适合简单应用,如传统HTTP服务器。NIO:适合高并发网络框架(如Netty)。AIO:适合文件操作或特定长连接场景。注:实际应用中,NIO的成熟框架(如Netty)更常见,AIO因兼容性问题使用较少。

2025-07-05 12:20:40 260

原创 Restful风格的核心原则

Restful(Representational State Transfer)是一种基于HTTP协议的软件架构风格,强调资源导向的设计和标准化操作。/users/123。

2025-07-05 12:11:00 395

原创 WebService与HttpClient的区别

WebService和HttpClient都是用于网络通信的技术,但它们的应用场景、协议支持及设计目标不同。基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构,通常用于跨平台、跨语言的系统集成。SOAP WebService依赖XML格式的消息传递,通过WSDL(Web Services Description Language)描述服务接口,支持复杂的业务逻辑和事务处理。

2025-07-05 12:08:47 365

原创 关于Arthas

【代码】关于Arthas。

2025-07-05 01:33:00 351

原创 Jenkins配置步骤

以上步骤涵盖了从安装到基础任务配置的关键流程,可根据实际需求扩展(如集成Docker、Kubernetes等)。安装常用插件(如Docker、Blue Ocean、Pipeline)。,选择任务类型(如Freestyle project或Pipeline)。保存配置,手动触发构建或等待自动触发。构建结果会在任务页面显示,日志可通过。完成初始配置,解锁管理员密码(密码在Jenkins启动日志中显示)。,配置JDK、Maven/Gradle、Git等工具路径。进入Jenkins主界面,点击。

2025-07-05 01:29:51 368

原创 Jenkins与Maven的核心区别

维度JenkinsMaven主要功能自动化CI/CD流程项目构建和依赖管理配置文件Jenkinsfile或GUI配置pom.xml执行范围多阶段流水线(构建、测试、部署)单项目构建生命周期扩展性通过插件支持多种工具集成主要聚焦Java项目构建。

2025-07-05 01:27:27 265

原创 Eureka与Nacos的核心区别

Eureka采用AP设计,优先保证可用性和分区容错性,牺牲一致性。服务节点间通过心跳维持状态,适合对一致性要求不高的场景。Nacos支持AP和CP两种模式,可根据需求切换。默认AP模式,但在配置中心或特定场景下可切换为CP模式,保证强一致性。Eureka仅提供服务注册与发现功能,不包含配置管理模块。Nacos集成配置中心功能,支持动态配置推送、版本管理、监听机制等,配置数据以Namespace/Group/Data ID三层结构存储。

2025-07-05 01:25:45 374

原创 Redis 解决并发下缓存雪崩问题

采用本地缓存+分布式缓存的多级缓存策略。本地缓存可以使用Guava Cache或Caffeine,当Redis失效时仍有本地缓存作为屏障。主节点宕机时自动切换从节点,避免单点故障导致的雪崩。缓存雪崩是指在某一时刻,大量缓存同时失效或Redis宕机,导致所有请求直接打到数据库,造成数据库压力激增甚至崩溃。通过Hystrix等工具实现熔断,当数据库压力过大时快速失败,避免系统崩溃。为缓存数据设置随机的过期时间,避免大量缓存同时失效。对于周期性失效的缓存,在失效前通过定时任务提前刷新。

2025-07-05 01:15:13 68

原创 Redis 解决并发下缓存雪崩问题

通过Redis哨兵(Sentinel)或集群(Cluster)模式实现高可用,避免单点故障导致全面雪崩。当Redis失效时,本地缓存仍能提供部分数据支撑,降低数据库压力。是指大量缓存数据在同一时间过期或Redis宕机,导致请求直接打到数据库,引发数据库压力激增甚至崩溃。引入熔断组件(如Hystrix)监控数据库负载,当请求量超过阈值时直接返回降级数据(如默认值、空白页),保护数据库。每种方案可根据实际场景组合使用,例如"随机过期时间+多级缓存+熔断降级"的综合策略能显著提升系统抗雪崩能力。

2025-07-05 01:10:39 349

原创 RabbitMq之流量削峰

生产者将请求转化为消息发送到RabbitMQ队列,消费者异步处理这些消息。通过解耦生产消费环节,系统只需保证消息不丢失,无需实时响应。设置队列最大长度(x-max-length)和溢出行为(x-overflow),当消息积压超过阈值时,可配置拒绝新消息或丢弃旧消息。为关键业务消息设置更高优先级(x-max-priority),确保核心流量优先被处理。对非实时性消息设置过期时间(x-message-ttl),避免无效消息长期占用资源。将处理失败的消息转入死信队列,避免阻塞正常消息处理流程。

2025-07-05 00:55:22 298

原创 常见的日志技术

SL4J用法:public static final Logger LOG = LoggerFactory.getLogger("类名");日志接口:Commons Logging(JCL)

2025-07-05 00:29:45 208

原创 特殊文件properties、xml

load(Reader reader)//加载数据load(InputStream inStream)//加载数据String getProperty(String key)//根据key获取valueSet<String>stringPropertyNames()//获取全部的key值store(Writer writer, String comments)//修改文件的值store(OutputStream out, String comments)//修改文件的值。

2025-07-05 00:25:07 271

原创 JDK8新增的Stream流

super T> predicate)任意一个元素符合条件,就返回true值alMatch(Predicate<?super T> predicate)所有元素符合条件,就返回true值。reduce(BinaryOperator<T>accumulator)对map里面的元素进行累积,sorted(),sorted(Comparator<?superT>comparator)排序,super T> predicate)过滤元素,super T> comparator)最大值,

2025-07-05 00:19:30 131

原创 Map集合是双列集合(k,v)结构key不能重复,可以为空,底层维护的是Entry<K,V>数组

Hashtable<K,V>,是同步的,线程安全的,在JDK1.5以后用ConcurrentHashMap代替,为什么用ConcurrentHashMap比较好,HashTable中的方法线程安全是在方法加上关键字synchronize来实现的,而synchronize是阻塞锁,在运行上会大大降低执行效率,在ConcurrentHashMap中虽然也有用到synchronize关键字,但在部分关键处采用乐观锁(CAS)实现,大大降低了阻塞的问题比如在读(get)方法没有加锁。

2025-07-05 00:16:24 196

原创 Collection单列集合,接口

1:底层基于数组实现。基于地址、索引查询速度比较块添加、删除比较慢,因为需要移动数据。2:通过构造器创建的时候(List<String>list=new ArrayList()),集合的默认大小是0交给elementData记录该数组的大小。当存放第一个元素进去的时候,数组会扩容成长度为10 的数组,每放一个元素elementData的大小会增加1如果放满10个元素,当要放第11个元素时,数组会再次扩容1.5倍,并将旧的数组复制到新的数组里面。

2025-07-04 23:53:19 319

原创 jdk8新时间

DateTimeFormatter时间格式化工具类----->代替旧的SimpleDateFormat。LocalDateTime:有日期、时间,精确到纳秒都是通过调用now()方法获取当前的时间。Instant时间戳、时间线---->代替旧时间Date。LocalDate:只有日期年月日,没有时间。LocalTime:只有时间,没有日期。ZoneDateTime带时间的时区。上面的代替旧时间的Calendar。

2025-07-04 23:36:11 89

原创 java基础之String类

2025-07-04 23:29:09 84

原创 Docker中使用arthas

l trace命令渲染和统计整个调用链路上的所有性能开销和追踪调用链路,很方便的定位性能瓶颈。或docker exec -it 9c3b90f18d20 /bin/bash。trace 类名 方法名 (注:不能用子类名,即类名中要看到此方法名)或docker exec -it 容器Id /bin/bash。docker exec -it 容器Id /bin/sh。注:1)不能用子类名,即类名中要看到此方法名。1、查找docker中的容器,并进入容器。4、运行arthas-boot.jar,

2025-06-16 22:50:54 493

原创 RabbitMQ安装步骤

3.安装文件(分别按照以下顺序安装) rpm -ivh erlang-21.3-1.el7.x86_64.rpm yum install socat -y rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm。2.文件上传 上传到/usr/local/software 目录下(如果没有 software 需要自己创建)1.官网地址 https://www.rabbitmq.com/download.html。

2025-06-16 22:44:04 450

空空如也

空空如也

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

TA关注的人

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