<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[windyaoyoung的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/windyaoyoung</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; windyaoyoung]]></copyright><item><title><![CDATA[ThreadLocal 原理]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/127738027</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/127738027</guid><author>windyaoyoung</author><pubDate>Mon, 07 Nov 2022 19:58:05 +0800</pubDate><description><![CDATA[总述
ThreadLocal 在面试中经常提到，关于ThreadLocal使用不当造成OOM以及在特殊场景下，通过ThreadLocal可以轻松实现一些看起来复杂的功能，都说明值得花时间研究其原理。
ThreadLocal 不是 Thread，是一个线程内部的数据存储类，通过它可以在指定的线程中存储数据，对数据存储后，只有在线程中才可以获取到存储的数据，对于其他线程来说是无法获取到数据。可能...]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap（1.7） 相关整理]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/127735989</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/127735989</guid><author>windyaoyoung</author><pubDate>Mon, 07 Nov 2022 17:48:24 +0800</pubDate><description><![CDATA[1. ConcurrentHashMap

ConcurrentHashMap 是线程安全且高效的 HashMap。
多线程环境下，使用 HashMap 进行 put 操作会引起死循环，如下例，导致 CPU 利用率接近 100%，所以在并发情况下不能使用 HashMap。


public static void main(String[] arg) throws InterruptedEx...]]></description><category></category></item><item><title><![CDATA[Maven]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/117011179</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/117011179</guid><author>windyaoyoung</author><pubDate>Tue, 18 May 2021 22:22:00 +0800</pubDate><description><![CDATA[Maven注意事项
1 修改本地仓库位置
2 修改默认的仓库为阿里云仓库
]]></description><category></category></item><item><title><![CDATA[数据结构与算法经典问题解析-Java语言描述]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657406</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657406</guid><author>windyaoyoung</author><pubDate>Tue, 08 Sep 2020 20:14:00 +0800</pubDate><description><![CDATA[第一章 绪论
两个主定理：


其时间复杂度为O(nlogn)
1 问题21与问题22对比可以发现：
 问题规模减小和递归求解主定理中f(n)必须要是正的方可，否则不能直接套定理，只能用数学带入法求解。
2 问题34
对T(n)=2T(n/2)+cn 时间复杂度的求解，参考算法导论一书

根据上面求解思路可得出：T(n)=T(n-1)+T(n-2)+c的时间复杂度为O(2^n)
利...]]></description><category></category></item><item><title><![CDATA[SpringBoot]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657403</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657403</guid><author>windyaoyoung</author><pubDate>Thu, 16 Apr 2020 07:48:00 +0800</pubDate><description><![CDATA[1 将SpringBoot打成war包
(1)添加Tomcat依赖，去除Tomcat

&lt;!-- 设置tomcat在打包时去除--&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-starter-t...]]></description><category></category></item><item><title><![CDATA[代理模式-结构型]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657402</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657402</guid><author>windyaoyoung</author><pubDate>Wed, 01 Apr 2020 15:34:00 +0800</pubDate><description><![CDATA[1 模式动机
在某些情况下，一个客户不想或者不能直接引用一个对象，此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用，并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。
通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对象作为真实对象的一个替身，这种实现机制即为代理模式...]]></description><category></category></item><item><title><![CDATA[框架面试]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657404</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657404</guid><author>windyaoyoung</author><pubDate>Wed, 01 Apr 2020 12:49:00 +0800</pubDate><description><![CDATA[Spring
Spring DI(IOC) 是什么？如何实现？
Spring AOP是什么？使用场景？底层如何实现？
项目里用到了AOP？为什么要使用aop，直接抽取方法封装起来不行吗？
待定
spring bean的生命周期，注入方式
参考：https://www.cnblogs.com/youngao/p/12576719.html
springmvc执行流程
Spring的事...]]></description><category></category></item><item><title><![CDATA[Hash算法总结]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657401</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657401</guid><author>windyaoyoung</author><pubDate>Mon, 30 Mar 2020 16:55:00 +0800</pubDate><description><![CDATA[目录
1 Hash函数
2 Hash冲突
3 一致性hash
hash表

1 hash函数
地址index=H(key)即根据key计算出应该存储地址的位置，而哈希表是基于哈希函数建立的一种查找表。
1.1 hash函数的性质
(1)输入域是无穷的，但是输出域是有限的
(2)不是随机产生的输出，相同的输入一定对应相同的输出
(3)不同的输入可能会导致相同的输出(hash碰撞)
(4)输...]]></description><category></category></item><item><title><![CDATA[集合与多线程面试]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657399</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657399</guid><author>windyaoyoung</author><pubDate>Mon, 30 Mar 2020 15:27:00 +0800</pubDate><description><![CDATA[集合
Java中集合和数组的区别？
一、集合和数组的区别区别1：数组既可以存储基本数据类型，又可以存储引用数据类型，基本数据类型存储的是值，引用数据类型存储的是地址值。
集合只能存储引用数据类型(对象)。集合也能存储基本数据类型(有点矛盾，看后句)，但是在存储的时候会自动装箱变成对象。
区别2：数组长度是固定的，不能自动增长。
集合的长度是可变的，可以根据元素的增长而增长。
二、集合和...]]></description><category></category></item><item><title><![CDATA[算法题目]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657400</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657400</guid><author>windyaoyoung</author><pubDate>Mon, 30 Mar 2020 09:40:00 +0800</pubDate><description><![CDATA[算法题
LeetCode83. 删除排序链表中的重复元素
LeetCode50. Pow(x, n)
LeetCode103. 二叉树的锯齿形层次遍历
LeetCode138. 复制带随机指针的链表
LeetCode232. 用栈实现队列
LeetCode104. 二叉树的最大深度
LeetCode111. 二叉树的最小深度
LeetCode344. 反转字符串
Leet...]]></description><category></category></item><item><title><![CDATA[可能是全网最好的MySQL重要知识点]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657398</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657398</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 16:27:00 +0800</pubDate><description><![CDATA[什么是MySQL?
MySQL 是一种关系型数据库，在Java企业级开发中非常常用，因为 MySQL 是开源免费的，并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL，因此它的稳定性是有保障的。MySQL是开放源代码的，因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是3306。
事务...]]></description><category></category></item><item><title><![CDATA[Spring MVC 原理探秘 - 容器的创建过程]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657397</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657397</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:18:00 +0800</pubDate><description><![CDATA[1.简介
在上一篇文章中，我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的。Spring MVC 可对外提供服务时，说明其已经处于了就绪状态。再次之前，Spring MVC 需要进行一系列的初始化操作。正所谓兵马未动，粮草先行。这些操作包括创建容器，加载 DispatcherServlet 中用到的各种组件等。本篇文章就来和大家讨论一下这些初始化操作中的容器创建操作，容...]]></description><category></category></item><item><title><![CDATA[Spring MVC 原理探秘 - 一个请求的旅行过程]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657396</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657396</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:16:00 +0800</pubDate><description><![CDATA[1.简介
在前面的文章中，我较为详细的分析了 Spring IOC 和 AOP 部分的源码，并写成了文章。为了让我的 Spring 源码分析系列文章更为丰富一些，所以从本篇文章开始，我将来向大家介绍一下 Spring MVC 的一些原理。在本篇文章中，你将会了解到 Spring MVC 处理请求的过程。同时，你也会了解到 Servlet 相关的知识。以及 Spring MVC 的核心 D...]]></description><category></category></item><item><title><![CDATA[Spring AOP 源码分析 - 拦截器链的执行过程]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657393</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657393</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:14:00 +0800</pubDate><description><![CDATA[1.简介
本篇文章是 AOP 源码分析系列文章的最后一篇文章，在前面的两篇文章中，我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器，以及如何创建代理对象的过程。现在我们的得到了 bean 的代理对象，且通知也以合适的方式插在了目标方法的前后。接下来要做的事情，就是执行通知逻辑了。通知可能在目标方法前执行，也可能在目标方法后执行。具体的执行时机，取决于用户的配置...]]></description><category></category></item><item><title><![CDATA[Spring AOP 源码分析 - 创建代理对象]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657392</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657392</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:12:00 +0800</pubDate><description><![CDATA[1.简介
在上一篇文章中，我分析了 Spring 是如何为目标 bean 筛选合适的通知器的。现在通知器选好了，接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 bean 的某些方法前后。与筛选合适的通知器相比，创建代理对象的过程则要简单不少，本文所分析的源码不过100行，相对比较简单。在接下里的章节中，我将会首先向大家介绍一些背景知识，然后再去分析源...]]></description><category></category></item><item><title><![CDATA[Spring AOP 源码分析 - 筛选合适的通知器]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657390</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657390</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:10:00 +0800</pubDate><description><![CDATA[1.简介
从本篇文章开始，我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇，本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor)。在上一篇AOP 源码分析导读一文中，我简单介绍了 AOP 中的一些术语及其对应的源码，部分术语和源码将会在本篇文章中出现。如果大家不熟悉这些术语和源码，不妨去...]]></description><category></category></item><item><title><![CDATA[Spring AOP 源码分析系列文章导读]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657391</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657391</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 15:09:00 +0800</pubDate><description><![CDATA[1. 简介
前一段时间，我学习了 Spring IOC 容器方面的源码，并写了数篇文章对此进行讲解。在写完 Spring IOC 容器源码分析系列文章中的最后一篇后，没敢懈怠，趁热打铁，花了3天时间阅读了 AOP 方面的源码。开始以为 AOP 部分的源码也会比较复杂，所以原计划投入一周的时间用于阅读源码。但在我大致理清 AOP 源码逻辑后，发现没想的那么复杂，所以目前进度算是超前了。从今...]]></description><category></category></item><item><title><![CDATA[Spring IOC 容器源码分析 - 余下的初始化工作]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657389</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657389</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 11:28:00 +0800</pubDate><description><![CDATA[1. 简介


本篇文章是“Spring IOC 容器源码分析”系列文章的最后一篇文章，本篇文章所分析的对象是 initializeBean 方法，该方法用于对已完成属性填充的 bean 做最后的初始化工作。相较于之前几篇文章所分析的源码，initializeBean 的源码相对比较简单，大家可以愉快的阅读。好了，其他的不多说了，我们直入主题吧。
2. 源码分析
本章我们来分析一下 in...]]></description><category></category></item><item><title><![CDATA[Spring IOC 容器源码分析 - 填充属性到 bean 原始对象]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657388</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657388</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 11:13:00 +0800</pubDate><description><![CDATA[1. 简介
本篇文章，我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的。我在前面几篇文章中介绍过 Spring 创建 bean 的流程，即 Spring 先通过反射创建一个原始的 bean 对象，然后再向这个原始的 bean 对象中填充属性。对于填充属性这个过程，简单点来说，JavaBean 的每个属性通常都有 getter/setter 方法，我们...]]></description><category></category></item><item><title><![CDATA[Spring IOC 容器源码分析 - 循环依赖的解决办法]]></title><link>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657386</link><guid>https://blog.youkuaiyun.com/windyaoyoung/article/details/108657386</guid><author>windyaoyoung</author><pubDate>Fri, 27 Mar 2020 11:12:00 +0800</pubDate><description><![CDATA[1. 简介
本文，我们来看一下 Spring 是如何解决循环依赖问题的。在本篇文章中，我会首先向大家介绍一下什么是循环依赖。然后，进入源码分析阶段。为了更好的说明 Spring 解决循环依赖的办法，我将会从获取 bean 的方法getBean(String)开始，把整个调用过程梳理一遍。梳理完后，再来详细分析源码。通过这几步的讲解，希望让大家能够弄懂什么是循环依赖，以及如何解循环依赖。
...]]></description><category></category></item></channel></rss>