- 博客(50)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【深入理解LRU Cache】:缓存算法的经典之作
LRU Cache(Least Recently Used的缩写,即最近最少使用,它是一种Cache的替换算法。看Cache替换算法这篇文章)是一种常见的缓存淘汰算法。用于在有限的缓存空间中管理数据对象。LRU Cache 的核心思想是基于时间局部性原理,即最近被访问的数据在未来可能会被再次访问。
2024-03-07 18:39:30
4325
1
原创 【测试】五子棋项目测试报告
本项目是一个基于Web的五子棋实时对战应用,旨在提供用户之间的多人实时游戏体验。项目采用前后端分离的方法来实现,使用了数据库来存储相关的数据,并将其部署到了云服务器上。前端主要有四个页面构成:登录页、注册页、游戏大厅页以及游戏房间页,测试的目标是验证游戏的功能完整性。
2024-07-03 16:02:02
811
原创 基于SpringBoot和Mybatis实现的留言板案例
需求:1. 输入留言信息,点击提交,后端把数据存储起来。2. 页面展示输入的留言板信息
2024-05-26 13:07:33
786
1
原创 基于SpringBoot和Hutool工具包实现的验证码案例
随着安全性的要求越来越高,目前项目中很多都会使用验证码.验证码的实现方式很多,可以前端实现,也可以后端实现。网上也有比较多的插件或者工具包可以使用,这里选择配合 Hutool工具包 来实现一个简单的验证码案例。
2024-05-19 23:17:14
919
2
原创 【CSS】认识CSS选择器及各选择器对应的用法
CSS(Cascading Style Sheet),层叠样式表。它与 HTML(超文本标记语言)一起使用,用于控制页面的样式。CSS 能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果。能够做到页面的样式和结构分离。CSS 可以理解为“东方四大邪术”之化妆术。对页面的展示进行“化妆”。
2024-05-08 21:06:26
937
原创 【JVM】垃圾回收机制(Garbage Collection)
垃圾回收指的是自动管理和释放不再被程序使用的内存资源的过程。在程序运行过程中,动态分配的内存会被使用,但也需要在不再需要时释放,以免占用过多的内存空间,导致内存泄漏或内存溢出等问题。
2024-05-07 19:00:00
1280
原创 【JVM】类加载机制及双亲委派模型
JVM的类加载机制是JVM在运行时,将 .class 文件加载到内存中并转换为Java类的过程。它是Java语言实现跨平台特性的核心之一。提到类加载机制,就不得不提“双亲委派模型”。它是 Java 类加载机制中的一种设计思想,JVM的类加载机制采用的就是双亲委派模型。
2024-05-07 14:45:23
1046
原创 【网络原理】HTTPS 的工作过程
HTTPS(超文本传输安全协议)是一种用于安全传输数据的网络协议,它通过在HTTP上增加SSL/TLS协议来保护数据的完整性和安全性。HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。
2024-05-05 13:38:34
1135
原创 【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法
HTTP(超文本传输协议)是一种应用非常广泛的应用层协议.HTTP往往是基于传输层的 TCP 协议实现的。(HTTP3之前,都是基于TCP实现的,HTTP3 基于UDP实现)目前主要使用的还是 HTTP1.1 和 HTTP2.0。当前我们讨论的 HTTP 以 1.1 版本为主。HTTP最主要的应用场景,就是网站,在浏览器和服务器之间传输数据。
2024-05-02 20:19:09
1235
原创 【网络原理】数据链路层 及 DNS域名系统
最早的时候,人们使用hosts文件来描述域名和IP地址的关系,即文件中存储域名和IP地址的映射关系(行文本,每一行都有IP和域名)。且MAC地址能表示的范围比IP地址大很多,因此MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的)。前面介绍,IP数据包的拆包是在数据链路层有限制,这往往就是因为这个MTU导致的,而不是达到了IP数据包自身的64KB的限制。:当用户设备需要访问某个域名时,递归DNS服务器会向权威DNS服务器发送查询请求,并将返回的IP地址解析结果返回给用户设备。第二步:南京=>石家庄。
2024-04-28 21:09:22
726
原创 【网络原理】IP协议的地址管理和路由选择
TCP/IP协议族是一套整个网络体系最基础也是最核心的协议。IP协议作为TCP/IP协议族中的一部分,类似于TCP,IP协议也非常复杂。作为后端开发的程序员,大概率会直接和TCP打交道,而IP协议是从事路由器、网关,防火墙等相关网络设备开发的人员更应该关注的,因此这里介绍的是IP协议比较基础的部分。主要从两方面进行介绍:地址管理:分配和管理 IP 地址,确保每个设备在网络中具有唯一的标识。路由选择:确定数据包从源到目的地所经过的路径的过程。
2024-04-28 21:03:00
889
原创 【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)
TCP协议的连接管理机制,是整个网络原理中,最高频的问题,没有之一!因此,这里单独用一篇博客,详细介绍TCP协议的连接管理机制。TCP协议的连接管理机制主要包括三次握手建立连接和四次挥手断开连接。
2024-04-26 19:16:40
1514
1
原创 【网络原理】TCP协议的相关机制(确认应答、超时重传)
TCP(Transmission Control Protocol,传输控制协议)是互联网中的一种有连接的、可靠的、面向字节流、全双工的传输层协议。它是TCP/IP协议族中的一个重要组成部分,用于在网络中可靠地传输数据。TCP协议是以后工作中最常用到的传输层协议,也是面试最常考的协议,非常非常重要!确认应答,可以说是TCP协议用来确保可靠性,最核心的机制。超时重传,可以被视为是确认应答机制的一种补充。
2024-04-26 19:15:23
1099
1
原创 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)
UDP 报文结构指的就是 UDP 数据报的结构。UDP数据报 = 报头(重点)+ 载荷(实际要传输的数据部分)。UDP校验和并不提供数据的可靠性传输,它只能检测到一部分错误,并不能保证数据的完整性或可靠性。要想提高UDP的数据的完整性检查,还可以让UDP结合一些其他错误检测和纠正的机制进行校验,如CRC(循环冗余校验)算法、MD5算法、SHA-3算法、SHA-256算法等。这里简单介绍一下CRC算法和MD5算法。
2024-04-22 22:54:17
3470
原创 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)
Socket套接字,是由系统提供的用于网络编程的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。前面说过,要想进行网络编程,需要使用的系统API,本质上是由传输层提供的。传输层涉及到的主要协议有两个:流套接字:TCP(传输控制协议)数据报套接字:UDP(用户数据报协议)
2024-04-20 19:06:52
2519
原创 【网络通信基础】网络中的常见基本概念
TCP/IP 模型:该模型是实际应用中最常用的网络协议模型,将网络通信划分为五/四个层次,是互联网的基础。各层次具体内容与前面类似,这里假设在网上购买了一件物品,来阐述五个层次做的事情(商家发货需要关注:收件人地址,收件人电话,发件人地址,发件人电话;包裹运输的起点和终点)。
2024-04-18 08:33:13
738
原创 【Java】Scanner类处理大量输入数据时,效率低下的解决方案
在线评测系统(OJ)在进行 ACM模式的题目测试时(牛客、蓝桥杯等),都需要自己进行数据的输入输出。在这种模式下,通常都是使用Scanner类读取标准输入和System.out来进行结果的输出。但是当输入数据量非常大时,即使你的算法完全正确且已经是最优解法了,由于Scanner类的效率问题,仍然会导致程序超时而通过不了(题目卡测试用例)。
2024-04-18 08:31:47
796
原创 【Java多线程】线程安全的集合类
在我们之前使用的集合类中,大部分都是线程不安全的。Vector,Stack,HashTable是线程安全的,之前单线程环境就几乎不使用,即使在多线程环境在也不建议使用。因为这些集合类只是在内部自带了 synchronized,但不能保证有锁就一定线程安全
2024-04-14 20:35:12
1089
原创 【Java多线程】理解锁策略;synchronized原理;CAS原子操作
synchronized 既是悲观锁,也是乐观锁,既是轻量级锁,也是重量级锁,轻量级锁是由自旋锁实现,重量级锁是由挂起等待锁实现,synchronized 是可重入锁,不是读写锁,是非公平锁。
2024-04-14 14:35:48
844
1
原创 【Java多线程】案例(4):定时器
定时器是一种用于在指定时间间隔或特定时间点执行特定任务的工具或设备。在计算机科学中,定时器。定时器是软件开发中的一个重要组件。类似于一个"闹钟"。达到一个设定的时间之后,就执行某个指定好的代码。:日历应用程序或提醒应用程序可以使用定时器来触发提醒事件,例如在预定的时间点提醒用户参加会议或生日。:定时关闭电视或空调等家用电器,以减少不必要的能源消耗。:在游戏开发中,定时器可以用于实现游戏中的动画效果、计时器功能或限时任务等。
2024-04-14 10:01:20
1189
原创 【Java多线程】案例(3):线程池
在Java中,池(Pool)的概念被广泛应用于各种场景,如:常量池、数据库连接池、对象池等,这些池的设计都是为了提高资源的重用性和系统的性能,降低资源创建和销毁的开销。线程池达成的也是类似的效果。
2024-04-11 17:49:39
872
原创 【Java多线程】案例(2):阻塞队列
阻塞队列(Blocking Queue)是一种特殊的队列数据结构,具有阻塞的特性。它主要用于多线程编程中,提供了线程安全的数据交换的方法。具有的特性:当队列满的时候,继续入队列就会阻塞,直到有其他线程从队列中取走元素.当队列空的时候,继续出队列也会阻塞,直到有其他线程往队列中插入元素.阻塞队列的一个典型应用场景就是“生产者消费者模型”。这是一种非常典型的开发模型。
2024-04-09 16:56:06
805
原创 【Java多线程】案例(1):设计模式
单例模式是校招中最常考的设计模式之⼀。单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例。单例模式具体的实现方式有很多,最常见的是"饿汉"和"懒汉"两种。
2024-04-03 19:31:39
1377
原创 【图】最小生成数—Kruskal算法
最小生成树(Minimum Spanning Tree,简称 MST)是指在一个连通的无向图中,找到一个包含所有顶点的树,并且边的权值之和最小。连通图:是指图中任意两个顶点之间都存在路径的图。连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树 就不再连通;反之,在其中引入任何一条新边,都会形成一条回路。
2024-04-03 18:15:47
724
原创 【图】不读概念,用过程轻松理解并实现拓扑排序
实现拓扑排序:借助队列,来一次BFS即可。1.初始化:把所有入度为0的顶点加入到队列中。2.当队列不为空时: (1)拿出队头元素,加入到最终结果中。 (2)删除与该元素相连的边。 (3)判断:删除边指向的顶点,此时入度是否为0,如果为0,加入到队列中。
2024-03-30 14:22:21
1056
原创 【Java多线程(3)】线程安全问题和解决方案
死锁的四个必要条件(重点)1.锁具有互斥特性。(基本特点)2. 锁不可抢占:一个线程拿到锁之后,除非它自己主动释放锁,否则别人抢不走。(基本特点)3. 请求和保持:一个线程拿到一把锁之后,不释放这个锁的前提下,再尝试获取其他锁。(代码结构)4. 循环等待:多个线程获取多个锁的过程中,出现了循环等待。如前面的场景2。(代码结构)
2024-03-30 14:10:47
667
1
原创 【Java多线程(2)】Thread常见方法和线程状态
当在一个线程中调用另一个线程的 join() 方法时,当前线程会被阻塞,直到被调用的线程执行完成或超时。例如在上述代码中,调用 t.join() 表示 main 线程会等待 t 线程执行完成或超时,再执行 main线程。
2024-03-26 18:22:46
1029
原创 【Java多线程(1)】创建线程的几种方式和Thread类及其常见方法
在 Java 中的线程(Thread)是由 Java 虚拟机(JVM)来管理和调度的,它们并不直接映射到操作系统的原生线程(OS Thread)。Java 线程是由 JVM 在后台使用一种称为“轻量级进程(Lightweight Process)”的概念来实现的。
2024-03-24 16:47:54
984
原创 一文让你轻松理解Java中的变量捕获机制
在Java中,变量捕获(Variable Capturing)通常指的是在匿名内部类或Lambda表达式中,引用外部作用域的局部变量。当在一个匿名内部类或Lambda表达式中引用外部作用域的局部变量时,该局部变量会被捕获并保存下来,以便在内部类或Lambda表达式中访问和使用。
2024-03-24 16:31:34
1091
原创 【进程和线程】操作系统中的并发执行机制
假设有一个妹子(漂亮,有才华),有很多人追她。但是她找对象的标准几乎所有人都不能同时满足,于是她决定以每个标准找一个男朋友,然后她就找了三个小哥哥谈恋爱。A. 有钱的小哥 B. 长的很帅的小哥 C. 非常会舔的小哥那在约会的时候,妹子给男朋友们安排的时间不一定是公平的!有的小哥,妹子会花更多的时间,那得到更多时间的小哥对应的等待时间也就更少。即进程的优先级决定了其在就绪队列中被调度的顺序,优先级高的进程会更早地得到处理器时间片,从而更快地执行。
2024-03-22 19:06:19
1591
原创 【Java IO流】缓冲流和对象流的解析和应用实例
Java 中的高级流指的是建立在基本字节流或字符流之上的流,它们提供了更高级别的功能以简化 I/O 操作。除缓冲流和对象流外,常见的高级流还有:数据流、打印流、压缩流、转换流等。
2024-03-17 22:29:15
1191
原创 【JDBC编程】 Java程序操作数据库
JDBC(即Java Database Connectivity,java数据库连接)是 Java 提供的标准接口,用于在 Java 程序中实现与数据库的连接和操作。通过 JDBC,你可以使用 Java 代码来执行 SQL 语句、连接数据库、处理事务以及处理查询结果等。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
2024-03-16 15:45:35
894
1
原创 【MySQL索引和事务】优化数据库性能的关键
索引主要针对数据的检索、排序和连接等操作进行优化,而事务主要保证数据的一致性、并发控制和故障恢复。两者结合使用可以有效提高数据库的整体性能和可靠性。然而,需要注意的是,索引的过多或者错误使用可能会导致性能下降,而不恰当的事务设计也可能影响并发性能。因此,在实际应用中,需要根据具体场景和需求合理地设计和使用索引和事务。
2024-03-16 14:28:43
763
1
原创 【图(2)】:图的广度优先遍历和深度优先遍历
给定一个图G和其中任意一个顶点v0,从v0出发,沿着图中各边访问图中的所有顶点,且每个顶点仅被遍历一次。综上,只要对二叉树的各种遍历非常熟悉(这里主要是层序遍历),然后刷过一些层序遍历、递归回溯的算法,图的广度优先遍历就非常简单了。在二叉树中,我们对树的最多的操作就是各种遍历,而二叉树的前、中、后序遍历都是深度优先遍历,层序遍历就是广度优先遍历。
2024-03-11 22:40:39
1052
原创 【图(1)】:用邻接矩阵和邻接表实现图
图(Graph)是由节点(Node)和边(Edge)组成的数据结构。图可以用来表示对象之间的关系,其中节点表示对象,边表示对象之间的连接或关联。图的基本概念包括以下几个要素:节点:也称为顶点(Vertex),表示图中的对象。节点可以具有属性或标签,用于描述对象的特征。
2024-03-11 21:25:58
1138
原创 【并查集】一种简单而强大高效的数据结构
并查集(Disjoint Set)是一种用来管理元素分组和查找元素所属组别的数据结构。它主要支持两种操作:查找(Find)和合并(Union)。在并查集中,每个元素都被分配一个代表元素(也可以称为根节点),该代表元素用来表示所属的组别。初始时,每个元素都是其自身的代表元素,即根节点。当需要进行合并操作时,实际上是将两个组别的根节点连接在一起,从而将这两个组别合并为一个组别。而查找操作则是通过不断向上查找代表元素,直到找到根节点为止,以确定元素所属的组别。
2024-03-05 16:42:08
892
原创 【布隆过滤器(Bloom Filter)】数据结构:高效判断元素是否存在
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。
2024-03-02 20:31:59
1134
原创 【位图(Bitmap)】数据结构:高效存储与处理大量数据
位图是一种数据结构,是用每一位来存放某种状态,适用于海量数据,整数,数据无重复的场景。通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。
2024-03-01 21:49:12
1773
1
原创 【AVL树(平衡二叉搜索树)】——一种高效平衡的二叉搜索树
AVL树是一颗二叉搜索树,并且是一种自平衡二叉搜索树,它得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis。AVL树通过在每个节点上维护一个平衡因子(Balance Factor)来保持树的平衡,确保树的高度始终保持在一个较小的范围内,从而保证了在最坏情况下的时间复杂度为O(log n),其中n是树中节点的数量。二、AVL树的性质平衡性质:AVL树是一种高度平衡的二叉搜索树,即任何节点的两棵子树的高度差都不超过1。
2024-02-18 22:27:23
653
原创 【HashMap的底层数据结构——哈希表】
虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为哈希表的插入/删除/查找时间复杂度是O(1)。HashMap和HashSet即Java中利用哈希表实现的Map和Set。Java中使用的是哈希桶方式解决冲突的。Java会在链表长度大于一定阈值后(链表长度大于8,数组长度大于等于64),将链表转变为搜索树(红黑树)。
2024-02-10 22:04:22
844
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人