自定义博客皮肤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

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

原创 2021年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 3139 5

原创 腾讯T9职级后台开发要具备哪些专业的能力及知识点?

前言首先说明这里的后台开发指的就是Linux上的C+ +编程。因为很多人对后台开发有误解,通常人们说前端后台,后台就马上联想到web后台, java、php和各种web框架横飞的既视感。web后台属于后台,但后台却不只有web后台。两者是包含关系。从网络协议的角度分析, web后台聚焦的是HTTP ,而C+ +后台更多聚焦的是TCP。web后台可以看作是一个大后台最 靠前的东西,它解析了HTTP请求,然后可能层层转发给了后面整个分布式系统的许多组件,然后调用他们的服务。公司内部服务器主机之间绝大部分

2021-01-05 18:47:35 3327 7

原创 Zookeeper Leader 选举算法

本文首发于http://www.yidooo.net/2014/10/18/zookeeper-leader-election.html 转载请注明出处当Leader崩溃或者Leader失去大多数的Follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的Leader,让所有的Server都恢复到一个正确的状态。并且在配置文件中是可配置的,对应的配置项为electionAlg。

2023-03-07 22:34:46 32

转载 QUIC协议 接收端状态机

QUIC流的接收端状态机设计还是非常简洁且完备的,虽然看起来要比发送端状态机复杂一些,尤其是有4个条件可以进入初始状态。QUIC接收端状态机与发送端的状态数量是类似的,都是一个初始状态、三个中间状态和两个结束状态,这倒是有助于我们记忆。Recv状态下可以收数据、反馈发送端收数据的ACK、控制发送端的发送速率。Size Known状态下等待数据传送完整。Data Recvd和Data Read分别表明协议层和应用层收到了完整的数据。和Reset Read分别表明协议层和应用层收到了reset事件。

2023-02-21 17:05:00 52

原创 浅析 Makefile

上面的意思是将所有.c文件都经过编译器编译生成.o文件,其中表示的是所有的依赖,在上面的场景中就是当前目录下所有.c文件。在当前目录下,只有main.c和test.c两个文件,并没有.o文件,上面的Makefile之所以能运行,是因为它的隐含规则。对于c语言来讲,如果有地方依赖.o文件,会自动去寻找相同名称的.c文件,并构建出.o文件。前面我们声明的BUILDDIR就是一个自定义变量,要注意的是,如果声明了一个和默认变量一样的变量就会覆盖默认变量,这也给我们提供了一个改变默认规则的入口。

2023-02-13 22:02:42 707 1

原创 TCP、UDP网络编程面试题

TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,是没有可靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。ARP协议完成了IP地址与物理地址的映射。

2023-02-11 20:17:28 2575

转载 MySQL 锁、面试题总结

行级锁的粒度更小,仅对相关的记录上锁即可(对一行或者多行记录加锁),所以对于并发写入操作来说, InnoDB 的性能更高。表级锁: MySQL 中锁定粒度最大的一种锁,是针对非索引字段加的锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。行级锁: MySQL 中锁定粒度最小的一种锁,是针对索引字段加的锁,只针对当前操作的记录进行加锁。意向锁和共享锁和排它锁互斥(这里指的是表级别的共享锁和排他锁,意向锁不会与行级的共享锁和排他锁互斥)。

2023-02-10 17:10:46 60

原创 MySQL中的锁

比如一个事务想要对表加排他锁,如果没有意向锁的话,那么该事务在加锁前需要判断当前表的每一行是否已经加了锁,如果表很大,遍历每行进行判断需要耗费大量的时间。悲观锁是总以最坏的情况假设,比如操作一条数据,总认为也有其他线程要拿这条数据,那就给这条数据上排他锁,让其他事务或者线程阻塞,类似于Java中 synchronized 和 ReentrantLock 等独占锁的思想。元数据锁可以用来保证读写的正确性。行级锁是锁住行,粒度小,性能较高,但是行级锁只在存储引擎层实现,行级锁分为3种,记录锁、间隙锁和临键锁。

2023-02-09 14:17:05 281

转载 MySQL中的日志

针对开发人员而言,这几种日志中最有可能使用到的是慢查询日志。

2023-02-07 14:49:41 41

转载 Redis 简单动态字符串SDS

AOF中记录的是每一个命令的详细信息,包括完整的命令类型、参数等。只要产生写命令,就会实时写入到AOF文件中。

2023-02-07 14:22:19 21

转载 【音视频开发】H.264 并行解码算法分析

并行算法类型可以分为两类在h.264解码时进行功能划分,例如对于四核系统,各个核心分别执行下列任务这种并行类型就是流水线类型,但这种类型在h.264解码中会出现以下问题由于有上述的这些缺点,一般在h.264并行解码器实现中都不会采用这种实现方式。按照数据划分,在每部分进行划分并且处理后,还需要进行合并。在h.264中有多个级别的数据划分,这里挑出其中三个重点分析h.264分为I、P、B帧,其中I、p被用作参考帧,B帧常被用作非参考帧。而并行算法,对于完全不相关的数据才能并行处理,即对作为非参考帧的B帧才能平

2022-12-07 21:25:30 172

原创 【Nginx 原理】进程模型、HTTP 连接建立和请求处理过程、高性能、高并发、事件处理模型、模块化体系结构

我们还可以看到,Nginx 和 Windows 以及 Linux 内核的功能紧密的集成在了一起,以便提升性能。“无阻塞(Non-blocking)”指的是它不会由于 CPU 处于忙状态而停止磁盘的 I/O,在这种情况下,它会处理其他事件,直到 I/O 资源得到释放。Nginx 并不会为每一个的 web 请求创建新的进程,相反,管理员可以配置 Nginx 主进程的工作进程的数量(一个常见的做法是为每一个 CPU 配置一个工作进程)。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。

2022-11-29 22:04:40 740

转载 C++多线程 原子操作与无锁编程

无锁编程真的很难,如果要完全写对那就成了变态难,出错了平时常见的调试手段根本没用,几乎全靠脑补;并且这种轮询方式相对于锁的中断挂起方式来讲,只有在超高并发的前提下才能达到一个理想的效果,低并发下空载会对系统资源造成极大的浪费,因此原则上我不推崇这个玩意;从测试结果来看,所有平台上自旋锁性能都非常接近无锁实现,并且其使用方式和互斥锁几乎没差别,因此在没啃透之前,使用锁的方式才是明智的选择.LinuxC/C++服务器开发/架构师教程: https://ke.qq.com/course/417774?

2022-11-22 21:09:54 151

转载 C++并发多线程 如何理解互斥锁、条件变量、读写锁以及自旋锁?

mutex是睡眠等待(sleep waiting)类型的锁,当线程抢互斥锁失败的时候,线程会陷入休眠。或者通过压测的判断,不过大多数时候我们好像并不需要这么一个pthread的自旋锁,知友们可以提供一些自旋锁的使用参考。读写锁的含义是准确的:是一种 读共享,写独占的锁。并且多线程调用的时候条件变量和互斥量一定要一一对应,不能一个条件变量在不同线程中wait的时候传入不同的互斥量。单看使用方法和使用互斥量的代码是差不多的。所谓加读锁和加写锁,准确的说法可能是『给读写锁加读模式的锁定和加写模式的锁定』。

2022-11-22 16:36:19 256

原创 dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/ 0vS/TRex/dpvs技术成长体系

作为近年来运用越来越广泛,被互联网企业越来越认可的技术,网络虚拟化技术:dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/0vS/TRex/dpvs技术等该如何学习呢?这里就把 相关技术点进行整理总结,看完以后,不会让你失望的。DPDK 网络。

2022-09-22 22:02:21 1480

转载 CPP 简单的线程池(一)

std::packaged_task 的实例只是可移动的,而不可复制。std::packaged_task 封装在派生类 Task 中(#6),由指向非泛型的抽象基类 Task_Base 的指针引用派生类对象(#7)。因为每一个任务都是一个特定类型的 std::packaged_task 对象,为了实现任务队列的泛型化,需要设计一个通用的数据结构 Task_Wrapper,用于封装特定类型的 std::packaged_task 对象,(lockwise_shared_pool.h)

2022-09-16 20:32:33 274

转载 epoll 原理详解

Linux epoll 网络编程

2022-09-02 20:57:44 593

转载 Linux I/O 多路复用,select / poll / epoll 详解

文件描述符(file descriptor)是一个非负整数,从 0 开始。进程使用文件描述符来标识一个打开的文件。系统为每一个进程维护了一个文件描述符表,表示该进程打开文件的记录表,而文件描述符实际上就是这张表的索引。当进程打开(open)或者新建(create)文件时,内核会在该进程的文件列表中新增一个表项,同时返回一个文件描述符 —— 也就是新增表项的下标。一般来说,每个进程最多可以打开 64 个文件,fd ∈ 0~63。...

2022-08-16 20:47:59 1770

转载 Redis 源代码的整体架构,想要彻底掌握 Redis 就从源码入手

而要想解决这些问题,最好的办法就是阅读和学习 Redis 源码,通过学习源码,我们能进一步掌握 Redis 的实现细节,这带来的最明显收益就是,能了解 Redis 运行过程中要判断和处理的各种条件。首先我们知道,Redis 在运行时是一个网络服务器实例(也就是 redis-server 启动之后对应的进程),因此相应地就需要有代码实现服务器实例的初始化和主体控制流程,而这是由 server.h / server.c 实现的,Redis 整个代码的 main 入口函数也是在 server.c 中。...

2022-08-09 21:28:02 276

转载 Linux 详解socket实现与网络编程接口

根据底层网络机制的差异,计算机网络世界中定义了不同协议族的套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix 套接字)、CCITT X.25 地址(X.25 套接字)等。结合上面代码我们发现,内核使用 struct inet_protosw 数据结构实现的协议交换表,将应用程序通过 socketcall 系统调用指定的套接字操作,转换成对某个协议实例实现的套接字操作函数的调用。2、套接字内核实现,我们具体分析了套接字从创建的过程。...

2022-08-09 20:51:41 264

转载 基于DPDK的高效包处理系统

DPDK 系统性学习

2022-06-21 21:48:14 318

原创 Linux C/C++开发的难度到底在哪?大厂岗位要求

CC++Linux服务器开发高级架构师 学习提升

2022-06-17 15:31:25 639

原创 gRPC C++开发环境搭建

gRPC C++开发环境搭建

2022-06-14 16:51:32 550

转载 音视频 RTMP协议推流交互流程

音视频流媒体服务器开发

2022-06-11 16:34:30 634 1

转载 LinuxC 服务器开发 高并发服务器-多进程并发服务器

原文地址:https://www.cnblogs.com/xuejiale/p/10849095.html高并发服务器一、多进程并发服务器1. 实现示意图2. 使用多进程并发服务器时要考虑以下几点:父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度)3. 使用多进程的方式, 解决服务器处理多连接的问题:**(1)共享读时共享, 写时复制文件描述符内存映射区 – mm

2022-05-26 21:35:06 266 1

原创 Redis高性能原理:源码上解析redis单线程/reactor 网络模型

为什么单线程Redis能那么快? 一方面,Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。另一方面,就是 Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率。接下来,我们就重点学习下多路复用机制。Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群

2022-05-19 16:12:20 343

原创 C/C++Linux服务器开发岗位学习指南(经典面试题+技术提纲)细节拉满

经典面试题1.求下面函数的返回值(微软)int func(x){int countx = 0;while(x){countx ++;x = x&(x-l);}return countx;}假定x = 9999 答案:8思路:将x转化为2进制,看含有的1的个数。2.什么是’‘引用"?申明和使用’'引用“要注意哪些问题?答:引用就是某个目标变量的’'别名"(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行 初始化。引用声明完毕后,

2022-05-14 16:21:31 283 1

转载 DPDK Timer Library原理

作者:一觉醒来写程序 原文前置知识学习跳表(SkipList)跳表应具有以下特征:1)一个跳表应该有多个层(level)组成,通常是10-20层。2)跳表的第0层包含所有的元素。3)每一层都是一个有序的链表。层数越高应越稀疏,这样在高层次中能跳过许多不符合条件的数据。4)如果元素x出现在第i层,则所有比i小的层都包含x;5)每个节点包含key及其对应的value和一个指向下一层相同内容的节点位置。skiplist的查询过程示例:以已有数据13、22、75、80、99为例,查找80。从最.

2022-05-13 16:49:52 218

原创 C++开发者的机会在哪里?盘点C/C++就业方向

引用一个校招脉友的提问:现在C++的机会是不是越来越少了?这个问题还是老生常谈,看看大家怎么说?不难发现,c++很多的岗位很多都存在两个共性。第一个,岗位比较高端,任职要求高;第二个,部分在传统行业,流动性不大但薪资较其他的语言薪资较低。所以显得c++在2022这个铜三铁四的环境下,行情比较稳定。比如嵌入式,数据库内核,信息安全,音视频,QT客户端等等。那有没有这样一个方向,相对自动驾驶,AI底层算法任职要求要对较低,但是对于嵌入式,QT客户端又薪资相对较高的c/c++开发技术方向

2022-05-05 21:23:08 1091

原创 GO语言 gRPC学习笔记

官方文档:https://www.grpc.io/docs/what-is-grpc/introduction/grpc-go源码:https://github.com/grpc/grpc-goprotobuf编译器源码:https://github.com/protocolbuffers/protobufproto3文档:https://developers.google.cn/protocol-buffers/docs/proto3gRPC是什么gRPC来自Goole,它是一个高性能、开源和通

2022-04-23 17:02:45 1033

原创 MySQL InnoDB 幻读

Mysql的事务隔离级别这四种隔离级别,当存在多个事务并发冲突的时候,可能会出现脏读,不可重复读,幻读的一些问题,而innoDB在可重复读隔离级别模式下解决了幻读的一个问题,什么是幻读幻读是指在同一个事务中,前后两次查询相同范围的时候得到的结果不一致如图,第一个事务里面,我们执行一个范围查询,这个时候满足条件的数据只有一条,而在第二个事务里面,它插入一行数据并且进行了提交,接着第一个事务再去查询的时候,得到的结果比第一次查询的结果多出来一条数据,注意第一个事务的第一次和第二次查询,都在同一个事物

2022-04-22 22:13:44 629 3

原创 音视频开发 视频编解码理论知识

像素像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素。分辨率图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。RGB一般来说,我们看到的彩色图像中,都有三个通道,这三个通道就是R、G、B通道,(有的时候还会有Alpha值,代表透明度)

2022-04-16 16:00:04 221

原创 音视频常见播放器框架分析

音视频面试必问:如何设计一个播放器1.常见播放器框架分析2.如何解决播放端延迟的问题3.音视频如何做同步4.快进、快退、逐帧播放如何实现 音视频开发技术精讲《常见播放器框架分析》 播放器框架SDL2播放音频使用SDL播放解码后的音频数据,SDL播放音频数据的流程如下:播放器-播放做了哪一些事情?打开媒体文件分析媒体流成分查找相应的解码器数据读取线程-读取数据包

2022-04-15 20:34:36 2431

原创 大厂工程师们所热衷的DPDK到底是个什么东西?

DPDK是什么?可能很多人都听过也了解过这一技术。目前很多的互联网大小厂都在使用这样一门技术,从招聘网站上看,对应的岗位也很多,薪资不菲:比如OVS,VPP等技术,很多云厂家都在用,提供云主机,组件,数据库等等,它对比于原生,能够大幅提升IPV4的转发性能,可以让用户在迁移包处理应用时,获得更好的成本和性能优势。所以,随着技术的发展,DPDK会越来越受到重视,将广泛应用到各类分布式系统中。对DPDK感兴趣的,这里可以先领取一份DPDK新手入门学习资料包:资料获取那你可能还会看到过一个问题,什么

2022-04-13 16:24:39 502

原创 DPDK源码学习: LPM路由匹配算法

在DPDK中,实现了两种路由匹配算法:精确匹配最长前缀匹配(LPM)本文主要介绍最长前缀匹配。DPDK中的LPM实现综合考虑了时间和空间问题,做了一个比较好的折中,将32位的地址空间分为两部分:高24位低8位这是专门针对路由表查询设计的数据结构。通过这种方式,将IP地址空间分为二级表的方式进行查询。前缀的24位共有2^24个条目(16x1024x1024个),也就是说IP地址的前三个字节对应的数值在表中存在一一对应项。低8位的256个条目可以根据需求进行分配,这样可以极大的节省空间。

2022-04-12 17:53:55 2004

原创 想走C++后端开发方向,如何规划学习才能成功上岸?

C++后端开发是一个庞杂的技术栈,因为没有统一的开发框架并且应用行业非常广泛。所有涉猎广泛,这里就把C++后端开发的技术点进行整理总结,看完以后,不会让你失望的。1.精进基石,分为四个方面(数据结构,设计模式,c++新特性,Linux工程管理)数据结构部分设计模式C++新特性Linux工程管理2.高性能网络设计(网络编程,网络原理,协程ntyco,用户态协议栈ntytcp)网络编程网络原理自研框架: 纯c实现的协程(2000行代码)自研tcp协议栈3. 基础组建设计,分

2022-04-11 22:28:28 1874

原创 后端开发常见层式结构设计:跳表、时间轮、LSM-Tree

高并发读写有序结构组织空间利用率以及写性能高的磁盘数据组织海量并发定时任务组织后端开发常见层式结构设计:跳表、时间轮、LSM-Tree1. 海量并发定时任务组织:时间轮2. 高并发读写有序结构组织:跳表3. 空间利用率以及写性能高的磁盘数据组织:LSM-Tree上课地址:https://ke.qq.com/course/417774?flowToken=1031343 C/C++后端开发常见层式结构设计:

2022-04-06 21:12:55 1029

原创 TiDB 在今日头条的实践,分布式关系型数据库分析

TiDB 是什么?TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适OLAP 场景的混合数据库。TiDB怎么来的?开源分布式缓存服务 Codis 的作者,PingCAP 联合创始人& CTO ,资深 infrastructure 工程师的黄东旭,擅长分布式存储系统的设计与实现,开源狂热分子的技术大神级别人物。即使在互联网如此繁荣的今天,在数据库这片边

2022-04-01 17:59:14 1134

原创 协程存在的原因?协程能够解决哪些问题? 纯C语言|实现协程框架,底层原理与性能分析,面试利刃

协程这个概念很久了,好多程序员是实现过这个组件的,网上关于协程的文章,博客,论坛都是汗牛充栋,在知乎,github上面也有很多大牛写了关于协程的心得体会。突发奇想,我也来实现一个这样的组件,并测试了一下性能。借鉴了很多大牛的思想,阅读了很多大牛的代码。于是把整个思考过程写下来。实现代码 https://github.com/wangbojing/NtyCo代码简单易读,如果在你的项目中,NtyCo能够为你解决些许工程问题,那就荣幸之至。协程存在的原因?协程能够解决哪些问题?在我们现在CS,BS开发模式下

2022-03-22 14:54:42 254

原创 LinuxC/C++服务器开发学习路线2022完整版

随着业务市场的不断壮大,更便捷的开发语言也越来越受到市场的欢迎。Java,python还有新贵golang。那c/c++语言的开发者市场在哪里。虽然说没有活干说的可能过于夸张,但是面临的事实就是比不了。可能初学一点Java,python等等就能找到一份不错的开发工作,但是如果你只会一点c,又不是校招的话,能找到哪些工作呢?c/c++不同于Java。Java的技术路线是比较固定的,学好技术栈等待新技术的更新,并学会它,那在薪资上至少不会少。而c/c++的话,不得不说,路子比较广,选择的方向比较多,这里就不

2022-03-16 21:06:31 1654 1

死锁的检测方案教程(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关注的人

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