自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机网络相关重点

由发送方和接收方滑动窗口的组成,整个数据传输过程则是发送方根据接收方窗口的大小,不断发送数据,随着接收方不断接收确认通知发送方,接受方窗口不断向前移动,发送方的窗口也会不断向前移动,接收方可以通过控制窗口的大小,控制发送方的速率,实现流量控制。TCP连接不管发送方还是接收方都维护了一块固定大小的缓冲空间,发送方能够发送多少数据是由接收方的决定的,TCP使用的方式是滑动窗口协议,由滑动窗口的大小来控制传输数据的速率。

2023-09-22 17:48:06 695

原创 Spring框架中的Bean生命周期

如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

2023-08-10 19:20:54 258

原创 spring框架的配置方案

spring框架在使用过程中,需要对它进行一系列的配置才可以使用,在spring发展过程中,配置方式也发生了一些变化:2.5版本前====>xml2.5版本后====>annonation+xml3.0版本后====>annonation+javaConfig配置类。

2023-08-04 19:27:04 312

原创 CopyOnWriteArrayList核心源码阅读

简称COW,是一种用于。基本思想是:当我们往一个集合容器中写入元素时(),并不会直接在集合容器中写入,而是先将当前集合容器进行Copy,复制出一个新的容器,然后新的容器里写入元素,写入操作完成之后,再将原容器的引用指向新的容器。CopyOnWriteArrayList相当于一个线程安全的ArrayList,内部存储是Object[]数组,线程安全使用ReentrantLock实现,允许多个线程并发读取,但只能有一个线程写入。

2023-07-17 19:01:38 200

原创 ReentrantLock与synchronized的区别

ReentrantLock和synchronized都是用来确保线程的安全性,为了在线程并发时保证线程安全,我们必须给需要进行的操作方法加“锁”。

2023-07-15 17:49:03 157

原创 线程池的执行流程

综上所述:线程池的执行顺序为:核心线程--->工作队列--->最大线程数--->非核心线程--->绝交策略。

2023-07-15 17:22:01 190

原创 线程的实现方式

我们在创建一个线程时,是通过创建Thread实例完成线程的创建,但在具体的实现方式上可以有4种方式。

2023-07-15 17:08:38 250

原创 AES算法的CBC和ECB两种工作模式

AES是一种“。

2023-07-15 16:52:04 277

原创 反射Reflection

在Java学习中,反射机制是一个非常重要的特性,Java反射机制中是在程序的运行期,对于任意一个对象,都能够调用它的任意方法和属性;这种动态的获取信息以及动态调用对象的功能称为Java的反射机制。总的来说,反射机制指的是程序在运行时能够获取自身的信息。在Java中只要给定类的名字,就可以通过反射机制来获得类的所有信息。Java的反射机制主要提供了以下的功能,这些功能都存在于。

2023-07-12 20:34:43 142

原创 哈希算法总结

Java的标准库中提供了常用的hash算法,通过统一的接口MessageDigest进行调用。

2023-07-10 18:14:46 208

原创 FTP协议

FTP是一个文件传输协议,可以用于互联网双向传输,控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。在JAVA中我们可以通过。首先,我们需要使用一个FTP服务器软件来设置一个用户,在成功连接到FTP服务器并验证身份后读取指定目录下的文件内容。有文件上传,当然也可以从FTP服务器中下载文件(代码如下:)能够读取到指定目录,就可以对其进行上传(代码如下:)来利用FTP协议进行文件传输。

2023-07-08 16:25:14 251

原创 与JavaEmail相关的编程

BodyPart使用setContent()来决定要添加的内容,如果添加的是文本内容,则用setContent("...", "text/plain;在整个电子邮件发送的过程中,MTA和MDA都是现成的服务器软件,所以我们只需要关心如何编写一个MUA的软件,将邮件发送到MTA中。MUA和MTA之间进行发送邮件的协议是。在JAVA中,我们要发送邮件时,不需要关心SMTP底层的原理,只需使用。除此之外,我们有时会需要将一些图片放到邮件的正文中而不是以附件的形式发送,这种情况我们需要做一点额外的处理。

2023-07-08 16:04:10 217

原创 编程练习【找出数组中的幸运数】

利用一个Map来记录每个数字和它出现的次数,遍历数组,将数字作“键”,次数作“值”,再比较次数和数字一样的值,保存到结果result中,循环此操作,找到最大的幸运数字。解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2。解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3。输入:arr = [7,7,7,7,7,7,7]输入:arr = [1,2,2,3,3,3]输入:arr = [2,2,2,3,3]如果数组中不含幸运数,则返回 -1。输入:arr = [2,2,3,4]

2023-06-17 23:11:19 651

原创 编程练习【左右元素和的差值】

数组 answer 为 [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22]。解释:数组 leftSum 为 [0,10,14,22] 且数组 rightSum 为 [15,11,3,0]。分别用两个数组记录左边和的数组和右边和的数组,使用Math.abs()方法得到他们的差值并存到结果数组中去。解释:数组 leftSum 为 [0] 且数组 rightSum 为 [0]。数组 answer 为 [|0 - 0|] = [0]。

2023-06-15 22:42:16 615

原创 编程练习【稀疏数组搜索】

输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball"输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta"分别记录数组的最左边和最右边的索引,遇到空字符串时将两个指针分别向前向后移动,然后根据二分查找的方式来找到目标字符串。商业转载请联系官方授权,非商业转载请注明出处。

2023-06-14 15:16:31 62

原创 编程练习【最多单词数的发件人】

输入:messages = ["Hello userTwooo","Hi userThree","Wonderful day Alice","Nice day userThree"], senders = ["Alice","userTwo","userThree","Alice"]输入:messages = ["How is leetcode for everyone","Leetcode is useful for practice"], senders = ["Bob","Charlie"]

2023-06-13 15:19:12 596

原创 编程练习【反转单词前缀】

例如,如果 word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd"。反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "zxyxxe"。输入:word = "abcdefd", ch = "d"输入:word = "xyxzxe", ch = "z"输入:word = "abcd", ch = "z"输出:"dcbaefd"

2023-06-12 15:35:18 624

原创 编程练习【按摩师】

定义一个动态数组dp[],先将nums[]数组第一个元素放入数组,再比较下一个元素和第一个元素,将较大的值放入dp[1]中,接着从下一个数字索引开始遍历nums[]数组,dp[i]的值应该是dp[i-1]和dp[i-2]+nums[i]相比较大的值,因为不能拿到相邻的两个值,所以dp[i]=Math.max(dp[i-1]和dp[i-2]+nums[i]),最后返回数组最后一个元素即为要得到的结果。输入: [2,1,4,5,3,1,1,3]输入: [2,7,9,3,1]输入: [1,2,3,1]

2023-06-12 15:15:17 729

原创 编程练习【重复至少 K 次且长度为 M 的模式】

题目要求我们找到一个连续出现k次长度m的子数组,我们定义一个index来找到这个子数组的左端点,从m索引开始遍历,判断和前面i-m索引的是否和当前相等,不相等,左端点继续更新,相等判断剩余的子数组是否满足k*m即要求的子数组的长度,如果满足即得到结果。注意,不能计算重叠的重复次数。输入:arr = [1,2,1,2,1,1,1,3], m = 2, k = 2。输入:arr = [1,2,1,2,1,3], m = 2, k = 3。输入:arr = [1,2,3,1,2], m = 2, k = 2。

2023-06-10 15:56:43 699

原创 编程练习【验证外星语词典】

解释:当前三个字符 "app" 匹配时,第二个字符串相对短一些,然后根据词典编纂规则 "apple" > "app",因为 'l' > '∅',其中 '∅' 是空白字符,定义为比任何其他字符都小(更多信息)。否则,返回 false。输入:words = ["word","world","row"], order = "worldabcefghijkmnpqstuvxyz"解释:在该语言的字母表中,'d' 位于 'l' 之后,那么 words[0] > words[1],因此单词序列不是按字典序排列的。

2023-06-09 19:32:08 521

原创 编程练习【移除字符串中的尾随0】

链接:https://leetcode.cn/problems/remove-trailing-zeros-from-a-string。给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num。解释:整数 "51230100" 有 2 个尾随零,移除并返回整数 "512301"。商业转载请联系官方授权,非商业转载请注明出处。解释:整数 "123" 不含尾随零,返回整数 "123"。输入:num = "51230100"输入:num = "123"输出:"512301"

2023-06-08 19:13:17 59

原创 编程练习【交替位二进制数】

对于一个二进制数比如010101,将它右移一位得到001010,将右移后和右移前数字异或,即可得到011111,如此可知交替位二进制右移异或后可以得到一个01111.....的结果,我们只需要判断这个结果加一是否与原始数据相与是否等于0。从最低位至最高位,我们用对 2 取模再除以 2 的方法,依次求出输入的二进制表示的每一位,并与前一位进行比较。给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。解释:11 的二进制表示是:1011.

2023-06-07 23:07:32 172

原创 编程练习【最小k个数】

利用优先队列的特点,将数组前k个数字先放入队列中,然后遍历剩下的数字,和队列第一个元素比较,如果队列第一个元素大于后面的数字,则数字出队,小的数字入队,遍历完数组后即可得到最小k个数的一个队列,再将元素保存到数组中即可。链接:https://leetcode.cn/problems/smallest-k-lcci。输入: arr = [1,3,5,7,2,4,6,8], k = 4。设计一个算法,找出数组中最小的k个数。将数组排序,再将数组按顺序复制k个到结果数组中。输出: [1,2,3,4]

2023-06-06 23:03:39 179

原创 编程练习【根据规则将箱子分类】

如果箱子既不是 "Bulky" ,也不是 "Heavy" ,那么返回类别为 "Neither"。如果箱子是 "Bulky" 但不是 "Heavy" ,那么返回类别为 "Bulky"。如果箱子是 "Heavy" 但不是 "Bulky" ,那么返回类别为 "Heavy"。由于箱子不是 "Bulky" 但是是 "Heavy" ,所以我们返回 "Heavy"。如果箱子同时是 "Bulky" 和 "Heavy" ,那么返回类别为 "Both"。但是质量 >= 100 ,所以箱子是 "Heavy" 的。

2023-06-05 23:41:41 293

原创 编程练习【矩阵对角线元素的和】

遍历整个二维数组,定义一个sum记录累加结果,累加对角线即累加每行第i个数字和第n-1-i个数字,遍历完数组后一定要判断二位数组行数是否为奇数个,如果是奇数个,累加和要减去最中间的数字,因为那个数字加了2次。遍历二维数组,遇到i==j或者i+j==n-1时,说明是每行需要拿到的那个对角线数字,累加。解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25。请注意,元素 mat[1][1] = 5 只会被计算一次。输入:mat = [[1,1,1,1],输入:mat = [[1,2,3],

2023-06-04 21:51:24 656

原创 编程练习【旋转字符串】

长度一样时,假设s旋转i位,那么goal中的某个字符goal[j]必然和s[i+j%n]相对应,因此我们在i固定的情况下,遍历所有j,如果所有字符都对应,则返回true,否则,遍历其他的i;如果所有的i都不能使s变成goal,则返回false。只需比较一下两个字符串的长度,然后判断旋转前的字符串*2中是否存在旋转后的字符串就ok,因为字符串*2中已经包含了所有可能的移动情况。输入: s = "abcde", goal = "cdeab"输入: s = "abcde", goal = "abced"

2023-06-01 19:32:25 46

原创 编程练习【将找到的值乘以2】

如果在 nums 中找到 original ,将 original 乘以 2 ,得到新 original(即,令 original = 2 * original)。给你一个整数数组 nums ,另给你一个整数 original ,这是需要在 nums 中搜索的第一个数字。使用一个哈希表来记录数组中的数,如果能够找到目标数字,则将数字乘以2,一直到找不到相等的数字。输入:nums = [5,3,6,1,12], original = 3。输入:nums = [2,7,9], original = 4。

2023-05-31 19:17:00 1114

原创 编程练习【找不同】

由题可知,由于多出来的是字符,所以我们可以采用ASCII码来计算两个字符串的每个字符ASCII码之和,最后相减即可得到最终结果。链接:https://leetcode.cn/problems/find-the-difference。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。由^位运算的特质,即可找到出现奇数次的字符,即为所求。输入:s = "abcd", t = "abcde"输入:s = "", t = "y"解释:'e' 是那个被添加的字母。请找出在 t 中被添加的字母。

2023-05-30 23:23:08 695

原创 编程练习【找出数组的最大公约数】

在不使用工具类的情况下,首先我们要遍历数组找到数组的最大值和最小值,然后找到最大值到最小值之间能够让两个数字都整除的值。给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数。两个数的 最大公约数 是能够被两个数整除的最大正整数。输入:nums = [2,5,6,9,10]输入:nums = [7,5,6,8,3]输入:nums = [3,3]3 和 3 的最大公约数是 3。nums 中最小的数是 2。nums 中最小的数是 3。nums 中最小的数是 3。nums 中最大的数是 3。

2023-05-29 20:53:03 720

原创 编程练习【破环回文数】

例如,"abcc” 字典序比 "abcd" 小,因为不同的第一个位置是在第四个字符,显然 'c' 比 'd' 小。思路:破环回文数,且需要破坏后字典序小,直接遍历回文串,找到第一个大于“a”的字符,将它替换成“a”即可,如果遍历完没有说明字符串全是“a”,那么直接将最后一个字符替换成“b”即可。解释:存在多种方法可以使 "abccba" 不是回文,例如 "zbccba", "aaccba", 和 "abacba"。解释:不存在替换一个字符使 "a" 变成非回文的方法,所以返回空字符串。

2023-05-26 22:30:46 668

原创 编程练习【判断两个时间是否存在冲突】

输入:event1 = ["01:15","02:00"], event2 = ["02:00","03:00"]输入:event1 = ["01:00","02:00"], event2 = ["01:20","03:00"]输入:event1 = ["10:00","11:00"], event2 = ["14:00","15:00"]当两个事件存在某个非空的交集时(即,某些时刻是两个事件都包含的),则认为出现 冲突。解释:两个事件的交集从 01:20 开始,到 02:00 结束。

2023-05-24 22:57:24 881

原创 编程练习【计算列车到站时间】

解释:列车正点到站时间是 13:00 ,延误 11 小时,所以列车实际到站的时间是 13 + 11 = 24(在 24 小时制中表示为 00:00 ,所以返回 0)。给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。解释:列车正点到站时间是 15:00 ,延误 5 小时,所以列车实际到站的时间是 15 + 5 = 20(20:00)。由于时间是24小时制,我们只需要将正点时间与延点时间相加与24取余即可。

2023-05-23 22:01:25 517

原创 编程练习【寻找数组的中心下标】

得到整个数组的总和total,当遍历到第i元素时,左边元素和为sum,右侧元素和即为total-numsi-sum,即2*sum+numsi=total。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。左侧数之和 sum = 0 ,(下标 0 左侧不存在元素),

2023-05-22 21:56:45 322

原创 编程练习【二叉树的最大深度】

如果能够得到左子树和右子树的最大深度(left,right),那么二叉树的最大深度就为Math.max(left,right)+1;左子树和右子树的深度也可以通过这种方式来计算,所以使用深度优先搜索方式来计算,使用递归分别计算左子树的深度和右子树的深度,直到访问到空节点时退出。链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。

2023-05-21 22:46:29 42

原创 编程练习【对称二叉树】

要判断一个树是否对称,则需要它的根节点相同,每个树的左子树和另一个树的右子树对称相同。链接:https://leetcode.cn/problems/symmetric-tree。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [1,2,2,null,3,null,3]给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]题目来源:力扣(LeetCode)

2023-05-21 00:20:04 23

原创 HashMap的数据结构

反之,越小则冲突的机会就会越少,但是空间就会浪费更多,因此在设置初始容量时,应该考虑到初始容量及其加载因子,最大限度减少rehash重建内部数据结构的次数,减少扩容次数。得到这个元素在数组中的下标,如果该位置上已经存放有其他元素(哈希冲突),那么在这个位置上的元素将以链表的形式存放,使用next指向新添加的元素,形成链表;:用来规定哈希数组的长度,默认为16,由于需要避免哈希冲突,所以是16(2的倍数),在存储大数据量的时候,最好预先判断数据量,根据2的n次幂,提前预设初始容量。时,链表会转换成红黑树。

2023-05-20 15:59:33 576

原创 编程练习【相同的树】

链接:https://leetcode.cn/problems/same-tree。我们要证明两个树相同,则需要保证每个节点相同且结构相同,所以可以使用递归来解决。给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。商业转载请联系官方授权,非商业转载请注明出处。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2], q = [1,null,2]输入:p = [1,2,3], q = [1,2,3]题目来源:力扣(LeetCode)

2023-05-19 21:52:05 23

原创 编程练习【二叉树的中序遍历】

遍历树,判断当前节点是否还有左孩子,如果有,遍历左子树,找到左子树上最右的节点,记录该节点为predecessor,再判断该节点是否没有右孩子,如果有,则指向其右孩子,再访问左孩子,如果还有右孩子,则说明已经遍历完左子树,将右孩子置空,再将节点加入结果集合;先遍历节点左子树,再将节点加入集合,后遍历节点右子树,直到节点为空。和递归方式一样,但创建了一个栈来作为中间存储,节点不为空或者栈不为空时,遍历让节点进栈并遍历左子树,直到节点为空,节点出栈,将节点值添加到集合中,再遍历右子树,直到遍历完整个树。

2023-05-18 23:02:33 358

原创 编程练习【删除排序链表中的重复元素】

由于链表是排序后的,所以我们只需要遍历链表判断当前节点和下一个节点是否相等,如果相等则跳过下一个节点到下下个节点直到遇见和当前节点不相等的节点。注意:由于我们每次需要访问cur.next,为了避免运行错误,我们只需要遍历到最后一个节点之前。给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次。返回 已排序的链表。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:head = [1,1,2,3,3]输入:head = [1,1,2]输出:[1,2,3]

2023-05-17 21:58:43 35

原创 编程练习【爬楼梯】

先举例分析,一阶楼梯有1种爬法;二阶楼梯有一次两阶或一次一阶爬两次2种爬法;三阶楼梯有一次一阶爬三次,第一次爬一阶第二次爬两阶,第一次爬两阶第二次爬一阶,3种爬法......往后推理可知n阶台阶有(n-1阶台阶的爬法加n-2阶台阶的爬法)次。每次你可以爬 1 或 2 个台阶。著作权归领扣网络所有。需要 n 阶你才能到达楼顶。1. 1 阶 + 1 阶 + 1 阶。解释:有两种方法可以爬到楼顶。解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。

2023-05-16 19:57:45 386

空空如也

空空如也

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

TA关注的人

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