自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的AOF持久化策略(AOF的工作流程、AOF的重写流程,操作演示、注意事项等)

其实,重写的时候,并不关心 aof 文件中原来都有啥,只是关心内存中最终的数据状态,所以,在进行重写时,并不需要再去遍历旧的 aof 文件,把最终结果整理出来,因为,我们只需要获取到最终的数据即可,而最终的数据现在也就是在内存中保存着的呀,所以,子进程只需要把内存中当前的数据,获取出来,以 AOF 的格式写入到新的 aof 文件中即可。此处的子进程写数据的过程,非常类似于 RDB 生成一个快照文件,只不过,RDB 这里是按照二进制的方式生成的,AOF 重写,则是按照 AOF 这里要求的文本格式来生成的。

2024-07-19 23:35:50 963

原创 Redis 的 RDB持久化策略(详细讲解,注意事项,操作演示)

说到一个数据有没有持久性也就是说,当这台主机或进程重启后,数据是否还存在,而在内存中存储数据时,是没有持久性的,只要重启,数据就会丢失,而在硬盘上存储数据时,就可以保证持久性。对于 Redis 来说,Redis 是一个内存数据库,是把数据存储到了内存中,如果想要让 Redis 也做到持久,就需要让数据存储到硬盘上。如果只单一的存储到硬盘上,那么它和Mysql数据库不就一样了么,而 Redis 相比于 Mysql 这样的关系型数据库,最明显的一个优势就是 :快。

2024-07-16 10:25:24 1012

原创 Java 客户端操作 Redis 命令(端口号映射方法,命令演示,注意事项)

通过上述的方式,此时在我们的Java客户端代码上,访问 127.0.0.1:8888 ,就相当于访问 Linux 主机上的 6379 端口了,这个 8888 端口就是 ssh 程序监听的端口。

2024-07-14 15:53:38 884

原创 Redis 中String类型操作命令(命令演示,时间复杂度,返回值,注意事项)

字符串类型是 Redis 中最基础的数据类型,在讲解命令之前,我们先讨论以下 Redis 中的 String 类型,关于 Redis 中的 String 类型,要注意三点:① Redis 中的 “键” 都是 String 类型,而 Redis 中的 value 是多种类型的,而在这多种中类型中,它们存储的元素类型也都是 String 类型,比如,list 类型,set 类型,存储的元素值是 String 类型。

2024-07-12 18:07:05 877

原创 Redis 中Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

前面文章讲解了 Set 类型,Set 类型有一个特点,就是集合中的元素是唯一的。,依靠这个分数,就维护了集合中元素的有序性,什么意思呢,举个例子:在三国中,每一个武将都是有武力值的,我们根据武力值就可以对武将进行一个排名,如下图:在 zset 类型中,默认是按照**“升序”**的方式排列的,提供了一组获取元素分数、元素范围查询等等功能命令,下面就来介绍一些主要并且常用的命令。

2024-07-09 19:16:21 678

原创 Redis中list类型操作命令(操作演示、命令语法、返回值、时间复杂度、注意事项等)

如果 list 中没有元素,blpop、brpop 取元素时就会阻塞等待(类似于阻塞队列),同时也设置阻塞等待的时间,如果在超过等待时间之前,list 中有了元素,就直接弹出,如果等到超过这个最大等待时间,就不在进行等待,而且在等待的过程中,Redis 可以去执行其他的命令。如果指定的 key 存在,从“右侧”向 list 中插入一个或多个元素,如果不存在,则插入失败,和 lpushx 命令用法一样。注意:如果指定的下标越界,没有那么多的元素,那么,在获取的时候,列表中有多少个元素就返回多少个元素。

2024-07-06 16:16:57 1261

原创 Redis中hash类型的操作命令(命令的语法、返回值、时间复杂度、注意事项、操作演示)

注意:在 Redis 中,“键” 称为 key,“值” 称为 value,如果value 的类型是哈希类型,则 “键” 称为 field,“值” 称为 value。注意:返回值是一个字段一个值相对着,同时呢,这也是个危险的操作,如果字段特别多的情况下,就可能使 Redis 阻塞。:O(k),因为插入时,可以插入多个,所以,k 表示插入的键值对(field-value) 的个数。:O(k),k 表示删除的键值对(field-value) 的个数。将 hash 中字段(field)对应的值添加指定的值。

2024-07-03 21:13:24 1088

原创 Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

而 Redis 经常是用作缓存,是替 Mysql 冲锋陷阵的,万一 Redis 被Keys*给阻塞住了,此时其他的查询 Redis 的操作也就超时了,那么所有的查询请求就会给到 Mysql 上,此时突然一大波请求来到给到Mysql,就有可能给Mysql一个措手不及,给 Mysql 也搞挂了,此时就出现大问题了,如果没有及时的发现及时的恢复的话,会出现很大的问题!**时间复杂度:**O(k) ,注意这个k不是所有的数据,而是因为它是可以查看多个key是否存在的,所以这个k是指定的 key 的数量。

2024-07-01 20:11:59 1035

原创 线程池概念、线程池的不同创建方式、线程池的拒绝策略

1.协程:又称为轻量级线程,线程比较轻量是因为线程省略了分配资源的环节,而协程它在着基础上又省略了操作系统调度执行的环节,由程序员自己调度;在Java中呢,主要使用线程池,所以对于协程只是简单提一下;

2024-06-24 17:14:13 1586

原创 分布式系统的演化(单机架构/应用符合和存储服务分离架构/应用服务集群架构/主从分离架构/冷热分离架构)

上述都是针对请求量太大时所做的解决策略,但是,引入分布式系统,不光要能够去应对更高的请求量,同时也要能应对更大的数据量,当数据太多时,也可能会存在一台主机存不下的情况,可以使用多台主机存储,针对数据库进行进一步的拆分,本来一个数据库服务器上有多个数据库,现在引入多个数据库服务器,每个数据库服务器存储一个或多个数据库,如果某个表特别大,大到一台主机存不下,也可以针对表进行拆分,拆分成多个表分布在不同的主机上。而现在计算机硬件发展也是非常快的,哪怕只有一台主机,这一台主机的性能也是非常高的。

2024-06-23 06:52:52 852

原创 什么是哈希冲突?如何解决哈希冲突?HashMap和TreeMap之间的区别?

如下图:当通过相同的哈希算法计算44的哈希地址时,44的哈希地址就和4的哈希地址冲突了。

2024-06-07 18:39:02 800

原创 Selenium 自动化测试工具<2>(Selenium 常用API的使用方法)

可以看到,点击新闻后,又打开了一个新的窗口,但是,上述代码中,我们想要定位的是百度新闻页面的搜索框,从新闻页面中搜索乌克兰,而上述代码它还是在百度主页面查找元素,所以,它找不到这个搜索框,所以就会报错。场景2: 场景1:在百度输入框中输入“张三”,点击百度一下按钮进行搜索,搜索出来之后,点击导航栏上的后退按钮,重新返回到百度的主页面,然后再点击前进按钮,重新回到刚才搜索到的张三页面。场景1:在百度输入框中输入“张三”,点击百度一下按钮进行搜索,搜索出来之后,点击导航栏上的后退按钮,重新返回到百度的主页面。

2024-05-26 17:19:47 485

原创 Selenium 自动化测试工具(1) (Selenium 工作原理,常用API的使用)

将人工要做的测试工作转换成让代码去执行测试,以提高测试效率和测试的质量。测试工具可以是一个jar包,用的时候,导入这个包,调用方法使用,或者是一个web网站,输入测试数据进行测试,或者是一个exe程序,就例如fiddler工具这样,测试工具是各种各样的,

2024-05-22 11:58:34 1213

原创 什么是MVC?什么是SpringMVC?什么是三层架构?

MVC(Model View Controller),它是一种思想,他把软件系统分为 以下三部分:Model(模型):用来处理程序中数据逻辑的部分View(视图):在应用程序中,专门和浏览器进行交互,展示数据的资源Contreller(控制器):可以理解成是一个分发器,来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图,也就是用来连接视图和模型的举个例子:1.比如进入京东的购物页面2.搜索手机。

2024-05-10 08:16:40 6436 4

原创 10000字讲解IoC 思想以及五大注解

什么是 Spring 呢?我们经常听到的都是说 Spring 是一个框架,让我们的开发变得更加简单了,但是这个概念相对来说,太抽象化了,具体点来讲:Spring是包含了很多工具方法的IoC容器什么是容器?容器是用来容纳某种物品的装置。在生活中,水杯就是一个容器,它用容纳水,垃圾桶也是一个容器,它用来装垃圾。在我们学习过的数据结C构中,像 List,Map,Statck等,也都是一个容器,用来存储数据。还有 Tomcat,它就是一个 Web 容器,在上面可以部署很多的Web服务。什么是 IoC?IoC:inv

2024-05-07 14:13:00 996

原创 10000 字详细讲解 Spring 中常用注解及其使用

如下图京东购物页面,当我们选择点击访问某一类商品时,就会向后端发起 HTTP 请求,当后端收到请求时,就会,那么,后端是如何来查找处理请求相对应的代码呢?答案就是:通过注解来寻找,同时,注解也有其他很多的功能,也分成了很多的注解,下面就来讲解一些网站开发中,一些常见的,使用频率比较高的注解。

2024-05-06 20:51:40 1154

原创 阻塞队列、生产者消费者模型、阻塞队列的模拟实现等干货

1、阻塞队列是线程安全的2、带有阻塞特性:​ a.向队列中添加元素时,如果队列满了,就会阻塞等待,直到其他线程从队列中取走元素时才会解除等待​ b.从队列中向外拿元素时,如果队列为空,就会阻塞等待,直到其他线程向队列中添加元素后,才会解除等待。

2024-03-06 22:40:23 842

原创 wait() 、notify()、notifyAll() 的详细用法

首先,我们知道,线程的执行顺序是随机的(操作系统随机调度的,抢占式执行),但是有时候,我们并不喜欢这种随机的执行,更喜欢的是它们能够顺序的执行,所以,Java就引入了一种机制,wait() 和 notify() ,它们的而前面的文章中也讲过一个方法,也是能影响线程的执行顺序,但是呢,这个join只能控制线程结束的顺序,而我们想要的是,线程不结束,也能按照我们自己规定的顺序去依次执行;

2024-03-05 22:19:37 1305

原创 volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

因为访问一个变量时,CPU就会先把变量从内存中读出来,然后放到CPU寄存器中进行运算;运算完之后,再将新的数据在内存中进行刷新;对于操作系统来讲,

2024-03-04 00:42:20 867

原创 synchrosized 的可重入特性、死锁、哲学家就餐问题以及解决死锁的方法等干货

例如:让线程1先获取 lock1,线程2获取 lock2,然后在 thread1 的内部再尝试获取 lock2,在 thread2 的内部再尝试获取 lock1。以上虽然时嵌套加锁的,但是并未形成环路,得到lock1锁的线程执行,未获得lock1的线程阻塞等待,并且也无法获得lock2。**那么,问题就来了,如果加两次锁,在 }2 的地方是否应该解锁呢?第一点和第二点是锁的特性,如果想要解决死锁,就要破坏第三点和第四点,在Java中,如果一个线程对同一个锁连续加锁两次,不会造成死锁现象。

2024-03-03 00:12:44 564

原创 如何解决线程安全问题(synchronized、原子性、产生线程不安全的原因,锁的特性,加锁的方式等等干货)

那么我们修改一下代码:将thread1的join放在thread1的start后面,最后运行的结果就是对的!!!这个。

2024-03-02 23:47:36 937

原创 什么是后台线程?线程是否存活?线程的中断、join() 等待线程 以及 线程状态 等等干货

通过代码可以看到,想要休眠1000 毫秒,却休眠了1005秒,因为:系统会按照1000这个时间来控制线程的睡眠,等达到1秒后,就会唤醒线程,就会使线程从阻塞状态转化为就绪状态,但是呢,当线程转换为就绪状态后,并不是说就会直接去CPU上执行,这中间会有一个“调度开销”,所以,在时间上,就会和我们预期的不一样。在上述代码中,因为sleep() 的原因,所以抛出了异常,当Thread发出中断信号时,正在处于休眠的线程就会被强制唤醒,唤醒之后,sleep() 就会抛出异常,但是线程并没有终止,而是继续执行;

2024-02-29 00:18:11 847

原创 Java中几种常见的创建线程的方式

上述结果就可以看到,两个线程分别在执行自己的代码,这也就印证了每一个线程都是一个单独的”执行流“, 本来在运行时只有一个执行流,但是遇见 thread.start() ,就开始了兵分两路”同时执行“, 就达到了并发编程的效果,而这里的并发指的是”并行+并发“, 因为,程序员在写代码的时候,是无法感知到这两个线程到底是在一个CPU核心上调度执行还是在两个CPU核心上同时执行, 所以在宏观上也就是我们人的肉眼看着都是在同时执行的,这一点在进程那篇文章中已经讲解的很清楚了。也就没有实现”并发编程”;

2024-02-28 23:31:02 264

原创 进程基础知识(什么是进程?什么是 pid/内存指针/文件描述符表?以及进程的状态,进程的优先级,进程的记账信息,进程的上下文,虚拟地址空间等等)

早期的操作系统,是一个“单任务操作系统”(单核CPU),同一时刻只能有一个进程运行,如果想要运行下一个进程,就需要先退出上一个进程,,而进程要执行,就是需要CPU来执行上面的指令,但是对于单核CPU来说,一个CPU核心,同一时刻只能执行同一个进程的指令,这里也可以进行一个比喻,把CPU核心比喻一个舞台,进程比喻成一个演员,一个演员舞台上表演时,其他演员不能去干扰;通过上述方式,把进程之间给隔离开了,进程之间就无法互相访问,交互数据,但是,如果某个需求中,需要多个进程之间相互配合,那该怎么办呢?

2024-02-27 22:15:09 856

原创 线程基础知识(线程的概念,线程与进程的区别等)

比如有一家公司,现在要到银行去进行 财务转账、贷款、办理社保等等业务,公司就派了张三去完成,但是呢,由于业务比较多,张三一个人完成起来就非常的费时间,所以就喊来了李四和王五帮忙,这样效率就会高很多,所以公司就好比是一个进程,张三、李四、王五就好比是三个执行流(线程),虽然它们各自都在完成不同的任务,但分配一个业务员(一份资源)也可以同时为他们服务,因为归根结底它们都是在为同一家公司工作,与上篇文章中的进程大大不相同,上一个文章中举了取钱的例子,读者可以去看一下就会茅塞顿开了;这之间有没有这要那个的顺序;

2024-02-27 21:38:01 774

原创 什么是Maven ??? (以及关于依赖,中央仓库,国内源)

本篇文章详细讲解了如何创建 Maven 项目,以及什么是中央仓库,私服,国内源,依赖管理等

2024-01-03 17:56:45 1437

原创 常见的锁策略详细讲解(悲观锁 vs 乐观锁,轻量锁 vs 重量锁,自旋锁 vs 互斥锁,公平锁 vs 非公平锁,读写锁等)

本篇文章详细讲解了各种锁策略,以及代码的演示,有需要的小伙伴请认真查阅!!!

2024-01-02 15:44:03 1000

原创 10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

本篇文章主要讲解了TCP报文,确认应答,超时重传,三次握手,四次挥手,流量控制,拥塞控制,滑动窗口,捎带应答,延时应答等众多重要机制以及粘包问题,TCP和UDP的区别总结

2023-12-19 22:01:40 1507

原创 TCP流套接字编程

对于TCP来说,并不需要,前提是需要先把连接给建立上。这里的“有连接”和“无连接” 不是传统意义上的连接,而是通信双方都保存了对端的信息,而UDP呢,它是每发送一次数据,都要指定一次对端的IP和端口号,然后将生成的数据报作为send的参数发出去,下图就是UDP中的发送数据报的核心代码;TCP和UDP差距是很大的,在数据传输方面,UDP是面向数据报的,而TCP是面向字节流的的,下面列出了使用TCP来实现网络编程所依赖的Socket类,通过这些类和具体的例子,来详细的讲解TCP网络编程。

2023-12-08 22:14:22 1157

原创 UDP数据报套接字

往 Socket 文件中写数据,就相当于通过网卡发数据,从 Socket 文件中读数据,就相当于通过网卡接收数据。注意:为了解决空字符或读取请求时读取的字符串长度不够,造成数据丢失的情况,这里约定,客户端和服务端发送的数据都已 ‘/3’ 进行结尾,读取到 ‘/3’ 就表示请求或响应都全部读取完成。3.服务器接收到请求并计算响应:根据该请求数据,如果是一目录,列出目录中所包含的所有文件及文件夹,如果是一个普通文件,列出文件所在目录中的所有文件及文件夹。5.客户端接收响应:打印出所有的文件及文件夹。

2023-12-05 20:48:17 2002 2

原创 网络通信基础

网络传输时,本质是通过光/电信号进行传输的,例如,低电平表示1,高电平表示0,或者高频光信号表示1,低频光信号表示0,由这样一组 0 或 1 组成的二进制数字进行网络通信,但是,网络通信时,传输的数据由很多种,有:图片,视频,文本等,不同类型的数据,格式也不同,在网络传输时,如何识别这是一个图片还是文本呢?网络协议,是在网络数据数据传输时,在经过所有网络设备时,都必须遵守的一组约定,如,通过哪种格式建立连接,按照哪种格式去识别传输过来的数据,只有遵守这组约定,计算机之间才能互相通信交流。

2023-11-30 21:25:44 511

原创 【数据结构】优先级队列(堆)

这里不做详细的介绍,只需知道,所有引用类型所创建的对象都保存在堆上,包括数组;而这里的堆是将所有的元素,按照完全二叉树的顺序存储方式存储到了一维数组中;

2023-09-16 16:41:07 433

原创 【数据结构】七大排序

假设在一个序列中,出现了相同的数据,经过排序之后,这些相同的数据之间的相对位置保持不变,比如,r[i] = r[j], 在排序之前,r[i] 在 r[j] 之前,排序之后,r[i] 仍然在 r[j] 之前,则这样的排序称为是稳定的,反之是不稳定的;而且一个稳定的排序是可以变成不稳定的,但是一个不稳定的排序是不可以变成稳定的;

2023-09-16 16:23:55 298

原创 【数据结构】二叉树

2.从根节点衍生出了m (m>0) 个子节点,而每一个子节点也都是一个集合,其中每一个子节点又作为一个根节点衍生出了m个子节点,也称为一颗子树,每棵子树的根节点上面只有一个节点,下面可以有多个或者0个子节点;在生活中,不管你是城里人儿, 还是村儿里人,相信大家都见过树,在树上面可以看到许多的分支,而一个小分支又衍生出了许多的更小的分支,最后直到开花结果,而接下来要讲的。​ **孩子节点或子节点:**如果一个节点含有的子树,则子树的根节点称为该节点的子节点,如图 E 是 B的子节点, J 是E的子节点;

2023-09-15 11:31:14 1751 1

原创 【数据结构】3000字剖析链表及双向链表

2、有头或者无头链表3、循环或非循环链表根据以上三种链表结构又可以组合成一下八种结构:而最常用的是以上无头单向非循环链表无头双向链表,下面就针对于两种链表进行详细的剖析!!!

2023-09-06 09:04:37 294

原创 【数据结构】小白都能看得懂的顺序表

不管你是小白还是复习,这篇文章都非你莫属

2023-09-04 22:41:16 82

原创 图解LeetCode链表题(中等)剖析

因为,如果是1的话,当遍历第一个节点时,是不可能生成1的,就导致每个节点没选中的概率不一样,而如果是0的话,当遍历到第n个结点时,前面的每个节点被选中的概率都是1/n;3、当cur遍历到值是0的节点时,就停止遍历,将head1所在的节点中的值设置为sum,再将里面所存的地址变为cur里面存的下一个 节点的地址,这样就把一小段两个0之间的不为0的节点和最后一个0节点给删除掉了,之后cur向后移动一个结点,把head1在移到cur的位置,这样就又开始一小段节点的遍历。第一种方法:利用顺序表存储每一个值。

2023-05-29 09:45:23 438

原创 图解LeetCode链表题

本篇文章主要详细的用图解的方式为大家讲解了简单程度的链表题,如果题中有错误的地方,还麻烦您在评论区指出,你的意见就是我最大的进步!!!

2023-05-25 14:06:56 860

原创 关于接口中的一些常用实例以及比较方法的区别

非常详细的接口实例讲解

2023-05-21 11:13:03 652

原创 你真的懂Java中的Cloneable接口和深拷贝么?

全网最细深拷贝讲解

2023-05-21 11:03:22 1383 1

空空如也

空空如也

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

TA关注的人

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