自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Docker浅理解:Namespace、Cgroups 和 Rootfs】

而对于 Docker 等 Linux 容器项目来说,它们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的 PID 填写到对应控制组的 tasks 文件中就可以了。由于 rootfs 里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。它是这个容器的 rootfs 最下面的几层,即镜像中的所有层的总和,它们的挂载方式都是只读的(ro+wh,即 readonly+whiteout)

2024-05-29 20:59:48 797

原创 Redis基础知识四

大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。一般而言,下面这两种情况被称为大 key:String 类型的值大于 10 KB;Hash、List、Set、ZSet 类型的元素的个数超过 5000个;

2024-05-27 12:07:02 1045

原创 【Redis基础知识三】

LRU 全称是 Least Recently Used 翻译为最近最少使用,会选择淘汰最近最少使用的数据。传统 LRU 算法的实现是基于「链表」结构,链表中的元素按照操作顺序从前往后排列,最新操作的键会被移动到表头,当需要内存淘汰时,只需要删除链表尾部的元素即可,因为链表尾部的元素就代表最久未被使用的元素。Redis 并没有使用这样的方式实现 LRU 算法,因为传统的 LRU 算法存在两个问题:需要用链表管理所有的缓存数据,这会带来额外的空间开销;

2024-05-26 21:41:15 754

原创 【Redis基础知识三】

先来理解集群的脑裂现象,这就好比一个人有两个大脑,那么到底受谁控制呢?那么在 Redis 中,集群脑裂产生数据丢失的现象是怎样的呢?在 Redis 主从架构中,部署方式一般是「一主多从」,主节点提供写操作,从节点提供读操作。

2024-05-22 20:31:09 882

原创 Redis基础篇二

混合持久化工作在 AOF 日志重写过程,当开启了混合持久化时,在 AOF 重写日志时,fork 出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件,然后主线程处理的操作命令会被记录在重写缓冲区里,重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件,写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件。这里提一点,Redis 的快照是全量快照,也就是说每次执行快照,都是把内存中的「所有数据」都记录到磁盘中。

2024-05-21 21:20:10 760

原创 【Redis基础知识一】

Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。

2024-05-20 22:15:55 563

原创 【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

消息乱序消费,一般指我们消费者应用程序不按照,上游系统 业务发生的顺序,进行了业务消息的颠倒处理,最终导致消费业务出错。

2023-12-26 18:21:44 1550

原创 Docker容器逃逸

Docker容器逃逸也算是提权的一种手法,要更好的理解容器逃逸的手法,应该知道从本质上看容器内的进程只是一个受限的普通 Linux 进程,而容器逃逸的过程我们完全可以将其理解为在一个受限进程中进行一些操作来获取未受限的完整权限,或者是在原本受 Cgroup/Namespace 限制权限的进程获取更多权限.Docker是时下使用范围最广的开源容器技术之一,具有高效易用等优点。由于设计的原因,Docker天生就带有强大的安全性,甚至比虚拟机都要更安全,但Docker也会被攻破。

2023-12-26 18:01:22 1156

原创 【ETCD:分布式一致性算法 Raft】

Etcd 是一个高可用、强一致的分布式键值(Key-Value)数据库,主要用途是共享配置和服务发现。那Etcd是如何保证强一致性的呢?昨天面试就被问到这个问题,当时没有答上来,就很尴尬。其实,其内部采用 Raft 算法作为分布式一致性协议,因此,Etcd 集群作为一个分布式系统“天然” 具有强一致性;而副本机制(一个 Leader,多个 Follower)又保证了其高可用性(点击进入 链接:Etcd官网)。所以这里我们重点介绍一下Etcd底层运用的分布式一致性算法Raft。

2023-11-27 22:35:39 1383 1

原创 【Kafka中的leader选举】

——— Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的 (replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理 大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、 Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编 写,Linkedin于 2010 年贡献给了Apache基金会并成为顶级开源 项目。

2023-11-27 22:03:31 1245

原创 用java实现一个简单的网络爬虫

Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。URL是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址。URL它具有全球唯一性,正确的URL应该是可以通过浏览器打开此网页的,但如果您访问外网,会提示网页无法打开,这并不能说明这个URL是错误的。只不过在国内不能访问而已。

2023-06-08 22:12:44 2577

原创 贪心算法之基础篇

我们从左到右遍历数组,如果说其比左边孩子分数高,就给他左边数组加一,注意是大于而不是大于等于,这点大家应该能想明白吧,在完成这一步后,左边的情况就结束了,那么怎么把右边和左边情况结合起来才是难点,我们想想,是不是可以从右往左遍历,只要其大于右边就给其右边数组加一,但是,这个时候他本身应该是取它本身和给右边数组加一的最大值,这样才能满足两个情况(不能比原来的 result[i] 还要小,否则就不符合左边的规则),达到全局最优。这样一想贪心算法似乎也不是很难,为了让大家更好地理解,我挑选了一些题目来分享一下。

2023-06-07 19:11:18 101

原创 动态规划之基础篇

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。这是标准的背包问题那么我们怎样去实现背包问题尼。

2023-05-24 21:03:17 397 1

原创 mysql的一些基本操作

【代码】mysql的一些基本操作。

2023-05-14 16:47:44 59 2

原创 单调栈理解

从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大。

2023-05-02 17:21:48 160 2

原创 【无标题】

迪杰特斯拉算法说白了就是一种贪心思想,比如说找到v1与v8之间的最短路径,他不是一下子就求出了v1到v8的最短路径,而是一步步求出他们顶点之间的最短路径,过程都是基于已经求出的最短路径的基础上,求得更远的顶点的最短路径,最终的得到了你最新要的结果。很显然,对这个灯的邻居进行的计算是有效的,而对远离它的那些点的计算基本是无效的。Floyd用到了动态规划的思想:求两点i、j之间的最短距离,可以分为两种情况考虑,即经过图中某个点k的路径和不经过点k的路径,取两者中的最短路径。(1)图中有n个结点,m条边。

2023-04-30 09:35:29 53

原创 最小生成树

假设你是一名铁路工人,需要为九个村庄建设铁路,村庄设计如下:v那么我们该如何找到最短路线尼。首先我们先构造出上面图的邻接矩阵。假设我们先从v0开始,v0旁边有两条边,权值分别是11和10,那么我们选10,10更小一点,所以v0和v1先连在一起,继续,看v0和v1的边,发现是11,16,12,18,显然11最小,所以此时v0和v5构成了树的第二条边,同样道理,只要我们不断这样下去,每次看已连接的点的边,那么最终会得到最小生成树。

2023-04-20 11:47:16 105

原创 对于dfs和bfs题目的练习以及加强理解

当使用栈实现时,该算法会将当前节点入栈,然后遍历该节点的邻居节点,如果邻居节点没有被访问过,就将其入栈,直到遍历完所有节点。从队列中取出一个点(u,v),遍历其可以到达的八个点(x,y),如果点(x,y)未被访问过,则将其加入队列,并更新dist[x][y]的值为dist[u][v]+1。对于每个已访问的点,遍历其四个方向的相邻点,如果相邻点不是障碍且未访问,则递归访问该相邻点,并将其路径总数加上当前点的路径总数。从起点开始进行DFS遍历,将遍历到的点标记为已访问,并统计从起点到该点的路径总数。

2023-04-08 20:19:17 83

原创 二叉树遍历算法(递归和非递归)

查找某个节点的父节点和子节点(也包括有没有子节点)很快。只要能满足此条件,就可以把一个普通树转化成二叉树。一个普通树转化成的二叉树一定没有右子树。只有通过先序和中序,或者中序和后序我们。但是通过先序和后序是无法还原原始的二叉树的。通过先序和中序 或者 中序和后序我们可以。连续存储[完全二叉树](只能是这样子存储)把一个普通的树转化成二叉树来存储。才可以唯一的确定的二叉树。设法保证任意一个节点的。先把森林转化成二叉树,在存储二叉树。中序遍历[中间访问根节点]后续遍历[最后访问根节点]先序遍历[先访问根节点]

2023-04-02 16:52:17 102

原创 两个有序链表的合并(超详细)

首先我们创建两个链表,那么该如何将两个链表合并尼,只需要创建两个指针,指向两个链表,然后比较两个链表中第一位的大小,让小的做第一位,然后while循坏就行,先看代码。不知道大家有没有做过一道经典的题目,两个长度为15的有序链表的合并,大家先看题目。当然还有个简单方法,不需要链表,你就相当于输入30个数排序,且看下面的代码。以上就是今天我分享的内容,那么我问大家,两个无序链表的合并该怎么做?那么这道题该如何做尼,首先我们用比较笨的办法,用链表做。

2023-03-12 15:39:43 2610 3

原创 KMP算法(C语言和java版)

大家第一想法可能是暴力循坏,从主串的第一个开始循环,然后和子串进行比较,如果不相同,然后从主串第二位开始循环,又和子串第一位开始比较,显然,这样的方法时间复杂度是极其高的,设主串长度是m,目标串长度为n,那么暴力方法的时间复杂度是O(m*n);还是这个例子,咱们设i指向主串第一位,j指向目标串第第一位,kmp算法就是只向回移动j,而不是i,那么我们先看,当在E的时候二者不相等,那么你就把目标串中C之前的最长前缀移到后缀,就能继续匹配,且看图。那么有没有更简单的方法来达成我们的目标,那就得依靠KMP算法了。

2023-03-11 17:38:16 117 2

原创 快排or快速排序(C语言版和java版,超详细)

快排or快速排序(C语言版和java版,超详细)

2023-03-09 19:21:10 117 6

原创 高精度加法(超详细的大数相加,一看就会)

高精度加法(超详细的大数相加,一看就会)

2023-03-08 11:20:01 297 6

原创 简单C语言两数相加

两数相加

2023-03-07 11:00:25 3329 9

空空如也

空空如也

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

TA关注的人

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