<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[真战]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/CodeEfficiency</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CodeEfficiency]]></copyright><item><title><![CDATA[并发编程原理与实战（四十）深入理解CopyOnWriteArrayList：核心API与线程安全设计]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155601331</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155601331</guid><author>CodeEfficiency</author><pubDate>Fri, 05 Dec 2025 11:28:16 +0800</pubDate><description><![CDATA[HashMap对应的线程安全类ConcurrentHashMap，本文来学习ArrayList对应的线程安全类CopyOnwriteArrayList。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(73)：itext7 pdf表单字体加粗解决方案]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155499937</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155499937</guid><author>CodeEfficiency</author><pubDate>Tue, 02 Dec 2025 17:29:31 +0800</pubDate><description><![CDATA[在使用Acrobat编辑pdf表单的时候，只有字体和字体大小的设置，并没有字体加粗的设置，只能通过代码的方式设置加粗字体了。那么itext7如何设置加粗字体？]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十九）并发基石ArrayBlockingQueue与LinkedBlockingQueue的底层实现与API设计解析]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155484772</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155484772</guid><author>CodeEfficiency</author><pubDate>Tue, 02 Dec 2025 11:18:10 +0800</pubDate><description><![CDATA[入队方法这个多个，究竟用哪个？通过上面的分析，不难发现，add()方法在队列满时抛出异常，对于日常的排队需求，很明显不符合要求；offer()方法相对add()方法友好一点，通过返回true或false表示插入结果，但是不会等待；通常很多排队场景是需要等待的，一直等待直到队列能插入元素为止，所以put()方法最符合日常需求，这也是为什么叫阻塞队列原因。方法队列满时行为返回值add(E e)抛出IllegalStateExceptionbooleanoffer(E e)立即返回false。]]></description><category></category></item><item><title><![CDATA[文件系统监控利器：Java NIO WatchService深度解析与实践指南]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155353403</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155353403</guid><author>CodeEfficiency</author><pubDate>Fri, 28 Nov 2025 14:24:35 +0800</pubDate><description><![CDATA[***/一个监视服务，用于监视已注册对象的更改和事件。例如，文件管理器可以使用监视服务来监视目录的更改，以便在创建或删除文件时更新其文件列表显示。*/]]></description><category></category></item><item><title><![CDATA[开发避坑指南(72)：HttpHeaders 的add()方法和set()方法有什么区别？]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155129459</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155129459</guid><author>CodeEfficiency</author><pubDate>Sat, 22 Nov 2025 10:39:58 +0800</pubDate><description><![CDATA[springframework中的HttpHeaders 的add()方法和set()方法有什区别？]]></description><category></category></item><item><title><![CDATA[开发避坑指南(71)：mybatis-plus 各种Wrapper类区别]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155106086</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155106086</guid><author>CodeEfficiency</author><pubDate>Fri, 21 Nov 2025 16:44:45 +0800</pubDate><description><![CDATA[mybatis-plus中 QueryWrapper、LambdaQueryWrapper、UpdateWrapper、LambdaUpdateWrapper、MPJQueryWrapper、MPJLambdaWrapper有什么区别？]]></description><category></category></item><item><title><![CDATA[开发避坑指南(70)：Vue3 Http请求头携带token下载pdf文件解决方案]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155105204</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155105204</guid><author>CodeEfficiency</author><pubDate>Fri, 21 Nov 2025 16:07:45 +0800</pubDate><description><![CDATA[Vue3中http请求如何下载预览pdf文件？请求头中如何携带token？]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十八）高并发利器ConcurrentHashMap 数据结构与核心API深度剖析]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155075462</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155075462</guid><author>CodeEfficiency</author><pubDate>Thu, 20 Nov 2025 20:29:37 +0800</pubDate><description><![CDATA[本文分析了ConcurrentHashMap的核心数据结构和API方法。其数据结构采用数组+链表+红黑树的形式，包含基础Node节点和四个子类节点：TreeBin/TreeNode用于红黑树管理、ForwardingNode处理扩容转发、ReservationNode作为计算操作的占位符。核心方法putVal()通过CAS+synchronized实现线程安全，支持链表转红黑树等优化操作。这些设计共同构成了ConcurrentHashMap高效并发的基础架构。]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十七）高并发利器ConcurrentHashMap核心特性解析]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155060354</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/155060354</guid><author>CodeEfficiency</author><pubDate>Thu, 20 Nov 2025 11:25:38 +0800</pubDate><description><![CDATA[1、引入ConcurrentHashMap主要是为了解决HashMap在多线程环境下的线程安全问题，并克服Hashtable因全局锁导致的性能瓶颈‌。2、一个支持检索操作完全并发且更新操作具有高预期并发性的哈希表。所有操作都是线程安全的，但检索操作不涉及锁机制，且不支持锁定整个表以阻止所有访问。3、检索操作反映的是在其开始时已完成的最近更新操作的结果。4、当发生过多碰撞（即具有不同哈希码但根据表大小取模后落入同一槽位的键）时，哈希表会动态扩容。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(69)：FastJSON 解析非标准 JSON 数据异常排查与解决方案]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154703119</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154703119</guid><author>CodeEfficiency</author><pubDate>Tue, 11 Nov 2025 20:50:08 +0800</pubDate><description><![CDATA[使用fastjson解析JSON报错，问题出在bmInfo节点的数据结构异常 - 数组内混合了对象和数组类型，不符合标准JSON格式。解决方案是将bmInfo字段类型改为List&lt;List&lt;Object&gt;&gt;，而非List&lt;List&lt;JsonData&gt;&gt;。这样能兼容JSON解析器对混合数据结构的处理需求，解决解析异常问题。]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十六）深入解析 ThreadLocal 在 Spring 框架中的核心应用与实战技巧]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154702945</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154702945</guid><author>CodeEfficiency</author><pubDate>Tue, 11 Nov 2025 20:45:09 +0800</pubDate><description><![CDATA[摘要：本文探讨了ThreadLocal在Spring框架中的核心应用场景，包括用户信息存储和数据库连接管理。在Web应用中，通过ThreadLocal实现拦截器存储用户信息，避免参数传递；在数据库事务中，Spring通过NamedThreadLocal管理连接资源，确保同一线程使用相同的Connection对象。文章还分析了Spring事务管理的调用链，解释了CGLIB代理的选用原因。这种线程本地变量机制有效解决了多线程环境下的数据隔离问题，是Spring框架的重要实现基础。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(68)：Java Stream 统计List中元素某个字段值不同的次数实战指南]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154402809</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154402809</guid><author>CodeEfficiency</author><pubDate>Tue, 04 Nov 2025 17:27:45 +0800</pubDate><description><![CDATA[java 中如何用Stream 统计List中元素某个字段值不同的次数？]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十五）ThreadLocal内存泄露问题剖析与典型使用场景举例]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154369515</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154369515</guid><author>CodeEfficiency</author><pubDate>Tue, 04 Nov 2025 00:04:03 +0800</pubDate><description><![CDATA[摘要：本文分析了ThreadLocal内存泄漏问题，指出其根本原因在于ThreadLocalMap中Entry的key采用弱引用（ThreadLocal对象）而value是强引用，导致key被回收后value仍占据内存。通过示例演示了未调用remove()方法时老年代内存持续增长的现象，并提出了防护策略：1)显式调用remove()清理；2)使用static final修饰ThreadLocal；3)设置合理初始值。文中还详细介绍了Java四种引用类型及其特性，为理解内存泄漏机制提供了理论基础。]]></description><category></category></item><item><title><![CDATA[SpringBoot + iTextPDF + Acrobat 构建动态PDF表单的完整实践]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154148677</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154148677</guid><author>CodeEfficiency</author><pubDate>Thu, 30 Oct 2025 21:59:29 +0800</pubDate><description><![CDATA[本文介绍了使用iTextPDF和Acrobat工具实现动态PDF表单打印的解决方案。文章分析了表单开发中的5个关键问题：SpringBoot整合iTextPDF的依赖引入、文本域纵向展示设置、Barcode128条形码生成与插入、条形码的横向/纵向排列实现。 实现过程详细说明了： 引入iTextPDF 5.x或7.x版本的依赖配置 通过Acrobat设置文本域90度旋转实现纵向展示 使用Barcode128类生成条形码，并通过PdfCanvas进行坐标变换 通过矩阵变换(concatMatrix方法)实现条]]></description><category></category></item><item><title><![CDATA[开发避坑指南(67)：Maven引入iText7-core依赖失败解决方案]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154087846</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/154087846</guid><author>CodeEfficiency</author><pubDate>Wed, 29 Oct 2025 21:18:25 +0800</pubDate><description><![CDATA[/</</</]]></description><category></category></item><item><title><![CDATA[开发避坑指南(66)：IDEA 2025 Gradle构建安全协议警告：Maven仓库HTTPS切换或允许HTTP的配置方法]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153835739</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153835739</guid><author>CodeEfficiency</author><pubDate>Fri, 24 Oct 2025 17:31:01 +0800</pubDate><description><![CDATA[Gradle 7.0 版本构建项目以上就会出现这个问题，Gradle从高版本开始默认禁止使用不安全的HTTP协议访问Maven仓库所致。2、修改build.gradle配置，显式允许不安全协议。1、将仓库访问地址由http修改为https。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(65)：JDK21升级遇NoSuchFieldError：Lombok兼容性修复]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153831498</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153831498</guid><author>CodeEfficiency</author><pubDate>Fri, 24 Oct 2025 15:48:01 +0800</pubDate><description><![CDATA[java: java。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(64)：修复IllegalArgumentException：参数值类型与期望类型不匹配]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153660742</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153660742</guid><author>CodeEfficiency</author><pubDate>Tue, 21 Oct 2025 23:19:10 +0800</pubDate><description><![CDATA[在进行sql传参的时候报错，从异常信息可以看出，传入的参数82和期望的Long类型的参数不一致，因为传入的是字符串类型，所以报类型不匹配错误。根据实际类型调整传入参数的类型。]]></description><category></category></item><item><title><![CDATA[并发编程原理与实战（三十四）ThreadLocal核心API与线程安全数据隔离机制深度解析]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153696033</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153696033</guid><author>CodeEfficiency</author><pubDate>Tue, 21 Oct 2025 19:38:24 +0800</pubDate><description><![CDATA[通过分析ThreadLocal的核心API，我们总结出ThreadLocal线程安全的数据隔离机制：1、ThreadLocal通过为每个线程创建独立的局部变量来实现线程安全的数据隔离，其核心机制基于Thread、ThreadLocal和ThreadLocalMap三者的协作。2、每个Thread对象内部维护一个ThreadLocalMap实例作为线程的私有存储空间。]]></description><category></category></item><item><title><![CDATA[开发避坑指南(63)：解决SQL排序子句列名歧义异常：Column ‘xxx‘ is ambiguous]]></title><link>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153660730</link><guid>https://blog.youkuaiyun.com/CodeEfficiency/article/details/153660730</guid><author>CodeEfficiency</author><pubDate>Mon, 20 Oct 2025 23:49:55 +0800</pubDate><description><![CDATA[在使用jdbc多表连接查询的时候发生上述错误，该异常表明SQL中ORDER BY子句中出现了不明确的’id’列名，通常发生在多表联查时多个表存在相同列名但未明确指定表别名的情况下。该问题与字段列表歧义异常（如Column ‘id’ in field list is ambiguous）本质相同，均属于SQL编写规范问题。ORDER BY子句中显式指定表别名‌：order by t_order.id。SQL规范‌：建议所有多表查询都显式指定列所属表，即使当前无歧义，以避免后续表结构变更导致的潜在问题。]]></description><category></category></item></channel></rss>