<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[FengDuidui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FengDuidui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FengDuidui]]></copyright><item><title><![CDATA[ConcurrentHashMap-Jdk7-源码解读]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/121164510</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/121164510</guid><author>FengDuidui</author><pubDate>Fri, 05 Nov 2021 18:30:53 +0800</pubDate><description><![CDATA[ConcurrentHashMap-Jdk7-源码解读1. ConcurrentHashMap数据结构2. HashEntry3. Segment4. ConcurrentHashMap5. 总结6. 参考欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你]]></description><category></category></item><item><title><![CDATA[HashMap并发问题]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/120869040</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/120869040</guid><author>FengDuidui</author><pubDate>Wed, 20 Oct 2021 16:26:22 +0800</pubDate><description><![CDATA[HashMap是非线程安全的，在并发情况下可能会在扩容时形成环形链表，导致死循环（该问题在JDK1.8版本已经修复），也可能发生数据丢失的问题

put源码（JDK7U71）
①：在HashMap构造函数中，并未显式指定table值，而是指向了EMPTY_TABLE（空数组），在put方法中进行初始化;
②：key=null时，键值对直接放在table[0]中，若已存在null的key，则替换并返回旧值，若不存在null，则放入链表头部；
③：在1.7中，扩容条件不止是阈值，只有当元素数量&gt;=阈值，.]]></description><category></category></item><item><title><![CDATA[Idea-配置JDK]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117040070</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117040070</guid><author>FengDuidui</author><pubDate>Thu, 14 Oct 2021 14:46:03 +0800</pubDate><description><![CDATA[Idea中有多个配置菜单，每个菜单可配置的内容有所不同：

打开File&gt;Project Structure&gt;SDKs，点击右侧页面的加号选择JDK即可配置JDK（选择JDK的安装路径即可）：

配置完成后，打开Project Structure&gt;Project，在这里可以配置当前项目所使用的JDK：


...]]></description><category></category></item><item><title><![CDATA[ArrayList详解（基于1.8）]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/120760394</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/120760394</guid><author>FengDuidui</author><pubDate>Thu, 14 Oct 2021 11:20:30 +0800</pubDate><description><![CDATA[ArrayList是在Java开发中使用率很高、很常见的集合类，它继承自AbstractList，实现List接口，并实现了 RandomAccess, Cloneable, java.io.Serializable标记接口，底层基于可扩容的数组实现，允许Null存在，同时支持快速访问、序列化、复制。


继承结构
public class ArrayList&lt;E&gt; extends AbstractList&lt;E&gt;
        implements List&lt;E&gt;, .]]></description><category></category></item><item><title><![CDATA[网络编程面试题（2020最新版）-转载]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/118968920</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/118968920</guid><author>FengDuidui</author><pubDate>Wed, 21 Jul 2021 16:06:14 +0800</pubDate><description><![CDATA[网络编程面试题（2020最新版）
            
            
                
                    
                    
                    ThinkWon
                    2020-03-16 17:36:28
                    
                ...]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0004-寻找两个有序数组的中位数]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117064135</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117064135</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:53:13 +0800</pubDate><description><![CDATA[题目信息

给定两个大小为 m 和 n 的有序数组&nbsp;nums1 和&nbsp;nums2。
请你找出这两个有序数组的中位数，并且要求算法的时间复杂度为&nbsp;O(log(m + n))。
你可以假设&nbsp;nums1&nbsp;和&nbsp;nums2&nbsp;不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
来源：力扣（]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0993. 二叉树的堂兄弟节点]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117064082</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117064082</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:51:59 +0800</pubDate><description><![CDATA[993. 二叉树的堂兄弟节点
难度：简单(简单个鬼！！)
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


993. 二叉树的堂兄弟节点
在二叉树中，根节点位于深度 0 处，每个深度为 k 的节点的子节点位于深度 k+1 处。
如果二叉树的两个节点深度相同，但父节点不同，则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root ，以及树中两个不同节点的值 x 和 y 。
只有与值 x 和 y 对应的节点是堂兄弟节点时，才返回 true.]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0012.整数转罗马数字]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117064052</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117064052</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:51:32 +0800</pubDate><description><![CDATA[12.整数转罗马数字
难度：中等
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


12.整数转罗马数字
罗马数字包含以下七种字符： I， V， X， L，C，D 和 M。




字符
数值




I
1


V
5


X
10


L
50


C
100


D
500


M
1000


例如， 罗马数字 2 写做 II ，即为两个并列的 1。12 写做 XII ，即为 X + II 。 27 写做  XXVII, 即为 XX + V .]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0021.合并两个有序链表]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117064016</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117064016</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:50:56 +0800</pubDate><description><![CDATA[21. 合并两个有序链表
难度：简单
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

题目
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例：

输入：l1 = [1,2,4], l2 = [1,3,4]  输出：[1,1,2,3,4,4]
输入：l1 = [], l2 = []  输出：[]
输入：l1 = [], l2 = [0] 输出：[0]

提示：

两个链表的节点数目范围是 [0, 50].]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0006.Z 字形变换]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117063993</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117063993</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:50:22 +0800</pubDate><description><![CDATA[6. Z 字形变换
难度：中等
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

题目
将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时，排列如下：


P

A 

H 

N 


A
P
L 
S
I 
I
G 


Y

I 

R 

 


之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如：“PAHNAPLSII.]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0026. 删除排序数组中的重复项]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117063901</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117063901</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:49:54 +0800</pubDate><description><![CDATA[26. 删除排序数组中的重复项
难度：简单
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

题目
给定一个排序数组，你需要在原地删除重复出现的元素，使得每个元素只出现一次，返回移除后数组的新长度。
不要使用额外的数组空间，你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例：

给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长.]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0020.有效的括号]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117063880</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117063880</guid><author>FengDuidui</author><pubDate>Thu, 20 May 2021 09:48:12 +0800</pubDate><description><![CDATA[20.有效的括号
难度：简单
来源：力扣（LeetCode）
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

题目
给定一个只包括 ‘(’，’)’，’{’，’}’，’[’，’]'的字符串 s，判断字符串是否有效。
有效字符串需满足：
左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
示例：

输入：s = “()” 输出：true
输入：s = “()[]{}” 输出：true
输入：s = “(]” 输出：false
输入：s = “([)]” 输出：false
输.]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0003-无重复字符的最长子串]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117041117</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117041117</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:47:07 +0800</pubDate><description><![CDATA[题目信息

给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”，所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”，所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”，所以其长度为 3。
请注意，你的答案必须是 子串 的长度，“pwke” 是一个子序列，不是子串。
来源]]></description><category></category></item><item><title><![CDATA[重载&重写]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117040305</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117040305</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:28:08 +0800</pubDate><description><![CDATA[重写(@Override)

重写需要借助继承/抽象类/接口实现
方法名、形参列表相同（形参列表类型、顺序相同即可，名称随意）
子类/实现类返回值类型 &lt;= 父类/接口类
子类/实现类抛出异常类型 &lt;= 父类/接口类
子类/实现类访问权限 &gt;= 父类/接口类
类（实例）方法重写后还是类（实例）方法
父类private修饰的方法无法重写，即使方法名、形参列表相同也不是重写，是重新定义

// 所有的类都直接/间接继承了Object类，所以可以再User类中重写toString()方法
pub]]></description><category></category></item><item><title><![CDATA[Java三大特性（封装、继承、多态）]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117040280</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117040280</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:27:21 +0800</pubDate><description><![CDATA[我们都知道Java是面向对象的语言，有三大特征：封装、继承（extends）、多态。这三大特征分别是什么含义？又有什么规则呢？为什么要这样设计？
封装
隐藏对象的属性和实现细节，仅对外公开接口，控制在程序中属性的读和修改的访问级别。
规则

将对象的属性和实现细节隐藏，不允许外界直接访问（用private修饰）
将方法暴露出来，外界通过调用方法来操作、访问成员变量（例如最常用的getter、setter方法）

目的/优点

隐藏实现细节
限制外部对成员变量的不合理访问
有利于保护对象信息的完整性
便于修改]]></description><category></category></item><item><title><![CDATA[Java内存模型(JMM)]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117040214</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117040214</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:25:37 +0800</pubDate><description><![CDATA[JMM定义
Java内存模型(Java Memory Model，简称JMM)，JMM为Java虚拟机规范中定义的虚拟模型，用来屏蔽各种硬件和操作系统的内存访问差异，主要目标是定义程序中各个变量的访问规则，即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样，指包括了实例字段、静态字段和构成数组对象的元素，但是不包括局部变量与方法参数，后者是线程私有的，不会被共享，不存在竞争问题。
Java内存模型中规定：

线程对变量的所有操作（读取、赋值）都必须在工作内]]></description><category></category></item><item><title><![CDATA[Java内存模型-内存屏障]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/95192500</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/95192500</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:24:43 +0800</pubDate><description><![CDATA[内存屏障是什么？

内存屏障，也称内存栅栏，内存栅障，屏障指令等，是一类同步屏障指令，是CPU或编译器在对内存随机访问的操作中的一个同步点，使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。

内存屏障为硬件层的概念，不同的操作系统实现内存屏障的手段不一样，java通过jvm来统一生成内存屏障指令。
内存屏障有什么用？

禁止屏障两侧的指令进行重排序；
强制将缓冲区、高速缓存区的数据...]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-1738. 找出第 K 大的异或坐标值]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/117039377</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/117039377</guid><author>FengDuidui</author><pubDate>Wed, 19 May 2021 18:17:45 +0800</pubDate><description><![CDATA[LeetCode笔记-1738. 找出第 K 大的异或坐标值
                  

]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0002.两数相加]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/97779217</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/97779217</guid><author>FengDuidui</author><pubDate>Tue, 30 Jul 2019 14:13:41 +0800</pubDate><description><![CDATA[题目信息

给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
示例：
输入：(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4)
输出：7 -&gt; 0 ...]]></description><category></category></item><item><title><![CDATA[LeetCode笔记-0001-两数之和]]></title><link>https://blog.youkuaiyun.com/FengDuidui/article/details/97771226</link><guid>https://blog.youkuaiyun.com/FengDuidui/article/details/97771226</guid><author>FengDuidui</author><pubDate>Tue, 30 Jul 2019 12:52:17 +0800</pubDate><description><![CDATA[题目信息

给定一个整数数组 nums&nbsp;和一个目标值 target，请你在该数组中找出和为目标值的那&nbsp;两个&nbsp;整数，并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以...]]></description><category></category></item></channel></rss>