<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[learneryan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/learneryan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; learneryan]]></copyright><item><title><![CDATA[ThreadLocal]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/142062885</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/142062885</guid><author>learneryan</author><pubDate>Mon, 09 Sep 2024 16:56:44 +0800</pubDate><description><![CDATA[真正存数据的事ThreadLocalMap，而且他是当前线程自己的，看这个getMap（t），他就是Thread这个类的一个成员变量，在第一次set的时候进行初始化。总结：ThreadLocal就是给每一个线程创建一个ThreadLocalMap,用于保证各自线程get的值都是自己set的。ThreadLocalMap是ThreadLocal的衣蛾内部类，可以理解为是一个hashmap。继续看createMap（t，value）上源码 ThreadLocal.java。每个线程都只是get自己的值。]]></description><category></category></item><item><title><![CDATA[mysql的mvcc机制与BufferPool缓存机制]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141951962</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141951962</guid><author>learneryan</author><pubDate>Fri, 06 Sep 2024 11:15:16 +0800</pubDate><description><![CDATA[在可重复读级别，在开启事务后执行第一次select时会生成一个read view一致性视图，这个视图在事务结束前不会改变（如果是读已提交级别则是每执行一次select生成一个read view），这个视图由所有未提交的事务id数组（数组里最小的id为min_id）和已创建的最大的事务id（max_id）组成，事务里的任何查询都需要从对应的版本链里的最新数据开始逐条和read view做对比从而得到最终的快照数据。innodb_log_file_size：设置单个redo log文件大小，默认值为48M。]]></description><category></category></item><item><title><![CDATA[垃圾收集器]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141815093</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141815093</guid><author>learneryan</author><pubDate>Mon, 02 Sep 2024 17:34:12 +0800</pubDate><description><![CDATA[因为直到现在为止还没有最好的垃圾收集器出现，更加没有万能的垃圾收集器，我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作，更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程（ "Stop The World" ），直到它收集结束。虚拟机的设计者们当然知道Stop The World带来的不良用户体验，所以在后续的垃圾收集器设计中停顿时间在不断缩短（仍然还有停顿，寻找最优秀的垃圾收集器的过程仍然在继续）。]]></description><category></category></item><item><title><![CDATA[一条sql的执行过程]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141688018</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141688018</guid><author>learneryan</author><pubDate>Thu, 29 Aug 2024 22:00:56 +0800</pubDate><description><![CDATA[连接完成后，如果你没有后续的动作，这个连接就处于空闲状态，你可以在 show processlist 命令中看到它。开始执行的时候，要先判断一下你对这个表 T 有没有执行查询的权限，如果没有，就会返回没有权限的错误，如下所示 (在工程实现上，如果命中查询缓存，会在查询缓存返回结果的时候，做权限验证。如果打开查询缓存的话，每执行一个sql就会将这个查询结果缓存，下次执行一模一样的sql的话直接从缓存拿，并且这个查询结果集还不能变，一有数据变化缓存就失效，很鸡肋的机制，后面版本直接不用了。]]></description><category></category></item><item><title><![CDATA[mysql的索引结构]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141650374</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141650374</guid><author>learneryan</author><pubDate>Thu, 29 Aug 2024 10:51:03 +0800</pubDate><description><![CDATA[覆盖索引定义：mysql执行计划explain结果里的key有使用索引，如果select后面查询的字段都可以从这个索引的树中获取，这种情况一般可以说是用到了覆盖索引，extra里一般都有using index；index：扫描全索引就能拿到结果，一般是扫描某个二级索引，这种扫描不会从索引树根节点开始快速查找，而是直接对二级索引的叶子节点遍历和扫描，速度还是比较慢的，这种查询一般为使用覆盖索引，二级索引一般比较小，所以这种通常比ALL快一些。出现这种情况一般是要进行优化的，首先是想到用索引来优化。]]></description><category></category></item><item><title><![CDATA[JVM内存模型与垃圾回收]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141634684</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141634684</guid><author>learneryan</author><pubDate>Wed, 28 Aug 2024 11:38:32 +0800</pubDate><description><![CDATA[当前放对象的Survivor区域里(其中一块区域，放对象的那块s区)，一批对象的总大小大于这块Survivor区域内存大小的50%(-XX:TargetSurvivorRatio可以指定)，那么此时大于等于这批对象年龄最大值的对象，就可以直接进入老年代了，例如Survivor区域里现在有一批对象，年龄1+年龄2+年龄n的多个年龄对象总和超过了Survivor区域的50%，此时就会把年龄n(含)以上的对象都放入老年代。软引用可用来实现内存敏感的高速缓存。软引用在实际中有重要的应用，例如浏览器的后退按钮。]]></description><category></category></item><item><title><![CDATA[java双亲委派机制]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/141526471</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/141526471</guid><author>learneryan</author><pubDate>Sun, 25 Aug 2024 15:32:06 +0800</pubDate><description><![CDATA[要打破双亲委派机制就要重写loadclass方法，可以模仿Tomcat的写法，重写findclass的逻辑，自己读取class文件然后传到defindClass方法，这样就完成了自定义类加载器。：将class文件的符号引用替换为直接引用，符号引用指的是我们在类中写的各种关键字，替换为内存地址，也就是静态链接。：将硬盘上的class文件读到内存生成一个Class对象，这一步通常是在使用到这个类时 才进行加载，属于懒加载。应用类加载器（AppClassloader）：用于加载我们自己的应用类。]]></description><category></category></item><item><title><![CDATA[git提交报错解决]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/113882808</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/113882808</guid><author>learneryan</author><pubDate>Sat, 20 Feb 2021 14:34:30 +0800</pubDate><description><![CDATA[今天提交git仓库的时候，遇到了问题，提示Your branch is up-to-date with 'origin/develop'.

1.解决办法是先建一个新的分支，

git branch newBranch

2.看下是否创建成功

git branch

3.切换到新建的分支

git checkout newBranch

4.将修改提交

git add .

git commit -m "25号投产实时控制表"

5.然后切换到本来要提交的分支

git checkout develop]]></description><category></category></item><item><title><![CDATA[spring源码编译]]></title><link>https://blog.youkuaiyun.com/learneryan/article/details/104231529</link><guid>https://blog.youkuaiyun.com/learneryan/article/details/104231529</guid><author>learneryan</author><pubDate>Sun, 09 Feb 2020 10:02:01 +0800</pubDate><description><![CDATA[一 环境准备

安装jdk，版本1.8以上



安装gradle，官网下载合适版本4.2以上，解压配置环境变量

 gradle下载地址：https://services.gradle.org/distributions/





二 github上下载spring源码

源码下载地址：https://github.com/spring-projects/spring-framework...]]></description><category></category></item></channel></rss>