java
文章平均质量分 88
java学习、总结
Jack_abu
搬砖这么多年,开始沉淀点东西吧
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java泛型详解:从入门到精通
Java泛型是Java SE 5引入的重要特性,通过参数化类型实现了类型安全的代码复用。泛型消除了强制类型转换,在编译时进行类型检查,减少了运行时错误。泛型类和接口通过在类名/接口名后添加类型参数定义,支持多类型参数。泛型方法在返回值前声明类型参数,可使用有界类型参数限制范围。通配符包括无界通配符(?)、上界通配符(?extends)和下界通配符(?super),提供了更灵活的类型处理方式。泛型显著提高了代码的安全性、可读性和复用性,是现代Java开发的核心特性之一。原创 2026-03-27 10:49:05 · 355 阅读 · 0 评论 -
详解JUC包中的Condition接口
Java的Condition接口提供了比Object.wait()/notify()更精细的线程协调机制,主要特点包括:1)一个Lock可创建多个Condition,实现多条件精准唤醒;2)支持await()、signal()等方法,可响应中断;3)基于AQS实现,通过独立等待队列管理线程。典型应用如生产者-消费者模型,使用时需注意循环检查条件、避免死锁等最佳实践。Condition通过多条件队列和灵活唤醒策略,显著提升了并发程序的可控性和性能。原创 2026-02-09 18:09:59 · 536 阅读 · 0 评论 -
详解java中的FunctionalInterface(函数式接口)
Java函数式接口是Java8引入的核心特性,主要用于支持Lambda表达式和函数式编程。它要求接口只能包含一个抽象方法,可使用@FunctionalInterface注解标记。Java内置了Function、Consumer、Supplier等常用函数式接口,支持数据转换、条件判断等操作。函数式接口广泛应用于StreamAPI、并发编程和事件处理等场景。使用Lambda表达式可以简化代码,提高可读性。开发者也可自定义函数式接口,但需遵循单一抽象方法的规则。合理使用函数式接口能显著提升Java代码的简洁性原创 2026-02-03 15:32:10 · 667 阅读 · 0 评论 -
stream().toList()与.collect(Collectors.toList())
Java Stream中.toList()(Java16+)和.collect(Collectors.toList())(Java8+)的主要区别:1).toList()返回不可变列表(修改会抛出异常),而Collectors.toList()返回可变ArrayList;2).toList()在Java16+中性能更优但仅限不可变场景;3)版本兼容性方面,Collectors.toList()支持Java8+,.toList()仅限Java16+;4)Collectors.toList()支持null元素.原创 2026-01-29 16:32:44 · 418 阅读 · 0 评论 -
详解MapStruct Plus
MapStructPlus是基于MapStruct的增强工具,通过@AutoMapper注解自动生成Java类型映射接口,简化对象转换流程。核心特性包括自动化接口生成、复杂对象深度转换、Map与对象互转增强等。支持Maven依赖快速集成,提供简单对象转换、嵌套结构处理、枚举转换等场景实现方案。与SpringBoot无缝集成,支持依赖注入。相比原生MapStruct,MapStructPlus通过注解驱动显著提升开发效率,同时保持高性能,适用于多层对象模型和快速原型开发场景。最佳实践建议根据需求选择...原创 2026-01-14 14:23:55 · 753 阅读 · 0 评论 -
JDK8中的Optional深度解读
JDK8引入的Optional类旨在解决空指针问题,通过容器化包装可能为null的对象,强制显式处理空值场景。它优化了方法返回值,明确表示"可能无结果",并提供map、flatMap等链式操作支持函数式编程。最佳实践包括:作为方法返回值而非参数,避免性能陷阱,合理结合Stream流。常见误区有误用isPresent()+get()和重复判空。典型应用场景包括安全获取嵌套属性、强制值存在校验等。正确使用Optional可显著提升代码健壮性和可读性,但需注意性能敏感场景的优化。原创 2026-01-14 11:14:15 · 950 阅读 · 0 评论 -
详解java中的ConcurrentSkipListMap
ConcurrentSkipListMap是Java并发包中的线程安全有序映射实现,基于跳表数据结构。它支持自然排序或自定义比较器,提供高效的并发访问能力。核心特性包括:采用多层链表结构实现快速查找;使用CAS操作保证并发安全;查找、插入、删除操作均为O(logn)时间复杂度。适用于需要高并发有序访问的场景,如实时排行榜、范围查询等。相比TreeMap具有更好的并发性能,相比ConcurrentHashMap则提供有序性支持。使用时需注意禁止null键值、内存开销较大等限制。原创 2025-12-24 17:03:34 · 1122 阅读 · 0 评论 -
详解java中的线程间协作工具:CountDownLatch,Semaphore,CyclicBarrier(二)
Java并发编程中的三大同步工具类各有特点:CountDownLatch用于一次性线程同步,通过计数器实现主线程等待多个子线程完成;Semaphore通过许可证机制控制资源并发访问,支持动态调整许可证数量;CyclicBarrier则实现多线程循环同步,屏障触发后可重置复用。此外,Exchanger支持线程间数据交换,Phaser提供更灵活的多阶段同步能力。这些工具基于AQS实现,适用于不同并发场景,开发者可根据任务特性选择合适的同步机制。原创 2025-12-19 20:08:25 · 827 阅读 · 0 评论 -
详解java中的BlockingQueue阻塞队列
Java的BlockingQueue是并发编程中实现生产者-消费者模式的核心工具,提供线程安全的阻塞操作。主要实现类包括基于数组的ArrayBlockingQueue、链表的LinkedBlockingQueue、优先级的PriorityBlockingQueue等,各有适用场景。通过锁机制和条件变量保证线程安全,支持阻塞/非阻塞操作及超时控制。典型应用于线程池任务队列、消息传递和流量控制。使用时需注意死锁风险、无界队列的内存问题及性能优化。原创 2025-12-18 20:25:40 · 986 阅读 · 0 评论 -
Java中的Thread、ThreadLocalMap、ThreadLocal三者之间的关系,ThreadLocalMap.Entry的弱引用设计
ThreadLocal通过ThreadLocalMap实现线程隔离存储,每个线程持有独立的ThreadLocalMap,通过ThreadLocal的set/get方法存取数据。弱引用设计允许ThreadLocal实例被GC回收,但需配合remove()清理残留值,尤其在线程池场景中。相比同步锁,ThreadLocal以空间换时间实现无锁线程安全,适用于数据库连接、会话管理等场景。最佳实践包括及时清理和避免存储大对象,平衡线程安全与内存管理原创 2025-11-03 19:38:28 · 782 阅读 · 0 评论 -
SpringBoot web项目中使用@ExceptionHandler处理全局异常?或是使用HandlerExceptionResolver?哪种更合适
SpringBoot项目中处理全局异常时,@ExceptionHandler+@ControllerAdvice更适合RESTful API场景,配置简单且与SpringMVC深度集成;HandlerExceptionResolver适用于全局拦截和复杂处理逻辑,但配置复杂。最佳实践是混合使用,优先采用@ControllerAdvice处理Controller层异常,再通过HandlerExceptionResolver捕获未处理的全局异常。建议大多数项目优先选择@ExceptionHandler方式原创 2025-10-29 19:08:51 · 911 阅读 · 0 评论 -
<? extends T>是什么,<? super T>又是什么,PECS是指什么
Java泛型通配符<? extends T>和<? super T>分别用于生产者(只读)和消费者(只写)场景。<? extends T>表示元素类型为T或其子类,确保安全读取但禁止写入;<? super T>表示元素类型为T或其父类,允许安全写入但读取时类型信息丢失。PECS法则(Producer Extends, Consumer Super)指导这两种通配符的应用,如集合拷贝和栈操作,通过编译期类型检查保证安全性,避免运行时类型错误。原创 2025-10-27 14:43:24 · 663 阅读 · 0 评论 -
Spring生态HTTP客户端技术演进:RestTemplate、RestClient与WebClient深度解析
Spring框架的HTTP客户端经历了三代技术演进:RestTemplate(同步阻塞)、WebClient(异步非阻塞)和RestClient(过渡方案)。RestTemplate适合低并发场景但存在线程资源消耗问题;WebClient基于响应式编程,在高并发下性能优异;RestClient则在保持兼容性的同时提供异步能力。测试显示WebClient吞吐量达12,000req/s,远优于RestTemplate的2,800req/s。建议传统系统采用渐进式迁移策略,新项目首选WebClient。原创 2025-10-17 11:19:06 · 1195 阅读 · 0 评论 -
从MyBatis3.4.5中的PropertyNamer看属性名称定义
文章分析了MyBatis中PropertyNamer类对属性命名的处理机制,指出当使用Lombok自动生成getter/setter方法时,若属性名第二个字母大写(如uType),会导致MyBatis无法正确映射字段。原因在于PropertyNamer.methodToProperty()方法会保留第二个字母大写状态,而Lombok生成的getUType()方法与之不匹配。解决方案包括:1)修改属性名前两个字母为小写;2)手动生成符合MyBatis命名规范的getter/setter方法原创 2025-10-10 12:14:59 · 570 阅读 · 0 评论 -
详解web.xml中的listener与filter
本文系统介绍了Java Web中Listener和Filter两大核心组件。Listener用于监听Servlet容器事件(如应用启动/关闭、Session创建销毁),通过事件驱动模型实现回调;Filter采用责任链模式拦截请求/响应,实现权限控制、日志记录等功能。文章详细对比了两者的配置方式(web.xml/注解)、执行顺序、典型应用场景及注意事项,强调Listener适合全局资源管理,Filter侧重请求处理拦截,并指出在微服务架构中部分功能可迁移至网关层。最后总结了实现规范、线程安全和性能优化等最佳实原创 2025-06-18 17:12:16 · 1013 阅读 · 0 评论 -
算法学习之——LRU最近最少使用
LRU缓存淘汰算法通过双向链表维护访问顺序,哈希表提供快速查找,实现O(1)时间复杂度的关键操作。当缓存满时,算法自动淘汰链表尾部最久未使用的数据,保持高效缓存管理。原创 2025-06-06 16:37:51 · 985 阅读 · 0 评论 -
使用javaagent实现springboot工程中密码相关配置的统一化配置,避免密钥泄漏
项目中一般都会将密码等信息写在配置文件中,或者写在pom中,但是这种方式容易造成密码泄漏。本文主要是通过javaagent的方式,在项目启动时通过与密钥管理系统ssm交互实现了密钥数据的统一配置管理,从而避免了密钥泄漏的问题。原创 2025-01-20 17:01:28 · 1189 阅读 · 0 评论 -
聊一聊java中的main方法、premain方法、Instrumentation接口
java中的premain方法是做什么的,它和main有什么区别或联系,Instrumentaion API又是什么,和-javaagent有什么关系,如何在jvm启动应用程序之前插入自定义代码原创 2025-01-17 20:42:15 · 1463 阅读 · 0 评论 -
记我的Springboot2.6.4从集成swagger到springdoc的坎坷路~
在springboot2.6.4中集成swagger报错,项目无法正常启动,通过各种方法解决,但最后还是选择了springdoc~原创 2024-12-25 17:42:10 · 1384 阅读 · 0 评论 -
设计模式学习之——适配器模式
设计模式学习,适配器模式、变压器模式,工作原理、适用场景、优缺点、代码示例等原创 2024-12-11 14:46:01 · 1192 阅读 · 0 评论 -
设计模式学习之——工厂模式
设计模式学习,简单工厂模式、工厂方法模式、抽象工厂模式,工厂模式在spring框架中的应用,spring框架中的BeanFactory和FactoryBean原创 2024-12-10 14:52:31 · 1753 阅读 · 0 评论 -
Springboot项目集成Mybatis-Plus,多数据源配置,写主读从
springboot项目集成mybatis-plus,mybatis-plus多数据源,读写分离,写主读从,mybatis-plus中执行自定义sql原创 2024-11-29 17:25:49 · 1676 阅读 · 0 评论 -
设计模式学习之——观察者模式
设计模式学习-观察者模式,观察者模式的定义、实现原理、优缺点,应用场景,代码示例,以及观察者模式与发布订阅模式之前的区别与联系原创 2024-11-29 11:38:02 · 1127 阅读 · 0 评论 -
设计模式学习之——模板方法模式
设计模式学习之——模板方法模式,行为型设计模式,算法骨架固定,但实现步骤可以延迟在子类中实现原创 2024-11-28 18:46:15 · 1346 阅读 · 0 评论 -
设计模式学习之——策略模式
设计模式学习,策略模式,策略模式常见应用场景,java代码示例原创 2024-11-28 11:51:43 · 1859 阅读 · 0 评论 -
责任链模式在spring security过滤器链中的应用
责任链模式在spring security过滤器链中的应用,自定义过滤器的实现原创 2024-11-26 18:05:41 · 1439 阅读 · 1 评论 -
设计模式学习之——责任链模式
设计模式学习,责任链设计模式,责任链设计模式使用场景、优缺点,代码示例原创 2024-11-26 15:54:57 · 1922 阅读 · 0 评论 -
浅聊java中的枚举以及关于枚举的常见面试问题
枚举是通过关键字enum来定义的。枚举的每一个实例都是该枚举类型的一个对象,这些对象在编译时就已经被创建,并且不能被实例化。枚举类默认继承自类,但不能显式继承其他类也不能被继承,因为当枚举被编译为类时会被final修饰,但它可以实现接口)。原创 2024-08-28 17:38:52 · 1423 阅读 · 0 评论 -
MapStruct与BeanUtils处理对象属性复制场景对比
使用MapStruct进行类型转换或对象间属性复制,与BeanUtils.copyProperties进行简单对比原创 2024-05-28 19:13:33 · 1337 阅读 · 0 评论 -
JDK8:用java.nio.file.Files.lines方法读取大型文件
使用jdk8中java.nio.file.Files.lines方法读取大型文件内容原创 2024-05-23 17:54:58 · 1664 阅读 · 0 评论 -
聊一聊java中的ThreadLocal
java中的ThreadLocal是什么,它的实现原理,使用场景,以及需要注意的地方有哪些原创 2024-04-12 19:22:07 · 722 阅读 · 0 评论 -
聊一聊java中的SortedMap,TreeMap,以及SortedSet和TreeSet
聊一聊java框架中的SortedMap,TreeMap,SortedSet和TreeSet原创 2024-04-10 17:32:24 · 1586 阅读 · 0 评论 -
浅聊java集合框架中的java.util.LinkedList
聊一聊java集合框架中的java.util.LinkedList原创 2024-04-10 17:04:47 · 1252 阅读 · 0 评论 -
聊一聊java.util包中的Queue、Deque以及Stack分别是什么
聊一聊队列、栈,以及java中的Queue,Deque,stack分别是什么原创 2024-04-09 18:07:25 · 2001 阅读 · 0 评论 -
java中使用雪花算法(Snowflake)为分布式系统生成全局唯一ID
使用雪花算法(Snowflake)为分布式系统中生成全局唯一ID,使用java语言实现原创 2024-04-02 16:50:54 · 6569 阅读 · 0 评论 -
聊一聊java中的HashMap,ConcurrentHashMap以及Collections.SynchronizedMap
聊一聊java中的HashMap,ConcurrentHashMap,以及Collections.SynchronizedMap,它们的数据结构、实现原理原创 2024-04-01 19:04:54 · 896 阅读 · 0 评论 -
聊聊java中的CountDownLatch,CyclicBarrier,Semaphore
了解一下java中的CountDownLatch,CyclicBarrier,Semephore都是什么,以及它们的实现原理原创 2024-03-29 19:31:10 · 735 阅读 · 0 评论 -
聊一聊java中synchronized的实现原理
java中的synchronized实现同步的原理是什么原创 2024-03-29 18:36:44 · 1123 阅读 · 0 评论 -
聊一聊java中的volatile关键字是如何保障变量的可见性的
聊一聊java中的volatile关键词是如何保障变量在线程间的可见性的,它的实现原理是什么原创 2024-03-28 15:04:39 · 931 阅读 · 0 评论 -
分享一个关于java中查看一个对象内存布局和占用空间大小的工具
使用JOL,Java Object Layout工具来查看java中一个对象的内存布局及大小原创 2024-03-26 18:57:00 · 2320 阅读 · 0 评论
分享