- 博客(78)
- 收藏
- 关注
原创 RabbitMQ 发送者确认机制详解
Confirm 机制:确保消息到达 Exchange,需处理 ack/nack。Return 机制:处理消息路由到 Queue 失败,需配置。联合使用:两者结合可覆盖消息从生产者到队列的全链路可靠性保障。通过合理配置和实现回调逻辑,可显著提升 RabbitMQ 消息传输的可靠性,适用于金融交易、订单处理等高要求场景。
2025-04-02 11:25:42
387
原创 Spring项目中使用EasyExcel实现Excel 多 Sheet 导入导出功能(完整版)
通过本方案可实现:动态导出:无需模板,根据 DTO 类自动生成表头。高效导入:逐行解析,内存占用低。类型安全:通过泛型和注解保证数据一致性。灵活扩展:支持自定义样式、转换器、校验逻辑。
2025-03-28 17:09:47
607
原创 Java中的注解是什么?
Java 注解通过简洁的语法为代码添加元数据,广泛应用于框架配置、数据校验和代码生成。定义注解:使用@interface和元注解。使用注解:标注在目标代码元素上。处理注解:通过 APT 或反射实现逻辑。掌握注解机制,能够更好地理解现代 Java 框架(如 Spring)的设计思想,并编写更简洁、可维护的代码。
2025-03-26 17:27:02
766
原创 MySQL中的锁机制详解
MySQL的锁机制通过多粒度锁(表级、行级)和多种锁模式(记录锁、间隙锁等),在保证数据一致性的同时提高并发性能。理解不同锁的特性、兼容性及适用场景,能帮助开发者优化数据库设计和事务逻辑。MySQL中的锁机制是确保数据一致性和并发控制的核心组成部分。行级锁锁定表中的特定行,其他行仍可被访问。InnoDB引擎支持行级锁。表级锁锁定整张表,影响所有行。适用于并发要求较低的场景。意向锁是表级锁,用于协调行级锁与表级锁的冲突。
2025-03-19 11:58:01
1013
原创 MyBatis-Plus核心功能与实战案例
是 MyBatis 的增强工具,在保留 MyBatis 原生功能的基础上,通过内置通用 Mapper、Service、条件构造器等,大幅简化开发。核心优势无侵入:只做增强不做改变,可与 MyBatis 原生功能混合使用高效开发:内置通用 CRUD 方法,减少 80% 的重复代码强大条件构造器:支持 Lambda 表达式,避免 SQL 注入风险定义自定义方法@Override注册注入器@Component@OverrideMapper 接口调用四、最佳实践与常见问题。
2025-03-18 17:40:45
737
原创 MySQL意向锁我该怎么理解?
在MySQL中,意向锁(Intention Lock)是一种用于协调不同粒度锁(如表锁和行锁)的机制,其核心目的是。通过合理使用意向锁,可以在保证事务隔离性的同时,减少锁冲突,优化数据库的并发处理能力。不同锁之间的兼容性决定了事务是否会被阻塞。,从而避免粗粒度锁(如表锁)与细粒度锁之间的冲突。
2025-03-17 19:40:37
333
原创 MQ:通过 @RabbitListener 创建交换机、队列及绑定
通过 @RabbitListener 的 bindings 属性,可以简洁地声明交换机、队列及其绑定关系,适合快速开发场景
2025-03-17 13:43:29
943
原创 @Async 注解不生效的常见原因及解决方案
Async不生效的常见原因包括未启用异步支持方法调用方式错误线程池未配置和异常未处理。添加。确保通过代理对象调用异步方法。配置自定义线程池。处理异步方法异常。验证方法作用域和 Bean 管理状态。正确配置后,异步方法将按预期在独立线程中执行,显著提升系统并发性能。
2025-03-14 17:38:54
433
原创 Redisson 分布式锁全面解析:锁类型(可重入锁、公平锁、联锁、红锁、读写锁)和锁常见方法解读
Redisson 提供了丰富的分布式锁实现,核心在于原子性操作可重入设计和自动续期机制。选择锁类型时需根据场景权衡性能、可用性和复杂度。始终在finally块中释放锁。合理设置锁超时时间,避免业务未完成锁已过期。高可用场景使用红锁,防止 Redis 单点故障。读写分离场景使用读写锁,提升并发性能。通过合理使用 Redisson 分布式锁,可有效解决分布式系统中的资源竞争问题,保障数据一致性。
2025-03-14 14:38:23
1348
原创 Java 线程与线程池类/接口继承谱系图+核心方法详解
线程类与接口RunnableCallableThreadExecutor框架构成 Java 并发基础。核心方法join():用于线程间同步。shutdown():优雅关闭线程池。submit():提交有返回值的任务。方法选择直接操作线程用start()和join()。线程池任务管理用execute()和submit()。
2025-03-11 20:43:42
988
原创 Java I/O 流完整指南
Java I/O 流体系是处理数据输入输出的核心工具,涵盖从基础字节流到高性能NIO的全场景解决方案。理解流的设计模式:装饰器模式实现功能扩展。正确选择流类型:字节流处理二进制,字符流处理文本。掌握NIO非阻塞模型:适用于高并发网络服务。严格资源管理:使用避免泄漏。性能优化:缓冲、分块处理、零拷贝技术。通过合理应用这些知识,可以构建高效、健壮的I/O密集型应用。
2025-03-10 17:13:40
776
原创 Java 类、匿名内部类、静态(static)、抽象(abstract)详解
1. Java 类(Class)定义Java 类是面向对象的基础单元,用于封装数据(属性)和行为(方法),通过class关键字定义。特点可以实例化为对象(通过new关键字)。支持继承(单继承)、实现接口(多实现)。包含成员变量、方法、构造方法等。示例// 定义一个普通类// 成员变量(实例变量)// 构造方法// 实例方法System.out.println("我是 " + name + ",年龄 " + age);// 使用。
2025-03-07 10:54:26
423
原创 Java 动态代理详解:利用动态代理手写一个简单的OpenFeign
动态代理通过运行时生成代理类,实现代码增强和解耦,是 Java 高级编程和框架设计的核心技术。它在 AOP、RPC、ORM 等场景中广泛应用,如 Spring、MyBatis、Feign 等框架均依赖动态代理实现核心功能。使用时需注意接口限制、性能影响及代理对象的特殊性,合理选择代理方式(JDK Proxy 或 CGLIB)以适配业务需求。
2025-03-06 20:17:55
906
原创 MyBatis @Param 注解详解:指定的参数找不到?
Param的核心作用是明确参数名称,避免因参数名丢失或歧义导致的错误。报错的根本原因通常是名称不匹配或参数绑定机制不清晰。根据参数类型和数量,合理选择是否使用@Param,并在 XML 中严格匹配名称即可解决问题。
2025-03-05 13:48:57
1004
原创 Java Lambda 表达式详解:是什么?为什么要用?底层原理?工作流程?什么地方用?
Lambda 表达式通过简化代码、支持函数式编程,并借助提升性能,成为现代 Java 开发的核心工具。其典型应用包括集合处理、事件回调和替代冗余的匿名类,是编写高效、简洁代码的关键手段。
2025-03-05 11:23:10
1109
原创 HashMap 的底层结构详解:原理、put和get示例
通过哈希函数快速定位键值对,使用链地址法解决冲突,并通过动态扩容和红黑树优化性能。理解其内部机制,有助于在实际开发中合理使用并规避潜在问题(如内存泄漏、线程安全问题)。是基于哈希表实现的键值对存储结构,其核心设计目标是高效的数据存取(理想情况下时间复杂度为 O(1))。的哈希值均映射到索引 1,且链表已转换为红黑树(当链表长度 ≥8 且数组长度 ≥64 时)。(8 * 0.75 = 6),当元素数量超过 6 时触发扩容。,但尚未触发扩容(Java 中实际在插入第 7 个元素时扩容)。
2025-03-04 21:05:31
1310
原创 ThreadLocal 与 Thread.currentThread() 的区别
省流:ThreadLocal:用于线程隔离的变量存储,解决多线程数据共享问题。Thread.currentThread():用于获取当前线程对象,操作线程状态或获取线程信息。
2025-03-03 16:33:38
595
原创 Java中接口(Interface)与类(Class)的区别
接口和类是 Java 面向对象编程中的核心概念,它们在设计目的、功能和使用场景上有显著差异。通过合理使用接口和类,可以构建高内聚、低耦合的面向对象系统。
2025-03-03 14:12:54
1006
原创 说说JVM的底层原理(JAVA是如何运行的)?
Java 虚拟机(JVM)是 Java 程序运行的核心环境,其设计融合了内存管理、类加载、垃圾回收和高效执行等复杂机制。以下从底层视角详细解析其核心模块,并结合实际场景说明其工作原理。,不仅能优化应用性能(如减少 Full GC 停顿),还能有效排查内存泄漏、锁竞争等问题,是高级 Java 开发的必备技能。类加载是 JVM 动态性的基石,其触发条件包括首次使用类(如。、反射调用等)或继承父类时。:静态集合持有对象导致无法回收。
2025-02-28 19:00:13
1320
原创 Spring Boot 启动与 Service 注入的 JVM 运行细节
通过此示例,可以清晰看到 JVM 类加载、Spring Bean 生命周期和业务方法调用之间的关系,帮助理解 Java 应用底层运行机制。我们通过一个具体的 Spring Boot 项目示例,结合 JVM 的类加载和对象实例化机制,详细说明。
2025-02-28 18:21:25
1033
原创 Redis 数据结构和使用详解(带示例)
通过合理选择数据结构和命令,可以高效解决缓存、实时统计、消息通信等多样化需求。:存储唯一元素,支持交集、并集操作(如共同好友、标签系统)。:存储对象字段,适合保存用户信息、商品属性等结构化数据。:存储文本、数值或二进制数据,适用于缓存、计数器等。:实现消息队列、最新消息列表(如微博时间线)。:存储和查询地理位置(附近的人、商家)。:消息队列(支持消费者组、消息持久化)。:排行榜、优先级队列(按分数排序)。:位操作(如用户签到、活跃统计)。:消息广播(如实时通知、聊天室)。:近似去重计数(如统计UV)。
2025-02-27 19:54:27
1230
原创 Redis除了做缓存还能做什么?
合理使用 Redis 可以显著提升系统性能,解决分布式场景下的复杂问题。根据具体需求选择合适的数据结构和功能,是最大化 Redis 价值的关键。Redis 除了作为高性能缓存外,还因其丰富的数据结构和功能,广泛应用于多种场景。Redis 的多样化应用得益于其。
2025-02-27 19:26:50
1522
原创 Java线程池详解(创建、使用场景、参数详解)
Java中的线程池(ThreadPoolExecutor)是并发编程中非常重要的工具,用于管理和复用线程,避免频繁创建和销毁线程带来的性能开销。Java通过java.util.concurrent包提供了丰富的线程池实现。
2025-02-26 10:13:38
753
原创 代码CR(Code Review)一般做什么?(Java版)
是保障代码质量、统一团队规范、发现潜在问题的重要环节。Java 代码 CR 是持续改进代码质量的核心实践,需结合人工经验与自动化工具,重点关注。通过 CR 不仅能提升代码质量,还能促进团队技术成长,形成高效协作的文化。在 Java 开发中,
2025-02-25 11:06:29
689
原创 16、Python面试题解析:python中的浅拷贝和深拷贝
在 Python 中,和是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。
2025-02-24 20:38:30
383
原创 Mysql视图有什么作用?你是否使用过视图?
MySQL视图(View)是一种虚拟表,其内容由查询定义。视图并不实际存储数据,而是基于一个或多个表的查询结果生成。通过合理使用视图,可以显著提升数据库的易用性和安全性,但需注意其性能影响和更新限制。
2025-02-21 16:37:08
679
原创 收到线上服务器出现cpu告警一般怎么排查?
调整JVM堆大小/选择低延迟GC算法(如G1/CMS)。:优化数据库查询、增加缓存、降级非核心功能。:CPU高伴随大量I/O等待或网络超时。显示GC时间占比高,应用卡顿。:线程堆栈中同一方法反复出现。:分析代码逻辑,修复并发问题。
2025-02-21 16:30:48
1019
原创 Java中的锁
在 Java 中,锁是多线程编程中用于控制对共享资源访问的重要机制。Java 提供了多种锁的实现,主要分为。以下是 Java 中常见的锁及其分类、特点和使用场景。条件变量用于实现线程间的等待/通知机制,通常与显式锁(如。通过合理选择锁,可以有效提升多线程程序的性能和可靠性。
2025-02-20 21:04:21
868
原创 15、Python面试题解析:列表推导式-条件推导与嵌套推导
列表推导式(List Comprehension)是 Python 中一种简洁的创建列表的方式。它允许我们通过一行代码生成列表,通常比传统的for循环更简洁、更易读。列表推导式是 Python 中一种强大的工具,可以简洁地生成列表。通过条件推导和嵌套推导,我们可以实现更复杂的逻辑。条件推导:通过if条件过滤元素。嵌套推导:通过多层循环生成复杂列表。性能:列表推导式通常比for循环更快,但可能占用更多内存。通过合理使用列表推导式,可以编写出简洁高效的代码。
2025-02-14 20:21:46
392
原创 14、Python面试题解析:Python是按引用调用还是按值调用
Python 的参数传递机制是按对象引用调用(Call by Object Reference)或按共享传递不可变对象:在函数内部修改时,会创建一个新的对象,原始对象不受影响。可变对象:在函数内部修改时,会直接修改原始对象。通过理解这一机制,可以更好地掌握 Python 中函数参数传递的行为,避免常见的错误。
2025-02-13 13:49:47
288
原创 13、Python面试题解析:字符串的乘法是如何工作的?
字符串乘法是 Python 中一个简单但强大的特性,用于将字符串重复指定的次数。简洁:语法简单,易于使用。灵活:适用于各种场景,如生成重复模式、占位符、多行文本等。不可变性:每次操作都会创建一个新的字符串对象。通过合理使用字符串乘法,可以编写出简洁高效的代码。但在处理大字符串或高重复次数时,需要注意性能问题。
2025-02-13 13:45:37
525
原创 Java的集合全面详解:底层原理、使用场景、复杂度等
集合类型适用场景时间复杂度线程安全ArrayList频繁查询、遍历,少量插入/删除查询O(1),插入/删除O(n)否LinkedList频繁插入/删除,较少随机访问插入/删除O(1),查询O(n)否HashSet快速判断元素是否存在插入/查询O(1)否TreeSet需要有序的唯一元素集合插入/查询O(log n)否HashMap键值对存储,快速查找插入/查询O(1)否高并发键值存储插入/查询O(1)是(分段锁/CAS)ArrayDeque高效队列/栈实现插入/删除O(1)否。
2025-02-13 11:37:51
860
原创 12、python面试题解析:filter函数解析
filterfilter是 Python 中一个强大的工具,用于从可迭代对象中过滤出满足条件的元素。简洁:与 Lambda 函数结合使用,代码简洁。灵活:适用于各种可迭代对象(如列表、元组、字典等)。函数式编程风格:适合函数式编程场景。通过合理使用filter,可以编写出高效、简洁的代码。但在复杂场景中,建议根据实际情况选择最合适的实现方式(如列表推导式或显式循环)。
2025-02-12 14:05:54
422
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人