<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_41999521的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_41999521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_41999521]]></copyright><item><title><![CDATA[【Mybatis】由浅入深分析源码]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132687192</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132687192</guid><author>qq_41999521</author><pubDate>Tue, 05 Sep 2023 10:55:03 +0800</pubDate><description><![CDATA[在我们对Mybatis进行按部拆解后，对源码的设计和采用的一些设计模式有了一定程度的掌握。这些思路可以很好的辅佐我们日常进行需求开发。其中装饰器模式、代理模式、工厂模式尤为重要。]]></description><category></category></item><item><title><![CDATA[【并发编程】ReadwriterLock 读写锁]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132454388</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132454388</guid><author>qq_41999521</author><pubDate>Wed, 23 Aug 2023 16:03:55 +0800</pubDate><description><![CDATA[在一些需要对一个资源进行频繁的读写操作且读多写少的情况，那么通常使用的是读写锁。]]></description><category></category></item><item><title><![CDATA[【并发编程】ReetrantLock]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132422014</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132422014</guid><author>qq_41999521</author><pubDate>Tue, 22 Aug 2023 10:12:37 +0800</pubDate><description><![CDATA[AQS是整个并发锁机制的核心，大致的设计结构图如下：这个是一个简易版本设计图，实际上原理的设计图会更加细致与巧妙。具体的分析文章再出一篇。我们先初步了解一下这个AQS是怎么运行以及加锁的处理。当state!=0时， 当前线程被一个Node对象接收，如果存在头部节点下将当前线程添加到队列尾部，其中 prev指向上一个节点。没有头部节点，该线程就是头部节点。当state==0时，当前线程进行CAS操作，尝试将state=1。如果成功当前线程被当做持有锁线程。]]></description><category></category></item><item><title><![CDATA[【并发编程】手写一个简易Lock锁]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132361896</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132361896</guid><author>qq_41999521</author><pubDate>Fri, 18 Aug 2023 15:13:42 +0800</pubDate><description><![CDATA[之前的文章说过，synchronized的关键字存在一些缺陷，那么有没有办法可以解决呢？
我们从缺陷下手：无法控制阻塞时长、阻塞不可中断。我们先手写一个lock锁，然后再去看ReentrantLock的实现。]]></description><category></category></item><item><title><![CDATA[【多线程】线程通信、线程协作]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132341849</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132341849</guid><author>qq_41999521</author><pubDate>Thu, 17 Aug 2023 15:31:03 +0800</pubDate><description><![CDATA[线程通信，个人理解是指在java进程中的线程与线程之间的通信，通常需要通信的线程都会维护一个信号标记，用于告知等待消息、发送消息的线程。线程协作，个人理解是指一个任务是由线程与线程的配合而完成任务。]]></description><category></category></item><item><title><![CDATA[【多线程】死锁的发生与解决]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132313303</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132313303</guid><author>qq_41999521</author><pubDate>Wed, 16 Aug 2023 10:08:18 +0800</pubDate><description><![CDATA[死锁是在多线程处理任务中，比较有挑战性的问题。通常死锁的发生会随在服务不响应请求等其他情况。]]></description><category></category></item><item><title><![CDATA[【多线程】线程安全与数据同步]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132292442</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132292442</guid><author>qq_41999521</author><pubDate>Tue, 15 Aug 2023 10:25:05 +0800</pubDate><description><![CDATA[个人理解线程安全是对在多线程访问同一个资源下该资源的最终结果一定是开发者想要的，不会出现错误或者遗漏的情况。所以在开发中多线程可能会存在的问题。]]></description><category></category></item><item><title><![CDATA[垃圾回收知识扩展]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132270186</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132270186</guid><author>qq_41999521</author><pubDate>Mon, 14 Aug 2023 11:03:26 +0800</pubDate><description><![CDATA[默认情况下，即使System.gc()生效，它会使用传统Full GC方式回收整个堆，而会忽略参数中的UserG1GC和UseConcMarkSweepGC。当手动调用System.gc()，G1或者CMS并不会执行并发操作，只有使用-XX:+ExpliclitGCInvokesConcurrent 才可以改变这种默认行为。如果需要禁用System.gc() 可以使用：-XX:+DisableExplicintGC；]]></description><category></category></item><item><title><![CDATA[JVM 垃圾回收(Garbage Collection)]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132229110</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132229110</guid><author>qq_41999521</author><pubDate>Fri, 11 Aug 2023 13:59:42 +0800</pubDate><description><![CDATA[在日常生活中，我们通常把垃圾丢到垃圾桶里然后倒掉。在JVM中垃圾的是指内存中不在被使用到的对象，而回收是指把垃圾“倒掉”。如果垃圾长时间不被回收，就会导致垃圾对象一直占用内存空间直至程序终止。当内存中存在大量无法被使用的垃圾对象从而有可能的导致内存溢出。如何判断什么时候对象属于垃圾？]]></description><category></category></item><item><title><![CDATA[CPU核心数，线程数，时间片轮转机制解读]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132228473</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132228473</guid><author>qq_41999521</author><pubDate>Fri, 11 Aug 2023 12:24:48 +0800</pubDate><description><![CDATA[Java的调度机制通过线程调度器实现，采用抢占式调度和时间片轮转的策略，以及支持线程优先级和同步机制，来协调和管理线程的执行顺序，从而实现多线程程序的并发执行。]]></description><category></category></item><item><title><![CDATA[类加载器：类的加载过程]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132212293</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132212293</guid><author>qq_41999521</author><pubDate>Thu, 10 Aug 2023 16:25:27 +0800</pubDate><description><![CDATA[类的加载过程大致分为三种：加载阶段、连接阶段、初始化阶段。]]></description><category></category></item><item><title><![CDATA[深入理解Volatile]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/132163038</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/132163038</guid><author>qq_41999521</author><pubDate>Tue, 08 Aug 2023 11:26:13 +0800</pubDate><description><![CDATA[Volatile关键字在Cpu的层面上以及有部分解释，可见性的原因是因为在多个线程内存储了共同一个被Volatile修饰的变量时，当有线程对它进行操作，其他线程的工作内存中该变量置为失效，必须从主内存中获取数据，从而保证可见性。]]></description><category></category></item><item><title><![CDATA[Java volatile 关键字的作用]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/120989656</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/120989656</guid><author>qq_41999521</author><pubDate>Wed, 27 Oct 2021 11:49:15 +0800</pubDate><description><![CDATA[理论基础

机器硬件Cpu

在早期的计算机的Cpu执行原理是是Cpu的寄存器直接访问主内存（RAM），在寄存器中从而进行对数据的更新和读取，再写回主内存。但随着计算机Cpu 的计算技术逐渐成熟，cpu的执行速度与访问主内存的速度被逐渐拉开，最极端情况下可能会达到上万倍。

Cpu Cache模型的提出

基于cpu的计算速度和访问主内存的速度两者之间的差距问题，原有通过FSB直连主内存的方式已不在适用。

于是便衍生出了在Cpu寄存器访问主内存的过程中添加一层缓存层（Cache）。

将缓存层又划分为多个]]></description><category></category></item><item><title><![CDATA[谈谈为什么需要重构与封装]]></title><link>https://blog.youkuaiyun.com/qq_41999521/article/details/119594985</link><guid>https://blog.youkuaiyun.com/qq_41999521/article/details/119594985</guid><author>qq_41999521</author><pubDate>Wed, 11 Aug 2021 09:41:04 +0800</pubDate><description><![CDATA[### 为什么需要重构？
通常重构的出发点是基于代码冗长或者代码可读性低，频繁出现bug或者bug排除极难分析 &lt;/p&gt;
重构的前提是不能改变原有业务逻辑，一般解决方式采用可读性高，逻辑清楚和
可扩展的代码来解决. &lt;b&gt;脱离原有业务逻辑与功能的重构叫做新增&lt;/b&gt;

### 重构的工作该在什么时间去做？
当你的业务逻辑代码开发完毕且测试无bug时，可以停下来回头看一看你可能因为赶需求而匆匆忙忙编写的代码。
#### 当你从这个版本刚刚抽出身又投入下个版本时...]]></description><category></category></item></channel></rss>