C++研发106面试题总结(五)

2019-07-14 11:33发布

C++研发106面试题总结(五)   创建进程的步骤?   (1)申请空的PCB(2)为新进程分配资源(3)初始化PCB(4)将新进程插入就绪队列中  进程切换发生的原因?处理进程切换的步骤?   原因:中断发生;更高优先级进程唤醒;进程消耗完了时间片;资源阻塞;    步骤:(1)保存处理器的上下文(2)用新状态和其它相关信息更新正在运行进程的PCB(3)将原来的进程移到合适的队列中【就绪,阻塞】(4)选择另外一个执行的进程,更新被选中进程的PCB,将它加载进CPU  虚函数表是在什么时候确定的?那虚表指针呢?   编译时确定虚函数表,虚表指针则是运行时  如何检查内存泄露?如果不通过printf,debug等调试方式和编译器报错提示呢?   使用GDB调试器  Int(*f(int,void(*)()))(int,int)是什么意思?   一个函数,参数为int和指向返回值为void的无参数的函数指针,返回值为一个指向返回值为int,参数为int和int的函数指针  STL空间配置器如何处理内存的?能说一下它的大概实现方案吗?为什么是8bytes的倍数?   分为两部分:大于128bytes用malloc直接申请,小于128bytes则使用一个8bytes倍数的数组来进行申请。    为8bytes的原因是为了提高效率,同时对于64位的机器而言,地址大小为8bytes  HTTP 403表示什么?   权限不够  静态函数能定义为虚函数吗?为什么?   不可以,因为虚函数属于对象,不属于类  静态函数能定义为常函数吗?为什么?   不可以,因为常函数是操作成员变量的,而静态函数没有成员变量可说  知道什么是幂等性吗?举个例子?   其任意多次执行所产生的影响均与一次执行的影响相同。  当接受方的接受窗口为0时还能接受数据吗?为什么?还能接受什么数据?那怎么处理这些数据呢?   可以接受。    数据:零窗口探测报文;确认报文段;携带紧急数据的报文段    可能会被抛弃  当接受方的返回的接受窗口为0时,发送方会进行什么操作?   开启计时器,发送零窗口探测报文  请求页面置换策略有哪些方式?他们的区别是什么?各自有什么算法解决?   全局和局部;    全局:在整个内存空间置换    局部:在本进程中进行置换    全局:(1)工作集算法(2)缺页率置换算法    局部:(1)最优算法(2)FIFO先进先出算法(3)LRU最近最久未使用(4)时钟算法  系统调用与函数调用的区别?   (1)一个在用户地址空间执行;一个在内核空间执行    (2)一个是过程调用,开销小;一个需要切换用户空间和内核上下文,开销大    (3)一般相同;不同系统不同  对于默认处理的结构体,能用memcmp来进行比较吗?为什么?如果不能,该如何比较?   不能,因为字节对齐多出来的内存是随机的,必须要一个个成员比较  C++中有哪些机制可以取代宏?   Inline,typedef,const  手写一个有可变参数的函数?   使用va_list,va_start,va_arg,va_end。    也可以用宏定义##__VA_ARGS__,可以针对空参数消除逗号  可靠信号与不可靠信号的区别?   一个会丢失,另外一个则会用队列来保存相应的事件  this指针调用成员变量时,堆栈会发生什么变化?   将相应的参数从右往左压栈,然后将this指针放到寄存器中  实现一个shared_ptr类和auto_ptr类?   Shared_ptr则是引用计数处理,auto_ptr则是权限转移机制  下面这两个函数在执行过程中有什么区别?   Int f(string&a); f(“abc”);//报错    Int f(const string&a); f(“abc”);//正常  C++中可以继承string类吗?为什么?   不可以,因为string不是类  Char * const *(*next)()是什么?   next是一个指针,指向一个函数,这个函数返回一个指针,这个指针指向char类型的常量指针  访问一个网页的过程,计算机发生了什么?   (1)先找DNS    (2)建立TCP连接    (3)发送HTTP报文    (4)接受HTTP报文    (5)浏览器解析显示  如何判断const所修饰的对象?   const只修饰其后的【变量】,至于const放在类型前还是类型后并没有区别