1. 冒泡排序
View Code
- 1 int a[5] = {
- 96,
- 73,
- 12,
- 46,
- 98
- };
- 2 int i = 0,
- j = 0,
- t = 0;
- 3 4
- for (j = 0; j < 4; j++) {
- 5
- for (i = 0; i < 4 - j; i++) {
- 6
- if (a[i] > a[i + 1]) {
- 7 t = a[i];
- 8 a[i] = a[i + 1];
- 9 a[i + 1] = t;
- 10
- }
- 11
- }
- 12
- }
2. 操作系统中,进程可以分为(系统进程)和(用户进程)两类
3.ISO 七层模型是什么?TCP/UDP 是属于哪一层?TCP/UDP 有何优缺点?
- 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
- TCP/UDP 属于传输层
- TCP、UDP 优缺点分析
* TCP:全双工,点对点的连接;提供三大服务:可靠数据传输,拥塞控制,流量控制
* UDP:无需建立连接,分组首部开销小,应用层控制数据何时发送更为精细。
4. 字符串拷贝有 sprintf, strcpy 及 memcpy 函数,请问其区别,哪个效率高?
- memcpy 一次读取所有源数据,而后一次性传到目标地址,效率最高
- strcpy 需要逐个判断字符串是否结束,一字节一字节读取,比上述慢
- sprintf 需要检测输出格式的步骤,所以会更慢
5.C++ 语言中类成员函数的重载、覆盖和隐藏的区别?
- 重写和重载主要有以下几点区别
* 范围区别:被重写的和重写函数在两个类中,而重载和被重载的函数在同一个类中
* 参数区别:被重写函数和重写函数逇参数列表一定相同,而重载函数参数列表一定不同
* virtual 的区别:重写的基类中被重写的函数必须要有 virtual 修饰,而重载函数都可以
- 隐藏和重写,重载的区别
* 范围区别:隐藏和重写一样,不在同一个类中
* 参数区别:当参数列表不同时,无论基类是否有 virtual,基类的函数都会被隐藏,而不是重写。
6. 指针和引用有什么区别?传引用比传指针更安全,为什么?
- 相同点:
都是地址概念。指针内容为内存地址,而引用则是某块内存的别名
- 不同点:
* 指针是一个实体,而引用仅是别名
* 引用只能在定义时被初始化一次,之后不可变。而指针可以改变
* 引用不能为空,而指针可以为空
* sizeof, 自增运算符等,其意义不同
- 安全性:引用比指针多了类型检查。
7. 进程同步机制及进程间通信途径?
- 进程同步:信号量
- 进程间通信方式:管道,信号,系统 IPC(消息队列、信号量、共享内存),SOCKET
8. 静态链接和动态链接的优缺点?
- 静态链接库优缺点:
* 代码装载速度快,执行速度比动态链接快
* 只需要在开发者电脑保证静态库的存在即可,程序发布后无需静态库
* 代码体积大
* 内存中可能存在多份相同指令,造成空间浪费
- 动态链接库优点:
* 节省内存空间
* 库文件和可执行文件相互独立,当接口不改变情况下,更新库文件对可执行文件不影响
* 节省磁盘空间
* 程序运行时,依赖动态库文件
9. 谈谈对进程,程序和线程的理解
- 进程:作为操作系统的最小执行单元,当程序运行时,操作系统会分配一个进程的数据结构,同时分配 4GB(32 位机)的资源空间,包括系统环境变量区,堆区,栈区,数据区,文本区。而后期计算机的发展,为了提高 CPU 的利用率,将操作系统调度单元进一步细化为线程,即同一个进程包含多个线程时,就会有并发问题出现。而线程,必须依赖进程空间而存在,即一个可执行程序的执行,至少应该会分配到一个进程,一个线程资源。
- 程序:映像文件在存储介质上的一种组织形式,由域组成。域分为加载域和运行域,运行域一般在内存地址中,而加载域在硬盘中存在。域最多由三个输出段组成,输出端包含可读写代码段 RW 和只读代码段 RO 以及 ZI。
10. 简述队列,栈,堆的异同
队列和栈都是线性存储结构,但是两者的插入和删除数据的操作不同,队列是 "先进先出",栈是 "后进后出",堆区是 "顺序随意"
11. 谈谈对编程规范的理解或认识:
编程规范可总结为:程序的可行性,可读性,可移植性以及可测试性
12. 写一个 "标准" 宏 MIN
#defineMIN(a, b)((a) <= (b)? (a):(b))
13.typedef 和 define 有什么区别?
- 用法不同
- 执行时间不同:typedef 是编译过程的一部分,带类型检查,define 在预编译部分
- 作用域不同
- 对指针的操作不同
14.static 作用?
static 在 C 中主要用于定义全局静态变量,定义局部静态变量,定义静态函数。
15. 如何避免 "野指针"?
- 指针变量声明没有被初始化
- 指针 p 在被 free 之后,没有置为 NULL
- 指针操作超越了变量的作用范围
16. 中断处理函数:
- 不能有返回值
- 不能传递参数
- 避免做浮点运算
- pirntf 经常有重入和性能上的问题
17. 构造函数是否为虚函数?
不能。并且不能在构造函数中调用虚函数,因为这样执行的是父类的对应函数,因为其本身还没有构造好。析构函数可以是虚函数。
来源: http://www.bubuko.com/infodetail-1963940.html