自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 synchronized同步方法和同步代码块区别

是两种不同的同步实现方式,它们的核心区别在于锁的作用范围和灵活性。关键字用于实现线程同步,保证多线程环境下共享资源的安全访问。

2025-03-26 16:33:46 274

原创 多级缓存和数据一致性问题

是一种分层的数据缓存策略,通过在不同层级(如本地、分布式、数据库)存储数据副本,结合各层缓存的访问速度和容量特性,优化系统的性能和资源利用率。使用发布订阅模型(如 Redis Pub/Sub),当数据变更时,广播消息通知所有节点失效本地缓存。为本地缓存设置较短的 TTL(如 30 秒),通过牺牲少量性能换取更高一致性。,减少对远端存储(如数据库)的直接访问,从而降低延迟、提升吞吐量。(以下内容为之前回答的简要总结,完整版可参考上文)(以下内容为之前回答的简要总结,完整版可参考上文)

2025-03-26 16:03:18 741

原创 ThreadLocal

实现数据隔离,Key 为弱引用、Value 为强引用。合理使用四种引用类型(强、软、弱、虚)可优化内存管理,避免泄漏需手动清理。,Key 被回收后 Value 仍存在强引用,导致内存泄漏。ThreadLocal 通过线程独立的。

2025-03-26 14:14:30 223

原创 包含多个分隔符的字符串分割

/ 按多个字符分割(返回数组) public static String [ ] split(String input , String delimiters) {} // 构建正则表达式(自动处理特殊字符) private static String buildRegex(String delimiters) {} // 检查是否是正则特殊字符(如:^、$、. 等) private static boolean isSpecialRegexChar(char c) {= - 1。

2025-03-20 17:40:48 307

原创 JAVA强引用和弱引用

弱引用(Weak Reference)**是两种不同的对象引用方式,直接影响垃圾回收(GC)的行为和对象生命周期。在 Java 中,**强引用(Strong Reference)

2025-03-18 15:01:16 362

原创 JAVA八大基本数据类型

数据类型字节数取值范围/说明byte1-128 到 127short2-32,768 到 32,767int4-2³¹ 到 2³¹-1long8-2⁶³ 到 2⁶³-1float4IEEE 754 单精度浮点数double8IEEE 754 双精度浮点数char2Unicode字符(0 到 65,535)boolean未定义通常为1位,但JVM实现可能不同。

2025-03-17 10:42:17 269

原创 如何在动态查询的结果集里,根据某些配置的字典规则,对特定字段进行翻译

通过动态查询表名、缓存字典配置与数据,结合后处理翻译逻辑,实现了在不建立实体类的情况下动态翻译字段。确保表名安全性并合理使用缓存机制以提升性能,适用于字段多变的动态表结构场景。

2025-03-11 09:39:12 310

原创 RedisLimiter 限流器

该限流器通过Redis实现分布式流量控制,适用于需要精准控制请求频率的生产场景。开发者需结合业务需求设计合理的Key和限流规则,同时关注Redis稳定性与性能影响,必要时补充降级策略和监控。这段代码是Spring Boot项目中基于Redis和Redisson实现的分布式限流服务,用于控制接口或资源的访问频率,防止系统过载。

2025-03-10 11:09:18 640

原创 动态表头导出EasyExcel

通过这种方式,无需定义实体类即可实现完全动态的 Excel 导出功能,表头和字段完全由前端控制。实现动态表头导出(无实体类,表头和字段由前端传递)可以通过以下步骤实现。在 Spring Boot 中结合。

2025-02-25 17:03:38 607

原创 webSocket发送实时通知实例

在 Spring Boot 中实现前端调用接口执行任务并通过 WebSocket 实时推送任务状态,可以按照以下步骤操作:在 中添加 WebSocket 和 JSON 支持依赖:2. 配置 WebSocket创建一个 WebSocket 配置类,启用 STOMP 协议和消息代理:3. 定义任务状态消息对象创建一个 DTO 类表示任务状态消息:4. 编写任务服务与 WebSocket 推送在服务层中执行任务并通过 推送消息:5. 创建任务触发接口编写 REST 接口触发任务并返回任

2025-02-21 17:14:25 1023

原创 阻塞队列是什么?

阻塞队列通过阻塞机制有效协调生产者和消费者,适用于需要流量控制和任务调度的场景。

2025-02-17 09:06:52 337

原创 TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器

都可以用于实现 WebSocket 服务器,但它们属于不同的技术栈,使用方式和功能有一些区别。如果是纯 Java EE 项目或非 Spring 项目,可以使用。如果你的项目基于 Spring,推荐使用。

2025-02-11 10:20:13 664

原创 Comparator和Comparable排序

特性ComparableComparator定义位置类的内部类的外部排序逻辑自然排序(默认排序规则)自定义排序规则方法使用场景对象有明确的自然排序规则时使用需要灵活定义多种排序规则时使用Lambda支持不支持支持(Java 8及以上)通过合理使用Comparable和Comparator,可以轻松实现对象的排序功能。

2025-02-10 10:57:10 314

原创 Spring过滤器和拦截器区别?

作用范围过滤器作用于Servlet容器级别,适用于所有请求。拦截器作用于Spring MVC级别,仅适用于Spring MVC处理的请求。实现方式过滤器通过实现接口。拦截器通过实现接口或继承类。执行时机过滤器在请求进入Servlet之前和响应发送给客户端之前执行。拦截器在控制器方法执行前后和视图渲染前后执行。配置方式过滤器通常在web.xml中配置。拦截器通常在Spring配置类中通过注册。

2025-02-10 10:54:56 317

原创 CommandLineRunner 和 InitializingBean初始化

都是 Spring 框架中用于初始化 Bean 的机制,但它们有不同的使用场景和特点。

2024-12-19 11:11:44 266

原创 框架pom依赖

这四个依赖项的主要作用是简化依赖管理,确保各个框架和组件之间的版本一致性。通过引入这些 BOM 文件,可以大大减少配置依赖的工作量,并确保项目的一致性和稳定性。:管理 Spring Framework 及其相关模块的依赖版本。:管理 Spring Cloud 相关组件的依赖版本。:管理阿里巴巴提供的 Spring Cloud 相关组件的依赖版本。:管理 Spring Boot 及其相关模块的依赖版本。

2024-11-20 11:00:26 452

原创 SimplePropertyPreFilter和@JsonIgnore

*** 排除JSON敏感属性*/i++)类通过继承并提供方法,使得你可以灵活地排除 JSON 序列化过程中不需要的属性。这种过滤机制在很多需要控制 JSON 输出的场景中非常有用,尤其是在涉及敏感信息或性能优化的场合。是 Jackson 库中的一个注解,用于在 JSON 序列化和反序列化过程中忽略某个字段。它通常应用于字段级别。而(根据你的代码示例,可能是基于 FastJSON 的一个类)则是 FastJSON 库中的一个过滤器,用于在序列化过程中排除指定的字段。

2024-11-11 14:25:15 753

原创 Java 线程池有哪些拒绝策略?

这是默认的拒绝策略。当任务无法执行时,线程池会抛出异常。当任务无法执行时,线程池会将任务交由提交任务的线程(调用者线程)来执行。当任务无法执行时,线程池会直接丢弃该任务,没有任何通知或异常。当任务无法执行时,线程池会丢弃队列中最旧的任务,然后将新任务加入队列。除了以上预定义的拒绝策略,还可以通过实现接口来自定义拒绝策略。Java 线程池提供了多种拒绝策略来处理任务队列已满且没有空闲线程的情况。不同的策略适用于不同的场景,开发者可以根据具体需求选择合适的策略或自定义策略。:默认策略,抛出异常。

2024-11-07 10:27:01 1348

原创 随机 I/O(Random I/O)和顺序 I/O(Sequential I/O)

随机 I/O 是指访问存储设备上的数据时,访问的位置是随机的。这种访问模式通常涉及到在存储设备上进行大量的读写操作,而这些操作涉及的数据块在存储设备上是分散的。顺序 I/O 是指访问存储设备上的数据时,访问的位置是连续的。这种访问模式通常涉及到对连续存储区域进行读写操作,数据块在存储设备上是按顺序排列的。随机 I/O:适用于频繁读写小数据量的场景,例如数据库查询和文件系统操作。性能较低,常见于传统硬盘。顺序 I/O:适用于一次性读写大量数据的场景,例如数据备份和视频流媒体。性能较高,常见于固态硬盘。

2024-11-07 09:50:14 463

原创 如何设计一个毫秒级的接口?

通过综合考虑以上方面,你可以设计一个高效、稳定的毫秒级接口。不过请注意,每个应用场景都有其独特性,因此在实际设计过程中需要根据具体需求进行调整和优化。设计一个毫秒级的接口需要考虑多个方面,包括网络延迟、服务器性能、代码效率、数据库查询优化等。

2024-11-04 15:33:03 226

原创 MySQL 分页查询越往后翻越慢的原因

在实际开发中,分页查询越往后翻越慢的主要原因是OFFSET导致了全表扫描和内存消耗。通过使用覆盖索引、子查询、游标、延迟关联以及合理分片等优化策略,可以显著减少扫描行数,提高分页查询的性能。在选择优化策略时,需要根据具体的业务场景和数据规模来决定。

2024-10-28 17:33:56 1390 1

原创 Files.newBufferedReader和Files.readAllLines

适合逐行处理文件内容,节省内存,代码稍复杂。:适合快速读取小文件内容,代码简洁,但不适合大文件。根据具体的需求选择合适的方法,如果是大文件且需要逐行处理,推荐使用;如果是小文件且只需要快速读取内容,推荐使用。

2024-10-28 15:18:52 649

原创 try-with-resources

是一种简化资源管理的语法特性,能够自动关闭在try语句中声明的资源,避免资源泄漏,提高代码的简洁性和安全性。通过上述示例,你可以看到如何使用来管理文件读取操作的资源。

2024-10-28 15:14:49 461

原创 Java成员变量

普通成员变量:用于存储对象级别的可变数据。static变量:用于存储类级别的数据,通常是所有实例共享的。final变量:用于定义常量或不可变变量,确保变量一旦赋值后不再改变。依赖注入:用于解耦类与外部依赖,提高代码的可测试性,通常通过框架来管理依赖的生命周期。选择合适的变量类型和依赖管理方式,能够使代码更加清晰、可维护,并且更易于测试和扩展。

2024-10-28 11:11:43 647

原创 Spring 单例

在 Spring 框架中,单例 Bean 默认是的,这意味着 Spring 容器只会创建一次该 Bean,并在整个应用程序生命周期内重复使用这个实例。由于 Spring 默认的单例 Bean 是的,因此当多个线程同时访问这些单例 Bean 时,可能会引发并发问题,特别是当 Bean 中包含可变的实例状态或依赖外部有状态的服务时。然而,Spring 通过一些机制和最佳实践,避免了多线程并发问题。下面我会详细解释这些机制,并举例说明如何处理包含@Autowired外部依赖的单例 Bean 的并发问题。

2024-10-28 11:06:16 424

原创 static 和 final 关键字在使用上的总结

static:用于创建类级别的成员(变量、方法、块),这些成员属于类而不是类的实例。final:用于限制变量、方法或类的行为,确保它们在初始化后不可变或不可扩展。:通常用于创建常量,这些常量在整个应用程序中保持不变且可以通过类名直接访问。

2024-10-16 17:05:42 251

原创 equals和hashCode

重写equals方法时,重写hashCode方法是为了确保两个相等的对象具有相同的哈希码,这样可以保证哈希表的正确性和一致性。如果只重写了equals而不重写hashCode,在使用哈希表时可能会出现意外的行为或错误。如果重写了equals方法而没有重写hashCode方法,会导致哈希表操作的错误和不一致。这是因为equals和hashCode方法必须保持一致,以确保哈希表的正确行为和性能。为了避免这些问题,遵循equals和hashCode方法的合同是非常重要的。

2024-09-18 09:29:12 951 1

原创 单例模式创建方式

单例模式是一种常用的设计模式。其主要目的是确保某一个类只有一个实例存在。

2024-08-19 15:59:53 527

原创 静态代理和动态代理

生成方式静态代理:代理类在编译时已存在,并且需要在编写代码时显式定义。动态代理:代理类在运行时生成,可以在运行时灵活地创建和修改。灵活性静态代理:代理类的逻辑是固定的,修改代理行为需要修改代码并重新编译。动态代理:可以通过灵活地处理方法调用,无需修改现有代码。使用场景静态代理:适用于代理逻辑较为固定,且代理类不需要在运行时变化的情况。动态代理:适用于代理逻辑动态变化或需要为多个类生成代理的场景,特别是在框架中经常使用。这两种代理方式各有优缺点,根据具体需求选择适合的代理方式。

2024-08-14 10:19:00 629

原创 解决多线程安全

为了在并发环境中确保数据安全,可以采用同步机制,线程安全的数据结构、显式锁机制、无锁数据结构、线程局部变量、不可变对象、CAS 操作和并发设计模式。选择合适的方案取决于具体的使用场景和性能要求。

2024-08-13 16:34:20 404

原创 模板设计模式

定义:模板方法模式通过定义一个操作的基本步骤,并将一些步骤推迟到子类中来实现算法的变体。模板方法使得子类可以重新定义算法中的某些步骤而不改变算法的结构。组成部分抽象类(Abstract Class):定义一个模板方法(Template Method),并包含一个或多个抽象方法(Abstract Methods)或钩子方法(Hook Methods)。模板方法定义了算法的骨架。具体类(Concrete Class):实现抽象类中的抽象方法,并根据需要覆盖钩子方法,以完成具体步骤的实现。

2024-08-12 17:37:28 644

原创 git浅克隆

总结来说,这些命令的流程是:首先进行一个浅克隆以快速获取最新的代码,进入项目目录,然后再将这个浅克隆转换为完整克隆,以便获取整个项目的历史记录。这三段命令是用于操作 Git 仓库的,特别是在处理大型仓库时。$ git fetch --unshallow这三段命令什么意思。

2024-08-12 16:24:24 571

原创 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求的处理分配给一系列的处理对象,这些处理对象通过链式结构组织起来。每个处理对象可以选择处理请求或者将请求传递给链中的下一个处理对象。在企业中,审批流程是一个经典的责任链模式应用场景。假设一个请假申请需要经过多个审批阶段,比如直接上司、部门经理和人力资源部。每个审批者都可以决定是否处理请求或将请求传递给下一个审批者。这样可以灵活地调整审批流程,例如添加新的审批环节或调整现有环节的顺序。

2024-08-12 15:01:34 554

原创 自定义实现一个 Redis 客户端

Redis 使用一种称为 RESP(Redis Serialization Protocol)的协议来与客户端进行通信。RESP 协议的消息格式非常简单,包括命令、参数和响应。通过自定义实现的 Redis 客户端使用 TCP socket 与 Redis 服务器进行通信。需要按照 RESP 协议构造和解析命令及响应。实现包括密码认证、发送命令、接收响应等功能。通过这种方式,你可以自定义实现 Redis 客户端,并与 Redis 服务器进行交互,包括处理认证和数据操作。

2024-08-12 10:19:02 357

原创 联合索引和单个索引

联合索引适用于频繁涉及多个列的查询,可以优化复杂的查询性能。单个索引适用于单列查询,但对于多列查询的性能不如联合索引。在设计索引时,需要根据实际查询需求来决定是使用联合索引还是单个索引,或者结合使用它们,以达到最佳的查询性能。

2024-08-09 10:00:07 995

原创 git revert和git reset工作中使用

git revert:用于撤销某次提交的效果,但保留提交历史,适合在公共分支上使用。git reset:用于修改提交历史,适合在本地分支上使用,可以重置到某个提交点,具体行为取决于使用的模式。在工作中,选择使用哪个命令取决于你对历史记录的需求和当前的协作环境。

2024-08-06 10:56:52 517

原创 全局处理方式

在 API Gateway 中:配置全局的请求和响应过滤器。在应用层:使用全局异常处理器和过滤器(如 Spring Boot 的和Filter利用中间件:通过服务网格或消息队列中间件进行统一处理。选择合适的方式取决于你的架构和具体需求。

2024-08-06 09:06:06 820

原创 Redis Bigkey

在 Redis 中,Bigkey指的是那些占用大量内存的键。由于 Redis 是一个内存数据库,所以键值对的大小直接影响到内存的使用情况。大字符串:如非常大的文本数据。大列表:如包含大量元素的列表。大哈希表:如包含大量字段的哈希表。大集合:如包含大量成员的集合。

2024-07-31 17:07:07 580

原创 linux-free命令使用

free命令是了解系统内存使用状况的有效工具。在启动新进程时,关注 available内存;在接口响应慢时,需监控 used和 available,并结合 buff/cache进一步判断。交换内存(swap使用情况也是评价系统性能的一个重要因素。

2024-07-31 16:34:28 1081

原创 mysql的唯一索引和普通索引有什么区别

性能方面:在查询性能上,唯一索引和普通索引没有显著的差异,主要取决于索引的选择性和查询的复杂性。唯一索引在保证数据唯一性方面有额外开销,但对于普通查询来说,其性能表现与普通索引类似。使用场景唯一索引:适用于需要保证某列值唯一的场景,例如用户名、电子邮件地址等。普通索引:适用于不需要唯一性的列,用于提高查询速度,例如用于快速查找和排序。选择索引类型应基于实际需求。如果数据需要唯一性约束,则使用唯一索引;如果只是为了提高查询性能,则可以使用普通索引。当你在字段上设置UNIQUE。

2024-07-29 18:28:48 1614

空空如也

空空如也

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

TA关注的人

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