- 博客(180)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 仿mudou高性能高并发服务器
项目实现目标:"这个结局是我的期待,我会一直为你祝福。项目实现目标:仿muduo库One Thread One Loop式主从Reacto模型实现高并发服务器。通过实现高并发服务器组件,简洁快速完成搭建一个高性能服务器。并且,通过组件内提供的不同应⽤层协议⽀持,也可以快速完成⼀个⾼性能应⽤服务器的搭建。本次项目支持HTTP应用层协议,但仅限于消息收发,而不包括任何业务处理内容。
2023-08-22 10:07:10
1102
12
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 高并发内存池
假设系统依次分配了16byte、8byte、16byte、4byte,还剩余8byte未分配。24byte的空间,操作系统回收了一个上面的两个16byte,总的剩余空间有40byte,但是却不能分。③若内存池不够时,则自动扩大内存池,从操作系统中申请更大的内存池。配出一个连续24byte的空间,这就是内存碎片问题。是在计算机技术中经常使用的一种设计模式。内碎片:对齐方式导致的空间浪费。是一种动态内存分配与管理技术。"花,就在火海里摇曳开着。外碎片:申请内存不连续的问题。尽量与周边的空闲内存块合。
2022-12-17 20:23:56
1041
12
原创 搜索二叉树
二叉搜索树"迎着风,向前奔走,越过瓦砾~"对于vector、list而言,虽然对外提供了find() or search() 接口,但前者无非是在容器元素内部进行逐一比较,最坏的情况下需要运行O(n)的时间复杂度。我们也可以对该容器内的无序元素按照一定规则排序,通过二分查找的方式以确保查找搜寻的效率在O(logN)。不过,但一旦向量本身需要修改,无论是插入还是删除,在最坏情况下每次仍需O(n)时间。总之,如果想要以上面的容器,满足我们对高效率动态修改、高效率静态查找的需求是做不到的!
2024-04-15 20:34:44
1067
原创 图论(Graph theory)
图的搜索遍历抽象数据结构类型Graphic操作接口在顶点集V中插入新顶点vremove(v)将顶点v从顶点集中删除顶点v的入度、出度顶点v的首个邻接顶点在v的邻接顶点中,u的后继status(v)状态parent(v)顶点v在遍历树中的父节点Graphic抽象数据结构设计其包含该顶点表示的数据域,以及顶点状态、入、出度数量等。
2024-04-03 21:28:51
1493
原创 分治归并问题
别让自我被拯救~”当我们首次接触排序算法时,一定对所谓 "归并"方式排序的算法感到头疼~ 因为,我们难以形象出其不断 "分离"时,各个区域的状态。然而,即便 "归并"排序算法的学习是艰难,但掩盖不住其相较于其他算法而言,拥有更优时间复杂度,而迫使我们不得不盯着头疼的代码苦思冥想。并且,"归并"思想不仅仅体现在排序中,更能成为我们解决实际问题时的一个方略方法。归并核心之一就在于 "分治",那么啥子叫 "分治"?简单来说,就是 "分而治之,大事化小"。
2024-03-25 22:21:22
828
原创 Docker卷原理
所以,Volume工作的流程,就是在rootfs准备好后,chroot执行之前,把Volume所指定的宿主机目录,挂载到容器中的目录中。该命令是将前一个目录挂载到后一个目录上,当我们对后一个目录进行访问时,就是对前一个目录的访问 —— 可以理解为 " 硬链接 "。chroot: 可以说是最简单和古老的容器化软件之一,可以让您在系统内创建一个独立的环境,使得这个程序不能访问目录之外的其他目录。那么,Docker又是如何做到把一个宿主机上的目录、文件,挂载到容器里面去的呢?Docker卷机制简介。
2024-03-17 15:11:31
1025
原创 镜像制作实战篇
CMD与EntryPoint实战CMD与EntryPoint实战EntryPoint 与 CMD都是docker 镜像制作中的一条命令,它们在概念上可能有些相似,但在使用中,两者是有明显的区别的。比如,执行一个没有调用EntryPoint、CMD的容器会返回错误,这两条命令一般都作为容器启动的入口命令~
2024-03-17 10:46:57
1024
原创 Docker镜像制作
重要的是Dockerfile创建的镜像通常比通过快照创建的镜像体积更。是在Docker中创建镜像的一种方式,它是基于正在运行的容器创建的。区别于docker commit一个一个手动地执行命令,它可以重复进行执行,而使用docker commit 你需要记录构建镜像过程中的命令。它包含了构建镜像所需的一系列指令和说明,这些指令定义了如何将单个层的构建过程分解成更小的步骤。🧸 原本拥有自己的镜像名和标签,但人为通过docker pull后发现新的版本,旧的镜像名被转移到了新的下载镜像身上。
2024-03-11 19:38:12
2499
原创 Mysql中的MVCC
MVCC机制简介MVCC(Multi-Version-Concurrency-Control)多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程中实现事务内存。MVCC存在被使用于多个大型数据库软件,诸如Mysql、Oracle、PostgreSQL等。其中,在Mysql存储引擎中,MVCC机制的运用,对于Innodb支持事务,更好的处理读-写并发,提高并发性能等具有支撑作用。
2024-03-08 21:26:47
958
原创 综合实战(volume and Compose)
我们编写一个简单的案例: nginx 反向代理到我们的一个springboot微服务,微服务访问我们的 msyql数据库查询用户信息。springboot简介Spring Boot是一个开源的Java框架,它使得开发人员能够快速搭建和运行基于Spring的应用程序。特征:🥏 SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。🥏 使编码变得简单,提供了大量的注解,极大的提高了工作效率。
2024-02-28 22:18:27
1101
原创 Docker Compose(容器编排)
Compose的默认管理对象是项目,通过子命令对项目中的各个容器进。服务(service): 指的是一个应用的容器,一个服务内部可以包含若干容器。项目(project): 由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml文件中定义,Docker Compose(容器编排)“这不属于我,谁会愿意生活都被胁迫~”Docker Compose(容器编排)编写,实现上调用了Docker 服务的。Docker 官方的开源项目,使用。可以方便的管理多个服务。行便捷地生命周期管理。
2024-02-27 15:10:03
1183
原创 Docker 网络
Docker 容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP协议栈、端口套接字、IP路由表、防火墙等等与网络相关的模块。为实现这种隔离性,Docker主要采用的架构由三部分组成:CNMLibnetwork和驱动。
2024-02-26 18:37:46
1159
原创 Docker Volume
存储卷就是: “将宿主机的本地文件系统中存在的某个目录,与容器内部的文件系统上的某一目录建立绑定关系”。存储卷与容器本身的联合文件系统?在宿主机上的这个与容器形成绑定关系的目录被称作“存储卷”。而这个卷的本质就是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。使得。
2024-02-26 15:45:16
1218
原创 Docker容器实战
源的本质就是,当你使用软件安装工具安装软件时,该安装程序从哪里获取软件包的地方。因为我们目前的机器是Centos版本的,但现在我想基于ubuntu来制作C++容器,输出"hello world"。编译C++文件需要标准库以及gcc编译器,但这些软件源是在国外的,访问起来很慢,所以我们会借助国内软件源进行下载。docker export的容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。我们可以在 docker hub上,进入mysql的镜像仓库,找到适合的版本。
2024-02-24 20:26:36
993
原创 Docker Container(容器)
Docker 容器"在哪里走散,你都会找到我~"Docker 容器什么是容器?通俗来讲,容器是镜像运行的实体。我们对于镜像的认知是,“存储在磁盘上的只读文件”。当我们启动一个容器的本质,就是启动一个进程,即容器运行着真正的应用进程。它具有容器有初建、运行、停止、暂停和删除五种状态。虽然容器的本质是一个进程。但是容器有自己的命名空间隔离和资源限制。也就是说,在容器内部,无法看到宿主机上的进程、环境变量、网络等信息。这是容器与直接运行在主机上进程的本质区别。
2024-02-24 00:41:38
1290
原创 Docker Image(镜像)
往往我们的生产环境与研发环境是不一样的,为了正确地迁移、部署,我们需要做很多麻烦的工作。至于docker build与镜像制作有关 、docker import本质就是生成当前容器的快照版本,则不是本篇要细说的。每个构建的操作都相当于做一层的修改,增加了一层文件系统。Docker镜像本质就是一个”可读文件“,所以Docker镜像天然就具有 “打包”的功能。一个完整的操作系统所有文件和对应的目录结构,与本地环境没有任何的关联性,从而屏蔽掉了环境的差异性。在构建镜像的时候,都是从一个最基本的操作系统开始的。
2024-02-22 13:15:10
1468
原创 docker 镜像仓库实战
综合实战1: 搭建一个Nginx服务“面对脆弱的玩笑”悉知Docker镜像仓库的命令后,我们总得将这些命令使用起来,在实践中深刻理解执行这些命令的实际效果。综合实战1: 搭建一个Nginx服务至于Nginx是什么,我想在这一篇中已经有过讲解:,也并非本篇要详解的。以往部署Nginx服务都是在宿主机上,后台运行的。现在,我们的需求是在Docker容器中,运行Nginx服务。拉取Nginx镜像:我们首先打开docker hub网站,从这个最大的镜像仓库中,随意找一个Nginx版本。
2024-02-21 19:08:33
1099
原创 nginx服务
然而,身在市中的我,如果想要抵达远郊,再进入工厂与厂长沟通,购买火腿是很麻烦的……于是乎,我只好将愿望寄托给楼下开店铺的商贩大妈,告诉她,如果她去那个工厂购进火腿,我会购买很多。大妈有自己的 老头乐,所以,对她而言进货火腿似乎不是那么麻烦,并且转卖的利润也是客观、持久的,所以,她二话没说就答应了下来。同样,一家开在远郊的工厂,正因没什么名气,业绩惨淡,工厂运营艰难。正如你所言,Nginx是一个Web服务器,那么它响应的代码数据,能够通过浏览器解释渲染出来,那么我们怎么没能看到后台的html文件呢?
2024-02-20 19:04:04
1052
原创 Docker镜像仓库
我们现在知道了什么叫镜像仓库,了解到了与镜像仓库有关的基本概念,那么我们该如何拉去镜像呢?✨ 镜像仓库(Registry): 表示的是,你要从哪一个镜像仓库拉去镜像。私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的镜像仓库。镜像仓库的分类,大致按照两类划分,一类是按照是否对外开发的标准,另一类按照供应商和面向群体划分。用户需要登录认证通过后,才能向镜像仓库中提交镜像。✨仓库(Repository): 由特定的docker镜像的所有迭代版本组合成的,镜像仓库。
2024-02-20 16:15:19
5321
原创 贪心算法之合并区间
任世界多宽广,停泊在这港口~”区间问题,涉及到最多的就是 取交集 和 并集的概念。我们使用C++排序算法后,其默认规则就是按照 “左排序”进行的。因而,我们实质上注意的是每一个区间的 右端点,根据题目要求,总结规律,指定出策略解决问题。(1) 题目解析。
2024-02-17 18:46:38
986
原创 贪心算法篇
贪心算法简介?“靠漫步,将生趣填饱~”贪心算法简介?在每个决策点上都选择当下看似最好的选项,而不是寻求全局最优点贪心算法通常会逐步构建问题的解空间,每次尝试将下一个待选元素加入到解集中,直到无法再添加为止。这个过程会使得问题简化为一系列子问题,每个子问题都可以通过同样的贪婪策略来解决,从而逐步接近整体的最优解。
2024-02-03 19:59:27
3669
1
原创 Qt信号与槽
自定义信号与槽"流云开一朵~"如果你系统地学习过Linux,你一定对“信号”一词不会感到陌生。当我们打开命令行终端,在键盘上敲击“Ctrl +C”、“Ctrl+Z”等组合键,当前命令行执行的程序就会收到系统发出的信号。信号的三要素:信号源、信号类型、信号处理方式,其在Qt中也有信号的概念,它与操作系统层面上的信号有何区别呢?——前言。
2024-01-29 14:59:30
1445
原创 Qt项目文件以及对象树
Qt对象树"在哪里走散,你都会找到我~"前篇,我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目,Qt会为自动创建诸如:.pro、.h\.cpp、.iu等文件,这些文件到底是什么?我们在使用Qt时 应该怎样去看待?——前言Qt项目文件解析(1) .pro文件。
2024-01-27 17:56:23
1114
原创 在线五子棋对战
本项目是一款网页版的五子棋对战游戏,其主要支持以下几种功能:●⽤⼾管理: 实现⽤⼾注册, ⽤⼾登录、获取⽤⼾信息、⽤⼾天梯分数记录、⽤⼾比赛场次记录等.●匹配对战: 实现两个玩家在⽹⻚端根据天梯分数匹配游戏对⼿,并进⾏五⼦棋游戏对战的功能.●聊天功能: 实现两个玩家在下棋的同时可以进⾏实时聊天的功能.(2) 核心技术(3) 环境搭建(Centos-7.6)①安装wget⼯具。
2024-01-27 13:46:09
1051
原创 Qt简介及安装
什么是 Qt这不属于我,因为沉默背后也有冲动在互联网当中,最关注的几个比较核心的岗位:🛶 后端开发 🛶 前端开发 🛶 算法工程师 🛶 游戏开发像后端开发中有认识度较广的Java、C++,打交道的大多都是和服务器。与我们用户进行交互的部分,就属于前端开发的大类,诸如:网页前端(HTML、CSS)、桌面应用开发、移动应用开发等等。准确来说,Qt是特指用来进行桌面应用开发所涉及的一套技术。——前言什么是 Qt。
2024-01-24 19:58:52
1375
1
原创 Redis分布式锁
什么是分布式锁“孤独被染上童话底色~”我们谈到“锁”这个概念,你一定会想到这一定是涉及到了线程安全的问题。当一个进程内的不同线程,需要访问同一资源(共享资源)时,如果进行不加锁,就会出现线程安全的问题。在分布式系统中,每个进程都是独立运行于一台独立的机器中的,当它们对共享资源进行访问时,如果不进行限制,也会出现类似的安全问题。但,之前的,仅仅运用于进程内的锁,不会再起任何作用,其次,分布式系统中多个进程间的执行顺序也具有不确定性。——前言什么是分布式锁。
2024-01-24 12:49:37
1127
原创 Redis缓存
使⽤ Redis 作为缓存“梦会枯,就算夜有尽头。Redis的主要用途有三个方面:1.存储数据(作为数据库使用) 2.缓存(Redis最常用的场景) 3.消息队列。在计算机种,速度快的设备可以 作为速度慢的设备的缓存。最常见的就是内存作为硬盘的“缓存”。硬盘可以作为网络的缓存,浏览器通过http、https服务获取到的数据(html、css、js、视频、图片)等等,一些少有改变的、体积大的如图标、视频等,在第一次访问网站时,就会被浏览器存储在本地的硬盘上。——前言使⽤ Redis 作为缓存。
2024-01-24 11:09:26
908
原创 Redis分布式系统:集群
Redis集群容灾、故障转移"还不如留给花园,多一瞬色彩~"当我们聊到“集群”这一个词,我们脑中构想出的画面,一定是多台机器,构成的分布式系统,这可以被称为一个“集群”。其实,在前篇的哨兵机制下,奇数个监控哨兵,以及多组主从结构的数节点所构成的大的环境,就是一个“广义的集群”。但,在Redis中“集群”一词是有所区别的,在Redis中有一种模式也叫做“集群”,这种“狭义的集群”,主要是为了解决存储空间不足的问题。——前言Redis集群模式。
2024-01-23 16:08:43
965
原创 Redis分布式系统:哨兵机制
这种冗余体现在主从复制模式下,每个节点所存储的信息是一致的,是在哨兵机制下,使用由奇数个哨兵节点组成的节点集合,完成对数据节点的监控。docker可以视为“轻量级”虚拟机,起到了同虚拟机相似的资源隔离的效果,并且对硬件要求并不高,我们可以借此搭建出多个相似的虚拟环境,来模拟将Redis部署在不同服务器上的场景。当然,配置这些节点的过程也十分繁琐,各个节点所依赖的端口号\配置文件\数据文件多需要严格独立一份,这可以参考上篇的主从模式结构的配置。在实际的⽣产环境中,对提⾼整个系统的⾼可⽤是⾮常有帮助的。
2024-01-22 20:56:04
1102
原创 FloodFill
FloodFill算法简介:"绝境之中才窥见,Winner,Winner"FloodFill算法简介:floodfill又翻译成漫水填充。我们可以将下面的矩阵理解为一片具有一定高度的坡地,此时突发洪水,洪水会将高度
2023-11-26 21:24:42
192
原创 Redis分布式系统: 主从复制
此时,我们可以把其中的一个redis服务当成“主节点”,另外两个就当成“从节点”。(从节点的数据,需要跟随主节点的数据的变化而变化。另外,如果主从模式中的从节点出现问题,挂掉了,对整个系统影响很小。因为从节点只能读取,而不能写入,如果需要写入数据,那么可能就会发生错误。也许你会说,如果针对了从节点的数据进行了修改,那么主节点又该怎么办?实际上,如果我修改了从节点的数据,就和主节点的数据不一致了,我们是否应该把从节点的数据同步到主节点上呢?在这些若干节点中,有些是“主节点”,其他的为“从节点”。
2023-10-09 14:33:08
273
原创 Redis事务
Redis事务?vs Mysql"你经过我,每个灿烂时刻。我才真正学会如你般自由~"Redis事务?vs Mysql了解过Mysql的友友们一定不会陌生,它其实就由一组DML(数据操纵语言,例如:INSERT 、UPDATE)语句组成的。谈到事务就得谈到它的特性——ACID。● 原子性(Atomicity):把多个操作打包成一个整体。● 持久性(Durability):事务做出修改时,都会存储到硬盘上。● 隔离性(Isolation):"事务并发"执行时,会涉及到的一系列问题。
2023-10-09 09:53:17
185
原创 快速选择排序
这份快排算法代码在面对大量重复数的时候,时间复杂度会下降到O(n^2),这也是为什么leetcode显示最后会超时。也许在此之前,可以先回顾回顾快排三步核心算法步骤。前些天有些无聊,想试试自己写的快排能否过leetcode上的排序算法题。结果是,不用截图可想而知,肯定是没过的,否则也不会有这篇文章的产出。"你经过我每个灿烂时刻,我才真正学会如你般自由"
2023-10-03 22:23:58
324
原创 Redis持久化(RDB/AOF)
认识持久化"在哪里走散,你都会 找 到 我。认识持久化我们在接触Mysql事务的时候,一定了解过Mysql事务的四个特性:"原子性(A)一致性(C)隔离性(I)持久性(D)"而其中持久性其实与持久化是一回事,所谓持久与不持久,针对的是数据。如果将该数据存储在磁盘上,那么数据就具有持久性,反之如果数据仅仅存在于内存上,就不具有持久性。redis持久化:对于Redis而言,是一个内存数据库,操作的数据大都是内存级别的(Redis相比于Mysql明显优势和 特点)。
2023-10-03 16:22:14
165
原创 专题五:优先级队列
如何实现一个堆排序?"你了解我,最干净的轮廓, 握住小小风车和放肆的梦~"堆是一个不错的数据结构,而在计算机中,无法表示二叉分支结构,因此我们经常会看到使用线性表来作为堆的存储容器。在接触堆的时候,我们是把它拿来同其他排序算法来看待的,但其实我们经常使用的是快排或者归并亦或者性能更加优越的"选择快排"。堆的应用场景,实质上转移到了查找问题,例如TopK等。很多语言也提供了以堆为底层的数据结构,例如C++中的priority_queue,Java中的如何实现一个堆排序?
2023-09-29 12:16:33
142
原创 算法综合篇专题三:二分法
现在你有一个"升序"数组,想让你在这个数组里完成查找数字n,在这个数组内的下标,你可以怎么做?你可以使用O(N)的时间复杂度,对该数组进行遍历,就像这样。可是我们没有很好地利用到数组“有序”的特点,我们可以令数字为mid,那么借着有序的特点,可以将这个数组划分为两个区域,一边是小于mid的数,一边是大于mid的数。所以,按照这样的算法查找数组中的某个数,时间复杂度可以下降为O(logN),是一个特别大的提升,但使用这个算法的前前提的 “数组有序”。"寻一颗,未萌的渺小啊,随着青翠未来,升入辽阔云霄~"
2023-09-12 08:55:56
190
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人