自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Redis】Redis常用命令之Hash

时间复杂度:只查询⼀个元素为O(1),查询多个元素为O(N),N为查询元素个数。时间复杂度:插⼊⼀组field为O(1),插⼊N组field为O(N)。时间复杂度:O(N),N为field的个数,返回值:字段和对应的值。时间复杂度:O(N),N为field的个数,返回值:字段列表。时间复杂度:删除⼀个元素为O(1),删除N个元素为O(N)。时间复杂度:O(1),返回值:1表示设置成功,0表示失败。时间复杂度:O(1),返回值:1表示存在,0表示不存在。时间复杂度:O(1),返回值:字段对应的值或者nil。

2024-03-14 20:25:38 1217

原创 【Redis】Redis常用命令一

如果对应的值是负数,则视为减去对应的值。12.incrby:将key对应的string表⽰的数字加上对应的值。如果key之前存在,则覆盖,无论原来的数据类型是什么,之前关于此key的ttl也全部失效。时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1).返回值:替换后的string的⻓度。如果对应的key不存在或者对应的数据类型不是string,返回nil。时间复杂度:O(1).追加的字符串⼀般⻓度较短,可以视为O(1),返回值:追加完成之后string的⻓度。

2024-03-13 20:15:49 1644

原创 【计算机网络】TCP协议

源端口号和目的端口号就是说数据从哪里来到哪里去。4位首部长度:TCP报头的长度是不固定的报头最短是20字节(没有选项),报头最长是60字节(选项最多是40字节)。校验和:和UDP协议一样。保留位:因为UDP的长度是64kb,我们无法改变,所以发明TCP的人做出了改变,加入了保留位,先占个位置,如果后面需要就可以进行扩展使用。1.有连接:发送方和接收方会保留对方的信息(如果A和B建立连接,B拒绝了,就无法建立连接,通信就无法完成)2.可靠传输:A给B发消息,消息有没有成功送达A可以感知到(如果发送失败就可以进

2023-11-16 22:45:59 998 1

原创 【计算机网络】UDP协议

校验和本质上其实也是一个字符串,是通过原始数据生成的体积比原始数据更小,原始数据相同得到的校验和就一定相同,反之,校验和相同那么原始数据大概率也是相同的(不相同的概率忽略不计)。因此就需要能识别出出错的数据,所以就有了校验和。5.对比checksum1和checksum2是否相同,如果相同则认为data1和data2大概率是相同的(不同的概率忽略不计)否则data1和data2一定是不相同的。3.接收方收到数据(收到的数据据data2)收到的校验和checksum1,收到的数据有可能和发送的不一样。

2023-11-14 22:06:43 894 3

原创 【文件IO】 File类的用法和 InputStream OutputStream 的用法

int n;break;// 处理读取到的数据。

2023-11-12 20:37:37 149

原创 【文件IO】认识文件

即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。我们先来认识狭义上的文件(file),针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存一个整体,而是独立成一个个单位进行保存,这个独立的单位就被抽象成文件的概念。从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的。

2023-11-10 21:44:25 160

原创 【多线程】synchronized的特性

在调用 increase2 的时候, 先加了一次锁, 执行到 increase 的时候, 又加了一次锁. (上个锁还没释放, 相当于连续加两次锁),因为synchronized是可重入锁,所以上面的代码不会出现死锁问题。偏向锁不是真的加锁,只是在对象头中做一个偏向锁的标记,记录这个锁属于哪个线程,后续如果没有所来竞争就不进行同步操作,避免了加解锁的开销。如果锁竞争进一步激烈,自旋锁就不能快速获取锁的状态了,进而就会升级为重量级锁(此处的重量级锁就是用到内核提供的mutex)会根据情况,进行依次升级。

2023-11-08 21:27:51 117

原创 【多线程】线程池总结带你详细了解线程池

② 使用 Executors.newCachedThreadPool()创建出的线程池对象的特点是线程池数目能够动态适应,随着往线程池里添加任务,这个线程池里的线程数量会根据需要自动被创建,创建之后也不会着急销毁,会在线程池里存在一段时间以备随时使用。handler:线程池的拒绝策略,一个线程池能够容纳的任务数量有上限,当持续向线程池中添加任务,一旦达到上限,不同的拒绝策略有不同的效果。corePoolSize:核心线程数------>我们如果把线程池理解成一个公司,核心线程数就相当于正式员工数量。

2023-11-03 16:23:26 157

原创 【计算机网络】计算机网络中的基本概念

网络互连就是将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。

2023-11-01 21:59:56 599 2

原创 【数据结构】模拟实现栈和队列

栈是一种特殊的线性表,只允许在固定的一端进行插入和删除操作,进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈的数据遵循后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做压栈/进栈/入栈,入的数据在栈顶。出栈:栈的删除操作叫做出栈,出的数据在栈顶。

2023-10-27 17:07:26 325

原创 【数据结构】模拟实现LinkedList

LinkedList是双向链表结构可以适用于任意插入场景下的插入和删除,效率较高,时间复杂度为O(1)。

2023-10-22 17:06:41 474

原创 【数据结构】模拟实现无头单向非循环链表

学过ArrayList后我们知道它的底层是用数组来存储元素的,是连续的存储空间,当我们要从ArrayList任意位置删除或插入元素时,我们要把后续整体向前或后移动,时间复杂度为O(n),效率比较低,因此ArrayList不适合做需要过多任意位置插入或删除的场景,这种场景我们使用LinkedList(链表)比较合适。

2023-10-21 18:07:11 451 1

原创 【数据结构】模拟实现顺序表

ArrayList是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般是用数组完成的。ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

2023-10-20 19:41:46 417 2

原创 【多线程】线程安全问题和解决方案

这个就是不具备原子性的。要想第二次加锁成功就需要第一次加锁释放锁,第一次要想释放锁就需要执行到 1 的的位置,而执行到 1 的位置就需要第二次加锁成功,但是由于第二次加锁导致了阻塞,这样就没有办法执行到 1 ,也就无法释放锁。我们可以约定加锁的顺序,避免循环等待,我们可以针对锁进行编号,比如加多把锁的时候,先加编号小的锁,再加编号大的锁(所有线程都遵守)当这个锁被某个线程占有的时候,其他线程尝试进行加锁,就加不上了,就会阻塞等待,一直等到之前的线程解锁之后,由操作系统唤醒一个新的线程,再来获取到这个锁。

2023-10-19 21:56:14 194

原创 【多线程】线程的状态

了解线程的状态、含义以及切换条件

2023-10-15 20:25:37 151 1

原创 【多线程】Thread类的基本用法

带你详细了解Thread类

2023-10-13 18:43:28 135

原创 【多线程】线程与进程的区别与联系

带你一分钟了解什么是多线程

2023-10-12 12:48:22 288 6

原创 进程调度的基本过程

这里的A和B看到的内存都是虚拟内存,比如A操作某个内存中的数据,就需要把操作的虚拟内存地址告诉系统,系统再把操作的虚拟地址翻译成物理地址(有一个类似于hash表这样的映射结构,称为”页表“)。(3)进程的上下文:进程从CPU离开之前,需要”保存现场“,把当前CPU中各种寄存器的状态都记录到内存中,等下次进程回到CPU上执行的时候,就可以把寄存器的值恢复回去,进程就会沿着上次执行到的位置继续向后执行。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

2023-10-11 19:58:49 146

原创 【MySQL】快速了解MySQL基础

命令,而charset utf8 可以设置数据库字符编码为utf8,MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是使用utf8mb4,建议大家都使用utf8mb4。使用数据库后,我们可以查看当前数据库下有哪些表,可以使用。在我们操作数据库的时候,我们要先使用数据库,可以使用命令。登录MySQL后我们可以使用命令。如果我们想创建一个数据库可以使用。,来查看有哪些数据库。use 数据库名;

2023-10-09 23:19:51 1568 3

原创 【数据结构】初识泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。泛型,泛顾名思义就是广泛的意思。通过上面的代码我们发现,虽然在这种情况下,当前数组任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有一种数据类型。在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。我们来看这道练习:写一个泛型,实现一个方法,方法是求指定类型数组的最大值。注意:泛型只能接受引用类型,所有的基本数据类型必须使用包装类。这样它就只接受 Number 的子类型作为 E 的类型实参。

2023-09-12 19:06:13 773 24

原创 【JavaSE】String类

s2是先在堆中创建空间,里面有value属性,指向常量池的 “hello” 空间,如果常量池没有 “hello” 则创建,如果有则通过value指向,s2最终指向的是堆中的空间地址。String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。s1最终指向的是常量池的空间地址。StringBuffer保存的是字符串变量,里面的值可以更改,每次更新不用创建新的对象,效率高于String。字符串是不可变的,字符串对象一旦被分配,值就不可变。

2023-09-01 21:19:43 1355 33

原创 【JavaSE】内部类

带你全面认识内部类

2023-08-25 22:16:09 510 24

原创 【JavaSE】接口

帮助你深入了解接口

2023-08-24 22:07:09 594 17

原创 【JavaSE】详解final关键字

让你对final认识更上一层

2023-08-23 14:05:59 396 13

原创 【JavaSE】面向对象之多态

快速掌握多态

2023-08-20 17:38:58 516 31

原创 【JavaSE】面向对象之继承

详解继承,让你对继承有更深的认识。

2023-08-17 14:54:01 401 6

原创 【JavaSE】面向对象之封装

在 age 属性的 setAge() 方法中,首先对用户传递过来的参数 age 进行判断,如果 age 的值不在 18 到 45 之间,则将 Employee 类的 age 属性值设置为 18,否则为传递过来的参数值。封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

2023-08-15 12:30:26 342 5

原创 【JavaSE】数组的定义与使用

对数组的深入理解

2023-08-11 14:49:39 287 11

原创 【JavaSE】方法的使用

详细了解Java中方法的概念和使用

2023-08-10 22:41:33 238 4

原创 【C语言】指针的进阶2

详解指针

2023-08-09 14:50:06 261 14

原创 【C语言】指针的进阶1

指针的进阶带你深入理解指针

2023-08-03 19:11:05 135 18

原创 【C语言】初阶指针

初阶指针

2023-07-28 10:43:46 203 28

原创 【三子棋】用C语言简单实现三子棋

三子棋大家应该都不陌生,三子棋是一款古老的民间传统游戏,又被称为黑白棋、圈圈叉叉棋、井字棋、一条龙、九宫棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子连成一条线的一方则视为胜利者。我们采用模块化编程思想把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "xxx.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。

2023-07-25 18:28:58 191 22

原创 VS studio实用的调试技巧

非常实用的vs studiot调试技巧

2023-07-23 12:08:47 695 19

原创 C语言快速入门

**C语言**是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制。

2023-07-22 13:25:13 425 25

空空如也

空空如也

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

TA关注的人

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