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放在类型前还是类型后并没有区别