<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yt66700的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yt66700</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yt66700]]></copyright><item><title><![CDATA[多线程练习复盘：那些让我头大的坑与顿悟 ]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156362690</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156362690</guid><author>yt66700</author><pubDate>Sun, 28 Dec 2025 16:35:31 +0800</pubDate><description><![CDATA[最开始练习的时候，总觉得多线程就是“开几个线程一起跑”，结果写出来的代码要么是线程安全问题一堆，要么是看似并行实则串行。建议大家练习的时候，别只停留在“实现功能”，多去琢磨怎么排查线程安全问题，怎么优化锁的粒度，甚至可以试试用 CountDownLatch 、 CyclicBarrier 这些工具类来控制线程执行顺序。最近泡在多线程的专项练习里，从最基础的 Thread 类创建线程，到 Runnable 接口实现，再到线程同步、锁机制，踩过的坑能绕两圈，也总算摸透了一点多线程的门道。]]></description><category></category></item><item><title><![CDATA[异常练习：在试错中吃透Java异常处理的底层逻辑]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156362641</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156362641</guid><author>yt66700</author><pubDate>Sun, 28 Dec 2025 16:33:26 +0800</pubDate><description><![CDATA[建议大家做异常练习时，别只满足于“处理掉异常”，多去思考**“这个异常该由谁处理”“是否需要向上抛出”“如何给用户/开发人员返回有用的信息”**，才能真正把异常处理的逻辑刻进脑子里。但在模拟业务场景的练习中发现，好的自定义异常需要携带业务错误码、错误信息，甚至关联异常源，这样在分布式系统中排查问题时，才能快速定位到问题环节。借着练习的复盘，和大家聊聊我踩过的那些坑，以及对异常处理的新认知。其实异常练习最核心的不是“写出不报错的代码”，而是搞懂“为什么会抛异常”“该在哪个层级捕获”“如何优雅处理”。]]></description><category></category></item><item><title><![CDATA[玩转Java Map集合，从基础到实战的全面解析 ]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156362605</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156362605</guid><author>yt66700</author><pubDate>Sun, 28 Dec 2025 16:30:56 +0800</pubDate><description><![CDATA[在Java集合框架中，Map是与Collection并列的核心接口，它以**键值对（Key-Value）**的形式存储数据，是开发中处理映射关系的必备工具。不管是日常业务开发中的数据缓存、配置存储，还是复杂的业务逻辑映射，Map都能发挥关键作用。3. 无序/有序特性：不同实现类的有序性不同，如HashMap无序，LinkedHashMap按插入顺序排序，TreeMap按Key的自然顺序排序。1. 键的唯一性：Map中的Key是唯一的，不能重复，若插入相同Key的键值对，新的Value会覆盖旧值。]]></description><category></category></item><item><title><![CDATA[吃透Set集合，这篇练习帖就够了!]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156362561</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156362561</guid><author>yt66700</author><pubDate>Sun, 28 Dec 2025 16:28:01 +0800</pubDate><description><![CDATA[在Java编程中，Set集合是处理无序、不可重复元素的重要工具，也是面试和开发中的高频考点。1. Set的特性：元素无序且唯一，底层依赖 equals() 和 hashCode() 方法保证唯一性。System.out.println("去重后的列表：" + newList);System.out.println("自然排序：" + numSet1);System.out.println("降序排序：" + numSet2);System.out.println("迭代器遍历：");]]></description><category></category></item><item><title><![CDATA[使用List集合专项实验：吃透Java列表的核心用法与特性]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156146033</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156146033</guid><author>yt66700</author><pubDate>Wed, 24 Dec 2025 12:07:37 +0800</pubDate><description><![CDATA[另外，利用 Collections.sort() 对List进行排序、通过 subList() 截取子列表等操作，也让我掌握了List集合的灵活用法，比如 subList() 返回的是原列表的视图，修改子列表会同步影响原列表，这也是开发中容易踩坑的点。最近完成了使用List集合的专项实验，从ArrayList、LinkedList的底层特性对比，到增删改查、遍历、排序等操作的实操，让我对List集合的理解从“会用”变成了“懂原理”，今天就和大家聊聊这次实验的收获。]]></description><category></category></item><item><title><![CDATA[基于字符串的专项实验：解锁Java String类的隐藏细节]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156145855</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156145855</guid><author>yt66700</author><pubDate>Tue, 23 Dec 2025 23:05:46 +0800</pubDate><description><![CDATA[实验的第一个环节是探究字符串的创建方式差异：直接赋值 String str = "Java" 会从字符串常量池获取对象，而 new String("Java") 则会在堆内存新建对象，通过 == 和 equals() 的对比测试，直观看到了引用比较与值比较的区别。最近完成了基于字符串的专项实验，从字符串的创建、拼接、比较到不可变性的验证，一系列实操让我对 String 类的理解不再停留在表面，也想和大家聊聊这次实验的收获。比如在实际开发中，根据场景选择合适的字符串操作类，能有效提升程序的运行效率。]]></description><category></category></item><item><title><![CDATA[Java虚拟机（JVM）内存模型与垃圾回收全解析 ]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155989209</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155989209</guid><author>yt66700</author><pubDate>Mon, 22 Dec 2025 11:14:20 +0800</pubDate><description><![CDATA[基于这些算法，JVM提供了多种垃圾收集器，如串行收集器、并行收集器、CMS收集器、G1收集器等，G1收集器作为新一代收集器，将堆划分为多个Region，实现了分代收集与区域收集的结合，兼顾了吞吐量和停顿时间。线程共享区则包括方法区和堆，堆是对象实例的主要存储区域，也是垃圾回收的核心区域，方法区存储类信息、常量、静态变量等，在JDK1.8中方法区被元空间替代，元空间直接使用本地内存，避免了永久代的内存限制。垃圾回收的前提是判断对象是否存活，主流的判断算法有引用计数法和可达性分析算法。]]></description><category></category></item><item><title><![CDATA[基于Object类及包装类专项实验：探索Java基础的核心奥秘]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/156145642</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/156145642</guid><author>yt66700</author><pubDate>Mon, 22 Dec 2025 11:03:26 +0800</pubDate><description><![CDATA[这次实验围绕 Object 类的核心方法展开，比如重写 toString() 让对象的打印输出更具可读性，重写 equals() 方法实现自定义对象的相等判断，还有 hashCode() 与 equals() 的联动规则验证，每一个实操步骤都让我明白，这些看似基础的方法背后，藏着Java对象设计的底层逻辑。近期完成的基于Object类及包装类的专项实验，让我对这些基础知识点有了更具象、更深入的认知，也想把实验中的收获和思考分享给同样在Java路上摸索的小伙伴们。]]></description><category></category></item><item><title><![CDATA[Java并发编程全解析：从线程安全到JUC容器实战]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155989179</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155989179</guid><author>yt66700</author><pubDate>Tue, 16 Dec 2025 20:22:12 +0800</pubDate><description><![CDATA[而 synchronized 是重量级锁，能同时保证这三个特性，它通过对象头的监视器锁实现，在JDK1.6后经过锁升级（偏向锁→轻量级锁→重量级锁）优化，性能大幅提升。与 synchronized 相比， ReentrantLock 作为显式锁，支持公平锁/非公平锁切换、可中断获取锁，灵活性更高，适合复杂的并发场景。需要注意的是，并发编程易出现死锁、活锁等问题，开发时需遵循“锁的顺序性”“尽量减少锁的持有时间”等原则，同时可借助JConsole、VisualVM等工具排查并发问题。]]></description><category></category></item><item><title><![CDATA[Java注解与反射进阶：自定义注解开发及框架底层应用]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155989165</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155989165</guid><author>yt66700</author><pubDate>Tue, 16 Dec 2025 20:20:25 +0800</pubDate><description><![CDATA[注解的本质是一种特殊的接口，它继承自 java.lang.annotation.Annotation ，而元注解是定义注解的“注解”，其中 @Target 指定注解作用位置（类、方法、字段等）， @Retention 决定注解的生命周期（源码期、编译期、运行期），这两个元注解是自定义注解的基础。反射结合注解的经典应用是Spring的IOC容器，Spring通过扫描带有 @Component 注解的类，利用反射的 Class.newInstance() 创建对象，并将其纳入容器管理。]]></description><category></category></item><item><title><![CDATA[一篇搞懂Java反射与单例设计模式（无代码版） ]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155581027</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155581027</guid><author>yt66700</author><pubDate>Thu, 04 Dec 2025 23:04:51 +0800</pubDate><description><![CDATA[方式3：通过“全类名”拿：输入“包名+类名”（比如“com.test.Student”），就能找到对应的类对象——这种方式常用在配置文件里（比如JDBC加载驱动）。单例模式是最常用的设计模式之一，核心目标很简单：让一个类在整个程序里，只存在一个实例对象（比如工具类、配置类，没必要创建多个对象）。反射：通过“类对象”，就能直接获取类的信息，甚至直接操作这个类（比如创建实例、调用方法）——相当于“透过类对象，操控原类”。方式1：从“类的对象”里拿：先创建一个类的实例，再通过实例获取它对应的类对象。]]></description><category></category></item><item><title><![CDATA[《Java序列化与反序列化全解析：对象持久化与跨端传输的核心逻辑》]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155343033</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155343033</guid><author>yt66700</author><pubDate>Fri, 28 Nov 2025 09:47:34 +0800</pubDate><description><![CDATA[在Java开发中，序列化与反序列化是实现“对象持久化”“跨端数据传输”的关键技术，从分布式系统到缓存框架都离不开它。最后会结合“Redis缓存对象存储”“Dubbo服务间通信”等实战案例，带你把序列化技术落地到实际开发中，避免踩中“序列化失败”“数据不一致”等坑。主流序列化框架对比：JDK序列化、JSON、Protobuf、Kryo的性能与适用场景。序列化的进阶场景：跨版本兼容性、 transient关键字的作用。序列化的核心概念：为什么需要序列化、JDK默认序列化的实现方式。]]></description><category></category></item><item><title><![CDATA[《Java网络编程全解析：从Socket到NIO实战》]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/155342858</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/155342858</guid><author>yt66700</author><pubDate>Fri, 28 Nov 2025 09:44:21 +0800</pubDate><description><![CDATA[Java网络编程是实现“跨端通信”的核心能力，从传统的B/S架构到现代的微服务通信都离不开它。最后会对比BIO、NIO、Netty的性能差异，并给出不同业务场景下的技术选型建议，帮你在实际开发中选对网络通信方案。NIO的核心组件：Channel、Buffer、Selector的工作逻辑。Netty框架的核心优势：如何基于Netty快速实现高性能通信。网络通信的底层原理：TCP/IP、UDP协议的核心区别。NIO的实战应用：手写一个简易的“多人聊天服务器”]]></description><category></category></item><item><title><![CDATA[Java IO流与File类全解析：从概念到核心应用 ]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/154059996</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/154059996</guid><author>yt66700</author><pubDate>Wed, 29 Oct 2025 09:43:25 +0800</pubDate><description><![CDATA[字符流：以字符为传输单位，仅用于操作文本文件（如 .txt 、 .java ，不含 .mp3 、 .class 等二进制文件）。字节流是IO的基础流，以字节为单位处理数据，核心抽象类为 InputStream （输入）和 OutputStream （输出）。字符流以字符为单位处理数据，核心抽象类为 Reader （输入）和 Writer （输出），仅适用于文本文件。- 功能：支持自动换行（ println() ）、直接写入对象（调用对象的 toString() ）。]]></description><category></category></item><item><title><![CDATA[Java集合体系超全总结：从基础到开发重点]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/154059705</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/154059705</guid><author>yt66700</author><pubDate>Wed, 29 Oct 2025 09:39:33 +0800</pubDate><description><![CDATA[若相同，再比较 equals() ，若返回false则存储，否则去重。- 去重规则：依赖 hashCode() 和 equals() 方法（HashSet），或自然排序/比较器（TreeSet）。Set是Collection的子接口，特点是元素无序、不可重复，常用实现类有HashSet、TreeSet等。List是Collection的子接口，特点是元素有序、可重复、支持下标操作，是开发中最常用的集合类型之一。- 核心学习维度：集合的接口定义、常用实现类、增删改查方法、遍历方式、泛型与工具类。]]></description><category></category></item><item><title><![CDATA[JAVA中的常用类]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/152260599</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/152260599</guid><author>yt66700</author><pubDate>Mon, 29 Sep 2025 11:36:18 +0800</pubDate><description><![CDATA[BigDecimal类用于高精度的浮点数运算，避免了浮点数运算中的精度问题。它提供了加减乘除等运算方法，适合财务计算等场景。Object类是Java中所有类的超类，每个类都直接或间接继承自Object类。Java为每种基本数据类型提供了对应的包装类，如。这些类是Java编程中常用的工具，掌握它们的使用方法对开发高效、可靠的程序至关重要。String类用于表示不可变的字符序列。这些类提供了丰富的方法，如类型转换、数值比较等。是线程安全的，适用于多线程环境。类用于处理可变长度的字符串。返回对象的运行时类。]]></description><category></category></item><item><title><![CDATA[Java异常：错误处理的核心机制与最佳实践]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/148765362</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/148765362</guid><author>yt66700</author><pubDate>Thu, 19 Jun 2025 14:06:32 +0800</pubDate><description><![CDATA[对于实现 AutoCloseable 接口的资源（如文件、连接），使用 try-with-resources 语法自动释放资源，简化代码并避免泄漏。-  finally 块：无论是否发生异常， finally 块中的代码始终执行，常用于资源释放（如关闭文件流、数据库连接）。- 标准化处理：Java提供统一的异常处理语法（ try-catch-finally ），简化错误处理流程。- 在业务层捕获底层异常（如数据库异常），封装为自定义业务异常后重新抛出，隐藏技术细节。]]></description><category></category></item><item><title><![CDATA[Java集合：数据存储与处理的核心工具集]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/148765331</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/148765331</guid><author>yt66700</author><pubDate>Thu, 19 Jun 2025 14:05:05 +0800</pubDate><description><![CDATA[在Java程序设计中，**集合框架（Collection Framework）**是处理动态数据的核心工具，它提供了一组接口、实现类和算法，用于高效存储、检索和操作数据。从日常业务开发到复杂算法实现，集合的合理使用直接影响程序的性能与可维护性。- 提供排序（ sort() ）、查找（ binarySearch() ）、同步包装（ synchronizedList() ）等实用方法，简化集合操作。- 统一的遍历接口，支持 hasNext() 、 next() 、 remove() 操作，适用于所有集合类型。]]></description><category></category></item><item><title><![CDATA[Java常用类：高效编程的“瑞士军刀”]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/148765282</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/148765282</guid><author>yt66700</author><pubDate>Thu, 19 Jun 2025 14:03:13 +0800</pubDate><description><![CDATA[静态工具类：提供标准输入输出（ System.in 、 System.out ）、系统属性获取（ System.getProperty() ）、数组复制（ System.arraycopy() ）等功能。- 常用方法： length() 、 equals() 、 substring() 、 split() 等，用于字符串长度计算、比较、截取和分割。-  Arrays 类：提供数组排序（ sort() ）、查找（ binarySearch() ）、填充（ fill() ）等工具方法。]]></description><category></category></item><item><title><![CDATA[Java内部类：代码封装、访问控制与设计模式的利器]]></title><link>https://blog.youkuaiyun.com/yt66700/article/details/148765232</link><guid>https://blog.youkuaiyun.com/yt66700/article/details/148765232</guid><author>yt66700</author><pubDate>Thu, 19 Jun 2025 14:01:29 +0800</pubDate><description><![CDATA[在Java程序设计中，**内部类（Inner Class）**是定义在其他类内部的类。- 访问外部类成员：内部类可直接访问外部类的所有成员，包括私有属性和方法，因为编译后内部类会持有外部类的隐式引用（成员/局部内部类）。- 内存泄漏风险：成员内部类持有外部类的强引用，若外部类生命周期过长，可能导致内存泄漏（如非静态内部类在匿名内部类中使用）。- 生命周期关联：成员内部类与外部类实例绑定，外部类实例销毁时，内部类实例也随之销毁。- 定义：没有类名的内部类，通常用于创建接口或抽象类的实例，同时实现其抽象方法。]]></description><category></category></item></channel></rss>