<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ppBlog]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/pp_l_ly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pp_l_ly]]></copyright><item><title><![CDATA[力扣565题--Java关于for循环优化的问题]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/125832358</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/125832358</guid><author>pp_l_ly</author><pubDate>Sun, 17 Jul 2022 15:58:34 +0800</pubDate><description><![CDATA[力扣565题，Java for循环优化]]></description><category></category></item><item><title><![CDATA[差分数组——简单解决数组的频繁操作问题]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/123369295</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/123369295</guid><author>pp_l_ly</author><pubDate>Wed, 09 Mar 2022 09:40:19 +0800</pubDate><description><![CDATA[差分数组
上一文中说过***前缀和主要适用的场景是原数组不会被改变的情况下，频繁查询某个区间的累加和***；那么差分数组的主要使用场景是***频繁对原始数组的某个区间的元素进行增删***，所以两者的区别就是是否需要对原始数组进行改变。
差分数组和前缀和的思路一样，都需要先创建一个新的差分数组diff,差分数组中存储的都是原数组当前元素与前一个元素的差，即：diff[i] = nums[i] - nums[i-1],由此我们可以构建一个差分数组，并给数组中的每个元素赋值；
int[] diff = new i]]></description><category></category></item><item><title><![CDATA[前缀和解法——解决数组问题不再需要反复遍历]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/123363083</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/123363083</guid><author>pp_l_ly</author><pubDate>Tue, 08 Mar 2022 21:02:19 +0800</pubDate><description><![CDATA[前缀和解法
1.前缀和主要适用的场景是***原始数组不会被修改的情况下，频繁查询某个区间的累加和***
2.前缀和的核心代码：
class PrefixSum {
    // 前缀和数组
    private int[] prefix;

    /* 输入一个数组，构造前缀和 */
    public PrefixSum(int[] nums) {
        prefix = new int[nums.length + 1];
        // 计算 nums 的累加和
        f]]></description><category></category></item><item><title><![CDATA[简单、有趣的帮你理解浏览器中输入一个URL的全过程]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/114936503</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/114936503</guid><author>pp_l_ly</author><pubDate>Wed, 17 Mar 2021 16:49:42 +0800</pubDate><description><![CDATA[首先，你先在浏览器里面输入 https://www.jd.com，这是一个URL。浏览器只知道名字是“www.jd.com”，但是不知道具体的地点，所以不知道应该如何访问。于是，它打开地址簿去查找。可以使用一般的地址簿协议DNS去查找，还可以使用另一种更加精准的地址簿查找协议HTTPDNS。


无论用哪一种方法查找，最终都会得到这个地址：106.114.138.24。这个是IP地址，是互联网世界的“门牌号”。


知道了目标地址，浏览器就开始打包它的请求。对于普通的浏览请求，往往会使用HTTP协议；但是.]]></description><category></category></item><item><title><![CDATA[JVM —— 类加载器子系统]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106883341</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106883341</guid><author>pp_l_ly</author><pubDate>Sun, 21 Jun 2020 11:27:36 +0800</pubDate><description><![CDATA[类加载的过程



加载

	通过一个类的全限定名获取定义此类的二进制字节流
		将这个字节流所代表的静态存储结构转化为方法去运行时的数据结构
		在内存中生成一个代表这个类的 java.lang.Class 对象，作为方法区这个类的各种数据的访问入口；
	
	链接
	验证  目的在于确保 Class 文件的字节流中包含信息符合当前虚拟机的要求，保证被加载类的正确性，不会危害虚拟机自身安全
		准备  为类变量分配内存并且设置该类变量的默认初始值，即零值。这里不包含用 final 修...]]></description><category></category></item><item><title><![CDATA[运输层：帮你理解TCP、UDP的相关知识]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106417804</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106417804</guid><author>pp_l_ly</author><pubDate>Fri, 29 May 2020 10:52:46 +0800</pubDate><description><![CDATA[运输层位于网络层之上、应用层之下，向它上面的应用层提供通信服务；属于面向通信部分的最高层，也是用户功能中的最底层。


从网络层来说，通信的两端是主机；IP数据报的搜捕明确标志了两个主机的IP地址，但是这种说法还不够清楚。通常一个主机中会同时有多个应用程序，数据发送给主机之后又将要发送给哪个应用程序？所以，从运输层的角度来看，通信的真正端点不是主机而是主机的进程，也就是说，端到端的通信是应用进程之间的通信。学习运输层的协议之前我们先来了解一下其功能；

运输层的功能

运输层有一个很重要的功能：复用...]]></description><category></category></item><item><title><![CDATA[一篇文章帮你理解网络层功能]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106358285</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106358285</guid><author>pp_l_ly</author><pubDate>Thu, 28 May 2020 09:09:30 +0800</pubDate><description><![CDATA[文章目录虚电路服务和数据报服务数据报服务虚电路服务网际协议IPIP地址的分类IP地址与硬件地址地址解析协议ARPIP数据报的格式IP层的转发分组

网络层位于数据链路层之上，运输层之下；也就是说网络层是基于数据链路层的服务为运输层提供服务的。

虚电路服务和数据报服务
虚电路服务和数据报是网络层所提供的两种服务，那么究竟什么是虚电路服务？什么是数据报服务？
数据报服务
为网络层提供无连接服务（无连接服务：不事先为分组的传输确定传输路径，每个分组独立确定传输路径，不同分组传输路径可能不同）；每个分组都携带源地]]></description><category></category></item><item><title><![CDATA[一篇文章帮你搞清楚数据链路层在网络中的作用]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106372019</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106372019</guid><author>pp_l_ly</author><pubDate>Wed, 27 May 2020 08:13:27 +0800</pubDate><description><![CDATA[文章目录封装成帧透明传输字符计数法字符填充法零比特填充法违规编码法差错控制循环冗余检验CRC海明码（汉明码）流量控制停止等待协议滑动窗口协议可靠传输传输数据使用的链路使用点对点信道（PPP协议）使用广播信道（CSDA/CD协议）

计算机网络是很重要的一部分知识，之前也认为很难，因为要分那么多层（五层或七层），而且每一层还有自己的功能和协议，一大堆的东西很不好学；但是后来发现了一个很好的学习方法，就是先熟悉每一层的作用，然后再顺着思考他为了实现这个功能要怎么办？要使用哪些协议？这样不仅能帮助很好的理解，也能]]></description><category></category></item><item><title><![CDATA[理解摩尔投票法]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106325558</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106325558</guid><author>pp_l_ly</author><pubDate>Mon, 25 May 2020 09:25:11 +0800</pubDate><description><![CDATA[算法题目：数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字（数组非空，一定存在这个数字）。


摩尔投票法算法的本质思想就是：抵消，抵消，抵消，到不能再抵消为止。

首先，我们先来了解一下是如何抵消的，抵消就是让数组中任意两个不同的元素进行抵消，一直抵消到最后剩下的就是出现次数唱过数组长度一半的数字了；具体的我们可以举一个例子来说明一下，给定的数组为{1, 2, 3, 2, 2, 2, 5, 4, 2 }，具体抵消的过程为：

先声明一个数组array，用来存放当前无法抵消的数字；
	遍历...]]></description><category></category></item><item><title><![CDATA[数据链路层功能总结【轻松理解数据链路层】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106274599</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106274599</guid><author>pp_l_ly</author><pubDate>Fri, 22 May 2020 17:51:22 +0800</pubDate><description><![CDATA[计算机网络是很重要的一部分知识，之前也认为很难，因为要分那么多层（五层或七层），而且每一层还有自己的功能和协议，一大堆的东西很不好学；但是后来发现了一个很好的学习方法，就是先熟悉每一层的作用，然后再顺着思考他为了实现这个功能要怎么办？要使用哪些协议？这样不仅能帮助很好的理解，也能很高效的去学习。

首先，了解过计算机网络的同学都知道，计算机网络的每一层都是基于下层提供的服务为上层提供服务的，所以数据链路层是在物理层提供的服务上向网络层提供服务的；因此数据链路层的作用是将源自网络层来的数据可靠地传输到相邻节.]]></description><category></category></item><item><title><![CDATA[通过前、中、后序遍历序列中的任意两个构造二叉树【Java实现】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106231986</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106231986</guid><author>pp_l_ly</author><pubDate>Wed, 20 May 2020 13:56:13 +0800</pubDate><description><![CDATA[二叉树的前序、中序和后序遍历是二叉树学习中的一个重点，也是二叉树中很基础的一部分，需要我们熟练的运用；通常已知二叉树，很多同学都能很轻松的得到其前序、中序和后序遍历的队列，甚至层序遍历也不在话下，如果是反过来呢？如果是理解不够的同学就会觉得头疼，有点不知道怎么下手，这里我将分享一下我的汇总，可能方法不是最优的，但是一定能帮助理解。

在此之前呢，我们需要再回顾一下二叉树的前序、中序和后序遍历的特点；




前序遍历：遍历后的序列中节点按照[ 根节点 | 左子树 | 右子树 ]排序，以上图所示为例[ 1 .]]></description><category></category></item><item><title><![CDATA[HTTP和HTTPS的区别【面试常考】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106223958</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106223958</guid><author>pp_l_ly</author><pubDate>Tue, 19 May 2020 23:53:05 +0800</pubDate><description><![CDATA[这个是根据查阅别人的博客，并结合自己的思想总结的，发出来是对自己的检验也希望可以帮到大家；如有错误欢迎指出

HTTP和HTTPS是计算机网络中很重要的知识点，面试的时候很容易被问他们的区别，可能每个人都会有自己理解；


HTTP是明文传输的，传输过程中容易被拦截、修改或者伪造请求；HTTPS则是在HTTP基础上进行进行了一些信息保护，相比HTTP来说更为安全。


这是一个简单的回答，但是比较笼统，如果想要找到好的工作，中间的很多细节还是需要我们去仔细研究的。

HTTPS和HTTP

HTTP是什..]]></description><category></category></item><item><title><![CDATA[循环队列的相关条件和公式]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106085430</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106085430</guid><author>pp_l_ly</author><pubDate>Tue, 12 May 2020 21:21:09 +0800</pubDate><description><![CDATA[已知图个循环队列，队尾指针是rear，队头是front，其中QueueSize为循环队列的最大长度；则：

队空条件：rear==front
	队满条件：(rear+1)%QueueSize==front
	计算队列长度：(rear-front+QueueSize)%QueueSize
	入队：(rear+1)%QueueSize
	出队：(front+1)%QueueSize
...]]></description><category></category></item><item><title><![CDATA[不使用乘除和任何判断、循环计算1+2+...+n【逻辑符短路】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106032353</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106032353</guid><author>pp_l_ly</author><pubDate>Sun, 10 May 2020 10:22:40 +0800</pubDate><description><![CDATA[题目来自于《剑指offer（第2版）》，原题是：


求1+2+...+n，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。


首先，如果我们只是求1+2+...+n的话，正常情况下会有三种方法：公式计算、迭代、递归


//方法一：公式计算，利用等差数列前n项和的公式就即可
public int sumNums(int n){
    return (1 + n) * n / 2;
}

//方法二：迭代计算
public int...]]></description><category></category></item><item><title><![CDATA[数据结构查找算法]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106027006</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106027006</guid><author>pp_l_ly</author><pubDate>Sun, 10 May 2020 09:35:44 +0800</pubDate><description><![CDATA[查找算法

查找表是由同一类型的数据元素构成的集合。
	静态查找表和动态查找表：
	静态查找表：在查找表中只做查找操作，而不改动表中的数据元素
		动态查找表：在查找表中做查找操作的同时还进行插入数据和删除数据的操作
	
	平均查找长度（SAL）：查找成功时，查找的关键字和查找表中的数据元素中进行过比较的个数的平均值
	对于具有 n 个数据元素的查找表，查找成功的平均查找长度的计算公式为：
	




Pi 为第 i 个元素被查找的概率；Ci 表示在查找第 i 个元素之前已经进行过比较的次数
1、顺序查找.]]></description><category></category></item><item><title><![CDATA[数据结构之B-树、B+树]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106026951</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106026951</guid><author>pp_l_ly</author><pubDate>Sun, 10 May 2020 09:35:09 +0800</pubDate><description><![CDATA[1、B-树

一颗 m 阶的 B-树，或者本身是空树，否则必须满足以下特性：
	树中每个结点至多有 m 棵子树；
		若根结点不是叶子结点，则至少有两棵子树；
		除根之外的所有非终端结点至少有棵子树；
		所有的非终端结点中包含下列信息数据：（n，A0，K1，A1，K2，A2，…，Kn，An）；
		n 表示结点中包含的关键字的个数，取值范围是：⌈m/2⌉-1≤ n ≤m-1。Ki （i 从 1 到 n）为关键字，且 Ki &lt; Ki+1 ；Ai 代表指向子树根结点的指针，且指针 Ai-1 所指的子树]]></description><category></category></item><item><title><![CDATA[数据结构查找算法之红黑树]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106021507</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106021507</guid><author>pp_l_ly</author><pubDate>Sat, 09 May 2020 16:10:16 +0800</pubDate><description><![CDATA[基本概念

红黑树，本身是一棵二叉查找树，在其基础上附加了两个要求：
	树中的每个结点增加了一个用于存储颜色的标志域；
		树中没有一条路径比其他任何路径（指的是从任何一个结点开始，一直到其子孙的叶子结点的长度）长出两倍，整棵树要接近于“平衡”的状态。
	
	红黑树对于结点的颜色设置不是任意的，需满足以下性质的二叉查找树才是红黑树：
	树中的每个结点颜色不是红的，就是黑的；
		根结点的颜色是黑的；
		所有为 nil 的叶子结点的颜色是黑的；（注意：叶子结点说的只是为空（nil 或 NULL）的叶子结点！]]></description><category></category></item><item><title><![CDATA[数据结构查找算法之平衡二叉树【附Java代码实现，图解】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106013903</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106013903</guid><author>pp_l_ly</author><pubDate>Sat, 09 May 2020 10:36:03 +0800</pubDate><description><![CDATA[平衡二叉树，又称为 AVL 树。实际上就是遵循以下两个特点的二叉树：
	每棵子树中的左子树和右子树的深度差不能超过 1；
		二叉树中每棵子树都要求是平衡二叉树；
	
	平衡因子：每个结点都有其各自的平衡因子，表示的就是其左子树深度同右子树深度的差。平衡二叉树中各结点平衡因子的取值只可能是：0、1 和 -1。
	二叉排序树转化为平衡二叉树；当平衡二叉树由于新增数据元素导致整棵树的平衡遭到破坏时，就需要根据实际情况做出适当的调整，假设距离插入结点最近的“不平衡因子”为 a。则调整的规律可归纳为以下 4 种情况]]></description><category></category></item><item><title><![CDATA[数据结构查找算法之二叉查找树（二叉排序树）【附Java代码实现，图解】]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/106007543</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/106007543</guid><author>pp_l_ly</author><pubDate>Fri, 08 May 2020 22:13:23 +0800</pubDate><description><![CDATA[基本思想：二叉查找树是先对待查找的数据进行生成树，确保树的左分支的值小于右分支的值，然后在就行和每个节点的父节点比较大小，查找最适合的范围。 这个算法的查找效率很高，但是如果使用这种查找方法要首先创建树。
	二叉查找树或者是空树，或者是具有以下特征：
	若任意节点的左子树不空，则左子树上所有结点的值均小于它的根结点的值；
		若任意节点的右子树不空，则右子树上所有结点的值均大于它的根结点的值；
		任意节点的左、右子树也分别为二叉查找树。
	
	复杂度分析：它和二分查找一样，插入和查找的时间复杂度均为O(l]]></description><category></category></item><item><title><![CDATA[数组地址计算]]></title><link>https://blog.youkuaiyun.com/pp_l_ly/article/details/105966755</link><guid>https://blog.youkuaiyun.com/pp_l_ly/article/details/105966755</guid><author>pp_l_ly</author><pubDate>Thu, 07 May 2020 10:17:36 +0800</pubDate><description><![CDATA[1、一维数组
设数组为A = a1,a2,a3,a4…ai…an;
每个数据元素占d个存储单位，则元素a[i]的存储地址为
Loc(A[i])=Loc(A[1])+(i−1)∗dLoc(A[i])=Loc(A[1])+(i−1)∗d
Loc(A[i]) = Loc(A[1]) + (i-1)*dLoc(A[i])=Loc(A[1])+(i−1)∗d
Loc(A[i])=Loc(A[1])+(i−1...]]></description><category></category></item></channel></rss>