c++ 面试总结(一)
来源:互联网 发布:js event 编辑:程序博客网 时间:2024/05/12 22:18
1.线程与进程的区别及联系:
进程概念:进程是表示资源分配的基本单位,又是调度运行的基本单位。
线程概念:线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。
引入线程的好处:(1)易于调度(2)提高并发性(3)开销少(4)利于充分发挥多处理器的功能。 2. 进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信办法实现同步。
2.进程死锁的原因?死锁的四个必要条件?
原因:资源竞争及进程推经顺序的非法。条件:1.互斥 2.请求保持 3.不可剥夺 4.环路
3.什么是虚函数及作用?虚函数是怎样实现的?虚函数使用了虚函数表实现的。
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。
4.类、继承、封装、多态的理解?
类:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
抽象类:不用来定义对象而只作为一种基本类型用作继承的类。
继承:继承实在已有类的基础上创建新类的过程,已有类成为基类,新类成为派生类。
派生类从父类那里获取某些已有的特征,这种现象称为类的继承。
封装:将低层次的元素组合起来形成新的高层次实体的技术;函数为封装的一种形式;
多态:接口的多种不同的实现方式即为多态。
多态的作用:1.隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
2. 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用
5. OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;
TCP/IP四层模型:应用层、传输层、互连层、网络层;
6. 解释堆和栈的区别。
栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。
堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
7. C++是不是类型安全的?不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)
8. 内存的分配方式
1、静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在;
2、栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限;
3、堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存;
9.SendMessage和PostMessage有什么区别:
答案:SendMessage是阻塞的,等消息被处理后,代码才能走到SendMessage的下一行。PostMessage是非阻塞的,不管消息是否已被处理,代码马上走到PostMessage的下一行。
10. class 和 struct的区别?
struct 的成员默认是公有的,而类的成员默认是私有的。
11. 什么是UDP和TCP的区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。
UDP全称为用户报文协议,它可以提供非连接的不可靠的点到多点的通信。
12. winsock建立连接的主要实现步骤?
服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接, accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
客户端:socket()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
13. .delete与 delete []区别
delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数;
14. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
答、全局变量储存在静态数据区,局部变量在堆栈中。
15. static有什么用途?答、1.限制变量的作用域。2.设置变量的存储域;
16. .New delete 与malloc free 的联系与区别?
答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new会自动调用对象的构造函数。delete 会调用对象的destructor,而free不会调用对象的destructor.
17.分别写出BOOL,int,float,指针类型的变量a与“零”的比较语句。
答案:BOOL : if ( !a ) or if(a)
int : if ( a == 0)
float : const EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)
pointer : if ( a != NULL) or if(a == NULL)
18. 类成员函数的重载、覆盖和隐藏区别?
a.成员函数被重载的特征:
(1)相同的范围(2)函数名字相同(3)参数不同(4)virtual关键字可有可无;
b.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(2)函数名字相同(3)参数相同(4)基类函数必须有virtual关键字。
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
19. h头文件中的ifndef/define/endif的作用?答:防止该头文件被重复引用。
20. .关键字static的作用是什么?
在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数
据和代码范围的好处和重要性
- C/C++面试知识点总结(一)
- 面试总结(一)
- 面试总结(一)
- 面试总结 (一)
- 面试知识总结(一)
- c++ 面试总结(一)
- 笔试面试总结(一)
- iOS面试总结(一)
- 面试知识总结(一)
- 面试问题总结(一)
- iOS面试总结(一)
- java面试总结(一)
- 面试问题总结(一)
- 面试算法总结(一)
- Android面试总结(一)
- C/C++面试(一)
- C/C++经典面试题总结摘选 C/C++程序员面试宝典(一)
- C/C++校招笔试面试经典题目总结一
- 内存管理内幕
- Linq To XML 和 序列化XML
- Fedora 删除repo
- C++ 面向对象的笔记总结
- kmp 为一个图 而深入认识 ,用输出来说话
- c++ 面试总结(一)
- kmp 领悟代码
- Mysql Event Scheduler
- 树形结构的处理——组合模式(一)
- 奇偶调序(新的方法实现)
- 第 6 章:内存池
- 用Heartbeat配置Linux高可用性集群
- 超级程序员神话
- 跳台阶问题|斐波那契递归的复杂度问题|整数划分问题