自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C/C++Linux、音视频、DPDK

C/C++Linux、音视频、DPDK

  • 博客(51)
  • 资源 (2)
  • 收藏
  • 关注

原创 2023年C/C++Linux服务器开发/后台架构师知识体系整理(持续更新中)

C/C++Linux服务器开发/后台架构师知识体系1. 精进基石专栏1.1 数据结构与算法面试必聊的排序与KMP随处可见的红黑树磁盘存储链式的B树与B+树海量数据去重的Hash与布隆过滤器,bitmap图论算法,di jkstra,dfs,bfs,动态规划1.2 设计模式创建型设计模式结构型设计模式行为型设计模式1.3 工程管理手写:Makefile/cmake/configure操作:git/svn与持续集成Linux系统运行时参数命令2. 高性能网络设计专栏2.1 网络编程网络io与select,pol

2021-07-05 21:22:44 4417 5

转载 redis,memcached,nginx网络组件

网络编程主要关注3个半事件:连接建立(client连接/连接第三方服务);连接断开,消息达到,消息发送完毕。TCP网络服务模型,redis,nginx,memcached1 阻塞,非阻塞区别:阻塞io阻塞在哪? 阻塞在网络线程什么决定阻塞?fcntl函数设置阻塞具体内部差异: 网络io分为两个流程,数据准备阶段(网卡拷贝到内核空间),数据拷贝阶段(内核空间拷贝到用户空间),非阻塞是在数据准备阶段返回,但是在第二个阶段也还是阻塞的。2 epoll为何又多路复用?用一个线程检查多个io事件。

2021-07-31 19:47:10 236

转载 协程:如何快速地实现高并发服务?

C/C++Linux服务器开发/后台架构师知识体系整理零拷贝通过减少上下文切换次数,提升了文件传输的性能。事实上高并发服务也是通过降低切换成本实现的。如果你需要访问多个服务来完成一个请求的处理,比如实现文件上传功能时,首先访问 Redis 缓存,验证用户是否登陆,再接收 HTTP 消息中的 body 并保存在磁盘上,最后把文件路径等信息写入 MySQL 数据库中,你会怎么做?用阻塞 API 写同步代码最简单,但一个线程同一时间只能处理一个请求,有限的线程数导致无法实现万级别的并发连接,过多的线程切换

2021-07-30 21:21:26 523

转载 RING BUFFER的常规用法

C/C++Linux服务器开发/后台架构师知识体系整理环形缓冲区(RING BUFFER)的实现原理环形缓冲区通常有一个读指针和一个写指针(一个入指针和一个出指针)。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机

2021-07-30 15:32:54 1177 1

原创 网络 IO 服务器模型 Reactor 与 Proactor

C/C++Linux服务器开发/后台架构师知识体系网络 IO,会涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,另一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程中。因为在以上两个阶段上各有不同的情况,所以出现了多种网络 IO 模型服务器模型 Reactor 与 Proactor对高并发编程,网络连接上的消息处理,可以分为两个阶段:等待消息准备好、消息处理。当使用默认的阻塞套接字时(例如上面提到的

2021-07-28 20:48:07 470

转载 彻底搞懂Reactor模型和Proactor模型

在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。服务端的线程模型无论是Reactor模型还是Proactor模型,对于支持多连接的服务器,一般可以总结为2种fd和3种事件,如下图:2种fdlistenfd:一般情况,只有一个。用来监听一个特定的端口(如80)。connfd:每个连接都有一个connfd。用来收发数据。3种事件listenfd进行accept阻塞监听,创建一个c

2021-07-27 22:23:42 1080

原创 Linux系统命令与网络、磁盘参数和日志监控

C/C++Linux服务器开发/后台架构师知识体系整理C/C++Linux服务器开发/后台架构师视频学习地址Linux服务器开发/后台架构师学习群:9609945581 基础命令和工具grep搜索字符grep 命令用于在文件中执行关键词搜索,并显示匹配的效果。部分常用选项参数作用-c仅显示找到的行数-i忽略大小写-n显示行号-v反向选择 – 仅列出没有关键词的行。v 是 invert 的缩写。-r递归搜索文件目录-C n打印匹配行

2021-07-27 16:35:55 1546

原创 Epoll的实现原理

C/C++Linux服务器开发/后台架构师知识体系整理Epoll是Linux IO多路复用的管理机制。作为现在Linux平台高性能网络IO必须的组件。内核的实现可以参照:fs/eventpoll.c .为什么需要自己实现epoll呢?现在自己打算做一个用户态的协议栈。采用单线程的模式。https://github.com/wangbojing/NtyTcp,至于为什么要实现用户态协议栈?可以自行百度C10M的问题。由于协议栈做到了用户态故需要自己实现高性能网络IO的管理。所以epoll就自己实现一下

2021-07-26 22:06:28 842 1

转载 Nginx线程池与性能分析

C/C++Linux服务器开发/后台架构师知识体系150行代码手写线程池Nginx模块模块定义struct ngx_module_s { ngx_uint_t ctx_index; //同类的数组序号(类似二次索引) ngx_uint_t index; //模块数组序号 char *name; //模块名 ngx_uint_t

2021-07-26 20:53:40 290

原创 用户态协议栈之 TCP/IP 的设计

C/C++Linux服务器开发/后台架构师知识体系1. Netmap 简介Netmap 是一个高性能收发原始数据包的框架,由 Luigi Rizzo 等人开发完成,其包含了内核模块以及用户态库函数。其目标是,不修改现有操作系统软件以及不需要特殊硬件支持,实现用户态和网卡之间数据包的高性能传递。其原理图如下,数据包不经过操作系统内核进行处理,用户空间程序收发数据包时,直接与网卡进行通信。代码位置:https://github.com/luigirizzo/netmap1. 数据结构在 Ne

2021-07-24 19:57:37 561

原创 协程的实现与原理剖析

C/C++Linux服务器开发/后台架构师知识体系前言协程这个概念很久了,好多程序员是实现过这个组件的,网上关于协程的文章,博客,论坛都是汗牛充栋,在知乎,github上面也有很多大牛写了关于协程的心得体会。突发奇想,我也来实现一个这样的组件,并测试了一下性能。借鉴了很多大牛的思想,阅读了很多大牛的代码。于是把整个思考过程写下来。实现代码https://github.com/wangbojing/NtyCo代码简单易读,如果在你的项目中,NtyCo能够为你解决些许工程问题,那就荣幸之至。本系列文章

2021-07-23 21:08:44 721

原创 TCP可靠传输原理

C/C++Linux服务器开发/后台架构师知识体系整理TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输。TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务。比如:出现差错时,让发送方重传数据;接收方来不及处理数据时,让发送方降低传输速度。一、数据流传输方式TCP传输的数据一般分为两类:交互数据、成块数据。交互数据一般较小,比如发送1个字节的交互数据,加上TCP数据段首部以及IP数据报首部,至少需要41个字节。在广域网,数量众多的交

2021-07-22 20:43:09 733

转载 网络传输协议kcp原理解析

C/C++Linux服务器开发/后台架构师知识体系1.概述对于游戏开发,尤其是MOBA(多人在线竞技)游戏,延迟是需要控制的。但是对于传统的TCP(网络友好,很棒),并不利于包的实时性传输,因为他的超时重传和拥塞控制都是网络友好,对于我们包的实时性,没有优势。所以一般都是需要基于UDP去实现一套自己的网络协议,保证包的实时,以及可靠。其实就是牺牲TCP的友好,牺牲带宽,以空间换时间。基于UDP,网上有一些优秀的协议,比如KCP。2.实现原理KCP只是简单的算法实现,并没有涉及到任何的底层调用。我们只

2021-07-21 17:23:35 2690

转载 QUIC协议原理分析

C/C++Linux服务器开发/后台架构师知识体系本文主要介绍 QUIC 协议产生的背景和核心特性。QUIC 概述Quic 全称 quick udp internet connection [1],“快速 UDP 互联网连接”,(和英文 quick 谐音,简称“快”)是由 google 提出的使用 udp 进行多路并发传输的协议。Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势 [2]:减少了 TCP 三次握手及 TLS 握手时间。改进的拥塞控制。避免队头阻塞的多路复

2021-07-21 16:40:23 1160

原创 网络协议:TCP/IP 协议

C/C++Linux服务器开发/后台架构师知识体系整理C/C++Linux服务器开发/后台架构师视频学习课程一、 计算机网络体系结构分层不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。二、 TCP/IP 基础1. TCP/IP 的具体含义从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多

2021-07-20 22:00:59 665

转载 POSIX线程详解

本文主要分为三个部分:第一部分简要介绍线程的概念及其使用第二部分主要介绍互斥锁及条件变量的使用(重点探讨pthread_cond_wait)第三部分参考运行IBM的多线程工作代码作为应用。一、线程简介及使用正确的使用线程是一个优秀程序员必备的素质。线程类似于进程,单处理器系统中内核通过时间片轮转模拟线程的并发运行。那么,对于大多数合作任务,为什么多线程比多进程优越呢?这是因为,线程共享相同的内存空间,不同线程之间可以共享内存中的全局变量。使用fork()写过子进程的同学都会意识到多线程的重要性。

2021-07-20 15:47:39 395

转载 网络协议:HTTP协议

HTTPHTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。文章目录HTTP简介工作原理特点HTTP 报文结构客户端请求报文服务器相应报文请求方法状态码1xx2xx3xx4xx5xx缓存强缓存协商缓存总结流程简介HTTP 是一种能够获取如 HTML 这样的网络资源,一般都浏览器这样的接受方发起的,一个完整的 web文档通常由不同的子文档拼接组成,像是文本、布局、图片、视频、脚本等等

2021-07-19 21:30:10 355

转载 从 C10K 到 DPDK

C10KC10K 和 C1000K 的首字母 C 是 Client 的缩写。C10K 就是单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 也就是单机支持处理 100 万个请求(并发连接 100 万)的问题。I/O 的模型,在 C10K 以前,Linux 中网络处理都用同步阻塞的方式,也就是每个请求都分配一个进程或者线程。请求数只有 100 个时,这种方式自然没问题,但增加到 10000 个请求时,10000 个进程或线程的调度、上下文切换乃至它们占用的内存,都会成为瓶颈。I/O

2021-07-17 17:55:43 291

转载 C10X:C10K、C10M

C/C++Linux服务器开发/后台架构师知识体系资料整理C10XC10X 包括 C10K、C10M 等。C10K 问题最早由 Dan Kegel 在《The C10K problem》提出,指的是单机处理 1 万个并发连接。我们已经解决了 C10K 问题,当前面临的是C10M ,指单机同时处理一千万的请求。早期互联网并不普及,用户不多,服务器并不存在高并发问题。到了 Web1.0,用户主要浏览静态网页,以门户类网站为主(比如 Netscape、Yahoo),互联网逐渐普及,虽然用户增多但也没有达到

2021-07-17 17:46:58 451

原创 Redis底层数据结构分析

C/C++Linux服务器开发/后台架构师知识体系资料整理说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是Redis对外暴露的数据结构,用于API的操作,而组成它们的底层基础数据结构又是什么呢简单动态字符串(SDS)链表字典跳跃表整数集合压缩列表简单动态字符串(SDS)Redis是用C语言写的,但是Redis并没有使

2021-07-17 16:45:08 218

转载 Go业务系统开发总结

作者:代码与野兽 链接:https://juejin.cn/post/6981984615338606622GO/golang/云原生 学习群 : 854156661近期在研发一套物联网设备管理系统,其主要用途是将公司旗下所负责智能园区中的硬件设备通过物联网云平台来进行综合管控。整个系统在架构上设计分为 4 层。自底向上分别是设备硬件、设备接入网关、物联网平台、设备管理系统。除去设备硬件,其它 3 层都属于软件范畴。这篇文章主要记录一下我在开发设备管理系统的后端过程中的一些总结。系统架构分层的.

2021-07-15 17:49:29 761

转载 Golang 开发之Cobra初探

一 背景在云原生如日中天的当下,相信很多人对Kubernetes/etcd等都有所听闻,当我们看其源码或对其进行二次开发的时候,可以发现其均使用了一个命令行程序库Cobra,其是一个用来编写命令行的神器,提供了一个脚手架,用于快速生成基于Cobra应用程序框架。其作者是非常有名的spf13,相信大家对vim都有所了解,可以去使用vim的终极终端spf13-vim,可以一键配置,非常的方便,其还有作品viper是一个完整的配置解决方案,支持JSON/YAML/TOML/HCL/envFile等配置文件,还

2021-07-15 16:26:58 554

转载 HTTP和HTTPS协议 整理

C/C++Linux服务器开发/后台架构师知识体系知识资料整理1.什么是协议?网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。2.HTTP协议是什么?HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。H

2021-07-14 21:01:24 508

原创 websocket协议 解析

C/C++Linux服务器开发/后台架构师知识体系资料整理WebSocket 介绍WebSocket 发起单个请求,服务端不需要等待客服端,客户端在任何时候也能发消息到服务端,减少了轮询时候的延迟.经历一次连接后,服务器能给客户端发多次。下图是轮询与WebSocket的区别。基于http的实时消息是相当的复杂,在无状态的请求中维持回话的状态增加了复杂度,跨域也很麻烦,使用ajax处理请求有序请求需要考虑更多。通过ajax进行交流也不简单。每一个延伸http功能的目的不是增加他的复杂度。websock

2021-07-14 17:01:43 1039

转载 一、epoll原理详解

Linux服务器开发/后台架构师知识体系整理一、epoll原理详解当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用密切相关:struct eventpoll {  ...  /*红黑树的根节点,这棵树中存储着所有添加到epoll中的事件,  也就是这个epoll监控的事件*/  struct rb_root rbr;  /*双向链表rdllist保存着将要通过epoll_wait返回给用户的、满足条件的事

2021-07-13 21:26:44 1135 1

原创 Linux I/O 多路复用之select、poll、epoll

一 多路复用的机制select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。selectint select (int n, fd_set *re

2021-07-13 21:03:08 434

原创 行为型模式

行为型模式类或对象怎样交互以及怎样分配职责,这些设计模式特别关注对象之间的通信。模板模式模板模式(Template Pattern)定义:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板模式中的角色和职责AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOper

2021-07-12 20:32:25 203

原创 结构型模式(4种)学习

Linux服务器开发/后台架构师知识体系结构型模式让类和类进行组合,获得更大的结构,获得新功能的方式。代理模式Proxy 模式又被叫做代理模式,是结构型的设计模式之一,它可以 为其他对象提供一种代理以控制对这个对象的访问。所谓 代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须 通过代理与被代理的目标类交互,而代理一般在交互的过程中,进行某些特别的处理。模式中的角色和职责subject(抽象主题角色):真实主题与代理主题的共同接口。RealSubject(真实主题角色):定

2021-07-12 16:58:42 359

原创 创建型设计模式(6种)学习

Linux服务器开发/后台架构师知识体系整理创建型设计模式有: 共6种简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)建造者模式(Builder)原型模式(Prototype)单例模式(Singleton)简单工厂模式功能:主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。优点: 适用于不同情况

2021-07-12 15:56:08 2353

转载 SVN和Git对比梳理

在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢?SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的版本控制器!这是两者之间最核心的区别。SVN只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。Git每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对

2021-07-10 20:46:49 827

原创 工程管理之CMake

C/C++Linux服务器开发/后台架构师知识体系资料整理一、概述1、CMake作用CMake是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。比如它能根据源码和预先配置好的构建配置文件构建出Visual Studio的.sln文件或者Linux中的Makefile、启动编译过程、启动单元测试、打包可执行文件及依赖到指定目录。2、CMake优点跨平台,支持Windows、Linux、Mac、Android系统;扩展性好,支持逻辑控制语法、条件编译等;二、CMake的He

2021-07-10 17:00:57 1234 1

原创 Makefile 原理详解

C/C++Linux服务器开发/后台架构师知识体系资料整理概述make 是一个命令工具,它用来解释 Makefile 中的规则。Makefile 中可以使用系统 shell 所提供的任何命令。但注意有些像 set,setenv 等是不行的。Makefile 最大的优点是简单,只需要一句话的解释就可以让一个之前不懂的人可以用起来并发挥作用。但只有掌握了它的内涵才能真正得心应手。编译的知识Makefile 开始其实是为了 C/C++的编译而诞生的,所以它里面的很多隐藏规则都是针对 C/C++的。在讲

2021-07-10 15:59:45 948 1

转载 23 种设计模式详解 代码实现全解析

设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。在《设计模式:可复用面向对象软件的基础》一书中所介绍的 23 种经典设计模式,不过设计模式并不仅仅只有这 23 种,随着软件开发行业的发展,越来越多的新模式不断诞生并得以应用。有经验的开发者在学习设计模式可以和过往的经验互相印证,更容易理解这些设计模式。设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素。问题描述了

2021-07-09 20:48:00 2081

转载 动态规划详解

首先,动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。动态规划这么简单,就是穷举就完事了?我看到的动态规划问题都很难啊!首先,动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程

2021-07-09 16:26:13 327

转载 DFS(Deep First Search)深度优先搜索 & BFS(Breath First Search)广度优先搜索。

C/C++Linux服务器开发/后台架构师知识体系整理DFS(Deep First Search)深度优先搜索。BFS(Breath First Search)广度优先搜索。今天想说一说个人对于这两个搜索方法的见解。在我看来,DFS与BFS是算法道路上最基础最容易掌握的,同时,又能提供巨大助力的方法之一。我这里斗胆用方法二字来形容DFS以及BFS,用搜索思想来囊括二者。方法是死的,而思想是活的,我们应该通过对这两种方法的剖析来获得这种思想,因为无论是在现实问题还是算法题目上,问题模型都是多变的,我们要

2021-07-09 15:43:04 695

原创 [最短路径问题]—Dijkstra 算法最详解

Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。Dijkstra 算法原始版本仅适用于找到两个顶点之间的最短路径,后来更常见的变体固定了一个顶点作为源结点然后找到该顶点到图中所有其它结点的最短路径,产生一个最短路径树。本算法每次取出未访问结点中距离最小的,用该结点更新其他结点的距离。需要注意的是绝大多数的Dijkstra 算法不能有效处理带有负权边的图。下面,我们就从一个赋

2021-07-09 11:33:41 698

转载 数据结构与算法 - 图论

基本概念:图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。图论是一种表示 “多对多” 的关系图是由顶点和边组成的:(可以无边,但至少包含一个顶点)一组顶点:通常用 V(vertex) 表示顶点集合一组边:通常用 E(edge) 表示边的集合图可以分为有向图和无向图,在图中:(v, w) 表示无向边,即 v

2021-07-08 16:34:00 742

转载 红黑树的原理和TreeMap实现

红黑树是一种自平衡二叉查找树,它可以在O(logn)时间内做查找,插入和删除等操作,这使得它在实时应用中很有价值。可用来构造关联数组和集合,如Java中的TreeMap,TreeSet等。相对于AVL树来说,牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说性能要优于AVL树。性质:1、节点是红色或黑色。2、根节点是黑色。3、所有叶子都是黑色(叶子是NIL节点)。4、每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)5、从任一节点到其每个叶子

2021-07-08 16:02:47 287

转载 什么是 BigMap 算法

什么是 BigMap 算法什么是 BigMap 算法算法思想优点:缺点:示例:map映射表位移转换代码示例(c语言)C/C++Linux服务器开发/后台架构师知识体系整理什么是 BigMap 算法所谓 BitMap 就是用一个 bit 位来标记某个元素对应的 value,而 key 即是这个元素。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间。算法思想32位机器上,一个整形,比如 int a; 在内存中占32bit,可以用对应的32个bit位来表示十进制的0-31个数,bitmap算

2021-07-07 20:23:03 1703

转载 什么是布隆过滤器(Bloom Filter)?

什么是布隆过滤器(Bloom Filter)1、什么是布隆过滤器?2、为什么需要布隆过滤器?2.1 缓存穿透3、布隆过滤器实现原理3.1 哈希函数3.2 数据结构4、布隆过滤器操作4.1 添加元素4.2 查询元素4.3 删除元素5、最佳实践5.1 应用场景5.2 设置哈希函数个数和布隆过滤器长度C/C++Linux服务器开发/后台架构师知识体系资料整理1、什么是布隆过滤器?布隆过滤器本质上就是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效

2021-07-07 17:56:15 325

死锁的检测方案教程(LinuxC/C++)

死锁的检测方案教程(LinuxC/C++)

2022-09-15

C++11 (智能指针、关键字、类型推导、新特性)

c++11 面试题总结 1. 左值引用与右值引用的区别?右值引用的意义? 2. c++11 的智能指针种类以及使用场景? 3. c++11 override,final关键字的作用? 4. c++11 类型推导 5. c++11 用过哪些新特性? (C++后台开发教程)

2022-08-20

Linux内核驱动与应用开发全套学习资料.rar

Linux内核驱动与应用开发全套学习资料

2021-07-02

C/C++Linux设计模式.mp4

C/C++Linux设计模式.mp4

2021-01-30

空空如也

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

TA关注的人

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