自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 力扣565题--Java关于for循环优化的问题

力扣565题,Java for循环优化

2022-07-17 15:58:34 350 1

原创 差分数组——简单解决数组的频繁操作问题

差分数组上一文中说过***前缀和主要适用的场景是原数组不会被改变的情况下,频繁查询某个区间的累加和***;那么差分数组的主要使用场景是***频繁对原始数组的某个区间的元素进行增删***,所以两者的区别就是是否需要对原始数组进行改变。差分数组和前缀和的思路一样,都需要先创建一个新的差分数组diff,差分数组中存储的都是原数组当前元素与前一个元素的差,即:diff[i] = nums[i] - nums[i-1],由此我们可以构建一个差分数组,并给数组中的每个元素赋值;int[] diff = new i

2022-03-09 09:40:19 277

原创 前缀和解法——解决数组问题不再需要反复遍历

前缀和解法1.前缀和主要适用的场景是***原始数组不会被修改的情况下,频繁查询某个区间的累加和***2.前缀和的核心代码:class PrefixSum { // 前缀和数组 private int[] prefix; /* 输入一个数组,构造前缀和 */ public PrefixSum(int[] nums) { prefix = new int[nums.length + 1]; // 计算 nums 的累加和 f

2022-03-08 21:02:19 612

原创 简单、有趣的帮你理解浏览器中输入一个URL的全过程

首先,你先在浏览器里面输入 https://www.jd.com,这是一个URL。浏览器只知道名字是“www.jd.com”,但是不知道具体的地点,所以不知道应该如何访问。于是,它打开地址簿去查找。可以使用一般的地址簿协议DNS去查找,还可以使用另一种更加精准的地址簿查找协议HTTPDNS。无论用哪一种方法查找,最终都会得到这个地址:106.114.138.24。这个是IP地址,是互联网世界的“门牌号”。知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用HTTP协议;但是.

2021-03-17 16:49:42 1254

原创 JVM —— 类加载器子系统

类加载的过程加载 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法去运行时的数据结构 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口; 链接 验证 目的在于确保 Class 文件的字节流中包含信息符合当前虚拟机的要求,保证被加载类的正确性,不会危害虚拟机自身安全 准备 为类变量分配内存并且设置该类变量的默认初始值,即零值。这里不包含用 final 修...

2020-06-21 11:27:36 216

原创 运输层:帮你理解TCP、UDP的相关知识

运输层位于网络层之上、应用层之下,向它上面的应用层提供通信服务;属于面向通信部分的最高层,也是用户功能中的最底层。从网络层来说,通信的两端是主机;IP数据报的搜捕明确标志了两个主机的IP地址,但是这种说法还不够清楚。通常一个主机中会同时有多个应用程序,数据发送给主机之后又将要发送给哪个应用程序?所以,从运输层的角度来看,通信的真正端点不是主机而是主机的进程,也就是说,端到端的通信是应用进程之间的通信。学习运输层的协议之前我们先来了解一下其功能;运输层的功能运输层有一个很重要的功能:复用...

2020-05-29 10:52:46 465

原创 一篇文章帮你理解网络层功能

文章目录虚电路服务和数据报服务数据报服务虚电路服务网际协议IPIP地址的分类IP地址与硬件地址地址解析协议ARPIP数据报的格式IP层的转发分组网络层位于数据链路层之上,运输层之下;也就是说网络层是基于数据链路层的服务为运输层提供服务的。虚电路服务和数据报服务虚电路服务和数据报是网络层所提供的两种服务,那么究竟什么是虚电路服务?什么是数据报服务?数据报服务为网络层提供无连接服务(无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同);每个分组都携带源地

2020-05-28 09:09:30 1469

原创 一篇文章帮你搞清楚数据链路层在网络中的作用

文章目录封装成帧透明传输字符计数法字符填充法零比特填充法违规编码法差错控制循环冗余检验CRC海明码(汉明码)流量控制停止等待协议滑动窗口协议可靠传输传输数据使用的链路使用点对点信道(PPP协议)使用广播信道(CSDA/CD协议)计算机网络是很重要的一部分知识,之前也认为很难,因为要分那么多层(五层或七层),而且每一层还有自己的功能和协议,一大堆的东西很不好学;但是后来发现了一个很好的学习方法,就是先熟悉每一层的作用,然后再顺着思考他为了实现这个功能要怎么办?要使用哪些协议?这样不仅能帮助很好的理解,也能

2020-05-27 08:13:27 924

原创 理解摩尔投票法

算法题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字(数组非空,一定存在这个数字)。摩尔投票法算法的本质思想就是:抵消,抵消,抵消,到不能再抵消为止。首先,我们先来了解一下是如何抵消的,抵消就是让数组中任意两个不同的元素进行抵消,一直抵消到最后剩下的就是出现次数唱过数组长度一半的数字了;具体的我们可以举一个例子来说明一下,给定的数组为{1, 2, 3, 2, 2, 2, 5, 4, 2 },具体抵消的过程为:先声明一个数组array,用来存放当前无法抵消的数字; 遍历...

2020-05-25 09:25:11 345

原创 数据链路层功能总结【轻松理解数据链路层】

计算机网络是很重要的一部分知识,之前也认为很难,因为要分那么多层(五层或七层),而且每一层还有自己的功能和协议,一大堆的东西很不好学;但是后来发现了一个很好的学习方法,就是先熟悉每一层的作用,然后再顺着思考他为了实现这个功能要怎么办?要使用哪些协议?这样不仅能帮助很好的理解,也能很高效的去学习。首先,了解过计算机网络的同学都知道,计算机网络的每一层都是基于下层提供的服务为上层提供服务的,所以数据链路层是在物理层提供的服务上向网络层提供服务的;因此数据链路层的作用是将源自网络层来的数据可靠地传输到相邻节.

2020-05-22 17:51:22 1300

原创 通过前、中、后序遍历序列中的任意两个构造二叉树【Java实现】

二叉树的前序、中序和后序遍历是二叉树学习中的一个重点,也是二叉树中很基础的一部分,需要我们熟练的运用;通常已知二叉树,很多同学都能很轻松的得到其前序、中序和后序遍历的队列,甚至层序遍历也不在话下,如果是反过来呢?如果是理解不够的同学就会觉得头疼,有点不知道怎么下手,这里我将分享一下我的汇总,可能方法不是最优的,但是一定能帮助理解。在此之前呢,我们需要再回顾一下二叉树的前序、中序和后序遍历的特点;前序遍历:遍历后的序列中节点按照[ 根节点 | 左子树 | 右子树 ]排序,以上图所示为例[ 1 .

2020-05-20 13:56:13 598 2

原创 HTTP和HTTPS的区别【面试常考】

这个是根据查阅别人的博客,并结合自己的思想总结的,发出来是对自己的检验也希望可以帮到大家;如有错误欢迎指出HTTP和HTTPS是计算机网络中很重要的知识点,面试的时候很容易被问他们的区别,可能每个人都会有自己理解;HTTP是明文传输的,传输过程中容易被拦截、修改或者伪造请求;HTTPS则是在HTTP基础上进行进行了一些信息保护,相比HTTP来说更为安全。这是一个简单的回答,但是比较笼统,如果想要找到好的工作,中间的很多细节还是需要我们去仔细研究的。HTTPS和HTTPHTTP是什..

2020-05-19 23:53:05 7300

原创 循环队列的相关条件和公式

已知图个循环队列,队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度;则:队空条件:rear==front 队满条件:(rear+1)%QueueSize==front 计算队列长度:(rear-front+QueueSize)%QueueSize 入队:(rear+1)%QueueSize 出队:(front+1)%QueueSize...

2020-05-12 21:21:09 505

原创 不使用乘除和任何判断、循环计算1+2+...+n【逻辑符短路】

题目来自于《剑指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...

2020-05-10 10:22:40 443

原创 数据结构查找算法

查找算法查找表是由同一类型的数据元素构成的集合。 静态查找表和动态查找表: 静态查找表:在查找表中只做查找操作,而不改动表中的数据元素 动态查找表:在查找表中做查找操作的同时还进行插入数据和删除数据的操作 平均查找长度(SAL):查找成功时,查找的关键字和查找表中的数据元素中进行过比较的个数的平均值 对于具有 n 个数据元素的查找表,查找成功的平均查找长度的计算公式为: Pi 为第 i 个元素被查找的概率;Ci 表示在查找第 i 个元素之前已经进行过比较的次数1、顺序查找.

2020-05-10 09:35:44 959

原创 数据结构之B-树、B+树

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 < Ki+1 ;Ai 代表指向子树根结点的指针,且指针 Ai-1 所指的子树

2020-05-10 09:35:09 423

原创 数据结构查找算法之红黑树

基本概念红黑树,本身是一棵二叉查找树,在其基础上附加了两个要求: 树中的每个结点增加了一个用于存储颜色的标志域; 树中没有一条路径比其他任何路径(指的是从任何一个结点开始,一直到其子孙的叶子结点的长度)长出两倍,整棵树要接近于“平衡”的状态。 红黑树对于结点的颜色设置不是任意的,需满足以下性质的二叉查找树才是红黑树: 树中的每个结点颜色不是红的,就是黑的; 根结点的颜色是黑的; 所有为 nil 的叶子结点的颜色是黑的;(注意:叶子结点说的只是为空(nil 或 NULL)的叶子结点!

2020-05-09 16:10:16 335

原创 数据结构查找算法之平衡二叉树【附Java代码实现,图解】

平衡二叉树,又称为 AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 平衡因子:每个结点都有其各自的平衡因子,表示的就是其左子树深度同右子树深度的差。平衡二叉树中各结点平衡因子的取值只可能是:0、1 和 -1。 二叉排序树转化为平衡二叉树;当平衡二叉树由于新增数据元素导致整棵树的平衡遭到破坏时,就需要根据实际情况做出适当的调整,假设距离插入结点最近的“不平衡因子”为 a。则调整的规律可归纳为以下 4 种情况

2020-05-09 10:36:03 376

原创 数据结构查找算法之二叉查找树(二叉排序树)【附Java代码实现,图解】

基本思想:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。 这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树。 二叉查找树或者是空树,或者是具有以下特征: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树。 复杂度分析:它和二分查找一样,插入和查找的时间复杂度均为O(l

2020-05-08 22:13:23 1266

原创 数组地址计算

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)∗dLoc(A[i]) = Loc(A[1]) + (i-1)*dLoc(A[i])=Loc(A[1])+(i−1)∗dLoc(A[i])=Loc(A[1])+(i−1...

2020-05-07 10:17:36 4596 1

原创 图解设计模式+代码(六):行为型模式

访问者模式1、定义与特点定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。 优点: 扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 复用性好。可以通过访问者来定义...

2020-05-06 08:44:23 161

原创 通过位运算实现加法(不使用加减乘除实现加法)

能否不使用加减乘除而实现两数的相加呢?当然可以,接下来将以最简单的方式理解用位运算实现两数相加。首先,十进制的加法大家都非常熟悉,下面我们将十进制的加法进行解析,可分为下面这三步:将数字的各位分别相加,先不管进位的问题 计算产生进位的数字 把上面两步的结果进行相加例如:12 + 15个位和十位数字相加,先不管进位的问题:2 + 5 = 7(个位相加),1 + 1 =...

2020-05-05 21:52:57 861

原创 图解设计模式+代码(五):行为型模式

状态模式1、定义与特点定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 优点: 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。 有利于程序的扩展。通过定义...

2020-05-05 16:25:48 337

原创 图解设计模式+代码(四):行为型模式

模板方法模式1、定义与特点定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式 优点: 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。 它在父类中提取了公共的部分代码,便于代码复用。 部分方法是由子类实现...

2020-05-05 16:18:53 377

原创 图解设计模式+代码(三):结构型模式

外观模式迪米特法则的典型应用1、定义与特点定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 优点: 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。 对客户屏蔽了子系统组件,减少了客...

2020-05-03 20:40:06 459

原创 图解设计模式+代码(二):结构型模式

代理模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。1、定义与特点定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接...

2020-05-02 08:46:26 338

原创 图解设计模式+代码(一):创建型模式

单例设计模式指一个类只有一个实例,且该类能自行创建这个实例的一种模式 Java中Runtime的源码就是使用单例模式实现的,初次之外还有Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。 特点: 单例类只有...

2020-05-01 09:31:58 496

原创 简单理解类之间的关系、UML图

1、依赖依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。依赖关系使用带箭头的虚线来表示 只要是在类中用到了对方,那么他们之间就存在依赖关系,如果没有对方,连编译都通过不了 产生的情况: 类中用到了对方 如果是类的...

2020-04-30 15:56:57 247

原创 设计模式分类

1、根据目的来分a、创建型模式用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离” 单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。b、结构型模式用于描述如何将类或对象按照某种布局组成更大的结构 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。c、行为型模式用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以...

2020-04-30 15:47:49 120

原创 设计模式的七大原则

设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)1、单一职责原则基本介绍: 对类来说的,即一个类应该只负责一项原则。如果类A负责两个不同的职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。 注意事项和细节: 降低类的复杂度,一个类只负责一项职责。 提高...

2020-04-30 09:07:47 126

原创 类加载机制

1、阶段划分JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 a、加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也...

2020-04-29 20:14:54 142

原创 Java IO/NIO

1、阻塞IO模型最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内 核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用 户线程交出 CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除 block 状态。典型的阻塞 IO 模型的例子为:data = socket.read();如果...

2020-04-29 20:11:31 215

原创 GC垃圾回收器

Java 堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法; 年老代主要使用标记-整理垃圾回收算法,因此 java 虚拟中针对新生代和年老代分别提供了多种不 同的垃圾收集器,JDK1.6 中 Sun HotSpot 虚拟机的垃圾收集器如图 1、Serial 垃圾收集器(单线程、复制算法)Serial(英文连续)是最基本垃圾收集器,使用复制算法,曾经是JDK1....

2020-04-29 09:37:49 108

原创 Java四种引用类型

1、强引用在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即 使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之 一。2、软应用软引用需要用 SoftReference 类来实现,对于只有软引用的对象来说,当系统内存足够...

2020-04-26 14:46:35 124

原创 Java虚拟机垃圾回收与算法

1、如何确定垃圾引用计数法:在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。 可达性分析:为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的“GC ...

2020-04-26 14:43:01 114

原创 Java虚拟机运行时内存

1、新生代是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发 MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、ServivorTo 三个区Eden区 Java 新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当 Eden 区内存不够的时候就会触发 MinorGC,对新生代区进行一次垃圾回收...

2020-04-26 10:11:01 160

原创 Java虚拟机的内存区域

1、程序计数器(线程私有)一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的 程序计数器,这类内存也称为“线程私有”的内存。 正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如果还是 Native 方法,则为空。 这个内存区域是唯一一个在虚拟机中没有规定任何 OutOfMemoryError (内存溢出)情况的区域...

2020-04-26 10:06:35 169

原创 详细的十大经典排序算法总结

欢迎大家在语雀进行学习交流

2020-03-23 10:31:11 215

转载 码云的初次使用

文章目录下载Git 码云官网注册 初始化 第一次上传代码到git通过这篇博客成功使用了码云:https://blog.csdn.net/ai1362425349/article/details/82119889现在整理一下,方便以后复习。下载Git可以去官网下载,但是我在官网下载总是会下到一半就连接超时。我是在腾讯软件中心下载的。https://pc.qq.com/...

2019-07-15 09:09:58 822

原创 在eclipse里面配置Tomcat和web项目文件

Fibonacci数列

2019-07-10 09:50:08 253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除