自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何设计出一个比较全面的测试用例

在基于需求进行测试用例设计时,我们需要从功能需求和非功能需求两个方面进行全面的分析。通过明确测试目标、识别关键功能点、设计测试场景和编写测试用例等步骤,可以确保软件的质量满足需求文档中的要求。同时,我们还需要关注系统的性能、安全性、兼容性和可用性等方面,以提供更好的用户体验和保障系统的稳定性。

2024-09-21 20:00:00 1066 2

原创 MySQL一:在Ubuntu下安装MySQL数据库

操作系统版本为Ubuntu 22.04.6LTS。

2024-09-11 20:00:00 669

原创 哈希表如何避免冲突

哈希函数的定义域必须包括需要存储的全部关键码。

2024-09-08 19:30:02 1066

原创 Map&Set之相关概念

系列文章: 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 3. 哈希表如何避免冲突目录1.搜索1.1 概念和场景1.2 模型2.Map的使用2.1 关于Map的说明2.2 关于Map.Entry的说明2.3 Map的常用方法说明3.Set的说明3.1关于Set说明3.2 常见方法说明Map和Set是专门用于搜索的容器或数据结构,它们的搜索效率取决于具体的实例化子类。传统的

2024-09-07 22:00:00 1019

原创 Map&Set之二叉搜索树

TreeMap 和 TreeSet 是 Java 中基于搜索树实现的 Map 和 Set。实际上,它们使用的是红黑树数据结构,而红黑树是一种近似平衡的二叉搜索树。在红黑树的基础上,还添加了颜色属性以及红黑树性质验证来确保树的平衡性,所以我们需要了解一下二叉搜索树这个概念。二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。

2024-09-07 20:00:00 909

原创 如何测试一个算法

第二层循环(B):在每次遍历中,从第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。我们可以考虑方法参数进行设计,比如参数类型,参数值,参数传递,我们可以使用等价类的方法进行设计。在循环计算的过程中,时间过长是否会导致程序出现故障,是否需要加上异常处理try catch。参数传递:过长,够短,NULL,不传参数;参数类型:字符串,数字,集合,列表;无效等价类:参数类型:String,float,double;有效等价类:参数类型:int,参数值:int;

2024-09-06 20:00:00 494

原创 HTTP和HTTPS的区别

HTTP协议的基本格式-优快云博客。理解HTTPS加密-优快云博客。

2024-09-05 22:00:00 1077

原创 synchronized原理

然而,如果在你进入房间的过程中,另一个人也尝试进入同一个房间,并且他发现门没有上锁,那么他会迅速将门锁上,以确保房间的安全。然而,如果在使用过程中,另一个线程也尝试加锁,那么在其加锁之前,偏向锁会迅速升级为真正的加锁状态,此时另一个线程将处于阻塞等待状态。然而,由于线程需要等待锁的释放,这可能会导致线程的执行效率降低,尤其是在高并发场景下。总之,synchronized通过自旋和计数器的组合来实现高效的锁管理,既避免了长时间的阻塞,又减少了不必要的CPU资源消耗。在这种情况下,一次加一个大锁可能更加高效。

2024-09-05 20:00:00 1062

原创 CAS理解和说明

然而,ABA问题是一个潜在的问题,即在CAS操作过程中,一个变量的值被修改两次后又恢复到了原来的值,导致CAS误判为没有发生变化,这个问题就叫ABA问题。完成的,所以CAS操作是原子的,就可以在一定程度上回避线程安全问题,所以我们在解决线程安全问题除了加锁之外,又有了一个新思路。此时的value值变成1,但是CAS的返回值为true,所以oldValue的值仍然为0。在这里最特别的是,上述这个CAS的过程,并非是通过一段代码实现的,而是通过。我们假设内存中的原始数据V,旧的预期值A,需要修改的新值B。

2024-09-04 20:00:00 1747

原创 TCP和UDP的主要区别以及应用场景

综上所述,TCP适用于对数据可靠性要求高、顺序要求严格的应用场景,如网页浏览、电子邮件、文件传输等。TCP和UDP是两种常用的传输层协议,它们在网络通信中扮演着不同的角色。:如语音通话、视频通话等应用需要保证数据的完整性和顺序,通常选择TCP协议。:HTTP协议通常使用TCP作为传输层协议,确保网页内容的完整性和可靠性。:SMTP、POP3和IMAP等邮件协议使用TCP进行可靠的邮件传输。:TFTP协议使用UDP进行简单的文件传输,适用于局域网内的场景。:SNMP协议使用UDP进行网络设备的管理和监控。

2024-09-01 22:00:00 426

原创 常见的锁策略

是一种典型的轻量级锁,它的基本思想是:当一个线程尝试获取锁时,如果锁已经被其他线程持有,那么该线程会不断地循环检查锁是否可用。是一种典型的重量级锁,它的工作原理是:当一个线程尝试获取锁时,如果锁已经被其他线程持有,那么该线程会被挂起并进入阻塞状态,直到锁被释放。2.synchronized既是一个轻量级锁,也是一个重量级锁,默认为轻量级锁(基于自旋锁的方式实现),但是当发现当前锁竞争比较激烈,就会变成重量级锁(基于挂起等待锁的方式实现);:当一个线程对资源加锁后,其他线程必须等待该锁被释放才能访问该资源。

2024-09-01 20:00:00 982

原创 JAVA中的线程池说明二

系列文章。

2024-08-30 20:00:00 491

原创 工厂模式说明

工厂模式的优点在于它可以使代码更加模块化,提高代码的复用性和扩展性。同时,它减少了调用者因创建逻辑导致的错误。缺点是每次增加新产品都需要增加具体类和工厂,可能导致系统中类的个数成倍增加,从而增加系统复杂度。总之,工厂模式在许多实际应用中非常有用,例如日志记录器位置的选择、数据库访问框架设计等场景。在这些情况下,使用工厂模式可以有效管理和隔离对象的创建过程,使客户端代码更加简洁和易于维护。

2024-08-29 20:00:00 617

原创 JAVA中的线程池说明一

线程池是一种管理线程的机制,它预先创建一定数量的线程,并将它们放入一个池中。当需要执行任务时,线程池会从池中选择一个空闲的线程来执行任务,而不是每次都创建新的线程。一旦任务完成,线程会被归还到线程池中,等待下一次使用。在之前我们也了解过,相关的池化技术,字符串常量池,数据库连接池,HTTP连接池等,池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池的主要优点包括:提高性能,降低资源消耗。

2024-08-28 20:00:00 1997

原创 Java中的定时器(Timer)

这个队列可以根据任务的执行时间进行排序,使得时间最早的任务位于队列的前端,即最先要执行的任务。但是此时的wait还没有开始执行,而在这个时候,另一个线程调用了schedule方法,添加了一个新任务,新任务的执行时间为19:45。在上面的说明中,我们可以发现问题出现的原因是:在take和wait的操作之间存在一个时间窗口,在这个时间窗口内,如果有新的任务被添加,那么扫描线程可能会错过这个新任务。此时此刻,新的任务已经插入队列,并且位于队首,但是当前的等待时间仍然是30分钟,导致19:45的任务就被错过了。

2024-08-27 20:00:00 1809

原创 ​​JVM三:JVM垃圾回收机制(GC)

而对于更小的对象,比如4字节的对象,引用计数器的体积与对象本身的体积相等,这意味着整体空间占用翻了一倍。复制(Copying)算法为了解决内存碎片问题而出现的,它将内存分成大小相同的两块,然后将"不是垃圾"的对象复制到另一半,然后再把使用的空间一次性清理掉。通过这种分代回收的方式,我们可以更高效地管理内存,对不同生命周期的对象采用适当的垃圾回收策略,从而优化程序的性能和内存使用效率。以二叉树为例,一个对象的引用可能指向另一个对象,而这个对象的成员又可能指向其他对象,这样的关系构成了一个整体的网络。

2024-08-20 20:00:00 864

原创 JVM二:JVM类加载机制

在上一篇文章中,我们主要简述了JVM内存区域划分的相关知识,下面我们将讲述JVM类加载机制类加载就是.class文件(.java通过javac进行编译成class文件),从文件(硬盘)被加载到内存中(元数据区)的过程。

2024-08-12 22:00:00 1155

原创 JVM一:JVM内存区域划分

JVM是一个应用程序,要从操作系统这里申请内存,JVM根据需求把整个空间,分成几个部分,每个部分各自有不同的功能作用。

2024-08-12 20:00:00 441

原创 优先级队列(堆)

队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。

2024-08-11 20:00:00 2038

原创 打开一个页面,整个过程会使用哪些协议?

6.浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染网页的结构和样式,同时根据HTML中的其他资源的URL(如图片、CSS、JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示;6.浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染网页的结构和样式,同时根据HTML中的其他资源的URL(如图片、CSS、JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示;使用DNS,拿到目标主机的IP地址之后,浏览器可以通过目标IP地址发送请求。

2024-08-09 22:00:00 1726

原创 IDEA中maven jar下载失败问题处理

对于在IDEA中maven爆红问题,主要分为两类,一个是全部爆红,一个是部分爆红。

2024-08-08 20:00:00 887

原创 理解HTTPS加密

例如,替换掉证书中的公钥。之后,客户端可能会被欺骗,使用这个假的公钥来加密数据,并将加密后的数据发送回给黑客,这一攻击手段被称为“中间人攻击”。因此,当客户端请求服务器的公钥时,它们实际上是在请求服务器的整个数字证书,而不仅仅是一个公钥。如下图,在非对称加密中,客户端使用公钥对数据进行加密后传输给服务器,服务器则使用自己的私钥解密以获取对称密钥。在理想状态下,即便黑客通过入侵路由器截获了传输中的加密请求,但如果不掌握这个对称密钥,他们就无法解密数据,从而无法窥探信息内容,确保了数据的保密性,如下图。

2024-08-07 23:30:00 2043

原创 DNS(域名解析系统)

当我们想要访问其他人的电脑或者服务器的内容的时候,我们就需要准确知道对方的IP地址,如果IP地址出错,那么我们就会访问出错,但是IP地址是一长串无关联的数字,想要记住实在是太困难了,从而诞生了DNS(域名解析系统)去解决这个问题,采用一些简单的单词构成的字符串来表示IP地址。以百度为例:百度的IP地址是202.108.22.5,与www.baidu.com相比,前者的记忆难度显然大于后者DNS,全称为域名系统(Domain Name System),是一种负责将域名解析为IP地址的系统。

2023-12-05 19:46:56 1013

原创 阻塞队列与生产者消费者模型

生产者消费者模型是一种用于解决多线程并发问题的编程模式。在这个模型中,生产者负责生产数据,而消费者负责处理这些数据。这种模型的主要目标是将数据的生产和消费过程解耦开来,使得它们可以独立地进行开发、测试和优化。如何来理解这个模型呢?以包饺子为例,一个人负责生产饺子皮,进行擀皮,并将饺子皮放在桌子上,被称为生产者,一个人负责包饺子,消耗饺子皮,从桌子上拿饺子皮,被称为消费者,桌子就是阻塞队列,如果生产饺子皮的人慢了,那么包饺子的就要等一会,如果我生产太快了,桌子上放不下了,我就等一会。

2023-11-29 15:34:07 978

原创 设计模式--单例模式说明

设计模式是在软件设计中常见的一种解决问题的方法论,它是经过反复验证和实践的一种通用的解决方案,用来解决在软件设计中常见的问题。设计模式就是套路,就好像你学习六级的时候,针对阅读问题有阅读的套路,针对听力问题有听力的套路,你根据那些套路,可以更好的做题。在软件开发中也有很多常见的"问题场景",针对这些问题场景,大佬们总结了一些套路,按照套路来实现代码,会更顺利,减少出错的可能性。今天我们来说一下单例模式。单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点。

2023-11-22 19:50:42 114

原创 理解wait和notify

线程最大的问题是抢占式执行,随机调度,但是随机性的东西,往往是最难掌握的,为了解决这个问题,从而会使用一些API让线程主动阻塞,主动放弃CPU,而wait和notify就是其中之一。在Java中,wait和notify是两个用于线程间通信的方法,它们通常与synchronized关键字一起使用,需要注意的是,wait、notify和notifyAll方法必须在同步代码块或同步方法中调用,否则会抛出IllegalMonitorStateException异常。

2023-11-20 14:22:40 267

原创 对于volatile关键字说明

volatile关键字是Java中的一个关键字,用于修饰变量,它保证变量的可见性:当一个线程修改了一个volatile变量的值,新值对于其他线程来说是立即可见的。这样可以确保多个线程在操作同一个变量时,能够看到该变量的最新值,需要注意的是,volatile关键字不能保证原子性,也不能保证复合操作的原子性,如果需要保证原子性,可以使用synchronized关键字。

2023-11-20 08:22:00 54

原创 死锁问题说明

多个进程竞争有限数量的资源时,当一个进程申请的资源被其他等待进程占用,那么该等待线程有可能再也无法改变状态,这种情况被称为死锁,一旦程序发生死锁,线程就会崩溃,无法执行后续工作。

2023-11-13 23:46:26 191 1

原创 Linux的常用命令

2.不要使用 rm -rf /root/text.txt,因为在实际使用中,很有可能rm -rf /_root/text.txt,在/后面多了一个空格(_下划线代表空格),rm 会认为你想删除两个目录,1./,2.root/test.txt,第一个代表根目录,所有文件目录均没有,只能重装系统(5.如果vim没有正确关闭,在下次启动的时候,会报错提示,按D键就是删除未保存的内容,R就是恢复之前的编辑内容。2.输入ls后面加上一个路径(绝对/相对),查看指定目录的内容," / "是·根目录的意思。

2023-11-06 21:00:40 59

原创 IP地址和IP协议

*NAT要求:**公网IP必须是唯一,私网IP可以在不同的局域网中重复,如果某个私网里的设备想访问公网的设备,就需要对应的 NAT 设备(路由器),把 IP 地址进映射,从而完成网络访问,反之,公网的设备,无法直接访问私网的设备,不同局域网的私网的设备无法直接相互访问。,IPv6使用16个字节表示IP地址即128位,是4个版本4相乘,即42亿 * 42亿 * 42亿 * 42亿,这样世界上的每一粒沙子都可以分配到单独的地址,从而解决了IP地址不够用的问题,但是实际上并没有投入使用。

2023-10-31 21:54:46 2534

原创 操作系统里的进程

操作系统里的进程

2023-10-11 21:41:53 500

原创 UDP协议

UDP协议是无连接的传输层协议,它不保证数据传输的可靠性和顺序性。与TCP协议相比,UDP协议具有以下特点:1.速度快:因为UDP协议不需要建立连接、确认数据包和重传丢失的数据包等操作,所以它的传输速度更快。2.简单:UDP协议没有复杂的控制流程和错误处理机制,因此它比TCP协议更加简单易用。3.应用场景广泛:由于UDP协议的速度快和简单,因此它适用于一些对实时性要求高但不需要可靠传输的应用,例如音视频流媒体、游戏等。

2023-10-11 20:52:13 2487

原创 TCP协议中的几个机制

TCP协议一: TCP协议之特点和首部格式TCP协议二: TCP协议之可靠传输TCP协议三: TCP的三次握手和四次挥手确认应答,超时重传,连接管理都是给TCP的可靠性提供的支持,引入了可靠性,那就牺牲了传输效率,可靠性和效率是冲突的,因此UDP虽然没有可靠性,但是传输效率要比TCP高,TCP竭尽可能的提高传输效率运输(本质上补救措施),滑动窗口本质上就是降低了确认应答,等待ack消耗的时间。对于基本确认应答就是如此,每次都是发送一个数据后,等待ack到达后,再发送下一个数据而滑动窗口的本质是批量发送

2023-10-09 23:15:24 250

原创 TCP的三次握手和四次挥手

TCP作为一个有连接的协议,需要建立连接和断开连接,其建立连接就是三次握手,断开连接就是四次挥手,理解三次挥手的意义:1.让通信双方各自建立对对方的"认同",2.验证通信双方各自的发送能力和接受能力是否OK,3.在握手过程中,双方来协商一些重要的参数;四次挥手,理解为什么是四次挥手,理解FIN和ACK的传输机制以及TIME_WAIT意义和作用。

2023-09-24 22:36:43 109

原创 TCP协议之可靠传输

可靠传输是TCP最核心的部分,TCP的可靠传输是通过确认应答+超时重传来进行体现的,确认应答描述的是传输顺利的情况,超时重传描述的是传输出现问题的情况,这两者相互配合,支撑TCP可靠性。

2023-09-23 20:00:00 515

原创 前端发送数据给后端,后端只得部分数据

在Java后端中,类别的变量声明时,首字母不要小写或者大写,大写也是类似的结果,从而避免类似的错误。

2023-09-22 12:00:00 289

原创 TCP协议之特点和首部格式

TCP是一种面向连接的运输层协议,它提供了可靠的数据传输服务。在使用TCP之前,必须先建立TCP连接,在传输完成后释放连接。每一条TCP连接只能有两个端点,即两个套接字(socket)。每个套接字由IP地址和端口号组成。每一条TCP连接都是唯一的,由通信两端的两个套接字所确定。一个IP地址可以对应多个不同的TCP连接,同一个端口号也可以出现在多个不同的TCP连接中。这种特性使得TCP能够在复杂的网络环境中实现可靠的数据传输。

2023-09-21 12:00:00 177 1

原创 对于gitee的项目拉取

gitee项目拉取

2023-09-20 14:35:59 1642 1

原创 OSI七层模型和TCP/IP四层模型

下面是一张图,总结了两个模式的联系和区别。

2023-05-25 15:43:55 214

原创 对接口的理解和说明

Java中的接口是一种特殊的抽象类,它只包含常量和抽象方法的定义,没有任何具体实现,简单而言,接口是多个类的公共规范,是一种引用数据类型。

2023-05-19 14:08:34 294

空空如也

空空如也

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

TA关注的人

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