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

文学乐 人气:6.38K

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)(地址解析协议)

地址的编码分为哪俩部分?

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(”Hellon”);}下面是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还有下面两个作用。