
C++后台开发
文章平均质量分 93
Linux服务器开发
C/C++Linux后台服务器开发高级架构师内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK多个高级知识点。
展开
-
探究线程与进程的区别这一问题
看了下面的定义,可能会有点晕,但我还是要把他写下来(为了严谨)。进程是资源(CPU、内存等)分配的基本单位,具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是独立运行和独立调度的基本单位(CPU上真正运行的是线程)。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。原创 2022-10-20 15:17:03 · 190 阅读 · 0 评论 -
TCP:当初取代NCP,如今害怕被取代
我叫TCP(Transmission Control Protocol)也叫传输控制协议。不觉回忆1983年,亲手将NCP协议淘汰,取而代之的是我,成了火遍大江南北的网络红人之一。现如今,我感受到前所未有的恐惧,因为我一生的敌人UDP正在赶超我,甚至将我取而代之。原创 2022-10-18 15:01:26 · 263 阅读 · 0 评论 -
[深入浅出C语言]理解取整、取余和取模
给出一个定义: 如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = q*d + r 且0 ≤ r < d。其中,q被称为商,r 被称为余数,取模运算求取的就是这个余数r。return 0;}结果显而易见会是1,那如果改成下面这样结果又会如何?int main(){//改成负数了int b = 3;return 0;}2>>>原创 2022-10-17 17:00:02 · 2175 阅读 · 0 评论 -
epoll的实现原理
使用的是队列,为什么不用栈呢?你可以想象一下,先是五个客户端有数据需要你处理,你用的是栈的数据结构,先处理了四个之后又来了五个,那就又从栈顶开始处理,栈底的就很晚才处理了。不要看poll内核态和用户态都是靠遍历的方式就觉得poll一定比epoll慢,在io量小的情况下,poll是比epoll快的,在大量io的情况下,才是epoll的主场。对于有很多fd的所有fd的集合,我们需要快速的查找并且不造成过多的资源浪费,所以使用的数据结构是红黑树,不仅查找的速度快,而且内存的大小也是可以根据结点的多少来决定。原创 2022-10-10 16:12:50 · 515 阅读 · 0 评论 -
探究MYSQL之索引
在讲MYSQL的索引之前,先了解一下MYSQL的B+树,首先它是多路平衡搜索树,为什么MYSQL使用的是B+树,因为数据存储在磁盘中,而树的高度决定了访问磁盘的次数,所以选择B+树;MYSQL的B+树结构如下图所示: MYSQL的B+树它具有以下特点:(1)叶子节点当中存储所有的数据(2)非叶子节点当中只存储所有索引信息(key用来排序)(3)B+树的高度代表访问磁盘的次数(4)节点默认的大小是16K,即一页(磁盘管理的最小单位)(5)所有叶子节点都在同一层高度(6)采用中序遍历。原创 2022-09-29 14:51:38 · 366 阅读 · 0 评论 -
Netty高性能之Reactor模型
服务端用于接收客户端连接的不再是1个单独的NIO线程,而是一个独立的NIO线程池。网络I/O读、写操作等由一个 NIO 线程池负责,线程池可以采用标准的 JDK 线程池实现(Netty 扩展了 JDK 线程池),它包含一个任务队列和 N 个可用的线程,由这些 NIO 线程负责消息的读取、解码、编码和发送;Acceptor 线程池只用于客户端的登录、握手和安全认证,一旦链路建立成功,就将链路注册到后端 subReactor 线程池的 I/O 线程上,有 I/O 线程负责后续的 I/O 操作。原创 2022-09-28 15:05:03 · 1877 阅读 · 0 评论 -
深入探索Linux零拷贝原理
磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量。原创 2022-09-21 16:00:02 · 738 阅读 · 0 评论 -
深入理解MYSQL之缓存
在讲缓存之前先了解一下,什么是MYSQL的主从复制和读写分离。主从复制编辑添加图片注释,不超过 140 字(可选) master是主数据库,stave从数据库 (1)DML操作引起主数据库数据变更,产生binlog文件(二进制日志,在事务提交后产生),通过io-thread写入binlog;原创 2022-09-20 17:11:59 · 533 阅读 · 0 评论 -
深入浅出用户态协议栈
在讲网络协议栈前,先理解一个数据包在网络传输是一个怎么样的流程,如下图所示。正常的流程是网卡接收到数据后,把数据copy到协议栈(sk_buff),协议栈把sk_buff数据解析完后再把数据放到recv_buff,此时应用程序调用recv把数据从协议栈copy到应用程序;发送数据包,则与之相反,应用程序调用send把数据包copy到send_buff,协议栈从send_buff取数据放到sk_buff,交给网卡发送出去。原创 2022-09-19 15:27:14 · 227 阅读 · 0 评论 -
NtyCo纯C协程的原理分析
一个协程核心结构体如下void *arg;(1)context,上下文,切换用的(2)stack,每个协程的栈,协程内部用来做函数压栈(3)size,协程栈的大小(4)func,协程入口函数(5)arg,入口函数的参数(6)wait(等待集),等待IO就绪,等待集合采用红黑树存储(7)sleep(睡眠树),采用红黑树存储,按睡眠时间进行排序,key为睡眠时长,value为协程节点(8)ready(就绪集合),采用队列ready_queue存储。原创 2022-09-17 15:23:14 · 528 阅读 · 0 评论 -
为什么C++能屹立这么久?细说C++ 可以开发的 7 件事 以及 C++ 的特点和学习的优点
C++是一种编程语言,是C语言的扩展,可以说是一种高级形式。C++ 是一种在 C 语言的基础上增加了面向对象元素的语言,它可以让您快速移动您的计算机,并实现更高效的编程。它也被简称为“Shipura”或“Shipura”。C++ 用于广泛的领域,例如智能手机应用程序的开发、游戏和机器人技术,这些领域的需求近年来不断增加。C++ 被命名为一种比 C 语言更高级的语言的含义。C语言是1972年在美国发展起来的一种编程语言,C++的历史始于1979年它的前身——编程语言“C with Classes”的发展。之后原创 2022-09-14 16:09:02 · 2110 阅读 · 0 评论 -
C++ STL deque 容器底层实现原理(深度剖析)
事实上,STL 中每个容器的特性,和它底层的实现机制密切相关,deque 自然也不例外。《C++ STL deque容器》一节中提到,deque 容器擅长在序列的头部和尾部添加或删除元素。本节将介绍 deque 容器的底层实现机制,探究其拥有此特点的原因。想搞清楚 deque 容器的实现机制,需要先了解 deque 容器的存储结构以及 deque 容器迭代器的实现原理。原创 2022-09-09 15:19:26 · 189 阅读 · 0 评论 -
网络IO是如何一步一步走向零拷贝的
你们知道当程序需要读取或者写入数据的时候,CPU是如何操作我们的磁盘的吗?首先CPU肯定是要把读写数据的命令告诉给磁盘,这个命令可以通过IO总线传给磁盘,那这里有个细节,其实我们常说的磁盘不仅仅是只包含存储数据的媒介,还有接口,接口相信大家都熟悉,接口的意义不仅仅是为了连接到IO总线上的,其实这个接口里还有个叫做控制器的东西,控制器才是真正控制磁盘读写的东西,当CPU发出读写指令的时候,这个指令其实是告诉磁盘控制器的。原创 2022-09-08 20:36:20 · 162 阅读 · 0 评论 -
高并发下的网络 IO 模型设计
我们知道在 Linux 中无论是文件,socket,还是管道,设备等,一切皆文件,Linux 抽象出了一个 VFS(virtual file system) 层,屏蔽了所有的具体的文件,VFS 提供了统一的接口给上层调用,这样应用层只与 VFS 打交道,极大地方便了用户的开发,仔细对比你会发现,这和 Java 中的面向接口编程很类似。原创 2022-09-07 14:37:57 · 203 阅读 · 0 评论 -
备战2023秋招,应届生应做好哪些准备
23秋招已经开始了!作为应届毕业生求职最友好的季节,今年很多大厂的提前批并没有释放太多岗位,而是选择了秋季招聘。后续的补充和春招,竞争会更加激烈!本文将从以下几个方面与您讨论,如何准备和获得更多的软件开发职位。1.市场环境2.面试准备3.技术提升1.学习要有主动性。无论是开始的自学,还是后面的培训学习,学习的主观能动性一定要有,特别是报班学习之后,不要觉得万事有老师,外部的辅导条件能够让你有更好的学习效率和氛围,但是最终需要掌握技能的还是你自己的,所以学习的过程不要懈怠。原创 2022-09-06 13:54:18 · 551 阅读 · 0 评论 -
Redis 多线程网络模型全面揭秘
Redis 作为缓存系统的事实标准,它的底层原理值得开发者去深入学习,Redis 自 2009 年发布第一版之后,其单线程网络模型的选择在社区中从未停止过讨论,多年来一直有呼声希望 Redis 能引入多线程从而利用多核优势,但是作者 antirez 是一个追求大道至简的开发者,对 Redis 加入任何新功能都异常谨慎,所以在 Redis 初版发布的十年后才最终将 Redis 的核心网络模型改造成多线程模式,这期间甚至诞生了一些 Redis 多线程的替代项目。原创 2022-09-05 17:52:05 · 310 阅读 · 0 评论 -
DPDK技术学习路线总结,虚拟化专家之路
现在非常流行的DPDK技术,随着实时响应万维网的广泛使用,音频、图像、视频的使用越来越多,带动了服务质量需求的增长。为了应对这种增长,TCP/IP体系结构开发了QoS(服务质量),以支持具有各种QoS要求的各种类型的流量。数据平面是QoS框架的三个平面之一,承担着分组队列管理、队列调度、拥塞避免等机制,对提高网络通信效率起着至关重要的作用。在此基础上,人们期望以更低的成本和更短的产品开发周期提供多样化的网络单元和丰富的功能,如应用处理、控制处理、分组处理、信号处理等。原创 2022-09-05 16:15:29 · 436 阅读 · 0 评论 -
C++后台开发学习路线(已多人拿下腾讯后台开发)
首先介绍下自己吧,本人系统架构师,曾供职著名创业公司系统架构师,微软亚洲研究院、创维集团。著有多个软件专利,参与多个开源软件维护。ntytcp,ntyco的founder,github follow人数1.4k。原创 2022-09-03 15:52:54 · 2530 阅读 · 1 评论 -
高性能对象池实现
内存池用于对频繁申请的内存进行管理进而提升分配效率,但缺乏对一些创建和销毁开销比较大的对象的复用手段,因此对象池应运而生。而当系统中存在大量对象需要频繁创建和销毁时,如何减少大量的耗时开销是对象池构建的关键点之一,本文以此出发,与大家共同探讨高性能对象池的实现。文章作者:杨哲,腾讯WXG后台研发工程师。原创 2022-09-02 14:57:32 · 325 阅读 · 0 评论 -
高并发场景下,6种方案,保证缓存和数据库的最终一致性!
在解决缓存一致性的过程中,有多种途径可以保证缓存的最终一致性,应该根据场景来设计合适的方案,读多写少的场景下,可以选择采用“Cache-Aside结合消费数据库日志做补偿”的方案,写多的场景下,可以选择采用“Write-Through结合分布式锁”的方案,写多的极端场景下,可以选择采用“Write-Behind”的方案。...原创 2022-09-01 17:24:01 · 577 阅读 · 0 评论 -
为什么很多企业一边大规模裁员,又一边招聘?
最后如梦初醒,才知道自己是小丑。真实,上面的话都不敢说,我敢说只因为我不在大厂干了,也不想再进去。就算封杀我也无所谓。我坚决反对拿员工前途做赌注的公司!我要说这些话,也希望企业裁员慎重考虑!同时也希望企业不要盲目的招聘,因为真的很多同学因为你们的招聘赌上了未来。我不怕得罪那么多的大厂,我只希望彼此都真诚些,大家都是为了更好的未来。............原创 2022-08-31 15:34:14 · 746 阅读 · 0 评论 -
C++异步:asio的scheduler实现!
如上面的代码所示,property主要通过三个模板函数来工作:query(): 查询某属性的值。require(): 获取满足对应属性的对象。prefer(): 获取包含定制内容的对象。对于系统本身特别复杂,需要适应的场景特别多的情况,这种设计本身确实会简化部分业务侧的使用理解复杂度,原来对多种不同Api的记忆,变成了property的选择。但其实对于库本身的实现来说,我们也容易看到,利用property对多种并发泛式进行约束的方式,本身就具备一定的复杂度,实际上并不那么成熟。...原创 2022-08-30 16:51:35 · 816 阅读 · 0 评论 -
分布式数据中心网络互联技术实现
传统部署思路存在一个问题,如图2右侧拓扑,当虚机从A中心迁至B中心时,A、B中心向骨干网通告的包含虚机地址的路由没有变化(Ingress流量方向不变),VRRP的主备关系也没有变化(Egress流量方向不变),因此位于B中心的虚拟机发出的流量必须通过跨中心的二层链路到达A中心的网关后,才能沿A中心的核心路由器被发往客户机,而B中心一侧的汇聚设备和广域网出口设备并没有被利用,这就出现了“次优路径”现象。虚机的网关指向VRRP的VIP,由此虚机的Egress流量优选从A中心到客户机的路径。动态DNS解析技术。.原创 2022-08-29 16:07:26 · 896 阅读 · 0 评论 -
后台服务架构高性能设计之道
本文主要探讨和总结服务架构设计中高性能的技术和方法,如下图的思维导图所示,左边部分主要偏向于编程应用,右边部分偏向于组件应用,文章将按图中的内容展开。本文探讨和总结了后台开发设计高性能服务的常用方法和技术,并通过思维导图总结了成一套方法论。当然这不是高性能的全部,甚至只是凤毛菱角。每个具体的领域都有自己的高性能之道,如网络编程的 I/O 模型和 C10K 问题,业务逻辑的数据结构和算法设计,各种中间件的参数调优等。文中也描述了一些项目的实践,如有不合理的地方或者有更好的解决方案,请各位同仁赐教。...原创 2022-08-27 14:24:59 · 691 阅读 · 0 评论 -
深度介绍分布式系统原理与设计
1 概念1.1 模型 节点在具体的工程项目中,一个节点往往是一个操作系统上的进程。在本文的模型中,认为节点是一个完整的、不可分的整体,如果某个程序进程实际上由若干相对独立部分构成,则在模型中可以将一个进程划分为多个节点。异常机器宕机:机器宕机是最常见的异常之一。在大型集群中每日宕机发生的概率为千分之一左右,在实践中,一台宕机的机器恢复的时间通常认为是24 小时,一般需要人工介入重启机器。网络异常:消息丢失,两片节点之间彼此完全无法通信,即出现了“网络分化”; 消息乱序,有一定的概率不是按照发送时的顺序依次到原创 2022-08-25 17:35:54 · 339 阅读 · 0 评论 -
DPDK性能影响因素分析
上篇请参阅“”,本篇为下篇。介绍基于 DPDK 进行应用开发和环境配置时,应用程序性能的影响因素以及相应的优化调整方法。这些因素并非必然劣化性能,可能因硬件能力、OS 版本、各类软硬环境参数配置等的差异产生较大波动,或者存在较大的不稳定性,相关的调优方法需要用户结合自身的VNF应用部署在实践中不断完善。更多关于DPDK技术内容请参考“《中国电信DPDK技术白皮书v1.0》”。中国电信DPDK技术白皮书v1.0DPDK基础—认识DPDK技术DPDK架构高清版DPDK编程指南(中文版)原创 2022-08-24 14:54:23 · 827 阅读 · 0 评论 -
DPDK技术原理与架构
DPDK学习资料DPDK技术原理与架构。原创 2022-08-23 14:42:43 · 738 阅读 · 0 评论 -
Nginx + keepalived 实现高可用
比如: http://www.dbspread.com/download/av123.rmvb 这个视频下载地址被其他网站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盗链,我们要禁止这种引用就叫做防盗链。原创 2022-08-22 15:15:57 · 2538 阅读 · 0 评论 -
学习总结-网关 架构演进
天翼账号是中国电信打造的互联网账号体系产品,利用中国电信管道优势为企业提供用户身份认证能力。其中网关系统是天翼账号对外能力开放体系的重要组成:业务侧它以集中入口、集中计费、集中鉴权管控为目标,技术侧它支持隔离性、可配置、易开发、动态路由、可降级、高并发等场景。自 2017 年天翼账号网关系统上线以来,历经数次互联网的营销大促活动,特别是 2021 年的春节红包活动和刚过去双 11 活动,天翼账号网关系统在 10 万级 QPS 和 10 亿级日请求量的情况下,各项指标依然保持平稳,顺利保障合作方活动的开展。原创 2022-08-19 14:44:32 · 859 阅读 · 0 评论 -
消息队列基本原理和选型对比
erlang 有并发优势,性能较好。虽然源码复杂,但是社区活跃度高,可以解决开发中遇到的问题;业务流量不大的话可以选择功能比较完备的 RabbitMQ。原创 2022-08-18 14:55:40 · 247 阅读 · 0 评论 -
Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9
C++后台开发是一个庞杂的技术栈,因为没有统一的开发框架并且应用行业非常广泛。所有涉猎广泛,这里就把C/C++++后台开发的技术点进行整理总结,看完以后,不会让你失望的。原创 2022-08-17 15:57:07 · 655 阅读 · 0 评论 -
分布式系统架构设计
业务在刚开始时都是单体应用,随着用户量和访问量的增加,在架构层面会发生变化,逐步由单体应用开发转为分布式应用开发,比如把单体应用中的每个模块都按照特定的方法拆分成一组独立的服务,服务与服务之间通过HTTP或者RPC方式调用。服务实例在启动时被加载到容器中,并将服务自身的相关信息,比如接口名称、接口版本、IP地址、端口等注册到注册中心,并使用心跳机制定期刷新当前服务在注册中心的状态,以确认服务状态正常,在服务终止时将其从注册表中删除。系统的可用性是分布式系统的重要指标,是系统容错能力的体现。...原创 2022-08-16 15:49:24 · 934 阅读 · 0 评论 -
后端开发应彻底掌握的13 种锁的实现方式
最近有很多小伙伴给我留言,分布式系统时代,线程并发,资源抢占,"锁" 慢慢变得很重要。那么常见的锁都有哪些?原创 2022-08-15 17:56:11 · 485 阅读 · 0 评论 -
计算机网络知识点全面总结(一篇全懂)
1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。有关数据链路层的重要知识点:数据链路层为网络层提供可靠的数据传输;基本数据单位为帧;主要的协议:以太网协议;...原创 2022-08-13 14:32:58 · 1857 阅读 · 0 评论 -
熬夜肝了这一份C++开发详细学习路线
C/C++后台开发相关视频,文档代码资料包,学习路线思维导图免费领取学了之后要验证自己学得如何,可以来小编的网站看看这些面试题,通过面试题查漏补缺技术视频讲解,总之,关于校招,学习路线,面试题等等,很多我在网站都更新了,包括个人经历,大家迷茫没事做时,可以多打开看看。最后,大家加油,努力学两年,争取日后那个好的 offer原文链接:https://juejin.cn/post/6997248187413037070。.....................原创 2022-08-12 15:25:13 · 1111 阅读 · 1 评论 -
一张图,理清微服务架构路线(收藏)
它是什么?我为什么要使用它?哪些工具比较好?请注意,我在哪些工具比较好部分提到了两三个哪些工具比较好,当然,我们还有很多其他哪些工具比较好,选择这些哪些工具比较好的标准是业务需求,受欢迎程度、性能、开源以及更新频率。再次注意,我们还有基于云的服务,这不在本文讨论的范围内。本文,我用上图作为架构图示例。这个图涉及到大部分微服务架构组件,虽然不是也很全面,但是微服务架构的标准模型。在本文中,我试图展示一个与微服务架构模式相关的路线图。...原创 2022-08-11 15:18:58 · 400 阅读 · 0 评论 -
干货:服务器网卡组技术原理与实践
摘要:证券行业为了保障其业务的高可用性,数据中心服务器接入大量采用了服务器网卡(Team)技术。Team技术不完全属于网络系统,也不完全属于主机系统负责,而是介于两者的中间地带,因此极易出现问题。最常见的错误就是服务器端选择了交换机相关的team模式,但交换机端网络人员却没有做任何设置。在一定条件触发下,会引起交换机报主机物理地址flapping错误,继而导致整个交换机CPU利用率居高不下。本文通过对两种常见服务器网卡的Team技术原理的探讨,分析了各种Team模式的实现方式和配置方式。......原创 2022-08-10 17:03:42 · 575 阅读 · 0 评论 -
深入理解Linux I/O系统
其中,页缓存(PageCache)是操作系统对文件的缓存,用来减少对磁盘的 I/O 操作,以页为单位的,内容就是磁盘上的物理块,页缓存能帮助程序对文件进行顺序读写的速度几乎接近于内存的读写速度,主要原因就是由于 OS 使用 PageCache 机制对读写访问操作进行了性能优化。而 mmap 做了什么?在 Linux 系统中,传统的访问方式是通过 write() 和 read() 两个系统调用实现的,通过 read() 函数读取文件到到缓存区中,然后通过 write() 方法把缓存中的数据输出到网络端口。..原创 2022-08-09 14:43:07 · 224 阅读 · 0 评论 -
干货:从零设计高并发架构
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。...原创 2022-08-08 15:20:51 · 194 阅读 · 0 评论 -
迄今为止见过最详细的零拷贝技术讲解
DMA 技术的推出使得内存与其他组件,例如磁盘、网卡进行数据拷贝时,CPU 仅仅需要发出控制信号,而拷贝数据的过程则由 DMA 负责完成。Linux 的零拷贝技术有多种实现策略,但根据策略可以分为如下几种类型:减少甚至避免用户空间和内核空间之间的数据拷贝:在一些场景下,用户进程在数据传输过程中并不需要对数据进行访问和处理,那么数据在 Linux 的 Page Cache 和用户进程的缓冲区之间的传输就完全可以避免,让数据拷贝完全在内核里进行,甚至可以通过更巧妙的方式避免在内核里的数据拷贝。...原创 2022-08-06 14:53:47 · 320 阅读 · 0 评论