自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java笔试总结

.

2024-04-09 20:38:47 224 1

原创 Java笔试总结

局域网的网络地址192.168.1.0/24,局域网络连接其他网络的网关地址是192.168.1.1。上网的时候,访问某个网页却突然出现了某个运营商的网页(如联通、电信)。能够PING通同网段的节点,但却如PING不通其他网段的所有节点的最可能的原因()通过POP3协议接收邮件时,使用的传输层服务类型是()C 发送无效的请求,使得正确的请求无法被响应。C 解析特定类型的服务的地址,如MX,NS。下列关于UDP协议的叙述中,正确的是 ()常被提及的Dos攻击的是以下的行为()以下不是DNS服务的作用的是()

2024-04-07 21:27:09 2670 2

原创 Java笔试总结

当系统发生抖动(thrashing)时,可以采取的有效措施是( )C Cache与主存统一编址,Cache的地址空间属于主存的一部分。在 OSI 分层模型中,把传输的比特流划分为帧,是哪一层的功能()在 OSI 参考模型中能实现路由选择,拥塞控制与互联功能的层是()A 设置Cache的目的,是解决CPU和主存之间的速度匹配问题。如果将固定块大小的文件系统中的块大小设置大一些,会造成()。在下面给出的协议中,()是TCP/IP的应用层协议。下面有关Cache的说法哪一个是不正确的()

2024-04-06 21:25:54 978 2

原创 Redis中的持久化

Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束,阻塞只发生在fork阶段,一般时间很短,因此,Redis内部的所有设计RDB的操作都采用类似bgsave的方式。AOF持久化,是以独立日志的方式记录每条写命令,重启时再重新执行AOF文件中的命令来达到恢复数据的目的.AOF的主要作用就是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。虽然压缩RDB会消耗CPU,但可以大幅度降低文件的体积,方便保存在硬盘或通过网络发送到从节点,因此建议开启。

2024-04-06 11:35:02 770 1

原创 Java笔试总结

若一个用户进程通过read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。在使用锁保证线程安全时,可能会出现活跃度失败的情况,活跃度失败主要包括()如果信号量的当前值为-4,则表示系统中在该信号量上有()个进程等待。下面选项中,满足短任务优先且不会发生饥饿现象的调度算法是()选择排队作业中等待时间最长的作业优先调度,该调度算法是()。下列进程调度算法中,()可能会出现进程长期得不到调度的情况。cache(缓存),以下场景中不适合使用cache的是()

2024-04-05 21:08:12 595

原创 Bean相关的知识

在IOC和DI的场景中,bean这个概念十分重要下面我简单做一个总结。

2024-04-05 13:52:22 926 1

原创 Java笔试题总结

解析: Test这个类没有重写equals方法,因此在调用的时候默认执行的是object提供的equals方法,比较的是两个对象的地址,而字符串类型重写了equals方法,比较的是对象的内容是否相同。解析: cpu的执行速度比磁盘io的速度要快很多,对于常用的数据,就会存储在磁盘缓冲区中,可以减少io次数。getmethods: 获取对象实现或继承的所有的public修饰的方法,即包括继承的方法。解析: L2指的是level 2,也就是二级缓存,通过缓存直接与cpu进行交互,是最快的。

2024-04-04 21:27:17 993

原创 HashMap为什么要用红黑树而不用B+树

HashMap本来是数组+链表的形式,链表由于其查找慢的特点,所以需要被查找效率更高的树结构来替。如果用B/B+树的话,在数据量不是很多的情况下,数据都会“挤在”一个结点里面,这个时候遍历效。B/B+树多用于外存上时,B/B+也被成为一个磁盘友好的数据结构。

2024-03-28 21:26:11 201 4

原创 Java中有哪些容器(集合类)?

这些接口拥有众多的实现类,其中最常用的实现类有HashSet、TreeSet、ArrayList、LinkedList、所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现。Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接。注:紫色框体代表接口,其中加粗的是代表四类集合的接口。蓝色框体代表实现类,其中有阴影的是常用实现类。List代表有序的,元素可以重复的集合;Set代表无序的,元素不可重复的集合;

2024-03-28 21:24:12 301 1

原创 数据库中什么时候使用自增id,什么时候不能使用

在这些情况下,可以考虑使用UUID或其他非自增的ID生成策略。UUID是一种在一台机器上生成的数字,它保证了对在同一时空中的所有机器都是唯一的,因此在分布式系统中,UUID可以作为一种全局唯一的标识符。总的来说,是否使用自增ID取决于具体的业务需求和场景。在大多数情况下,使用自增ID是一个很好的选择,但在某些特殊情况下,可能需要考虑其他的ID生成策略。

2024-03-24 14:23:19 604 4

原创 Java为什么创建一个字符串对象需要在内存中创建两份

如果不存在,则先创建这个对象,然后把它加入到字符串常量池中,再将它的引用返回给变量s。总的来说,使用字面量方式创建字符串更加高效,因为它可以直接使用字符串常量池中的对象,而不需要在堆内存中创建新的对象。因此,在实际编程中,我们应该尽可能地使用字面量方式创建字符串,而不是使用。这样的语法创建一个字符串时,实际上会在内存中创建两个对象。,Java虚拟机会在堆内存中创建一个新的字符串对象,这个对象并不会被加入字符串常量池中。关键字创建字符串时,都会在堆内存中创建一个新的对象,这就导致了内存中创建两次的情况。

2024-03-24 14:19:16 295 1

原创 ReentrantLock中的公平锁和非公平锁的底层实现

当一个线程请求锁时,如果锁已经被其他线程持有,请求线程会被放入等待队列的末尾,按照请求的顺序等待锁的释放。非公平锁(Non-Fair Lock): 非公平锁不考虑请求锁的顺序,它允许新的请求线程插队并尝试立即获取锁,而不管其他线程是否在等待。非公平锁的底层实现中,有一个等待队列,但它不会严格按照请求的顺序来分配锁,而是根据线程竞争锁的情况来判断是否立即分配给新的请求线程。底层实现中,无论是公平锁还是非公平锁,都使用了类似的同步器(Sync)来管理锁的状态和线程的竞争。

2024-03-18 22:00:59 389 2

原创 CAS原理

CAS(Compare And Swap)是一种乐观的并发控制机制,它的核心原理是基于硬件层面的原子性保证。CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。

2024-03-18 21:55:41 408

原创 对AQS的理解

排他锁也称为独占锁,在多个线程竞争同一共享资源时,同一时刻只允许一个线程访问该共享资源,即多个线程中只有一个线程获得锁资源。AQS的作用是实现线程的同步和互斥操作,它提供了两种主要的锁机制,分别是排他锁和共享锁。当线程需要获取锁资源时,如果锁已经被其他线程获取,则该线程会被加入到等待队列中等待。共享锁允许多个线程同时获得锁资源,但是在同一时刻只有一个线程可以获取到锁的拥有权,其他线程需要等待该线程释放锁。在AQS中,共享锁的实现与排他锁类似,也是通过内置的同步状态来实现的。

2024-03-18 21:54:27 534

原创 数据库的索引底层采用B+树的优点

1.数据放在叶子节点,可以腾出空间让分支节点可以组织更宽的树,提高数据检索性能。2.叶子节点采用了双向链表,所有数据都维护在叶子节点,对范围查询和排序性能更好。

2024-03-11 21:38:27 417 4

原创 文件操作IO

如何在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学家,因为从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的绝对路径(absolute path)。这里的close非常重要,是用来释放不必要的资源的,这是因为,让一个进程打开一个文件,是需要从系统中申请一定的资源的(占用进程的pcb里的文件描述符表中的资源,这里的表是一个顺序表,长度有限,不会自动扩容)注意,有 File 对象,并不代表真实存在该文件。

2024-02-23 21:03:34 911 8

原创 网络通信基础

网络通信是一个比较复杂的工作,会涉及到一些比较繁琐,非常细节的工作,靠一个协议解决所有问题,导致这个协议非常复杂,非常庞大,因此,我们就需要对协议进行拆分,这么一拆分,拆分出来的协议,有很多,于是就对这些协议进行分类,分层,上层协议调用下层协议,下层协议给上层协议提供服务,避免跨层级调用引起的混乱,降低耦合度,提高了整个系统的可读性。根据IP报头中的字段,就知道当前这个载荷是一个UDP数据包,于是就交给UDP处理,UDP也是要针对数据报进行解析 ,去掉报头,取出载荷,进一步的交给应用程序。

2024-02-23 21:01:17 1122 3

原创 TCP协议

TCP是如果实现可靠性传输的确认应答(核心)超时重传连接管理(三次握手,四次挥手)

2024-02-22 21:17:11 918 4

原创 IP 协议

当客户端给服务器发送请求的过程中,途径路由器的时候,就会触发NAT机制,路由器在转发数据的时候,就会使用自己的外网IP替换掉当前客户端发来的IP数据报中的源IP,当这个数据报到达服务器之后,服务器不知道这个数据报是来自原本的源IP的,只知道来源于路由器这里的外网IP地址。但是,32位表示的数据是有限的,差不多是42亿九千万,既然是地址,原则上是不能重复的,每个设备的IP得不相同,但是实际上是世界上能上网的设备,早就超过了这个数值,那么问题来了,IP地址不够用了该怎么办呢?

2024-02-22 21:15:26 1128

原创 如何自定义一个协议

先有一个需求,有个场景,打开外卖软件,会显示商家列表,列表中有很多项,每一项都包含了一些信息,商家的名称,图片,好评率,距离你的位置,评分这些信息都是通过网络,从服务器获取的,客户端,需要给服务器发送一个请求,服务器收到请求之后,就给客户端返回一个响应,这里的请求和响应该如何创建呢,格式是怎样的呢?

2024-02-21 21:40:23 1179 3

原创 算法刷题:最小覆盖子串

双指针的初始值都为0定义hash表记录t和窗口中的字母个数定义变量统计t和窗口内的有效字母种类有效字母种类:窗口内hash某个字母的个数大于等于t的hash中的该字母的个数时,为有效定义变量,记录最小子串的初始值和长度。

2024-02-21 13:42:52 712 3

原创 回显服务器

写一个应用程序,让这个程序可以使用网络通信,这里就需要调用传输层提供的api,传输层提供协议,主要是两个:UDP,TCP,它们分别提供了一套不同的api,socket api.

2024-02-20 20:10:53 1029 1

原创 串联所有单词的子串

双指针的初始值与滑动窗口的次数相同每一次滑动窗口都需要不同的hash2,因此定义它的位置需要额外注意创建变量count来记录有效字符串个数。

2024-02-20 08:00:00 412 1

原创 算法刷题:找到字符串中所有的字母异位词

定义两个指针:left和right,初始值都为0创建hash表1,用数组模拟,记录p的每个字母出现的个数创建hash表2,用数组模拟,用来记录子串(窗口)中各个字母出现的个数定义变量count,来记录窗口中的有效字母的个数创建链表来存储满足条件的异位词的下标。

2024-02-19 17:34:06 1647 2

原创 算法刷题:水果成篮

首先,滑动窗口需要两个指针,left和right,都需要对数组进行从左往右的遍历,因此,初始值都为0还需要一个用来记录水果种类的变量,这里可以使用HashMap容器,还可以使用数组来模拟容器,这里我们使用HashMap容器来实现除此之外,我们还需要定义一个变量,用来记录当前子数组的最大长度。

2024-02-19 11:37:06 709 1

原创 算法刷题:最大连续1的个数

int left = 0,right = 0,//两个同向指针n = nums.length,//数组长度zero = 0,//计数器,计算零的个数ret = 0;//返回值,最长的子串的长度。

2024-02-18 08:00:00 370

原创 算法刷题:将 x 减到 0 的最小操作数

int left = 0,right = 0,//滑动窗口所需要的两个同向指针n = nums.length,//数组的长度ret = -1,//默认返回值,子数组的最大长度strsum = 0;//子数组的和//数组的和//子数组需要满足的和。

2024-02-18 08:00:00 465 1

原创 算法刷题:无重复字符的最长字串

因为窗口需要两个指针来维护窗口的边界,且两个指针都需要对数组进行从左往右的遍历操作,因此,我们定义left和right两个指针,初始值都为0。

2024-02-17 12:17:47 431 2

原创 算法刷题:长度最小的子数组

如图所示,两个指针都需要从左往右进行遍历,因此初始值都为0除此之外,还需要定义题目所需要的其他变量,如窗口总和sum和窗口总长度len,sum初始值为0,而len的初始值,为了防止比较子数组长度时出错,定义为: Integer.MAX_VALUE。

2024-02-17 10:38:07 490 1

原创 算法刷题:三数之和

因为数组被排序优化了,那么当固定的c是正数的时候,后面的a+b肯定也是大于0的,也就是一定不会出现a+b=-c的情况.这种情况,直接break即可.先给数组进行排序,固定一个数c,然后再找出能够与c相加为0的a+b,即a+b=-c。当找到一个满足的时候,两个指针向中间移动,进行下一轮排查。这道题的解题思路是:三个数:abc。重复的a,b和c,需要进行跳过。而这里的a+b则需要用到。相同的组合不能够同时存在。

2024-02-16 10:01:54 779 1

原创 算法刷题:四数之和

当数据进行加减操作的时候,可能会发生溢出,因此,我们需要在计算a+b=target-d-c;的时候,将数据转换为long。在求a+b+c=target-d的时候,固定c,找到a+b=target-d-c;a+b+c=target的时候固定d,找到a+b+c=target-d。三数之和中,我们固定的是其中一个数,四数之和中,我们则需要固定两个数。题目要求的是a+b+c=target。这道题我们可以参考一下三数之和。然后利用两数之和求解。

2024-02-16 10:01:35 447 1

原创 算法刷题:和为s的两个数

这里我们是利用单调性来使用双指针的对撞指针来解决问题。

2024-02-15 11:35:51 524 3

原创 算法刷题:有效三角形个数

这个时候,right左边的与left相加都会小于最长边,也就不满足构成有效三角形的情况,所以此时的left就已经没有了匹配的价值了,此时需要跳过当前left,即left++,进行下一次判断。个,那么此时与right可以匹配的数已经校验完了,现在只需要将right–,进行下一次校验即可。当nums[left]+nums[right]10。

2024-02-15 10:39:11 528 3

原创 算法刷题:盛水最多的容器

因此,分析可以得出,固定高度低的一方,遍历的结果都是没有意义的,因此,我们只需要将其跳过就行,当前情况下,我们就可以使用left++,来跳过这个数。期间每次都需要计算当前的容量,直到left与right相遇,找到所有v中的最大值,就是题目的结果。left从左往右对数组进行遍历,right从右往左进行遍历。h为左右两边低的一边,w为左右两边之间的距离。遍历的过程中,每一次都需要记录当前容器的体积。

2024-02-13 18:10:33 1086 6

原创 算法刷题:快乐数

fast这个指针每次进行两次求平方和,而slow则是进行一次求平方和,循环执行该步骤,直到fast与slow相等,则说明已经找到了一个在循环圈里的数。由上面两种结果可以推断出:结果必定会出现死循环,我们只需要找到死循环后进入循环圈中的一个数,判断这个数是否为1,就可以判断出该正整数是否为快乐数.那么问题很明确,我们现在需要做的是,找到那个进入循环圈的数,这里我们使用双指针中的快慢指针来完成。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。

2024-02-13 16:48:25 497 1

原创 算法刷题:复写零

注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]dest的初始值为-1,因为它表示复写后的最后一位数的地址。输入:arr = [1,0,2,3,0,4,5,0]cur的初始值为0,因为它需要从零开始遍历数组中的数。输出:[1,0,0,2,3,0,0,4]

2024-02-13 09:44:24 426 1

原创 从零开始实现消息队列(二)

生产者和消费者都是客户端,Broker是服务器,客户端和服务器之间是通过网络进行通信的,在网络通信的过程中,客户端部分要提供对应的API,来实现对服务器的操作。Exchange,Queue,Binding,Message都有持久化需求,要保证程序重启和主机重启过后,上述内容不会丢失.对于Broker来说,要实现以下核心API,通过这些API来实现消息队列的基本功能.其中header比较复杂,我们这里就不进行实现了,并且常见的也就只有前三种。这样的设计是为了避免频繁的创建关闭TCP连接,达到长连接的效果。

2024-02-12 12:51:44 416 3

原创 算法刷题:移动零

当nums[cur]!=0时,为了满足上面的三个区域,应该将当前非零值放在非零值区域的最后一个,也就是desc+1处,而且desc+1处的数字正好也是零区域的第一个,所以,将nums[cur]与nums[desc+1]进行交换,然后将cur与desc进行+1操作,这样就又使得数组满足了上面的三个区域的条件。因为desc表示的是非零元素的最后一个数,那么它在一开始是没有非零的数字的,所以这里给它赋值为-1,当nums[cur]==0时,只需要使得cur++,因为这样正好可以使得cur的左边是已校验的零区域。

2024-02-10 15:18:51 449 2

原创 以太网协议

的,因为数据链路层和硬件是密切相关的,对于以太网来说.对应的硬件设备,就只能支持这么大的数据,换成其他的硬件,就需要搭配其他的数据链路层协议,这里的最大值也就会不一样,我们把这个最大值称为。做出来的,IP数据报的分包,一般不是因为自身长度达到64kb,而是因为这里的。,指的是,这个以太网数据帧的body部分,也就是载荷部分的。这里的ARP和RARP则是用来辅助实现局域网转发的机制。,则以太网数据帧的载荷就是完整的IP数据报。地址(物理地址),长度是。(1kb多一点),这是。,字节之间经常使用"

2024-02-10 13:38:19 390

原创 从零开始实现消息队列(一)

解耦合解释:当主机A给主机B发消息时,A给B发送请求,B给A返回响应,这样的场景中,A和B之间耦合性较高,但是如果在AB之间插入一个阻塞队列,在这种场景中,A发送的请求先存到阻塞队列中,B在接收来自A的请求的时候,取阻塞队列中取就行,就可以很好的解决AB之间的高耦合问题,避免了AB两个主机直接交互.削峰填谷。

2024-02-10 11:54:34 1347 1

空空如也

空空如也

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

TA关注的人

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