自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 offer收割机——linux后台服务器开发方向(专业学习路线图总结)

IT行业,从业技术方向千千万,为什么我称后台服务器开发领域为offer收割机。首先我们看一下,如果要从事后台服务器开发要掌握哪些技术!有点多,做好心理准备。可能技术的全面度是你之前没有见过。看到这里是不是先关注,收藏一波。便于日后再学~~~1.算法与设计排序与查找常用算法常用的数据结构常用的设计模式推荐学习书籍:CLRS 算法导论 算法百科全书、Algorithm Design 算法设计、算法设计与分析视频学习地址:https://www.ixigua.com/i68291875094

2020-08-31 16:29:20 735

原创 揭秘C++无锁队列的几种实现及性能对比

本文主要介绍无锁队列的使用场景,从使用无锁队列的必要性层层深入,再深入浅出分析了无锁队列的几种实现以及相关性能的对比,希望对有相应需求的同学提供一点经验和帮助。

2024-05-23 17:22:21 378

原创 深入理解mmap的原理与使用方式

本文主要介绍了 mmap 的原理和使用方式,通过本文我们可以知道,使用 mmap 对文件进行读写操作时可以减少内存拷贝的次数,并且可以减少系统调用的次数,从而提高对读写文件操作的效率。由于内核不会主动同步 mmap 所映射的内存区中的数据,所以在某些特殊的场景下可能会出现数据丢失的情况(如断电)。为了避免数据丢失,在使用 mmap 的时候可以在适当时主动调用 msync 函数来同步映射内存区的数据。t=N7T8。

2024-05-21 17:36:08 658

原创 【超级详细】一文搞懂redis的所有知识点

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2024-05-20 20:10:58 821

原创 从进入内核态看内存管理

看完本文相信大家对实模式,保护模式,特权级转换,分段,分页等概念应该有了比较清晰的认识。

2024-05-17 17:35:47 680

原创 从linux内核出发彻底弄懂socket底层的来龙去脉

从上面分析ext4文件系统分配inode时,是通过ext4_alloc_inode函数分配了ext4_inode_info结构体,并初始化结构体成员,函数最后返回的是ext4_inode_info中的struct inode成员。就这样通过socket fd进行普通文件系统那样通过描述符进行读写等。三者的关系如下图,struct inode是VFS抽象层的表示,ext4_inode_info是ext4文件系统inode在内存中的表示,struct ext4_inode是文件系统inode在磁盘中的表示。

2024-05-16 15:30:10 835

原创 超详细的网络抓包神器 tcpdump 使用指南

本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。t=N7T83天学会linux c/c++高性能网络编程,多案例解析,附面试网络八股文!!

2024-05-15 17:50:11 763

原创 计算机操作系统知识点总结(有这一篇就够了!!!)

定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。

2024-05-14 15:23:51 617

原创 深入理解 http 反向代理(nginx)

另外需要说的是, 一般提到反向代理, 通常是指 http 反向代理, 但反向代理的范围可以更大, 比如 tcp 反向代理, 在这里, 不打算讨论 tcp 之类的反向代理, 当文中说到反向代理时, 指的就是 http 反向代理.正向代理通常直接称为 代理(proxy), 无需强调它是正向的, 在 http 协议中, 代理即指正向代理.至此, 关于直接访问, (正向)代理以及反向代理就介绍完了, 最后总结下三种情形及与购物例子的比喻.

2024-05-13 19:49:06 772

原创 Linux性能优化-内存优化

内存映射,其实就是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每 个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,如下图所示:页表实际上存储在 CPU 的内存管理单元 MMU 中正常情况下,处理器就可以直接通过硬件,找出要访问的内存在页表的映射下,进程就可以通过虚拟地址来访问物理内存了那么具体到一个 Linux 进程中,这些内存又是怎么使用的呢?

2024-05-11 14:21:29 813

原创 深入理解Linux中TCP/IP协议栈的实现原理与具体过程

sk_buff中保存了L2,L3,L4层的头指针,这样在层传递时只需要对数据缓冲区改变头部信息,并调整sk_buff中的指针,而不需要拷贝数据,这样大大减少了内存拷贝的需要。如下图所示,网络子系统中用来存储数据的缓冲区叫做套接口缓存,简称为SKB,该缓存区能够处理可变长数据,即能够很容易地在数据区头尾部添加和移除数据,且尽量避免数据的复制,通常每个报文使用一个SKB表示,各协议栈报文头通过一组指针进行定位,由于SKB是网络子系统中数据管理的核心,因此有很多管理函数是对它进行操作的。最底层是设备驱动程序。

2024-05-09 20:46:29 810

原创 自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)

数字化时代的到来带来了大规模数据的产生,各行各业都面临着数据爆炸的挑战。随着云计算、物联网、人工智能等新兴技术的发展,对存储技术的需求也越来越多样化。不同应用场景对存储的容量、性能、可靠性和成本等方面都有不同的要求。具备存储技术知识和技能的人才更具有竞争力。这里给大家推荐零声教育全网独家的【自下而上-存储全栈 】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析计算机底层原理,全面解析储存开发技术(

2024-05-08 16:36:35 879

原创 TCP经典异常问题探讨与解决

skb在ip层这时候NAT刚完成第一次port(修改dport 1112为dport 80),然后进入了early demux机制,此时的4元组是[saddr:12345 -> daddr:80],所以这时候匹配上了第一条流的sk,但是系统并不知情有问题了,紧接着NAT第二次改变skb的port,变为[saddr:1112 -> daddr:80],这个也是后续TCP层延续使用的,虽然这个4元组信息是对的,但是已经没有用了,因为early demux阶段已经获取、保存socket了。出现问题的情景如下图。

2024-05-07 20:29:04 858

原创 C++ 如何进阶?

按照上面推荐的内容来学习的话,要学习得深入一点的话1年的时间肯定需要的,甚至2年也不足为 其。当然对于非科班的学生来说,大部分都没有充足的时间的,这时候建议尽量把C++基础、计算 机网络、操作系统、 网络编程、数据结构与算法这五个部分的内容学得很扎实,大概6个月的时间。t=N7T8t=N7T8t=N7T8t=N7T8t=N7T8t=N7T84个小时搞懂tcp/ip协议栈,从tcp/ip协议栈原理到实现一个网络协议栈https://www.bilibili.com/video/BV1NA411y7Vc/

2024-05-06 20:09:45 1047

原创 RocksDB深度解析

目标读者:有兴趣深入了解亚马逊 DynamoDB、Cassandra等NoSQL数据库以及LevelDB和RocksDB等嵌入式键值存储的内部原理,并熟悉数据库管理系统(DBMS)的基本组件(尤其是存储引擎)的读者。

2024-04-25 19:59:19 768

原创 小白也能看懂 | 最多能创建多少个 TCP 连接?

资源一台Linux服务器的资源一个TCP连接占用的资源占满了会发生什么CPU看你花多少钱买的看你用它干嘛电脑卡死内存看你花多少钱买的取决于缓冲区大小OOM临时端口号1文件描述符1进程\线程数ulimit -n看IO模型系统崩溃。

2024-04-23 20:59:09 862

原创 高性能网络框架-DPDK你不得不知道的点

但是基于硬件的劣势非常明显,发生Bug不易修复,不易调试维护,并且网络技术一直在发展,例如2G/3G/4G/5G等移动技术的革新,这些属于业务的逻辑基于硬件实现太痛苦,不能快速迭代。但是,随着上层业务的需求以及DPDK的完善,在更高的应用也在逐步出现。获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享。

2024-04-20 21:03:04 994

原创 透过内核收包流程理解DPDK

网络通信作为互联网的底座,其网络服务质量直接影响着用户的上网体验。如微信这类级别的应用,拥有上亿级别的日活,是典型的高并发的场景,简单的堆硬件无法有效的解决该类问题,提高单台服务器的性能成为问题的焦点。随着各大互联网公司业务的扩展,越来越多的互联网公司青睐高性能、高并发技术的网络技术,通过性能的优化来提升系统的容量,进而可实现降本增效的目标。为解决网络高性能的问题,业界提供了硬件和软件两类解决方案,不少公司基于开源的DPDK框架和专用芯片来提升系统性能。

2024-04-18 17:35:15 701

原创 c++程序员简历中项目怎么写?避免踩坑!

从面试官的角度来说,我们也是从学生时代过来的,对于大多数学生做的项目的水平都心知肚明。对于应届生,项目其实不是必需的,面试官更看重的还是基础知识部分;倘若某位同学在简历中描述了自己的项目,那么面试的时候,面试官会结合项目的内容考察一下。为了让大家可以感同身受,我截取了两份真实应届生求职 C++ 岗位的简历中项目描述,你可以自己先想一想,如果在简历中这样描述项目,面试时可能会被问到哪些问题。面试的开场通常是面试官让面试者做一下自我介绍。

2024-04-17 17:20:31 1195

原创 【C/C++】什么是内存泄漏?如何检测内存泄漏?

内存泄漏是在没有自动 gc 的编程语言里面,经常发生的一个问题。自动垃圾回收(Automatic Garbage Collection,简称 GC)是一种内存管理技术,在程序运行时自动检测和回收不再使用的内存对象,以避免内存泄漏和释放已分配内存的负担。因为没有 gc,所以分配的内存需要程序员自己调用释放。其核心原因是调用分配与释放没有符合开闭原则,没有配对,形成了有分配,没有释放的指针,从而产生了内存泄漏。free(p1);以上代码段,分配了两个s1大小的内存块,由 p1 与 p2 指向。

2024-04-15 20:35:48 1267 3

原创 Linux驱动(驱动程序开发、驱动框架代码编译和测试)

驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。

2024-04-13 20:55:18 562

原创 深入浅出全面解析RDMA技术

传统的TCP/IP网络通信,数据需要通过用户空间发送到远程机器的用户空间。数据发送方需要讲数据从用户应用空间Buffer复制到内核空间的Socket Buffer中。然后内核空间中添加数据包头,进行数据封装。通过一系列多层网络协议的数据包处理工作,这些协议包括传输控制协议(TCP)、用户数据报协议(UDP)、互联网协议(IP)以及互联网控制消息协议(ICMP)等。数据才被Push到NIC网卡中的Buffer进行网络传输。

2024-04-11 20:16:49 1043

原创 一文搞定 mmap 内存映射原理

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

2024-04-10 17:20:43 798

原创 C/C++如何快速学习?少走3年弯路

于我而言,最开始学习就是 C++,除了计算机专业,其他专业可能学习的第一门编程语言为 C 语言,还是谭浩强爷爷那本,当时想着有点 C 基础,无外乎就是 C 语言的升级版,于是开启了 C++ 的路程。

2024-04-09 20:38:08 976

原创 聊聊Linux内核中内存模型

在Linux中二进制的程序从磁盘加载到内存,运行起来后用户态是使用pid来唯一标识进程,对于内核都是以task_struct表示。二进制程序中的数据段、代码段、堆都能提现在task_struct中。每一个进程都有自己的虚拟地址空间,虚拟地址空间包含几种区域,具体参照如下在内核中进程分配内存时候并非立马给定虚拟内存对应的物理内存,而是分配虚拟内存的使用权。只有当进程真正访问申请的虚拟内存才会分配物理页帧并建立页表映射。

2024-04-07 16:34:04 956

原创 Linux性能分析工具-perf并生成火焰图

perf 是一个非常实用且深入的性能分析工具,适用于从底层硬件交互到上层应用程序逻辑的全方位性能剖析。perf 工具的设计目的是为了帮助开发者和系统管理员分析应用程序以及内核本身的性能,寻找潜在的性能瓶颈,并据此进行针对性的优化。perf 主要特性包括以下几个方面:1、函数级和指令级热点分析:perf 可以通过采样分析,精确到函数级别或甚至指令级别来发现CPU占用率高的热点代码段。

2024-04-03 14:22:56 1022

原创 掌握Linux内存故障追踪:技术指南

其中特殊的值IPC_PRIVATE,用于创建当前进程的私有共享内存, 多用于父子进程间。获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享。单靠memleak无法判断这些内存分配操作是真正的内存泄漏(即,分配的内存没有任何引用,永远不会被释放),还是只是内存用量的正常增长,或者仅仅是真正的长期内存。

2024-04-01 17:14:03 953

原创 从易到难,推荐9个适合练手的C++项目

老有一些同学和我说学习了 C++ 以后,想要做些项目锻炼自己,让我从「简单到难」都推荐一些。那有啥说的,必须推荐!毕竟 C++ 的优质项目我见过太多了!下面我就按照「从易到难」的梯度,依次来推荐,总共 9 个。

2024-03-30 16:30:30 2071

原创 【c++】剖析 stl + glibc “内存泄漏” 原因

最近项目增加了一个模块,在 Centos 系统压测,进程一直不释放内存。因为新增代码量不多,经过排查,发现 stl + glibc 这个经典组合竟然有问题,见鬼了!通过调试和查阅 glibc 源码,好不容易才搞明白它 "泄漏" 的原因。问题在于:ptmalloc2 内存池的 fast bins 快速缓存和 top chunk 内存返还系统的特点导致。

2024-03-28 17:16:29 682

原创 腾讯二面:epoll性能那么高,为什么?

一个有5个通知的地方三次握手完成之后接收数据回复ACK之后发送数据收到ACK之后接收FIN回复ACK之后接收RST回复ACK之后Linux相关面试题,是非常常见的面试题。以上的内容,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。t=N7T8linux c/c++开发之高性能网络编程,面试与开发都非常重要的技术,不容错过!

2024-03-26 20:33:43 916

原创 浅谈C++20 协程那点事儿

先介绍一点协程的概念,如果你已经理解和掌握了相关的背景知识就可以跳过这个章节(或者快速浏览下,也许我们有些观念不一致可以讨论)。这里我想稍微聊的深入一点,这涉及到入门后遇到复杂的协程问题时能不能正确的理解并解决问题。协程(Coroutines),也被称为微线程,纤程。一般指一个可以被暂停和恢复执行的逻辑体。一个普通的函数有 2 个常规的操作和行为:调用(Call)和返回(Return)。当调用这个函数的时候,会暂停当前的执行,跳转到这个函数的起始位置去执行。当函数执行完成后会返回结果(或者抛出异常)。这个调

2024-03-21 20:57:06 1114

原创 图文详解io_uring高性能异步IO架构

可以使用io_uring_prep_XXX()系列函数来准备不同类型的I/O请求,例如io_uring_prep_read()用于读取数据,io_uring_prep_write()用于写入数据。已创建的io_ring对象需要和fd进行绑定, 以便能够通过fd找到io_uring对象,创建一个新的file,file private_data成员指向io_ring对象,申请一个未使用的文件描述符fd,fd映射至file,并存储在进程已打开文件表中。

2024-03-20 15:21:32 1279

原创 一篇文章让你真正搞懂epoll机制

epoll机制本身也是阻塞的,当epoll_wait未检测到epoll事件时,会出让CPU,阻塞进程,这种阻塞是非常有必要的,如果不及时出让CPU会浪费CPU资源,导致其他任务无法抢占CPU,只要epoll机制能够在检测到epoll事件后,及时唤醒进程处理,并不会影响epoll性能。epoll的实现机制是通过内核与用户空间共享一个事件表,这个事件表中存放着所有需要监控的文件描述符以及它们的状态,当文件描述符的状态发生变化时,内核会将这个事件通知给用户空间,用户空间再根据事件类型进行相应的处理。

2024-03-19 17:22:47 727

原创 你真的懂Linux线程和信号的关系吗?

其他线程收到信号后,如果线程设置了阻塞/屏蔽信号集,那么该信号会存储在私有未决信号队列,比如通过tkill,tgkill,pthread_kill,以及pthread_sigqueue函数发送给线程的信号。当主线程收到信号后,如果主线程设置了阻塞/屏蔽信号集,那么该信号会存储在共享未决信号队列,比如通过kill或者sigqueue函数发送给主线程的信号。讲到信号,我们更多的是站在进程的角度去理解信号,当一个进程有多个线程的时候,那么进程,线程,信号三者之间会是什么样的关系呢?

2024-03-18 16:46:21 858

原创 一篇文章讲清楚mmap实现原理

VMA(Virtual Memory Area,虚拟内存区域)是Linux内核中用于管理进程虚拟内存的数据结构。每个进程都有一个VMA链表,用于描述进程的虚拟地址空间的不同区域。VMA包含了一段连续的虚拟地址空间,它定义了该区域的起始地址、结束地址以及一些属性信息。VMA可以表示进程的代码段、数据段、堆、栈等不同的内存区域。VMA对应Linux内核struct vm_area_struct对象。

2024-03-16 15:48:23 953

原创 从菜鸟到大师!年薪20W的c++ QT开发工程师需要懂哪些技术?

Qt是一个跨平台的C++应用程序开发框架,广泛用于开发图形界面和跨平台应用程序。它提供了丰富的工具和库,使开发者能够快速构建可靠、高效、美观的应用程序。Qt不仅支持主流操作系统如Windows、macOS和Linux,还可以在移动平台如Android和iOS上进行开发。Qt具有许多强大的功能,包括图形渲染、事件处理、数据库连接、网络通信等。它还提供了丰富的UI组件库,使开发者可以轻松创建各种交互式用户界面。Qt还支持多线程编程、国际化和本地化等特性,并且拥有活跃的社区和广泛的第三方库支持。

2024-03-13 16:11:51 1003

原创 从内存管理的角度聊聊MMU的那些事

从计算机大致发展历程来了解内存管理的大致发展策略,如何衍生出 MMU,以及固定分片管理、可变分片管理等不同机制的差异,最后衍生出单级分页管理机制、多级分页管理机制、TLB 的作用。从概念上相对比较易懂的角度描述了 MMU 的诞生、机制,而忽略了处理器的具体实现细节。作为从概念上更深入的理解 MMU 的工作机理的角度,还是不失为一篇浅显易懂的文章。t=N7T8。

2024-03-11 20:03:32 928

原创 图文并茂的讲清楚Linux零拷贝技术

Linux零拷贝技术是一种优化数据传输的技术,它可以减少数据在内核态和用户态之间的拷贝次数,提高数据传输的效率。在传统的数据传输过程中,数据需要从内核缓冲区拷贝至应用程序的缓冲区,然后再从应用程序缓冲区拷贝到网络设备的缓冲区,最后才能发送出去。而零拷贝技术通过直接在应用程序和网络设备之间传输数据,避免了中间的拷贝过程,从而提高了数据传输的效率。sendfile系统调用:sendfile系统调用可以在内核态中直接将文件内容发送到网络设备的缓冲区,避免了数据在用户态和内核态之间的拷贝。

2024-03-08 16:05:46 1139

原创 C++性能优化 —— TCMalloc的原理与使用

TCMalloc(Thread-Caching Malloc,线程缓存的malloc)是Google开发的内存分配算法库,最初作为Google性能工具库 perftools 的一部分,提供高效的多线程内存管理实现,用于替代操作系统的内存分配相关的函数(malloc、free,new,new[]等),具有减少内存碎片、适用于多核、更好的并行性支持等特性。

2024-03-07 17:32:22 1653

原创 一个10年C++程序员对技术和业务的感悟,献给还在迷茫中的你

涵盖手写代码实现:sdpk文件系统,dpdk用户态协议栈,异步网络库zvnet,协程,io_ uring,Nginx,bpf,线程池,内存池,连接池,原子操作, ringbuffer,定时器,死锁检测,分布式锁,日志,probuf,kafka,grpc,udp可靠传输。由于面试中被问到线程池,TCP/IP网络的时候,让面试官问得人仰马翻,哑口无言,所以回来之后洗心革面,下决心要把线程池,TCP/IP好好研究个明白,再也无法容忍自己只知其一不知其二了。现在的技术的学习曲线的增加,让我的忍耐性越来越低。

2024-03-06 21:06:33 873

空空如也

空空如也

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

TA关注的人

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