<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Q95470的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Q95470</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Q95470]]></copyright><item><title><![CDATA[Java_day30-35]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/147463581</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/147463581</guid><author>Q95470</author><pubDate>Wed, 23 Apr 2025 21:32:48 +0800</pubDate><description><![CDATA[这四种引用决定了对象的生命周期以及垃圾收集器如何收集垃圾。强引用：最常见的引用类型。如果一个对象具有强引用，那么垃圾收集器绝不会回收它。软引用：软引用用于描述一些还有用但非必需的对象。如果一个对象只有软引用指向它，那么在系统内存不足时，垃圾回收器会尝试回收这些对象。软引用通常用于实现内存敏感的缓存，可以在内存不足时释放缓存中的对象。弱引用：弱引用比软引用的生命周期更短暂。如果一个对象只有弱引用指向它，在进行下一次垃圾回收时，不论系统内存是否充足，这些对象都会被回收。]]></description><category></category></item><item><title><![CDATA[Java_day25-29]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/147460493</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/147460493</guid><author>Q95470</author><pubDate>Wed, 23 Apr 2025 18:18:22 +0800</pubDate><description><![CDATA[(1) 为什么是线程不安全的主要原因是它的操作不是原子的，即在多个线程同时进行读写操作时，可能会导致数据不一致性或抛出异常.**并发修改：**当一个线程进行写操作（插入、删除等）时，另一个线程进行读操作，可能会导致读取到不一致的数据，甚至抛出 ConcurrentModificationException 异常。非原子性操作：HashMap 的一些操作不是原子的，例如，检查是否存在某个键、获取某个键对应的值等，这样在多线程环境中可能发生竞态条件。（2）如何实现线程安全。]]></description><category></category></item><item><title><![CDATA[Java_day20-24]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/147427824</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/147427824</guid><author>Q95470</author><pubDate>Tue, 22 Apr 2025 18:32:54 +0800</pubDate><description><![CDATA[当把一个子类对象直接赋给父类引用变量，而运行时调用该引用变量的方法时，其方法行为总是表现出子类方法的行为特征，而不是父类方法的行为特征，这就可能出现：相同类型的变量、调用同一个方法时呈现出多种不同的行为特征，这就是多态。重写的方法的访问级别不能低于被重写的父类方法，虚拟机在运行时根据对象的实际类型来确定调用哪个方法。方法的重载是编译时多态，指的是在同一个类中，可以有多个方法具有相同的名称，但是它们的参数列表不同（参数的类型、个数、顺序），可以有不同的返回类型和访问修饰符，通过静态绑定（编译时决定）实现。]]></description><category></category></item><item><title><![CDATA[动态规划_爬楼梯]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146966599</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146966599</guid><author>Q95470</author><pubDate>Wed, 02 Apr 2025 22:52:37 +0800</pubDate><description><![CDATA[所以我的原则是：不考虑dp[0]如何初始化，只初始化dp[1] = 1，dp[2] = 2，然后从i = 3开始递推，这样才符合dp[i]的定义。还有就是dp[i - 2]，上i-2层楼梯，有dp[i - 2]种方法，那么再一步跳两个台阶不就是dp[i]了么。首先是dp[i - 1]，上i-1层楼梯，有dp[i - 1]种方法，那么再一步跳一个台阶不就是dp[i]了么。从递推公式dp[i] = dp[i - 1] + dp[i - 2];所以dp[i] = dp[i - 1] + dp[i - 2]。]]></description><category></category></item><item><title><![CDATA[贪心_摆动序列]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146966068</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146966068</guid><author>Q95470</author><pubDate>Wed, 02 Apr 2025 22:42:37 +0800</pubDate><description><![CDATA[dp[i][0] = max(dp[i][0], dp[j][1] + 1)，其中0 < j < i且nums[j] < nums[i]，表示将 nums[i]接到前面某个山谷后面，作为山峰。dp[i][1] = max(dp[i][1], dp[j][0] + 1)，其中0 < j < i且nums[j] > nums[i]，表示将 nums[i]接到前面某个山峰后面，作为山谷。设 dp 状态dp[i][1]，表示考虑前 i 个数，第 i 个数作为山谷的摆动子序列的最长长度。]]></description><category></category></item><item><title><![CDATA[回溯_组合总和III]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146677452</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146677452</guid><author>Q95470</author><pubDate>Sat, 29 Mar 2025 14:49:48 +0800</pubDate><description><![CDATA[返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次，组合可以以任何顺序返回。我们说过，回溯法虽然是暴力搜索，但也有时候可以有点剪枝优化一下的。每个数字 最多使用一次。]]></description><category></category></item><item><title><![CDATA[数据库_day14-19]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146548356</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146548356</guid><author>Q95470</author><pubDate>Thu, 27 Mar 2025 09:35:25 +0800</pubDate><description><![CDATA[数据库查询的执行时间超过指定的超时时间时，就被称为慢查询。原因：查询语句比较复杂：查询涉及多个表，包含复杂的连接和子查询，可能导致执行时间较长。查询数据量大：当查询的数据量庞大时，即使查询本身并不复杂，也可能导致较长的执行时间。缺少索引：如果查询的表没有合适的索引，需要遍历整张表才能找到结果，查询速度较慢。数据库设计不合理：数据库表设计庞大，查询时可能需要较多时间。并发冲突：当多个查询同时访问相同的资源时，可能发生并发冲突，导致查询变慢。]]></description><category></category></item><item><title><![CDATA[Linux_day13]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146548247</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146548247</guid><author>Q95470</author><pubDate>Thu, 27 Mar 2025 09:23:09 +0800</pubDate><description><![CDATA[总结：select是最早的 I/O 多路复用技术，但受到文件描述符数量和效率方面的限制。一般来说，epoll 的效率是要比 select 和 poll 高的，但是对于活动连接较多的时候，由于回调函数触发的很频繁，其效率不一定比 select 和 poll 高。poll： poll是select的一种改进，它使用轮询方式来检查多个文件描述符的状态，避免了select中文件描述符数量有限的问题。select： select是一个最古老的I/O多路复用机制，它可以监视多个文件描述符的可读、可写和错误状态。]]></description><category></category></item><item><title><![CDATA[动态规划_斐波那契数]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146541321</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146541321</guid><author>Q95470</author><pubDate>Wed, 26 Mar 2025 21:42:01 +0800</pubDate><description><![CDATA[从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出，dp[i]是依赖 dp[i - 1] 和 dp[i - 2]，那么遍历的顺序一定是从前到后遍历的。该数列由 0 和 1 开始，后面的每一项数字都是前面两项数字的和。因为题目已经把递推公式直接给我们了：状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];F(n) = F(n - 1) + F(n - 2)，其中 n > 1。dp[i]的定义为：第i个数的斐波那契数值是dp[i]确定dp数组以及下标的含义。]]></description><category></category></item><item><title><![CDATA[贪心_分发饼干]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146540327</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146540327</guid><author>Q95470</author><pubDate>Wed, 26 Mar 2025 21:19:25 +0800</pubDate><description><![CDATA[对每个孩子 i，都有一个胃口值 g[i]，这是能让孩子们满足胃口的饼干的最小尺寸；如果 s[j] >= g[i]，我们可以将这个饼干 j 分配给孩子 i ，这个孩子会得到满足。这里的局部最优就是大饼干喂给胃口大的，充分利用饼干尺寸喂饱一个，全局最优就是喂饱尽可能多的小孩。假设你是一位很棒的家长，想要给你的孩子们一些小饼干。大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子，那么就应该优先满足胃口大的。然后从后向前遍历小孩数组，用大饼干优先满足胃口大的，并统计满足小孩数量。]]></description><category></category></item><item><title><![CDATA[回溯_组合]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146539932</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146539932</guid><author>Q95470</author><pubDate>Wed, 26 Mar 2025 20:30:19 +0800</pubDate><description><![CDATA[给定两个整数 n 和 k，返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。]]></description><category></category></item><item><title><![CDATA[二叉树_把二叉搜索树转换为累加树]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146498374</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146498374</guid><author>Q95470</author><pubDate>Tue, 25 Mar 2025 11:32:52 +0800</pubDate><description><![CDATA[给出二叉 搜索 树的根节点，该树的节点值各不相同，请你将其转换为累加树（Greater Sum Tree），使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。其实这就是一棵树，大家可能看起来有点别扭，换一个角度来看，这就是一个有序数组[2, 5, 13]，求从后到前的累加数组，也就是[20, 18, 13]，是不是感觉这就简单了。那么知道如何遍历这个二叉树，也就迎刃而解了，从树中可以看出累加的顺序是右中左，所以我们需要反中序遍历这个二叉树，然后顺序累加就可以了。]]></description><category></category></item><item><title><![CDATA[二叉树_将有序数组转换为二叉搜索树]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146496451</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146496451</guid><author>Q95470</author><pubDate>Tue, 25 Mar 2025 11:11:17 +0800</pubDate><description><![CDATA[首先取数组中间元素的位置，不难写出int mid = (left + right) / 2;，这么写其实有一个问题，就是数值越界，例如left和right都是最大int，这么操作就越界了，在二分法 (opens new window)中尤其需要注意！给你一个整数数组 nums ，其中元素已经按 升序 排列，请你将其转换为一棵 平衡 二叉搜索树。所以可以这么写：int mid = left + ((right - left) / 2);利用其有序性，迭代的方式还是比较简单的，解题思路在递归中已经分析了。]]></description><category></category></item><item><title><![CDATA[二叉树_修剪二叉搜索树]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146495412</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146495412</guid><author>Q95470</author><pubDate>Tue, 25 Mar 2025 10:21:44 +0800</pubDate><description><![CDATA[给你二叉搜索树的根节点 root ，同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树，使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即，如果没有被移除，原有的父代子代关系都应当保留)。可以证明，存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意，根节点可能会根据给定的边界发生改变。利用其有序性，迭代的方式还是比较简单的，解题思路在递归中已经分析了。]]></description><category></category></item><item><title><![CDATA[二叉树_删除二叉搜索树中的节点]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146487684</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146487684</guid><author>Q95470</author><pubDate>Mon, 24 Mar 2025 22:30:44 +0800</pubDate><description><![CDATA[给定一个二叉搜索树的根节点 root 和一个值 key，删除二叉搜索树中的 key 对应的节点，并保证二叉搜索树的性质不变。返回二叉搜索树（有可能被更新）的根节点的引用。利用其有序性，迭代的方式还是比较简单的，解题思路在递归中已经分析了。首先找到需要删除的节点；如果找到了，删除它。]]></description><category></category></item><item><title><![CDATA[二叉树_二叉搜索树中的插入操作]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146487164</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146487164</guid><author>Q95470</author><pubDate>Mon, 24 Mar 2025 21:56:09 +0800</pubDate><description><![CDATA[给定二叉搜索树（BST）的根节点 root 和要插入树中的值 value ，将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据 保证 ，新值和原始二叉搜索树中的任意节点值都不同。注意，可能存在多种有效的插入方式，只要树在插入后仍保持为二叉搜索树即可。你可以返回 任意有效的结果。利用其有序性，迭代的方式还是比较简单的，解题思路在递归中已经分析了。]]></description><category></category></item><item><title><![CDATA[二叉树_二叉搜索树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146478714</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146478714</guid><author>Q95470</author><pubDate>Mon, 24 Mar 2025 21:40:01 +0800</pubDate><description><![CDATA[百度百科中最近公共祖先的定义为：“对于有根树 T 的两个结点 p、q，最近公共祖先表示为一个结点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。例如，给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]利用其有序性，迭代的方式还是比较简单的，解题思路在递归中已经分析了。给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。]]></description><category></category></item><item><title><![CDATA[二叉树_二叉树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146461563</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146461563</guid><author>Q95470</author><pubDate>Sun, 23 Mar 2025 21:06:19 +0800</pubDate><description><![CDATA[百度百科中最近公共祖先的定义为：“对于有根树 T 的两个节点 p、q，最近公共祖先表示为一个节点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。]]></description><category></category></item><item><title><![CDATA[二叉树_二叉搜索树中的众数]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146460817</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146460817</guid><author>Q95470</author><pubDate>Sun, 23 Mar 2025 20:38:11 +0800</pubDate><description><![CDATA[给你一个含重复值的二叉搜索树（BST）的根节点 root ，找出并返回 BST 中的所有 众数（即，出现频率最高的元素）。所以如果本题没有说是二叉搜索树的话，那么就按照上面的思路写！如果树中有不止一个众数，可以按 任意顺序 返回。结点左子树中所含节点的值 小于等于 当前节点的值。结点右子树中所含节点的值 大于等于 当前节点的值。既然是搜索树，它中序遍历就是有序的。左子树和右子树都是二叉搜索树。]]></description><category></category></item><item><title><![CDATA[二叉树_二叉搜索树的最小绝对差]]></title><link>https://blog.youkuaiyun.com/Q95470/article/details/146460642</link><guid>https://blog.youkuaiyun.com/Q95470/article/details/146460642</guid><author>Q95470</author><pubDate>Sun, 23 Mar 2025 19:52:25 +0800</pubDate><description><![CDATA[给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值。差值是一个正数，其数值等于两值之差的绝对值。]]></description><category></category></item></channel></rss>