C++和操作系统面试问题分类

时间:2020-11-15 20:19:38 笔试题目 我要投稿

C++和操作系统面试问题分类

  inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)

C++和操作系统面试问题分类

  C++多态实现机制:在C++中,对于有 virtual的类,其sizeof会比正常情况多处4个字节。既在类的最开始四个字节,放的是VTABLE表的地址(void *类型)。而在VTABLE中,所有虚函数是以指针数组的形式存放。 对于派生的类,即时没有重载基类的虚函数,也会在其VTABLE占用一格。造成空间上的浪费。非虚基类没有VTABLE,VTABLE是在构造的时候编译器生成的。

  线程和进程:进程是操作系统资源分配的最小单位,线程是CPU运行的最小单位。linux中,使用的是用户线程(对应核心线程:线程管理由内核实现),而且是1:1形式,既每一个线程,都对应内核中的一个轻量级进程,调度由内核实现,但是线程的管理(比如产生和结束),均有一个管理线程实现。管理线程在第一次调用pthread_create的时候生成。

  软件开发流程:

  需求分析和项目计划:可行性计划,项目计划,需求分析,测试计划

  软件设计说明书:功能设计说明书,实现设计说明书

  使用手册

  测试报告

  项目总结

  C++继承机制:

  n类成员的访问控制方式

  public:类本身、派生类和其它类均可访问;

  protected:类本身和派生类均可访问,其它类不能访问;

  private(默认):类本身可访问,派生类和其它类不能访问。

  继承成员的访问控制规则

  ——由父类成员的访问控制方式和继承访问控制方式共同决定

  private+public(protectd,private)=>不可访问

  pubic(protected)+public=>public(protected)

  public(protected)+protected=>protected

  public(protected)+private(默认)=>private

  C++中的模板和virtual异同? ==>?

  private继承和public继承区别? ==>?

  6. static有什么用途?(请至少说明两种)

  1.限制变量的作用域

  2.设置变量的存储域

  7. 引用与指针有什么区别?

  1) 引用必须被初始化,指针不必。

  2) 引用初始化以后不能被改变,指针可以改变所指的对象。

  3) 不存在指向空值的引用,但是存在指向空值的指针。

  8. 描述实时系统的基本特性

  在特定时间内完成特定的任务,实时性与可靠性

  9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

  全局变量储存在静态数据区,局部变量在堆栈

  10. 什么是平衡二叉树?

  左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1

  11. 堆栈溢出一般是由什么原因导致的?

  没有回收垃圾资源

  12. 什么函数不能声明为虚函数?

  constructor ==>C++中的类的构造函数声明

  13. 冒泡排序算法的时间复杂度是什么?

  O(n^2)

  14. 写出float x 与“零值”比较的if语句。

  if(x>0.000001&&x<-0.000001)

  16. Internet采用哪种网络协议?该协议的主要层次结构?

  tcp/ip 应用层/传输层/网络层/数据链路层/物理层

  17. Internet物理地址和IP地址转换采用什么协议?

  ARP (Address Resolution Protocol)(地址解析协议)

  18.IP地址的编码分为哪俩部分?

  IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

  19.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

  循环链表,用取余操作做 ——>??

  20.不能做switch()的参数类型是:

  SWITH(表达式),表达式可以是整型、字符型以及枚举类型等表达式。

  switch的参数不能为实型。

  浅谈C/C++中Static的作用

  1.先来介绍它的第一条也是最重要的一条:隐藏。

  当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件和一个Makefile,一个是a.c,另一个是main.c.下面是a.c的内容:#include

  char a = ’A’; //global variable

  void msg()

  { printf(”Hello\n”);}下面是main.c的内容:#include

  int main(void)

  { extern char a; // extern variable must be declared before use printf(”%c “, a);(void)msg();return 0;}下面是Makefile的内容:CC =gcc

  SRC := $(shell ls *.c)

  OBJS := $(patsubst %.c, %.o, $(SRC))

  TARGET := Main

  $(TARGET): $(OBJS)

  $(CC) $(LIBS) -o $@ $^

  %.o: %.c $(CC) $(CFLAGS) -c -o $@ $<

  clean:rm -f $(TARGET) *.o程序的运行结果是:A Hello你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全 局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

  如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的 文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变 量,static还有下面两个作用。