常见笔试题总结
Posted Mr_ox
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见笔试题总结相关的知识,希望对你有一定的参考价值。
1.冒泡排序
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
#define MIN(a, b) ((a) <= (b)? (a):(b))
13.typedef和define有什么区别?
- 用法不同
- 执行时间不同:typedef是编译过程的一部分,带类型检查,define在预编译部分
- 作用域不同
- 对指针的操作不同
14.static作用?
static在C中主要用于定义全局静态变量,定义局部静态变量,定义静态函数。
15.如何避免“野指针”?
- 指针变量声明没有被初始化
- 指针p在被free之后,没有置为NULL
- 指针操作超越了变量的作用范围
16.中断处理函数:
- 不能有返回值
- 不能传递参数
- 避免做浮点运算
- pirntf经常有重入和性能上的问题
17.构造函数是否为虚函数?
不能。并且不能在构造函数中调用虚函数,因为这样执行的是父类的对应函数,因为其本身还没有构造好。析构函数可以是虚函数。
以上是关于常见笔试题总结的主要内容,如果未能解决你的问题,请参考以下文章