- 博客(65)
- 收藏
- 关注
原创 全网最系统最全面的c/c++ Linux服务端开发高级架构师全能体系总结,他来了
涵盖了linux C++服务端开发架构师每个阶段所需要学习的知识点。
2022-08-19 21:50:31 3029
原创 【23秋招c++后端面试技术突围】Linux基础组件之无锁消息队列ypipe/yqueue详解
比较并交换(compare and swap,CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新值。{{}else// 返回bool告知原子性交换是否成功}ypipe_t / yqueue_t无锁队列是单写单读,通过chunk机制避免频繁内存动态分配(内存分配或释放时,多个线程之间存在锁的竞争)。
2022-10-17 20:41:27 419 1
原创 【23秋招c++后端面试技术突围】CAS 原子操作
就像你接了一杯水,这时水是满的,但是这个时候,你的同时很渴,过来拿你的水直接喝掉了一半,这时水剩下了一半,接着,你的同事又重新把你的水帮你接满了,那么这时你的水还是满的,相对于水来说,他还是满的,但是相对于杯子来说,他已经被用过了两次,一次是喝水,一次是接水,这就是ABA问题。你接了一杯水,然后旁边放上一张登记表,这个时候你同事过来,直接喝掉了一半,然后登记上,XXX喝掉了一半的水,然后去给你接满了,再次登记上,我给你接满了,这时,ABA的问题就得到了解决,你一看这个表就知道了一切。那么什么是ABA问题?
2022-10-17 15:34:05 397
原创 【23秋招c++后端面试技术突围】异步请求池
当服务器运行时,难免会和大量其余中间件(mysql,redis...)或者其他服务器进行连接请求。但是如果每送一次连接,就等待其请求的返回,如下图,难免会造成服务器响应慢,任务堆积的问题,所以为了解决这一问题,可以制作一个。,而异步连接池的callback的函数就类似协程的。与协程相比较,如果实现相同异步请求池功能,假如。5)fd加入到监听线程的epoll。1、commit负责发送请求。2、thread监听是否响应。3、init初始化异步请求池。4、destroy回收请求池。3)encode协议包。
2022-10-15 15:41:41 348
原创 【23秋招c++后端面试技术突围】 分析高效内存池的实现方式
群内提供免费的C/C++Linux服务器开发/高级架构师学习资料资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,,只有当内存池不够大需要动态扩增的时候才会调用系统的分配内存函数,其他时间对内存的一切操作都是用应用程序控制的。(在这里的固定指的是每一次和系统申请的内存的大小都是固定的,而不是这个内存池大小只能那么大)和。后面随着内存池的不断扩大,我们通过。
2022-10-08 21:28:49 571
原创 【23秋招c++后端面试技术突围】C++11线程池的实现原理及回调函数的使用
当有新的任务进来,从线程池中取出一个空闲的线程处理任务然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用。当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行。任务队列负责存放主线程需要处理的任务,工作线程队列其实是一个死循环,负责从任务队列中取出和运行任务,可以看成是一个生产者和多个消费者的模型。在上述的场景中必然会频繁的创建和销毁线程,这样的开销相信是不能接受的,此时线程池技术便是很好的选择。
2022-09-30 21:56:10 424
原创 【23秋招c++后端面试技术突围】 操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现(上)
存储场景中,我们对性能的要求非常高。在存储引擎底层的IO技术选型时,可能会有如下讨论关于IO的讨论。看完这段话,读者可能会有如下的问题。,众多新特性中,与存储领域相关度最高的便是最新的IO引擎——io\_uring。从一些性能测试的结论来看,io\_uring性能远高于native AIO方式,带来了巨大的性能提升,这对当前异步IO领域也是一个big news。
2022-09-29 21:19:39 240
原创 【23秋招c++后端面试技术突围】epoll的原理和流程
以添加socket为例,如下图,如果通过epoll_ctl添加sock1、sock2和sock3的监视,内核会将eventpoll添加到这三个socket的等待队列中。epoll在select和poll(poll和select基本一样,有少量改进)的基础引入了eventpoll作为中间层,使用了先进的数据结构,是一种高效的多路复用技术。eventpoll对象相当于是socket和进程之间的中介,socket的数据接收并不直接影响进程,而是通过改变eventpoll的就绪列表来改变进程状态。
2022-09-28 21:46:44 271
原创 【23秋招c++后端面试技术突围】TCP/IP 之 滑动窗口、Nagle算法和延迟确认
启用这个算法后,如果我们通过telnet慢速敲入HELLO,刚开始要发送H,虽然包很小,但是没有需要确认的包,可以立刻发送,但是发送完毕后,由于H的确认还没有来,所以还必须等待,直到H报文的ACK报文来的,报文也积累了ELL三个字符。具体含义是,因为普遍终端应用程序每产生一次击键操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据载荷以及40 个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。这样,你就可以依次从路由、网络包的收发、再到应用程序等,逐层排查,直到定位问题根源。
2022-09-27 20:57:56 1118
原创 用户态协议栈的设计实现
netmap是一个高效的收发报文的I/O框架,需要在Linux下编译使用。运行netmap时,此框架会接管主机的显卡,使显卡的数据发送给内核协议栈处理,转而发送给netmap框架处理。当netmap框架启动后,显卡中的数据被通过mmap映射到内存中。mmap的映射过程由DMA控制。映射后,用户就能直接操作内存中的网络数据了。关键函数分析:nm_open:创建一个指向网卡的文件描述符。nm_nextpkt:接收网卡中的数据,返回一个指向数据头的指针。
2022-09-26 16:42:16 129
原创 linux嵌入式C,C++服务器,C++客户端,C++界面(Qt/Mfc)这些方向未来哪个比较有发展性
最近有同学问问:刚刚毕业,普通211本科。打算找C/C++方向的工作,目前在网上看到最多的有这几个方向:linux嵌入式C,C++服务器,C++客户端,C++界面(Qt/Mfc)这些方向未来哪个比较有发展性啊,或者说还有其他更好的方向。本人学渣一枚,大学没有好好学习,所以想确定一个工作方向认真积累学习;;基于linux环境和C++语言的服务器程序开发,像qq服务器、微信服务器、王者荣耀服务器等等。虽然现在各种高级语言大火,但是在高性能这一块,c++首选。
2022-09-13 21:57:16 1298
原创 UDP可靠性传输-QUIC
QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。尽管QUIC会重传数据包,但是新的数据包的PKN的继续递增的,即之前发送的数据包(PKN=2)和重传的 数据包(PKN=4),虽然数据一样,但包号不同。由于TCP原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。除此之外,QUIC的包头经过身份认证,包内数据是加密的。
2022-09-06 14:42:45 2167
原创 Posix API 和网络协议栈
当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。在上面提到,TCP有ACK机制,当有报文丢失时,需要从丢失的编号开始重传后面的全部报文(哪怕已有接收,但是发送方不会知道)。
2022-09-05 20:16:14 774
原创 Redis+nginx +memcached 网络组件
bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> //代表redis的key/value需要序列化 若是实体类,实体类需要实现序列化。需要jar包common-pool2.jar jedis.jar spring-data-redis.jar。编译nginx cd /home/soft/nginx。默认安装目录 /usr/local/nginx。需要的缓存的类继承该类变可以。
2022-09-05 15:54:32 169
原创 学了C++想进后端开发岗?一文教你从只会语言基础变成一个合格的C++后端开发工程师
普通程序员的工作生涯是怎样的?在学校里只教了语言基础和一些老掉牙的项目;出来就业之后浑然发现大厂进不去;中小厂只能打打杂,从事业务开发多年,对底层原理却没有多少理解;从事嵌入式方向开发,又想转入互联网开发;搞Qt/MFC等桌面开发的呢,薪资多年涨幅又不大;工作中技术既没有挑战,又接触不到新技术。了解很多技术名词,但是深入细问又不理解。最终混到三十多岁成了一条咸鱼这里小卖一波焦虑哈哈,但是不管怎么说;市面上百分之八十以上的程序员都是这样的;冲不进大厂修炼不到技术,怎么着都难。所以还是得自己学学;
2022-09-03 21:47:58 820 1
原创 C++基于reactor的服务器百万并发如何实现
这篇文章主要介绍“C++基于reactor的百万并发如何实现”,在日常操作中,相信很多人在C++基于reactor的服务器百万并发如何实现问题上存在疑惑,狮查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++基于reactor的服务器百万并发如何实现”的疑惑有所帮助!接下来,请跟着狮一起来学习吧!并发量:一个服务器能同时承载客户端的数量承载:客户端发送给服务器的请求(http或tcp等)在200ms内可以返回正确的结果。
2022-09-03 14:07:16 499
原创 C/C++后端开发学习路线总结(附带实习学习经历分享)
以上就是做C/C++后端开发,从新手入门到工作所需要学习的内容整理了,可能并不全面,但掌握以上这些内容足以胜任大部分的岗位要求了。适宜工程师人群1.从事业务开发多年,对底层原理理解不够深入的在职工程师2.从事嵌入式方向开发,想转入互联网开发的在职工程师3.从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师4.从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师5.工作中技术没有挑战,工作中接触不到新技术的在职工程师。
2022-09-02 17:21:41 8227 1
原创 Websocket协议的学习、调研和实现
从Websocket草案得知,Websocket是一个全新的、独立的协议,基于TCP协议,与http协议兼容、却不会融入http协议,仅仅作为html5的一部分。以前web server实现推送技术或者即时通讯,用的都是轮询(polling),在特点的时间间隔(比如1秒钟)由浏览器自动发出请求,将服务器的消息主动的拉回来,在这种情况下,我们需要不断的向服务器发送请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。
2022-09-02 15:04:21 887
原创 http/https服务器实现
一般发送磁盘数据时,需要将磁盘数据读取到内存中,再发送出去。使用sendfile,原理是使用mmap,内存映射,将文件地址映射到内存中,再调用send,节省空间,零拷贝。拷贝是由cpu使用。到此这篇关于http/https服务器实现的文章就介绍到这了,更多相关内容请搜索开发狮以前的文章,希望大家以后多多支持开发狮哦~区别路径还是文件:S_ISDIR(stat_buf.st_mode) S_ISREG(stat_buf.st_mode)解决办法:1.使用分隔符 \r\n\r\n 2.定义包的长度。...
2022-09-01 15:52:04 246
原创 C++中的Reactor原理与实现
中心思想是将所有要处理的I/o事件注册到一个中心I/o多路复用器上,同时主线程/进程阻塞在多路复用器上;reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景,每种服务在服务端可能由多个方法组成,这篇文章主要介绍了Reactor原理与实现,需要的朋友可以参考下。处理机制为:主程序将事件以及对应事件处理的方法在Reactor上进行注册, 如果相应的事件发生,Reactor将会主动调用事件注册的接口,即 回调函数....
2022-08-31 22:15:56 1177
原创 Linux网络编程-网络io与select,poll,epoll
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它不会复用文件描述符集合来传递结果而迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。若非阻塞,则立即返回,有数据则返回拷贝的数据大小,否则返回错误-1,置错误码为EWOULDBLOCK。...
2022-08-30 15:00:28 419
原创 C/C++ Linux 用户态协议栈的实现
在讲网络协议栈前,先理解一个数据包在网络传输是一个怎么样的流程,如下图所示。正在上传…重新上传取消正常的流程是网卡接收到数据后,把数据copy到协议栈(sk_buff),协议栈把sk_buff数据解析完后再把数据放到recv_buff,此时应用程序调用recv把数据从协议栈copy到应用程序;发送数据包,则与之相反,应用程序调用send把数据包copy到send_buff,协议栈从send_buff取数据放到sk_buff,交给网卡发送出去。...
2022-08-29 16:33:01 1293
原创 2023秋招大厂经典面试题及答案整理归纳(381-400)校招必看【Linux篇】
函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。
2022-08-28 09:00:00 175
原创 2023程序员秋招准备 c/c++Linux后端开发岗(简历/技术面)技能体系总结
23年秋招已经打响了;同学们都有准备好了吗?现在就业环境怎么样就不用我说了吧;之前很多的贴说哀鸿遍野删了又写,写了又删。各个互联网大厂招聘情况都不堪入目;百度提前批基本只给了实习生,字节也缩招将近2/3,腾讯更是惨不忍睹,各大厂今年都不好过。秋招hc的数量情况,去年字节秋招8k个hc,今年只有3k个,美团去年1w左右,今年5k,百度去年8k,今年2k。今年很多就业辅导学员都投了研究所、央企、外企、车企、银行科技岗、芯片行业作为保底,这些行业待遇也能达到25-35万左右。............
2022-08-27 20:05:09 2387
原创 2023秋招大厂经典面试题及答案整理归纳(361-380)校招必看【Linux篇】
由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode。每添加一个一个硬链接,文件的链接数就加 1。不足:1)不可以在不同文件系统的文件间建立链接;2)2)只有超级用户才可以为目录创建硬链接。...
2022-08-27 14:36:25 247
原创 2023秋招大厂经典面试题及答案整理归纳(341-360)校招必看【Linux篇】
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。...
2022-08-26 14:46:25 732
原创 2023秋招大厂经典面试题及答案整理归纳(321-340)校招必看
(3)可以返回类成员的引用,但最好是const。在函数体中定义的变量通常是在栈上, 用malloc, 等分配内存的函数分配得到的就是在堆上. 在所有函数体外定义的是全局量, 加了static修饰符后不管在哪里都存放在全局区, 在所有函数体外定义的static变量表示在该文件有效, 不能extern 到别的文件用. 在函数体内定义的static表示只在该函数体内有效.当记录随机分布的时候,快排的平均时间最短,但可能出 现最坏的情况,这时候的时间复杂度是O(n^2),且递归深度为n,所需的栈空间问O(n)。
2022-08-25 15:01:49 264
原创 2023秋招大厂经典面试题及答案整理归纳(301-320)校招必看
允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
2022-08-24 14:46:56 340
原创 2023秋招大厂经典面试题及答案整理归纳(281-300)校招必看
虚拟设备是通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户进程同 时使用,通常把这种经过虚拟技术处理后的设备称为虚拟设备。在操作系统设备管理中,引入虚拟设备是为了克服独占设备速度较慢、降低设备资源利 用率的缺点,从而提高设备的利用率。即资源获职就是初始化,利用对象生命醐来控制程序资源,简单来说就是通过局部对象来处理一些资源问题协程是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个 线程也可以拥有多个协程。操作系统。
2022-08-23 14:42:48 486
原创 2023秋招大厂经典面试题及答案整理归纳(261-280)校招必看
因为gets无法截断数组越界部分,会将所有输入都写入内存,这样越界部分就可能覆 盖其他内容,造成程序崩溃。
2022-08-22 15:53:25 467
原创 C/C++实现协程及原理(详细完整版)-架构师篇
协程,又称微线程,纤程。英文名Coroutine。协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。
2022-08-21 21:30:00 4696
原创 2023秋招大厂经典面试题及答案整理归纳(241-260)校招必看
241. 在一个二维01矩阵中找到全为1的最大正方形,返回其面积。样例 10 10 0 10 111 11111 10 0 10 返回4public int max Square (int [] [] matrix; { // write your code here int row = matrix, length; /#丁大小 int line = matrix [0]. length. //列大小 //一个与matrix相同大小的辅助数组 int [] [] tmp = new int
2022-08-21 09:15:00 733
原创 c++ 网络编程 LINUX/windows 进程间的通信原理与实现代码 基于多进程的服务端实现
本网络编程入门系列博客是连载学习的,有对C/C++ Linux后台架构师学习体系感兴趣或者本身是工程师在学习准备进大厂的可以看我博客其他篇。c++开发怎样才能进入腾讯?
2022-08-20 16:01:14 330
原创 2023秋招大厂经典面试题及答案整理归纳(221-240)校招必看
幵闭原则(0CP)是面向对象设计中“可复用设计〃的基石,是面向对象设计中最重要 的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。幵闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;幵闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。int mid=0;min=mid;break;}}if (a[max]J=key) {//当查找元素不存在时'返回-1 return ~1;lelse {
2022-08-20 14:40:13 886
原创 C/C++ Linux 异步IO(AIO)
每个AIO控制块中, aio_lio_opcode字段指定了该操作是一个读操作(LIO_READ), 写操作(LIO_WRITE), 还是将忽略的空操作(LIO_NOP). 读操作, 会按照对应的AIO控制块被传给aio_read来处理;将异步IO请求放入等待处理的队列中(函数提出请求, 由OS放入). 函数返回值与实际IO操作结果没有关系. IO操作等待时, 需确保AIO控制块和数据缓冲区保持稳定, 下面对应的内容也必须始终合法, 不能被释放, 也不能被复用, 除非IO操作完成.
2022-08-19 15:23:45 1898
原创 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看
情况一:两条单链表均无环最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并), 所以只需要判断他们的尾节点是否相等即可。情况二:两条单链表均有环这种情况只需要拆开一条环路(注意需要保存被设置成null的节点),然后判断 另一个单链表是否仍然存在环路,如果有在,说明无交叉,反之,则有交叉的情况。情况三:两条单链表,一条有环路,一条无环路这种情况显然他们是不可能有交叉的附:如何判断一条单链表是否存在环路,以及找出环路的入口。
2022-08-19 14:18:14 1311
原创 C/C++linux 后台架构开发体系:高并发网络IO模型
今天我们聊一下高并发下的网络 IO 模型高并发即我们所说的 C10K(一个 server 服务 1w 个 client),C10M,写出高并发的程序相信是每个后端程序员的追求,高并发架构其实有一些很通用的架构设计,如无锁化,缓存等,今天我们主要研究下高并发下的网络 IO 模型设计,我们知道不管是 Nginx,还是 Redis,Kafka,RocketMQ 等中间件,都能轻松支持非常高的 QPS,其实它们背后的网络 IO 模型设计理念都是一致的,所以了解这一块对我们了解设计出高并发的网络 IO 框架具体重要意
2022-08-18 15:07:28 760
原创 程序猿面试经验总结(经验篇)
针对两个问题我给的答案是肯定的1、第一个问题,具体什么问题,不太好讲,反正是解决了2、第二个问题,最终我们约定两天后下午四点钟,再次沟通。
2022-08-17 15:19:00 396
原创 2023秋招大厂经典面试题及答案整理归纳(161-180)校招必看
UDP, TCP在传输层,IP在网络层,TCP/IP是英文TransmissionControlProt ocol /Int ernet Prot ocol的缩写,意思是〃传输控制协议/网际 协议〃。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底 层协议(例如T1和X. 25、以太网以及RS-232串行接口)之上。...
2022-08-17 14:23:49 708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人