![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++学习
文章平均质量分 81
Break The Sky
这个作者很懒,什么都没留下…
展开
-
c++面经汇总(计算机网络2)
请问TCP三次握手是怎样的首先:客户端发送同步信号SYN = 1、seq = x到服务端服务端收到之后,SYN= 1,seq = y、ack = x+1到客户端客户端收到之后,SYN = 1、ack = y+1到服务端,连接建立TCP握手为什么两次不行,为什么不用四次首先来分析一下握手的过程A发送同步信号SYN 与seq序号B收到后返回ACK确认序号B收到后返回seq和SYNA收到后返回ACK实际上是通过上面四步走的但是23是可以合并的,因此实际上是三次握手,那么如果四原创 2021-04-28 11:01:53 · 124 阅读 · 0 评论 -
c++面经汇总(计算机网络)
请你说一下TCP是怎样保证可靠连接的,并且简述一下TCP建立连接和断开连接的过程TCP保证可靠连接有三个条件序列号、确认应答、超时重传:当客户端的数据到达发送方的时候,发送方需要发出一个确认应答,表示已经接收到该数据段,并且确认序号会说明它下次需要接收的数据序列号,如果发送方没有收到应答确认,那么可能是在发送的过程中有数据丢失的现象,也可能是确认应答丢失,这是发送方会等待一段时间之后,进行重传,一般是等待2*往返事件+一个偏差值窗口控制:TCP会利用窗口控制来提高运输速度,意思是在一个窗口大小内,不原创 2021-04-26 20:48:34 · 380 阅读 · 0 评论 -
c++面经整理(操作系统 协程、协程与线程、系统调用、fork实例、微内核与宏内核、僵尸进程、IO模型、异步编程的事件循环、page cache)
说一说协程顾名思义,携程就是协助主城的运行,携程,又称微线程,虽然携程看上区也是子程序,但执行过程中,在子程序内部可以中断,然后转而实现执行别的子程序,在适当的时候再返回执行;协程和线程的区别:和多线程相比,协程最大的优势就是携程的执行效率,由于子程序切换不是线程切换,而是由程序自身的控制,因此,协程并没有线程切换时的开销,和多线程相比,线程数越多,协程的性能优势就越明显第二大优势就是不需要多线程的锁机制,因为只有一个线程,因为只有一个线程,也不存在同时写变量冲突,在协程中控制的资源不加锁,只需要原创 2021-04-26 09:43:16 · 275 阅读 · 0 评论 -
c++面经汇总(操作系统 互斥锁机制以及互斥锁和读写锁的区别、进程状态转换(动态就绪、静态就绪、动态阻塞、静态阻塞)软链接、硬链接、大端小端、用户态和内核态、死锁产生的必要条件、内存溢出和内存泄漏线
请你讲述一下互斥锁机制,以及互斥锁和读写锁的区别互斥锁用来保证在任何时刻,都只能有一个线程访问该对象,当获取锁操作失败时,线程会进入睡眠,等待锁释放时唤醒。读写锁:读写锁分为读锁和写锁,处于读的操作时,可以允许多个线程同时获得读操作,但是同一个时刻只能有一个线程可以获得写锁,当获得写锁失败时,线程进入睡眠状态,一直到写锁释放时被唤醒写锁会阻塞其他读写锁(当有一个线程获取到写锁时,读锁也不能被其他线程所获取)写锁优先于读(一旦有写者,后续的读者必须进行等待,唤醒时优先考虑写)非常适用于读数据频率远大于写原创 2021-04-25 18:24:06 · 1288 阅读 · 4 评论 -
c++面经知识汇总(编译与底层、结构体内存对齐计算问题)
c++中什么是右值引用,什么是左值引用,有什么区别c++引用、移动、转发1.右值与左值:在c++中所有的值必然都属于右值、左值之一,所谓的左值就是在表达式结束以后依然持久存在的值或对象,而右值则是指表达式结束时就不再存在的临时变量,所有具有变量或者对象都是左值,右值并不具名一个可以区分左值和右值的便捷方法:看看能不能对表达式取地址,如果可以,为左值,如果不行,为右值2. 左值引用、右值引用 :所谓的左值引用就是给某个变量取了一个别名,右值引用关联到右值时,右值被存储到特定位置,右值引用指向该特定位置,原创 2021-04-21 17:12:20 · 130 阅读 · 0 评论 -
c++面经知识汇总(STL中迭代器的作用、类成员的访问权限、struct和class的区别,类中定义应用数据成员)
STL中的迭代器有什么作用,为什么有指针之后还要使用迭代器首先,迭代器的具有提供一种方法,可以顺序的访问容器中的对象,但是有又不会暴露底层内部表示。迭代器和指针的区别:迭代器不是指针,它是一种类模板,虽然他模拟了指针的一些功能,如重载了++、–等,迭代器封装了指针,他其实是一个可以遍历STL中全部元素的对象,它可以适应任何类型,也可以根据不同的类型来实现++、-- 等操作;迭代器返回的是对象的引用,而不是对象的值;产生迭代器的原因就是,可以通过迭代器,不在意类型的区别,同样也不用暴露内部的原创 2021-04-21 08:43:44 · 266 阅读 · 1 评论 -
c++面经知识汇总(顺序容器、关联容器、STL的组成部分以及作用,容器删除元素导致迭代器失效)
请来说一下map和set的区别,分别是怎么实现的map和set都是c++的关联容器,而且其底层都是通过红黑树实现的;map中的元素是成对出现的key-value ,关键字起到索引的作用,值则表示与索引相关联的数据;set中的元素就是关键字的集合,每个元素值包含一个关键字set的迭代器是const的,不允许修改元素的值,map允许修改value但是不允许修改key,原因是因为map、set都是通过关键字来保证其有序性,map支持下标操作,set不支持下标操作,map可以用key做下标,map的下标运原创 2021-04-20 21:11:57 · 298 阅读 · 0 评论 -
c++面经知识汇总(虚函数怎样实现多态、函数调用、处理函数返回值、malloc和new的区别)
请说一下虚函数表具体是怎样实现多态的在基类中,如果有虚函数,那么会生成一个虚函数表,表中保存的是虚函数的地址,当其被派生的时候,派生类会继承这个虚函数表,如果派生类中重写了基类的虚函数,那么在其虚函数表中的对应函数地址会修改称自己的虚函数地址,当进行调用的时候,对象首先是通过虚表指针找到虚函数表,然后通过虚函数表中的函数地址,找到对应的虚函数进行调用,通过这种机制实现运行时多态函数是怎样进行调用的在程序的运行期间,会为每一个函数调用分配函数栈,在栈内进行函数的逻辑过程,在使用之前,先把函数的返回地址压原创 2021-04-20 17:37:48 · 134 阅读 · 0 评论 -
c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)
如果同时定义了两个函数,一个带const,一个不带,会有问题吗不会,相当于函数重载什么是隐式转换在c++中,不会将两个不同类型的值相加,而是先根据类型转化规则,设法将运算对象统一之后,再求值,上述的类型转化是自动执行的,不需要程序员介入,因此被称作隐式转化隐式转换发生的时机:大多数情况下,比int小的整型将会转化为较大的整数类型在条件中,非布尔类型转换为布尔类型在初始化的过程中,初始值转换为变量类型算数转换:一般来说,会将较小的算数类型转换为较大的算数类型,如int转换为double原创 2021-04-20 17:06:00 · 113 阅读 · 2 评论 -
c++面经知识汇总(虚函数、析构函数、fork)
为什么基类析构函数必须使虚函数,为什么c++默认的析构函数不是虚函数当某个类被继承的时候,根据替换原则,可以使用派生类替换基类对象,当释放的时候如果不将基类的析构函数声明为虚函数的话,编译器只会释放基类的对象资源,但是实际上我们建立的是子类对象,想要释放的也是子类对象,所以应该把基类的析构函数声明成虚函数,子类去重写,这样就可以动态的检测到底是什么对象需要被析构,从而可以正确的析构我们想要析构的对象;如果某个类并不需要被继承,那么其析构函数不必要声明成虚函数,为什么声明成虚构函数在上面已经解释,但是需要原创 2021-04-20 15:03:15 · 257 阅读 · 0 评论 -
c++动态内存与智能指针
在c++中,动态内存的管理是用过一对运算符来完成的,new在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以对这个对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并且释放与该对象关联的内存动态内存的使用非常容易出现问题,因为确保在正确的时间释放内存是及其困难的事情,有时我们会忘记释放内存,这种情况下就会导致内存泄漏,还有的时候,在还有某个指针引用内存的情况下,我们就释放了他,这种情况下,就会出现非法指针因此,为了应对上述情况,更加安全的使用动态内存,新的标准库提供了以下智能原创 2021-04-20 10:46:41 · 109 阅读 · 0 评论 -
c++面经基础知识汇总(1)(static、强制转换、指针和引用的区别、智能指针、数组与指针的区别)
c++中static关键字的作用static是用来声明静态变量、静态函数、类的静态成员、类的静态函数等对声明静态变量来说共分为两种静态变量局部静态变量 :1. 在局部变量的前面添加上关键字static,局部变量就变成了局部静态变量;2. 局部静态变量在内存中位置是->静态存储区3. 初始化:任意4. 作用域: 局部静态变量的作用域,仍然是在局部的作用域,如,在一个函数中声明了一个静态变量,那么这个变量就是局部静态变量,当出了函数的作用范围之外,这个静态变量不能被使用,但是并没有被销毁,原创 2021-04-20 09:33:03 · 404 阅读 · 0 评论 -
c++内存的分配方式(堆、栈、代码区、静态存储区)
写在前面局部变量区即栈区;动态存储区,即堆(heap)区或自由存储区(free store);c++中程序占用的内存分为一下的几个部分栈区:一般存放的是值类型,由编译器自动分配、释放;存放的是函数的参数值,局部变量的值等,其操作方式类似数据结构的栈;堆:存在于堆中的数据一般是通过程序员进行主动释放,如果程序员没有主动释放,那么在程序结束的时候,由操作系统进行回收,如那些由new分配的内存块,他们的释放,编译器并不管,而是通过程序员释放(delete),如果程序员没有释放掉,那么程序结束之后,操作系原创 2021-04-19 19:47:24 · 998 阅读 · 0 评论 -
c++ 游戏客户端研发面经整理(1)
c++的强制类型转换了解吗?知识点:类型转换分为显示转换与隐式转化隐式转换:隐式转换是指,类型转换是自动执行的,无须程序员介入,有的时候甚至不需要程序员知道,因此称之为隐式转换显式转换:程序员主动的进行类型的转换隐式转换发生的时机:在下面的这些情况下,编辑器会自动的转换运算对象的类型:在大多数表达式中,比int类型校的整型值首先会提升为较大的整数类型举例:如果一个运算对象的类型是long double ,那么不管另一个运算的对象类型是什么都会转换为longdouble 类型如果表达式原创 2021-04-19 17:36:07 · 843 阅读 · 2 评论 -
c++Primier第五版课后题(练习题)答案与详解
原文链接:https://blog.csdn.net/misayaaaaa/article/details/53786215 C++Primer第五版——习题答案详解 新手入门必看的书。知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其中的关键有用的东西,了解相关但是...转载 2021-04-18 08:17:49 · 1032 阅读 · 0 评论