<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_35347200的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_35347200</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_35347200]]></copyright><item><title><![CDATA[一图读懂java IO]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/126510530</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/126510530</guid><author>qq_35347200</author><pubDate>Wed, 24 Aug 2022 18:42:29 +0800</pubDate><description><![CDATA[通过画图的方式来清晰展示java.io包中各个类的关系和功能]]></description><category></category></item><item><title><![CDATA[深入理解NIO底层源码——进阶]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/123089221</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/123089221</guid><author>qq_35347200</author><pubDate>Wed, 23 Feb 2022 14:32:46 +0800</pubDate><description><![CDATA[NIO源码详解]]></description><category></category></item><item><title><![CDATA[深入理解NIO底层源码——基础]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/122944508</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/122944508</guid><author>qq_35347200</author><pubDate>Tue, 15 Feb 2022 14:52:15 +0800</pubDate><description><![CDATA[深入了解NIO源码的基础准备，例如了解IO模型、socket工作机制等]]></description><category></category></item><item><title><![CDATA[记一次Redis被攻击的解决方案]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/122516885</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/122516885</guid><author>qq_35347200</author><pubDate>Sat, 15 Jan 2022 22:08:08 +0800</pubDate><description><![CDATA[记一次Redis被攻击的解决方案
​	近期在开发小程序后台时，发现redis里面的key有时会莫名奇妙地消失，而且是离过期时间很远的key。本人首先是认为服务器内存不足，然后查看了一下服务器内存。
free -m


发现剩余80M，其实还是足够的。然后我就怀疑是不是redis设置了最大内存上限，首先打开redis的客户端，因为我是使用docker部署的redis，所以使用了一下命令
docker exec -it containerID redis-cli

选择数据库

使用下面的命令查看内存配置
in]]></description><category></category></item><item><title><![CDATA[MySQL事务并发控制（再也不怕面试官问MySQL了）]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/122202482</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/122202482</guid><author>qq_35347200</author><pubDate>Tue, 28 Dec 2021 20:59:18 +0800</pubDate><description><![CDATA[大纲事务ACID特性MySQL实现事务事务并发运行带来的问题并发调度可能引发的问题：如何解决事务并发带来的问题锁的分类封锁协议一级封锁协议：二级封锁协议：三级封锁协议：两段锁协议封锁协议带来的问题死锁
事务
事务是一个不可再分的工作单位；事务中的一系列操作要么全部执行，要么全不执行；其中，事务满足ACID特性
ACID特性
原子性（Atomicity）：对数据的修改要么全部执行，要么全不执行
一致性(Consistency)：事务执行前和执行后数据库必须满足一致性（事务执行过程中可以不满足）。例如从账户A中]]></description><category></category></item><item><title><![CDATA[Springboot启动执行特定代码的几种方式]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121678579</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121678579</guid><author>qq_35347200</author><pubDate>Thu, 02 Dec 2021 15:35:10 +0800</pubDate><description><![CDATA[大纲实现InitializingBean接口或使用@PostConstruct注解实现ApplicationListener接口实现CommandLineRunner或ApplicationRunner 接口
实现InitializingBean接口或使用@PostConstruct注解
实现InitializingBean如下
public class AnotherExampleBean implements InitializingBean {

    @Override
    public vo]]></description><category></category></item><item><title><![CDATA[java虚拟机面经总结]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121217207</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121217207</guid><author>qq_35347200</author><pubDate>Mon, 08 Nov 2021 21:51:48 +0800</pubDate><description><![CDATA[大纲虚拟机栈和本地方法栈的区别？垃圾回收算法知道哪些，CMS 说一下，并发标记阶段处理速度慢的原因可能是什么。怎么进行优化?java虚拟机有哪些分区？请简单描述一下类的加载过程？还有CMS采用哪种回收算法？使用CMS怎样解决内存碎片的问题呢？如何判断对象已死？介绍一下引用？发生Young GC的时候需要扫描老年代的对象吗？
虚拟机栈和本地方法栈的区别？
简单的来说，虚拟机栈是为虚拟机执行字节码指令（java方法）服务，而本地方法栈是为了虚拟机执行本地native方法而服务。
垃圾回收算法知道哪些，CMS 说]]></description><category></category></item><item><title><![CDATA[OutOfMemoryError(OOM)和StackOverflowError(SOF)异常总结]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121119353</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121119353</guid><author>qq_35347200</author><pubDate>Wed, 03 Nov 2021 13:57:16 +0800</pubDate><description><![CDATA[大纲Java虚拟机运行时数据区会发生OOM和SOF异常的内存区域堆虚拟机栈本地方法栈方法区本机直接内存
Java虚拟机运行时数据区
OOM和SOF都是内存溢出异常，与java内存区域的关系密不可分，所以要先了解java各个内存区域

会发生OOM和SOF异常的内存区域
首先明确的是，程序计数器是在《java虚拟机规范中》唯一一个没有规定任何OutOfMemoryError情况的内存区域，像其它方法区、虚拟机栈、本地方法栈、堆都有可能会抛出OOM和SOF异常。下面会对各个内存区域进行细说。
堆
​	堆是jav]]></description><category></category></item><item><title><![CDATA[java虚拟机系列：深入理解Java类加载机制]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121099728</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121099728</guid><author>qq_35347200</author><pubDate>Tue, 02 Nov 2021 14:42:04 +0800</pubDate><description><![CDATA[大纲前言类加载机制类加载器双亲委派机制为什么要使用双亲委派机制？分析ClassLoaderloadClass()findClass()defineClass(String name, byte[]  b, int off, int len)resolveClass(Class&lt;?&gt; c)自定义类加载器通过继承URLClassLoader来实现自定义类加载器URLClassLoaderfindClass()Launcher类getExtClassLoader()createExtClassLoad]]></description><category></category></item><item><title><![CDATA[类文件结构(java虚拟机系列：一文明解 .class 文件)]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121049689</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121049689</guid><author>qq_35347200</author><pubDate>Sat, 30 Oct 2021 13:30:43 +0800</pubDate><description><![CDATA[一次编写，到处运行，.class文件功不可没
​	java在刚刚诞生的时候有一个很著名的口号，叫做"write once,run anywhere"（一次编写，到处运行），这句话体现了java语言跨平台的特性，但在先前就没有跨平台的语言了吗？答案是否定的。在c语言里也有一句话叫做"一次编写，到处编译"，也就是说编写了c语言的源文件，然后拿到不同操作系统分别进行编译，再运行，看起来也是跨平台的，但这必须有一个前提，就是c语言源文件中使用的都必须是标准的类库，而因为c语言标准类库中实现的接口很少 ，所以各个系统]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap源码详解(大厂面试)]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/121021074</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/121021074</guid><author>qq_35347200</author><pubDate>Thu, 28 Oct 2021 21:34:26 +0800</pubDate><description><![CDATA[大纲前言为什么要用ConcurrentHashMap?ConcurrentHashMap简介CAS(Compare and Swap)从putVal()方法起阅读源码initTable()——ConcurrentHashMap的初始化sizeCtlcasTabAt()修改tab的元素tabAt() 获取tab数组某个索引上节点内存不可见性putTreeVal() 用于把节点添加进红黑树里lockRoot()unlockRoot()treeifyBin() 把单链转化为红黑树tryPresize()自动扩容r]]></description><category></category></item><item><title><![CDATA[HashMap源码详解(一文掌握所有核心知识)]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/120954813</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/120954813</guid><author>qq_35347200</author><pubDate>Mon, 25 Oct 2021 16:36:57 +0800</pubDate><description><![CDATA[大纲前言HashMap解决了什么问题查询速率不高的问题哈希冲突自动扩容从put()方法开始了解源码resize()实现扩容的关键(e.hash &amp; oldCap) == 0 到底是什么？split()扩容时对红黑树的处理关于红黑树的最少必要知识红黑树插入后保持平衡treeify()建立红黑树(基于双链生成红黑树)untreeify()把双链变单链balanceInsertion()确保插入后的平衡性putTreeVal()往红黑树里插入数据总结为什么HashMap的容量一定是2的幂次为什么负载因子是]]></description><category></category></item><item><title><![CDATA[掌握JAVA反射机制]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/120783412</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/120783412</guid><author>qq_35347200</author><pubDate>Fri, 15 Oct 2021 14:59:42 +0800</pubDate><description><![CDATA[前言
本人近期在研究spring源码和caffeine源码的时候，发现其底层运用了java反射机制，以及在jdk7后新增的java.lang.invoke包下面的类，发现对其掌握程度不足，故专门对其整理总结。
了解java反射机制
java的反射API能够使java程序在运行当中获取类的域（字段）、方法构造器等，并且可以与这些元素交互，例如使用获取到的构造器实例化一个对象，为字段赋值，执行获取到的方法等。这为java语言提供了动态性。Java反射机制被称为框架设计的灵魂。而若想执行上述操作，需要借助Clas]]></description><category></category></item><item><title><![CDATA[分页查询:（pageHelper）]]></title><link>https://blog.youkuaiyun.com/qq_35347200/article/details/114401952</link><guid>https://blog.youkuaiyun.com/qq_35347200/article/details/114401952</guid><author>qq_35347200</author><pubDate>Fri, 05 Mar 2021 16:38:11 +0800</pubDate><description><![CDATA[分页查询:（pageHelper）
首先配置依赖：
&lt;!--分页依赖--&gt;
    &lt;!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt;
      &lt;artifactId&gt;pagehelper&lt;/arti]]></description><category></category></item></channel></rss>