常见笔试题总结

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     }
View Code

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.构造函数是否为虚函数?

  不能。并且不能在构造函数中调用虚函数,因为这样执行的是父类的对应函数,因为其本身还没有构造好。析构函数可以是虚函数。

原文地址:https://www.cnblogs.com/Mr-ox/p/6481645.html