<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Chenchen0905_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Chenchen0905_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Chenchen0905_]]></copyright><item><title><![CDATA[Nacos详解]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147540403</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147540403</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 18:13:24 +0800</pubDate><description><![CDATA[Nacos是Dynamic Naming and Configuration Service的首字母简称，即动态命名与配置服务。它是一个为构建云原生应用而生的平台，提供了一组简单易用的特性集，助力开发者快速实现动态服务发现、服务配置、服务元数据及流量管理等功能。]]></description><category></category></item><item><title><![CDATA[Swagger2：API 开发与文档生成的得力助手]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147540063</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147540063</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:48:58 +0800</pubDate><description><![CDATA[Swagger2 是一个规范和完整的框架，用于生成、描述、调用和可视化 RESTful 风格的 Web API。它提供了一系列的工具和标准，使得开发人员可以轻松地定义 API 的结构、参数、响应等信息，并自动生成详细的 API 文档。同时，Swagger2 还支持在线测试 API，方便开发人员和测试人员进行接口调试。在类中，通过ApiInfo.title("Spring Boot Swagger2 API 文档").description("这是一个使用 Swagger2 生成的 API 文档示例")]]></description><category></category></item><item><title><![CDATA[线程池（六）：ThreadLocal相关知识详解]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539416</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539416</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:13:01 +0800</pubDate><description><![CDATA[ThreadLocal是Java中的一个类，它提供了线程本地变量的功能。简单来说，每个使用ThreadLocal的线程都拥有自己独立的变量副本，各个线程之间的变量副本相互隔离，互不干扰。这就解决了多线程环境下变量共享的冲突问题。在多线程编程中，当多个线程同时访问一个共享变量时，可能会出现数据不一致等并发问题。而ThreadLocal可以让每个线程都有自己专属的变量，就好像每个线程都“私藏”了一份变量，各自使用各自的，从根本上避免了线程间对共享变量的竞争。]]></description><category></category></item><item><title><![CDATA[线程池（五）：线程池使用场景问题]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539397</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539397</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:11:17 +0800</pubDate><description><![CDATA[可以使用一个计数器来记录当前正在访问方法的线程数量，当达到限制数量时，新的线程通过条件变量等待，当有线程离开方法时，通知等待的线程。例如，设置核心线程数和最大线程数为相同的值，就可以限制同时执行任务（访问方法）的线程数量。以上详细介绍了线程池使用场景中涉及的CountDownLatch、Future相关内容，以及控制方法并发访问线程数量的多种方式，并通过丰富的代码示例进行了说明。方法的线程会被阻塞，直到计数器的值变为0，此时所有等待的线程会被释放继续执行。方法），使用完后释放许可证（调用。]]></description><category></category></item><item><title><![CDATA[线程池（五）：线程池使用场景问题]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539378</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539378</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:10:26 +0800</pubDate><description><![CDATA[可以使用一个计数器来记录当前正在访问方法的线程数量，当达到限制数量时，新的线程通过条件变量等待，当有线程离开方法时，通知等待的线程。例如，设置核心线程数和最大线程数为相同的值，就可以限制同时执行任务（访问方法）的线程数量。以上详细介绍了线程池使用场景中涉及的CountDownLatch、Future相关内容，以及控制方法并发访问线程数量的多种方式，并通过丰富的代码示例进行了说明。方法的线程会被阻塞，直到计数器的值变为0，此时所有等待的线程会被释放继续执行。方法），使用完后释放许可证（调用。]]></description><category></category></item><item><title><![CDATA[线程池（四）：并发编程常见问题解析]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539362</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539362</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:09:35 +0800</pubDate><description><![CDATA[同时，也可以实现一些简单的监控机制，定期检查线程的状态和资源占用情况，当发现异常的资源等待或循环等待情况时，及时报警提示可能存在死锁风险。如果发生死锁，它会自动检测并在界面上显示出死锁的相关信息，包括死锁的线程、线程等待的资源等，方便开发者定位和分析问题。存在一个进程或线程资源的循环链，链中的每个进程或线程都在等待下一个进程或线程所占用的资源。比如线程A等待线程B占用的资源，线程B又等待线程C占用的资源，而线程C等待线程A占用的资源，形成一个循环等待的局面。资源不能被共享，只能由一个进程或线程占用。]]></description><category></category></item><item><title><![CDATA[线程池（三）：深入理解CAS、volatile与AQS]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539315</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539315</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:07:45 +0800</pubDate><description><![CDATA[概述：CAS是一种无锁的原子操作机制，它是实现并发控制的重要手段。在多线程环境下，传统的加锁方式（如使用关键字）会带来线程阻塞、上下文切换等开销，而CAS提供了一种更轻量级的并发处理方式。它的核心思想是在不使用锁的情况下，实现对共享变量的原子更新。基本工作流程：CAS操作涉及三个操作数，分别是内存位置（V）、预期原值（A）和新值（B）。当执行CAS操作时，首先会读取内存位置V中的值，将其与预期原值A进行比较。如果内存位置V中的值与预期原值A相等，就将内存位置V中的值更新为新值B；]]></description><category></category></item><item><title><![CDATA[线程池（二）：深入剖析synchronized关键字的底层原理]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539265</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147539265</guid><author>Chenchen0905_</author><pubDate>Sat, 26 Apr 2025 17:03:59 +0800</pubDate><description><![CDATA[同步代码块时，会从主内存中读取共享变量的值到工作内存中。当线程执行完同步代码块释放锁时，会将工作内存中修改后的共享变量的值写回到主内存中。这样可以保证在同一时刻，只有一个线程能够对共享变量进行修改，并且其他线程能够看到最新的修改结果，从而保证了多线程环境下共享变量的可见性和一致性。重量级锁是通过操作系统的互斥量（Mutex）来实现的，线程获取和释放锁都需要进行用户态和内核态的切换，这种切换开销比较大。偏向锁是在JDK 6中引入的，它的目的是为了在只有一个线程访问同步代码块的情况下，进一步减少获取锁的开销。]]></description><category></category></item><item><title><![CDATA[Windows下Nacos的启动和关闭]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147513297</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147513297</guid><author>Chenchen0905_</author><pubDate>Fri, 25 Apr 2025 15:01:23 +0800</pubDate><description><![CDATA[Nacos的启动命令，首先到Nacos安装位置的bin目录中，]]></description><category></category></item><item><title><![CDATA[线程池（一）：线程基础知识全面解析]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100542</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100542</guid><author>Chenchen0905_</author><pubDate>Wed, 09 Apr 2025 19:16:05 +0800</pubDate><description><![CDATA[进程：进程是程序在操作系统中的一次执行过程，是系统进行资源分配和调度的基本单位。每个进程都有独立的内存空间、系统资源（如文件描述符、进程间通信资源等）。例如，当我们打开一个浏览器应用，操作系统会为该浏览器创建一个进程，浏览器中的各个标签页、插件等可能在这个进程内或通过其他进程协作运行。线程：线程是进程中的一个执行单元，是程序执行的最小单位。线程共享所属进程的资源，如内存空间、文件描述符等。一个进程可以包含多个线程，这些线程并发执行，提高程序的执行效率。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（八）]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100272</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100272</guid><author>Chenchen0905_</author><pubDate>Wed, 09 Apr 2025 18:58:06 +0800</pubDate><description><![CDATA[替换为上一步记录的Java进程ID），查看该进程内各线程的CPU占用情况。找到占用CPU高的线程，记录其线程ID（TID）。文件，搜索十六进制的线程ID（注意字母大写），找到对应的线程堆栈信息。列数值长期较高（如超过80%甚至接近100%），且确认不是系统其他进程导致，再进一步定位Java进程。通过以上步骤，可逐步定位Java应用中CPU过高的根源，进而针对性优化代码或调整配置，解决性能问题。（以CPU使用率排序），找到占用CPU高的Java进程（可通过。替换为记录的线程ID），得到十六进制的线程ID。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（七）：JVM垃圾回收器全面解析与G1深度探秘及四种引用详解]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100244</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100244</guid><author>Chenchen0905_</author><pubDate>Wed, 09 Apr 2025 18:57:05 +0800</pubDate><description><![CDATA[G1（Garbage-First）回收器是一种面向服务器的垃圾回收器，旨在满足高吞吐量和低停顿时间的需求。与传统回收器不同，G1将堆内存划分为大量大小相等的Region（区域），每个Region可以动态地扮演新生代或老年代的角色。G1通过维护一个优先列表，每次根据允许的停顿时间优先回收垃圾最多的Region，这也是其名称“Garbage-First”的由来。这种设计使得G1能更灵活地控制垃圾回收的停顿时间，同时提高内存的利用率和回收效率。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（六）：深入理解Java垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100211</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147100211</guid><author>Chenchen0905_</author><pubDate>Wed, 09 Apr 2025 18:55:01 +0800</pubDate><description><![CDATA[GC（Garbage Collection）即垃圾回收，是Java虚拟机（JVM）提供的一种自动内存管理机制。在Java程序运行过程中，会不断创建对象，这些对象会占用堆内存空间。当这些对象不再被程序使用时，GC负责自动识别并回收这些不再使用的对象所占用的内存空间 ，让这部分内存可以被后续新创建的对象重新利用。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（五）：深入理解Java类加载器与类加载机制]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016904</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016904</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 22:30:01 +0800</pubDate><description><![CDATA[类加载器（ClassLoader）是Java虚拟机中负责加载类的组件。它就像是一位勤劳的搬运工，依据类的全限定名（例如），在文件系统或其他资源存储位置查找对应的字节码文件（.class文件），并将其搬运到JVM的运行时环境中。一旦字节码文件被加载进来，类加载器还会对其进行一系列的处理，包括验证字节码的合法性、为类的静态变量分配内存并初始化、将符号引用转换为直接引用等，最终在JVM的方法区中创建对应的对象来表示这个类。这个Class。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（四）：彻底搞懂堆栈与直接内存]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016734</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016734</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 22:14:49 +0800</pubDate><description><![CDATA[老年代中的对象相对较为稳定，但当老年代内存被占满时，Full GC就会被触发，垃圾回收器会对老年代以及新生代进行全面的垃圾回收，标记并回收不再使用的对象，释放内存空间。以NIO中的文件读写操作为例，使用直接内存可以将文件数据直接映射到直接内存中，然后Java程序可以直接对这块内存进行操作，而不需要先将数据从文件读取到Java堆内存，再进行处理。栈的内存分配是自动的，随着方法的调用和结束，栈帧自动入栈和出栈，局部变量在栈帧的局部变量表中直接分配内存。每个方法在被调用执行时，都会在栈中创建一个对应的栈帧。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（三）：JVM运行时数据区与方法区详解]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016662</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016662</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 22:09:19 +0800</pubDate><description><![CDATA[JVM运行时数据区是JVM在执行Java程序时管理内存的核心区域，它被划分为多个不同的部分，每个部分都有其特定的用途和生命周期。堆（Heap）：是JVM中最大的一块内存区域，被所有线程共享。几乎所有的对象实例和数组都在堆上分配内存。堆可以进一步细分为新生代和老年代，新生代又包含伊甸园区（Eden Space）、幸存0区（Survivor 0 Space）和幸存1区（Survivor 1 Space）。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（二）：深入剖析Java与元空间（MetaSpace）]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016638</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016638</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 22:06:59 +0800</pubDate><description><![CDATA[Java作为一门功能强大、应用广泛的编程语言，凭借其众多优秀的特性，在软件开发的各个领域都发挥着重要作用。从企业级应用到安卓开发，从大数据处理到分布式系统构建，Java都有着深厚的应用基础和丰富的生态支持。而元空间作为Java 8及之后版本中JVM内存管理的重要改进，解决了永久代存在的诸多问题，提高了Java应用的性能和内存管理效率。深入了解Java的全貌以及元空间的原理和应用，对于Java开发者来说是不断提升技术水平、应对复杂开发场景的关键。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机篇（一）深入理解JVM：组成部分、运行流程及程序计数器详解]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016463</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016463</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 21:56:11 +0800</pubDate><description><![CDATA[程序计数器是JVM运行时数据区中的一个较小的内存区域，它是线程私有的。其主要作用是记录当前线程所执行的字节码指令的地址（行号）。在Java程序执行过程中，字节码指令是按照顺序依次执行的，程序计数器就像是一个指针，指向当前正在执行的字节码指令的位置。当一条指令执行完毕后，程序计数器会指向下一条要执行的指令。在多线程环境下，程序计数器的作用尤为重要。由于多个线程是并发执行的，CPU会在不同线程之间进行切换。]]></description><category></category></item><item><title><![CDATA[MySQL篇（六）MySQL 分库分表：应对数据增长挑战的有效策略]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016135</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016135</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 21:33:33 +0800</pubDate><description><![CDATA[分库分表是应对 MySQL 数据库数据增长挑战的有效策略。通过垂直分库、垂直分表、水平分库和水平分表等方式，可以将数据分散到多个数据库和表中，提高系统的性能和存储能力。在实现分库分表时，需要选择合适的中间件，配置合理的路由规则，并处理好跨库跨表查询、数据一致性和数据库管理等问题。只有这样，才能确保分库分表方案的顺利实施，为系统的稳定运行和业务的持续发展提供有力保障。希望本文能够帮助你更好地理解 MySQL 分库分表技术，并在实际项目中应用该技术解决数据增长带来的问题。]]></description><category></category></item><item><title><![CDATA[MySQL篇（五）MySQL主从同步原理深度剖析]]></title><link>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016115</link><guid>https://blog.youkuaiyun.com/Chenchen0905_/article/details/147016115</guid><author>Chenchen0905_</author><pubDate>Sat, 05 Apr 2025 21:32:52 +0800</pubDate><description><![CDATA[MySQL主从同步原理是一个复杂而又精妙的机制，它通过主库记录操作、从库获取并重放操作的流程，借助二进制日志、中继日志以及I/O线程、SQL线程等组件的协同工作，实现了主从库之间的数据同步。了解不同的复制模式以及常见问题的解决思路，对于构建稳定、高效的MySQL主从架构至关重要。随着数据库技术的不断发展，MySQL主从同步也在不断演进和优化，数据库管理员需要持续关注和学习，以更好地应用这一技术来满足业务对数据存储和处理的需求。希望通过本文的介绍，读者能够对MySQL主从同步原理有一个全面而深入的理解。]]></description><category></category></item></channel></rss>