73. C++的虚函数有什么作用?
虚函数作用是实现多态 , 虚函数其实是实现封装 , 使得使用者不需要关心实现的细节 。在很多设计模式中都是这样用法 , 例如Factory、Bridge、Strategy模式 。
74.MFC中CString是类型安全类吗 , 为什么?
不是 , 其他数据类型转换到CString可以使用CString的成员函数Format来转换
74.动态链接库的两种使用方法及特点?
1).载入时动态链接 , 模块非常明确调用某个导出函数 , 使得他们就像本地函数一样 。这需要链接时链接那些函数所在DLL的导入库 , 导入库向系统提供了载入DLL时所需的信息及DLL函数定位 。
2)运行时动态链接 。
二、服务器编程
1.多线程和多进程的区别(重点 必须从cpu调度 , 上下文切换 , 数据共享 , 多核cup利用率 , 资源占用 , 等等各方面回答 , 然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器 , 否则悲催)!
1)进程数据是分开的:共享复杂 , 需要用IPC , 同步简单;多线程共享进程数据:共享简单 , 同步复杂
2)进程创建销毁、切换复杂 , 速度慢 ;线程创建销毁、切换简单 , 速度快
3)进程占用内存多 , CPU利用率低;线程占用内存少 , CPU利用率高
4)进程编程简单 , 调试简单;线程 编程复杂 , 调试复杂
5)进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
6)进程适应于多核、多机分布;线程适用于多核
线程所私有的:
线程id、寄存器的值、栈、线程的优先级和调度策略、线程的私有数据、信号屏蔽字、errno变量、
2. 多线程锁的种类有哪些?
a.互斥锁(mutex)b.递归锁 c.自旋锁 d.读写锁
3. 自旋锁和互斥锁的区别?
当锁被其他线程占用时 , 其他线程并不是睡眠状态 , 而是不停的消耗CPU , 获取锁;互斥锁则不然 , 保持睡眠 , 直到互斥锁被释放激活 。
自旋锁 , 递归调用容易造成死锁 , 对长时间才能获得到锁的情况 , 使用自旋锁容易造成CPU效率低 , 只有内核可抢占式或SMP情况下才真正需要自旋锁 。
4.进程间通信和线程间通信
1).管道 2)消息队列 3)共享内存 4)信号量 5)套接字 6)条件变量
5.多线程程序架构 , 线程数量应该如何设置?
应尽量和CPU核数相等或者为CPU核数+1的个数
6.什么是原子操作 , gcc提供的原子操作原语 , 使用这些原语如何实现读写锁?
原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始 , 就一直运行到结束 , 中间不会有任何 context switch 。
7.网络编程设计模式 , reactor/proactor/半同步半异步模式?
reactor模式:同步阻塞I/O模式 , 注册对应读写事件处理器 , 等待事件发生进而调用事件处理器处理事件 。proactor模式:异步I/O模式 。Reactor和Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的 , Reactor中需要应用程序自己读取或者写入数据 , Proactor模式中 , 应用程序不需要进行实际读写过程 。
Reactor是:
主线程往epoll内核上注册socket读事件 , 主线程调用epoll_wait等待socket上有数据可读 , 当socket上有数据可读的时候 , 主线程把socket可读事件放入请求队列 。睡眠在请求队列上的某个工作线程被唤醒 , 处理客户请求 , 然后往epoll内核上注册socket写请求事件 。主线程调用epoll_wait等待写请求事件 , 当有事件可写的时候 , 主线程把socket可写事件放入请求队列 。睡眠在请求队列上的工作线程被唤醒 , 处理客户请求 。
Proactor:
主线程调用aio_read函数向内核注册socket上的读完成事件 , 并告诉内核用户读缓冲区的位置 , 以及读完成后如何通知应用程序 , 主线程继续处理其他逻辑 , 当socket上的数据被读入用户缓冲区后 , 通过信号告知应用程序数据已经可以使用 。应用程序预先定义好的信号处理函数选择一个工作线程来处理客户请求 。工作线程处理完客户请求之后调用aio_write函数向内核注册socket写完成事件 , 并告诉内核写缓冲区的位置 , 以及写完成时如何通知应用程序 。主线程处理其他逻辑 。当用户缓存区的数据被写入socket之后内核向应用程序发送一个信号 , 以通知应用程序数据已经发送完毕 。应用程序预先定义的数据处理函数就会完成工作 。
推荐阅读
- 如何选购普洱熟茶,如何鉴别普洱熟茶的好坏
- 男人该如何健身比较好?
- 如何正确慢跑呢?
- 如何轻松跑步呢?
- 胸肌中缝应该如何锻炼?
- 腰部赘肉应该如何减掉呢?
- 腰后的赘肉应该如何减掉呢?
- 基础力量应该如何训练?
- 如何收藏普洱茶,普洱茶收藏和存放需注意哪些
- 如何报考高等教育自学考试课程