自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Docker 基础使用(5)Compose

简单理解:根据前面的学习,在容器启动时,由于 存储卷、网络管理、容器间的相互依赖等因素, 使得启动指令参数变的复杂,并且通常需要分多段指令执行。docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。项目( project ): 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。• 查看正在运行的服务的状态。

2024-06-11 18:34:20 1255

原创 Docker 基础使用 (4) 网络管理

其他相关链接。

2024-06-07 22:48:29 814

原创 Docker 基础使用(3) 存储卷

解释:管理卷默认映射到宿主机的/var/lib/docker/volumes 目录下, 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎 daemon 自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系. 这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录。解释:绑定数据卷映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,使两个已知的路径建立关联关系。卷(机制)的本质是文件或者目录,

2024-06-03 17:47:09 1238

原创 Docker 基础使用(2) 镜像与容器

每个容器内部都存在一个 Init 进程(类似于Linux中的进程ID为1的进程),容器中其他所有进程都是此进程的子进程。使用此参数时,仍需要注意,如果使用-m 设置了此容器内存上限,那么当容器到达内存资源上限时,主机不会关闭容器,但也不会继续向此容器继续分配资源,此时容器将处于 hung 状态。这种设计使得镜像在构成时的流程为,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。当一个镜像被修改时,只需存储新增的或修改过的层,而其他层可以继续被之前的镜像所使用。

2024-06-03 17:47:03 811

原创 Docker 基础使用 (1) 使用流程概览

侧重对docker基本使用的概览。

2024-05-28 22:57:08 1214

原创 Git 基础使用(4)标签管理

创建签名标签:使用 git tag -s <tag_name> -m “<tag_message>” 命令创建签名标签时,Git 会使用您配置的 GPG 密钥对标签进行加密。通过为标签添加数字签名,可以确保标签的真实性和完整性,防止标签被篡改或伪造。通过使用签名标签,可以增加对代码版本的信任度和安全性,特别是在开源项目或多人协作的项目中更为重要。(Signed Tag)是 Git 中的一种特殊类型的标签,它与普通的标签(轻量标签和带注释的标签)相比,多了一个数字签名的功能。

2024-05-18 20:58:37 444

原创 Git 基础使用(3)远程操作

在生成的.ssh目录⾥⾯有 id_rsa 和 id_rsa.pub 两个⽂件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放⼼地告诉任何⼈。在你的 Git 仓库根目录下创建一个名为 .gitignore 的文件(Git 仓库的根目录指的是 .git 目录所在的目录,而不是 .git 目录本身)。服务本身也可以对仓库里的内容做修改(例如直接在gitee网站里对README.md文件进行编辑),在这种情况下远程仓库(服务器仓库)

2024-05-18 20:58:32 718

原创 Git 基础使用(2) 分支管理

当您尝试将一个分支合并到当前分支时,如果当前分支的指针可以直接移动到要合并的分支的最新提交,而不需要创建新的合并提交,Git就会执行快进合并。但在在这种 Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提交到底是 merge 进来的还是正常提交的。在快进模式下,Git会简单地将当前分支指针直接指向要合并的分支的最新提交,从而使得提交历史保持线性。②切换分支:当我们切换分支时,HEAD 会随之移动到所切换到的分支上,指向该分支上的最新提交。因为创建、合并和删除分⽀。

2024-05-14 20:49:11 1478 1

原创 Git 基础使用(1) 入门指令

当对⼯作区修改(或新增)的⽂件执⾏ git add 命令时,暂存区⽬录树的⽂件索引会被更新。当执⾏提交操作 git commit 时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原“。⼀般存放在 .git ⽬录下的 index ⽂件(.git/index)中,我们把暂存区有时也叫作索引(index)。修改包括增、删、改。

2024-05-14 20:48:58 595

原创 Docker 基础使用(0)基础认识

①Docker本质其实是LXC之类的增强版,它本身不是容器,而是容器的易用工具。容器是linux内核中的技术,Docker只是把这种技术在使用上简易普及了。Docker在早期的版本其核心就是LXC的二次封装发行版。Docker作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。② Docker 是一个开源的平台,用于开发、交付和运行应用程序。它利用容器化技术,将应用程序及其依赖项打包到一个称为容器的独立单元中。这使得应用程序能够在任何环境中快速部署和运行,无需担心环境差异或依赖问题。

2024-05-13 12:08:16 1109

原创 Redis 哨兵机制

确认主节点故障后要选出一个新的主节点,这个⼯作不需要所有的哨兵都参与。每个哨兵根据算法(该算法反应节点性能)推荐一个自认为合适从节点作为新的主节点,其他所有节点对所有被推荐的节点进行投票,有被推荐的节点票数过一半则结束其他所有的投票,直接得出新的主节点。Redis哨兵机制(Sentinel)是一种Redis的高可用解决方案,它由一组Redis服务器组成,这些服务器负责监控Redis主节点和从节点的健康状态,并在主节点发生故障时自动进行故障转移,选举出一个新的主节点,从而确保系统的稳定性和数据的完整性。

2024-05-08 23:17:30 991

原创 Redis 主从复制 初步认识

Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点数据恢复。②负载均衡的理解:启动多个Redis服务器,它们数据相同,每个节点平均分配client-Redis发起的请求。在计算机网络和系统架构中,拓扑(Topology)是指网络或系统组件之间的物理或逻辑连接方式。它描述了节点(如计算机、服务器、存储设备等)和链接(如电缆、无线连接等)之间的结构关系。

2024-05-08 20:43:19 898

原创 设计模式 工厂模式

简单工厂模式通过一个专门的工厂类来负责对象的创建,客户端只需要提供工厂类需要的参数,然后工厂类就会根据这些参数来创建相应的对象,客户无需了解对象创建的逻辑。在简单工厂模式的基础上进行了优化,从简单工厂模式的类图或代码中可以看出,如果程序设计者想设计新的产品,就要在工厂类中增加新的代码,这样如果更新产品较多就会造成工厂类代码长度过长,且因为要修改已有的代码,开发封闭原则实现程度较低(绝对的开放封闭不存在)。使用工厂模式则可以解决这些问题。和工厂模式结构类似,只不过多做了一层虚拟接口类。

2024-04-29 16:46:54 999

原创 设计模式 策略模式

策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。

2024-04-29 16:46:48 236

原创 设计模式 观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这样当主题对象状态发生变化时,会自动通知所有依赖它的观察者对象,使它们能够及时更新自己。

2024-04-29 16:46:43 422

原创 设计模式 代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理对象,用于控制对原始对象的访问。代理对象可以在不改变原始对象的情况下,添加额外的功能或者限制对原始对象的访问。

2024-04-29 16:46:38 318

原创 设计模式 装饰模式

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向现有对象动态添加新功能,而不需要修改其现有代码,并且可以通过组合多个装饰器对象实现多种功能组合,灵活性高。

2024-04-29 16:46:32 104

原创 设计模式 基本认识

①:高模块可以理解后定义的具体类,低模块则指后定义的具体类(这里说的具体类指对接口类的实现)抽象指的是含有虚函数的类,常常是接口类。可以使用符号表示属性的可见性,例如“+”表示公有属性,“-”表示私有属性,“#”表示受保护属性,“~”表示包内可见属性等。属性可见性表示属性对外部类的可访问性,通常包括公有属性(+)、私有属性(-)、受保护属性(#)等。属性类型表示属性的数据类型,可以是基本数据类型(如整数、字符串等)或其他类的类型。这个原则的核心思想是将一个类的功能划分得更加清晰,避免一个类承担过多的责任。

2024-04-29 16:46:26 1110

原创 Redis 事务 简单介绍

本文Redis事务特性是与MySQL相对而言的:弱化的原⼦性: redis 没有 “回滚机制”. 只能做到这些操作 “批量执⾏”. 不能做到 “⼀个失败就恢复到初始状态”.不保证⼀致性: 不涉及 “约束”. 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态.不需要隔离性: 也没有隔离级别, 因为不会并发执⾏事务 (redis 单线程处理请求) .

2024-04-21 23:38:45 249

原创 Redis 持久化

Redis 持久化机制主要有RDB和AOF两种。

2024-04-21 00:12:55 922

原创 Redis 数据类型

概览:中value的类型内部编码: 实际在底层用来存储value的结构设计优点:① 解耦,用户可根据需求再开发内部编码方式② 实现空间或效率优化, 多种内部编码实现可以在不同场景下发挥各⾃的优势,例如 ziplist ⽐较节省内存,但是在列表元素⽐较多的情况下,性能会下降,这时候 Redis 会根据配置选项将列表类型的内部实现转换为linkedlist,整个过程⽤⼾同样⽆感知。

2024-04-20 21:37:42 1257

原创 MySQL 基础语法(3)

其中,table_name是要插入数据的表名,column1、column2等是要插入数据的列名,SELECT子句用于查询要插入的数据,WHERE子句用于筛选要插入的数据。对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死。例子:将employees表中age大于等于30的记录的salary列增加10%ASC表示升序排序,DESC表示降序排序。如果不指定排序方式,默认为升序排序。假设有一个名为employees的表, 有salary、age列属性。

2024-04-20 18:03:34 627

原创 MySQL 表的约束

约束的概念MySQL 表的约束是指对表中数据的一种规则或限制,用于确保数据的完整性、一致性和有效性。这些约束规定了对表中列的值所允许的条件,以及对表之间关系的限制。是数据类型本身就是一种约束,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是身份证号,要求是唯一的。

2024-04-20 16:47:52 1149

原创 MySQL 基础语法(2)

作用:修改现有表的结构。CHARACTER SET 字符集:指定表的字符集。COLLATE 校验规则:指定表的校验规则。ENGINE 存储引擎:指定表的存储引擎。tablename:要修改的表的名称。tablename:要修改的表的名称。tablename:要修改的表的名称。table_name:新表的名称。column:要添加的新列的名称。datatype:新列的数据类型。column:要修改的列的名称。datatype:新的数据类型。column:要删除的列的名称。值的数量要与表的列属性数量一致。

2024-04-20 16:46:47 481

原创 MySQL 基础语法(1)

DML 用于查询、插入、更新和删除数据库中的数据,以及执行数据的各种操作。DDL 包括创建、修改和删除数据库对象的命令,如表、视图、索引等。DCL 包括授权和回收访问权限的命令,以及管理数据库对象的权限。-p:这个选项告诉 MySQL 提示输入与提供的用户名相关联的密码。数据库备份存储的文件路径:指定要存储数据库备份的文件路径和文件名(以.sql后缀结尾)。在这个例子中,是 root。-p:指定连接数据库的端口号, MySQL 的默认端口是 3306。密码:这里应该替换为你的 MySQL 用户的密码。

2024-04-20 16:46:27 680

原创 MySQL 索引的存储原理

例如,InnoDB存储引擎适合处理大量的写操作和事务处理,而MyISAM存储引擎在处理大量的读操作时性能较好。根据应用程序的读写比例和性能需求,选择合适的存储引擎可以提高数据库的性能。唯一索引:唯一索引是一种索引类型,它确保索引列中的值是唯一的,即不允许有重复的值。聚簇索引与非聚簇索引的区别是B+树底层存储的数据是value还是指向value的指针(前面图展示的为聚簇索引)。索引类型:不同的存储引擎支持的索引类型和限制也有所不同。空间占用:不同的存储引擎在存储数据时占用的空间也有所不同。

2024-04-09 20:40:24 933

原创 C++ 多线程

文章目录学习C++提供的线程库的原因线程相关的类线程初始化线程获取自身线程ID线程让出自身时间片互斥锁的基本使用条件变量的基本使用学习C++提供的线程库的原因Linux 提供的 pthread_create等线程相关函数无法在windows上使用, C++提供的线程相关函数可以跨平台使用C++使用了面向对象的思想进行了封装,相关线程方法更容易使用 。线程相关的类// 调用常用方法的类// thread对象、mutex对象均不允许拷贝,但允许移动赋值/构造。std::threadstd::

2024-03-30 20:36:48 527 2

原创 Redis 单线程

Redis的单线程架构的效果为:Redis的单线程是对于服务端而言的,Redis允许多个Redis用户端同时在线操作,但同时只有一个用户端在和服务端交互。通常来讲,单线程处理能⼒要⽐多线程差,那么为什么 Redis 使⽤单线程模型会达到每秒万级别的处理能⼒呢?Redis 使⽤ epoll 作为 I/O 多路复⽤技术的实现,再加上 Redis ⾃⾝的事件。Redis 将所有数据放在内存中,内存的响应时⻓⼤约为 100 纳秒,这是 Redis 达。③ 单线程避免了线程切换和竞态产⽣的消耗。

2024-02-08 20:42:27 691

原创 Redis Centos7 安装到启动

①修改为0.0.0.0 (默认的是本机循环端口号)④在Linux中创建易于查找的工作目录。4 针对配置文件设置符号链接。并在配置文件中修改默认工作目录。②将保护模式改为no。③设置为守护进程模式。

2024-02-08 20:41:15 1188

原创 Redis 基本认识

的形式构建储数据,Redis有五种基础的数据结构,它们分别为:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet ) , 并在这些基础的数据结构之上演变出了其他类型。Redis本身是一个网络服务,程序/程序员在Redis增删查改数据是通过客户端来实现的,这点和MySQL相似。同大小的内存与外存,内存更贵,Redis数据存储在内存中,故Redis不适合存放冷数据的应用场景。④提供了简单的事务功能,能在⼀定程度上保证事务特性。

2024-02-08 20:40:15 967

原创 C语言 volatile关键字

volatile 是一个关键字,用于修饰变量,表示该变量是易变的,即可能在任何时候被意外地改变。在多线程编程中,当多个线程同时访问同一个变量时,由于线程之间的交互和优化,可能会导致变量的值不一致或出现意外的行为。使用 volatile 关键字可以告诉编译器和处理器,在访问该变量时需要遵循一定的规则,以确保变量的可见性和一致性。具体来说,volatile 关键字有以下几个作用:①。②防止编译器对该变量进行重排序优化,保证指令执行的顺序与程序中的顺序一致。

2023-12-29 22:50:06 631 2

原创 Linux 线程安全 (2)

通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。为了实现这种同步与通信,可以使用互斥锁(mutex)来保护缓冲区的访问,以及条件变量(condition variable)来实现生产者和消费者之间的等待和通知机制。条件变量是一种线程同步的高级机制,它可以实现线程的等待和唤醒操作。条件变量通常与互斥锁一起使用,当某个条件不满足时,线程可以调用条件变量的等待操作进入。线程同步:线程同步是指在多线程编程中,为了保证临界资源的正确访问和避免竞态条件,需要协调和控制线程之间的执行顺序和互斥访问。

2023-12-29 21:32:19 972

原创 Linux 线程安全 (1)

现阶段可以粗浅的理解为,执行流决定执行哪个线程或进程的代码(或者说执行流决定了CPU资源的分配),执行流执行代码的顺序逻辑即为程序员编写代码时的顺序逻辑。一台主机上会有多个进程或线程时,实际上不是一个进程或线程分配到一个执行流(执行流的数量取决于CPU的核心数量), 而是执行流不挺的根据预先设置好的执行流调度算法(即CPU资源分配算法)在各个进程或线程之间切换,由于切换的速度很快、CPU的计算速度很快(对人来说)以及CPU调度算法的作用,用户往往干受不到这个过程。它决定了程序中的指令按照何种顺序被执行。

2023-12-29 16:43:09 945

原创 Linux 线程概念

① 函数的具体说明被放在补充与说明部分② 只说些基础概念和函数使用。

2023-12-28 17:07:11 1221

原创 Linux 进程信号

信号由软件或硬件产生发送给进程,进程对其做相应处理。信号是进程之间事件异步通知的一种方式,属于软中断。Linux下的全部信号由指令查询Linux 下指令的说明使用指令 查询中断组合按键产生信号:如果前台有进程正在运行用可通过 或 的按键组合来向再在运行的前台进程发送信号,达到终止这个前台进程的目的。Ctrl+C:对应的信号是SIGINT(中断信号),Ctrl+\:对应的信号是SIGQUIT(退出信号),两者的区别是 SIGQUIT 信号会产生用于调试的核心转储文件(Core Dump),用于调

2023-12-18 19:26:55 869 1

原创 Linux 进程通信

补充说明部分为相关函数和不太重要的概念介绍使用方法一:使用函数介绍:简单的父子进程通过管道通信范例:使用方法二:使用管道操作符 。Linux命令行中的管道操作符本质上就是创建了一个匿名管道,将前一个进程的结果发送给下一个进程。上述代码中,利用管道进行进程间通信,虽然是利用文件描述符的形式进行读写,但实际上并没有创建实际的文件,并没有实际消耗磁盘空间。 实际上匿名管道是一个内核缓冲区,存储在内存之上。管道自动销毁的机制,是读写两端,也就是父子进程都关闭了文件描述符,操作系统为了避免资源浪费,自动的

2023-12-16 18:58:07 1032

原创 Linux 动态库和静态库

动静态库的创建和使用部分更多的是意在说明动态库和静态库在Linux操作系统中的具体存在,在此基础之上才能解说原理,分析优缺点。位置无关代码(Position-Independent Code,PIC)是一种计算机程序代码的编译方式,它可以在内存中的任何位置执行,而不依赖于代码在内存中的具体位置。这种编译方式主要用于动态链接库(DLL)和可执行文件等需要在不同的内存地址空间中加载和执行的程序。

2023-12-13 20:50:06 111

原创 Linux 基础IO

要知道每个函数/接口的全部参数和返回值建议去官网或者直接在Linux的man手册中查,这不是复制粘贴函数用法的文章。IO是Input/Output的缩写,它是计算机领域中常用的术语,用来描述计算机系统与外部设备之间的数据交换过程。输入(Input)是指将外部数据或指令传输到计算机系统中,而输出(Output)则是指将计算机系统处理后的数据或结果传输到外部设备中。例如,键盘、鼠标、显示器、打印机等都属于外部设备,它们与计算机之间的数据交换过程就是通过输入和输出来实现的。

2023-12-10 13:05:31 654 1

原创 C语言 文件操作

主要需要看的是概念部分、以及FILE结构体、文件指针部分。其余函数使用,知道其功能存在即可,实际在使用到这些函数时去官方文档查的话,不管是介绍还是示例都更齐全。

2023-12-09 18:10:54 120

原创 Linux 文件系统

网络答案:Linux文件系统是Linux操作系统中用于组织和管理文件和目录的一种文件系统。它负责在硬盘上存储和检索文件,并为用户提供对文件的访问和管理功能。个人理解:依然是从硬件说起,先说磁盘本身的物理结构从,磁盘的结构如下图所示,一个磁盘内有多个盘片,每个盘片有两个盘面,盘面上有多个同心圆环被称为磁道,磁道又被均匀划分为一个个扇区,每个扇区可存储512 字节数据(二进制数据)(无论该扇区离圆心远近都是512KB)。面对如此多的数据块,操作系统需要对其进行先描述再组织。

2023-12-08 22:14:15 1907 5

空空如也

空空如也

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

TA关注的人

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