
C++八股文
文章平均质量分 51
OpenSani
这个作者很懒,什么都没留下…
展开
-
C++如何进行字符串分割,C++如何按照空格对字符串进行解析,C++如何按照逗号对字符串解析
C++如何进行字符串分割,C++如何按照空格对字符串进行解析,C++如何按照逗号对字符串解析原创 2022-10-30 20:00:33 · 1446 阅读 · 0 评论 -
C++ 如何把string转为int,如何把int转为string(字符串转为数字,数字转为字符串)
C++ 如何把string转为int,如何把int转为string(字符串转为数字,数字转为字符串)原创 2022-10-30 14:40:23 · 631 阅读 · 0 评论 -
C++如何表示次方(尖号^不是次方的意思,e也不是次方的意思)
C++如何表示次方(尖号^不是次方的意思,e也不是次方的意思)原创 2022-10-30 11:21:03 · 38598 阅读 · 0 评论 -
C++ sort比较函数的写法,最全面的总结
C++ sort比较函数的写法,最全面的总结原创 2022-09-24 23:44:26 · 2119 阅读 · 1 评论 -
Linux中write和writev的区别,write() vs writev()
Linux中write和writev()的区别:我觉得StackOverflow上面的回答写的很好,see: write vs writev下面是我自己的总结:函数原型:write#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);表示从buf开始的缓冲区向文件描述符fd所引用的文件写入count字节数。writev#include <sys/uio.h>ssize_t原创 2021-12-15 22:20:05 · 3706 阅读 · 0 评论 -
C/Linux语言里面strcpy和strncpy的区别
在Linux系统下,可以去man文档查看,输入man 3 strcpy就有关于他们的详细解释,我觉得看这个就够了。摘录如下:描述:#include <string.h>char *strcpy(char *dest, const char *src);char *strncpy(char *dest, const char *src, size_t n);都表示从源字符串拷贝到目标字符串参数含义:dest表示目标字符串,src表示源字符串,对于strncpy,n表示原创 2021-12-15 21:39:44 · 1833 阅读 · 0 评论 -
webserver项目里面涉及到的http知识
webserver项目里面涉及到的http知识HTTP 请求报文格式HTTP响应报文格式HTTP请求方法有限状态机HTTP 请求报文格式分为请求行,请求头,请求数据三部分,具体形式如下HTTP响应报文格式包括状态行,响应头,响应正文三部分HTTP请求方法HTTP/1.1 协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:GET:向指定的资源发出“显示”请求。使用 GET 方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在 Web Application原创 2021-12-15 19:45:11 · 1431 阅读 · 0 评论 -
网络编程里面什么是逻辑单元?
首先要了解一下服务器编程的基本框架:服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理。如下图所示:单元功能I/O 单元处理客户连接,读写网络数据网络存储单元存储数据,如数据库请求队列各单元之间的通信方式逻辑单元处理业务逻辑比如对于一个http服务器,他的逻辑单元就是处理http请求,其他涉及到IO操作(读写数据),存储(数据库)等不是他要干的事参考资料:Linux高性能服务器编程 游双...原创 2021-12-15 16:39:38 · 1715 阅读 · 0 评论 -
C/C++语言中的assert函数用法
C库中的宏assert允许将诊断信息写入标准错误文件。也就是它可以用于在C程序中添加诊断程序。声明:void assert(int expression);expression——可以是变量或任意C表达式。如果expression的计算结果为TRUE,则assert()不执行任何操作。如果expression的计算结果为FALSE,则assert()在标准错误流(用于显示错误消息和诊断的标准错误流)上显示错误消息,并中止程序执行。举个例子:see: assert geeksforgeeks#inc原创 2021-12-14 11:31:18 · 4198 阅读 · 0 评论 -
Webbench 原理及其优缺点
提示:网上搜索webbench有很多网站,大家还是到原网址去下载以防下载病毒软件。webbench的原网址:webbench原网址原理:详细可以参考:webbench剖析基本原理:Webbench 首先 fork 出多个子进程,每个子进程都循环做 web 访问测试。子进程把访问的结果通过pipe 告诉父进程,父进程做最终的统计结果。编译安装1.wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz2.tar zxv原创 2021-12-13 21:29:39 · 4085 阅读 · 0 评论 -
Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用
关于Reactor模式和Proactor模式原理性的详细介绍可以参见:如何深刻理解Reactor和Proactor? - 小林coding的回答 - 知乎不管是Reactor模式还是Proactor模式都是事件驱动模式,采用了面向对象的思想,如果是IO复用的方式实现高并发是基于面向过程的思想。Reactor模式是一种同步IO模式,什么是同步IO操作什么是异步IO操作可以参见UNP 卷1 P126:同步IO操作导致请求进程阻塞,直到IO操作完成。对于不同类型的IO模型(Linux下有四种,可以看我的原创 2021-12-13 21:04:49 · 1441 阅读 · 0 评论 -
C语言中的回调函数(callback function)
网络上有很多对于对于回调函数的解释,还有人做了一些很有意思的比喻,比如下面这个:回调函数(callback)是什么? - no.body的回答 - 知乎打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to re原创 2021-12-13 15:41:30 · 1701 阅读 · 0 评论 -
Unix下的五种IO模型是什么?区别是什么?
Unix下有5种IO模型:阻塞IO针对阻塞IO的系统调用(如read, write)可能因为无法完成而被系统挂起,直到等待的事件发生为止。通俗的解释,用户进程(也有叫应用进程的)需要进行IO操作,如调用read,如果内核中的数据没有准备好,用户进程就阻塞,直到内核数据拷贝到了用户缓冲区,用户进程才返回。采用这种方式在需要进行IO的进程很多的时候,由于大部分的进程都是处于阻塞状态,会带来很大的进程切换开销,和内存开销。非阻塞IO针对非阻塞IO的系统调用总是立刻返回,不管事件是否发生,如果事件原创 2021-12-12 22:05:04 · 482 阅读 · 0 评论 -
Linux中的信号驱动IO模型是什么?有什么优势?
首先要开启套接字的信号驱动 IO功能,并通过sigaction系统调用安装一个信号处理函数,该系统调用立即返回,进程继续运行并不阻塞,当IO事件就绪(也就是数据报准备好读取时),内核为该进程产生一个SIGIO信号,进程收到SIGIO 信号,然后处理 IO 事件。这种IO模型的优势在于在等待数据的过程中进程可以不用阻塞,只要等待信号处理函数的通知。...原创 2021-12-12 20:11:45 · 623 阅读 · 0 评论 -
什么是IO多路复用?为什么需要IO多路复用?
首先,多路复用(multiplexing) 是计算机里面很常见的一个概念,我觉得他的核心思想就是利用一组资源做很多件事。常见的多路复用(multiplexing)除了网络编程里面的IO多路复用;还有计算机网络的时分多路复用,频分多路复用;还有操作系统里面的时间复用(Time multiplexing,指在多个用户之间安排连续可重用的资源如CPU ),空间复用(Space multiplexing ,将多用途资源分配给几个用户,如内存(虚拟内存),磁盘空间(文件系统))这里详见:https://sites.原创 2021-12-12 19:09:59 · 5622 阅读 · 0 评论 -
C语言里面的传出参数,C++语言里面的传出参数,以及二者的区别,传出参数和引用的区别
一开始进行C原创 2021-12-11 15:42:31 · 998 阅读 · 0 评论 -
C/C++中的字节对齐,结构体对齐,alignment,简单易懂
关于对齐的内容事实上比较复杂,更详细的一篇文章参见:https://blog.youkuaiyun.com/Sansipi/article/details/121597464面试的时候一般只会问结构体对齐的规则是什么?只要记住下面的内容就ok了1. 无pragma pack的结构体对齐规则分配内存的顺序是按照声明的顺序结构体内每一个数据成员的起始位置(第一个元素的起始位置看成0)都应当能被该成员的大小整除,如果不能,就需要对该成员的前一个成员进行填充对于整个结构体而言,还需要满足整个结构体的大小能被大小最原创 2021-11-28 22:39:40 · 561 阅读 · 0 评论 -
C/C++中的字节对齐,结构体对齐,alignment,详细的解释
字节对齐或者结构体对齐有什么作用?需要如何实现?本文详细分析了其中的细节,也欢迎大家一起来讨论,如有错误也请一并指出。实际面试中可能不会涉及到那么具体的细节,一般只会问结构体对齐的规则是什么?关于这个问题可以参见本文的后一部分的内容,也可以看我的另一个文章:1. 名词解析首先关于字节对齐(对齐的英文原名是alignment,但是英文里面没有byte alignment这种叫法,我见到的有data alignment, data structure alignment, structure alignm原创 2021-11-28 22:32:12 · 2116 阅读 · 0 评论 -
在浏览器地址栏输入一个URL后回车之后会经历哪些流程?浏览器输入网址后有哪些步骤?
这也是一个面试的时候经常出现的问题,下面说一下简略版和详细版的回答,以防止追问。简略版:通过DNS(域名解析服务器)获得IP地址首先尝试与http默认端口80建立TCP连接(http是是基于TCP之上的)如果协议是https那么需要转换协议为https连接建立后服务器发送html文本浏览器显示html文本其中的一些解释:域名解析:真实过程非常复杂,主要步骤如下:检查浏览器缓存看有没有对应与主机名(如www.taobao.com)的IP地址,有就返回,如果没有进行下一步查找本机的原创 2021-11-22 21:44:46 · 2330 阅读 · 0 评论 -
TCP如何保证可靠传输?TCP怎么保证可靠性?最详细的总结
TCP如何保证可靠传输?这是一个面试中经常被问到的问题,下面写一个详细的总结。首先是一个简略版的回答:建立连接序号机制合理分片(可以不说,是与UDP相比的,有些八股文上面没有这一条)数据校验超时重传流量控制拥塞控制下面是详细的回答:建立连接:通过三次握手建立连接,保证连接实体真实存在序号机制:保证数据是按序、完整到达合理分片:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。数据校验:TCP报文头有校验和,用于校验报文是否损坏原创 2021-11-21 21:18:26 · 11859 阅读 · 0 评论 -
流量控制和拥塞控制的区别
流量控制的目的就是为了防止TCP发送方发送数据过快而导致接收方接收缓存溢出,流量控制的目的是为了保证发送方发送速率与接收方接受速率匹配。拥塞控制:由于IP网络的堵塞而对TCP发送方的发送控制。二者虽然都是对TCP发送方的发送控制,但是适用场景不一样。...原创 2021-11-21 11:07:25 · 2454 阅读 · 0 评论 -
TCP UDP面向连接是什么意思,面向无连接是什么意思
TCP和UDP都是传输层的协议,上面连接应用层,下面连接网络层(四层模型),经常说TCP是面向连接,UDP是无连接的,具体有哪些含义?连接建立:TCP需要三次握手,UDP不需要任何准备就可以传输数据。因此UDP更快速。连接状态:TCP需要维护连接状态,包括发送接收缓存,拥塞控制参数以及序号与确认号参数,UDP不维护连接状态,也不追踪这些参数。四层参考模型(from : 华南理工计算机网络mooc)参考资料:计算机网络自顶向下方法 7th edition...原创 2021-11-19 22:49:32 · 2504 阅读 · 0 评论 -
C++强制类型转换,C++显式转换
C++中四种强制类型转换(也叫显式转换)是:static_cast, dynamic_cast, const_cast, reinterpret_cast形式cast_name<type>expressionconst_cast ,类型必须是指针,引用或者指向对象类的指针,去掉底层运算对象的const,这样就能进行写操作,只有const_cast能够改变表达式的常量属性,使用其他类型的强制转换都会引发编译器错误static_cast 用于各种非多态类型的转换,比如非 const 转 c原创 2021-11-18 18:54:58 · 1194 阅读 · 0 评论 -
C++引用的本质以及使用注意事项
关于引用的问题,初学者经常困扰,下面说一下引用引用的本质以及注意事项,注意这里&作用不是取地址符。引用的本质:引用的本质在c++内部实现是一个常量指针。c++编译器在编译过程中使用常量指针作为引用的内部实现,因此引用所占用的空间大小与指针相同,只是这个过程是编译器内部实现,用户不可见,上述内容来自黑马C++教程//发现是引用,转换为 int* const ref = &a;void testFunc(int& ref){ ref = 100; // ref是引用,转换为*原创 2021-11-18 16:31:25 · 493 阅读 · 0 评论 -
C++里的const关键字的作用,详细的解释
Const 关键字我觉得最好的解释是这个https://docs.microsoft.com/en-us/cpp/cpp/const-cpp?view=msvc-170const 变量如果const变量不是外部(没有extern修饰)的,必须初始化,在C语言中,常量值默认为外部链接,因此它们只能出现在源文件中。在c++中,常量值默认为内部链接,这允许它们出现在头文件中。const 函数这里特别强调类的成员函数,使用const关键字声明成员函数,说明该函数是一个“只读”函数,不会修改调用它的对象原创 2021-11-18 11:16:52 · 476 阅读 · 0 评论 -
C++为什么只有派生类向基类转换(子类向父类转换)没有基类向派生类?
类类型之间的转换以下内容是对C++ Primer的个人总结主要存在与派生类向基类转换,之所以能够进行派生类向基类转换是因为一个派生类对象既包含了自己定义的成员(非静态)的子对象,还包括继承的基类的子对象。也正是因为此,派生类到基类的类型转换只对指针或者引用类型有效。可以将派生类对象赋值,拷贝,移动给一个基类对象,但是这只涉及到派生类对象里面的基类部分。不存在基类向派生类的转换的原因:基类对象可以是派生类对象的一部分,也可以不是,如果是后者,那么基类向派生类的转换可能造成访问基类里面根本不存在的成员。原创 2021-11-17 22:07:03 · 363 阅读 · 0 评论 -
虚函数如何实现多态?虚函数底层机制是什么?
一个C++面试中经常遇到的题目多态的实现主要分为静态多态和动态多态,静态多态主要是重载(函数重载,运算符重载),在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。举个例子:一个父类类型的指针指向一个 子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写 过后的函数,在父类中声明为加了 virtual 关键字的函数,在子类中重写时候不需要加 virtual 也是虚函数。虚函数的实现:1.在有虚函数的类中,当类实例化为对象时,最开始部分是一个虚函数表原创 2021-11-17 20:57:45 · 1478 阅读 · 0 评论 -
static关键字,C++面试经常问到
static关键字看了网络上很多回答,整理了一下,觉得这个是最清晰的解释不考虑类的情况1. 隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用2.默认初始化为0,包括未初始化的全局静态变量与局部静态变量,都存在全局未初始化区,普通局部变量存储在栈区3.静态变量在函数内定义,始终存在,且只进行一次初始化,具有记忆性,其作用范围与局部变量相同,函数退出后仍然存在,但不能使用,除非下一次函数调用考虑类的情况1.static成员变量原创 2021-11-17 20:12:50 · 476 阅读 · 0 评论 -
C++面向对象三大特性
封装把客观事物封装成抽象的类继承避免代码重复开发,数据冗余多态一个接口,多种方法,包括:函数重载,运算符重载,虚函数原创 2021-11-17 15:30:35 · 879 阅读 · 0 评论 -
static成员函数不能被声明为const virtual volatile 原因
static成员函数不能被声明为const virtual volatile 原因根本原因是static成员函数是类所有对象的共享成员,而不是某个对象的成员,不能使用this指针访问1.virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。#include<iostream>class Test{ public: // 编译错误:static成员函数不能声明为virtual virtual st原创 2021-11-17 15:25:17 · 936 阅读 · 0 评论