华为面试题目及答案

1.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?
   答:交换机属于OSI第二层即数据链路层设备。它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过路由表路由协议产生。交换机最大的好处是快速,路由器最大的好处是控制能力强。

    2.请问C++的类和C里面的struct有什么区别?
   答:struct的成员的默认访问说明符为Public,而class的成员的默认访问说明符为Private。
   补充:c++中可以控制成员的访问权限,并且C中的struct没有类的继承,多态等性质。C语言中的struct没有成员函数,没有静态数据。而c++的类有。但是C中的struct可以用函数指针来表示模拟成员函数。
面试技巧
   两者的程序思想也不同,C的struct是面向过程编程思想,仅仅是一些数据的堆砌。而C++中的类是面向对象的编程思想,是数据与方法的集合。
   
    3.请讲一讲析构函数和虚函数的用法和作用。
   答:析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。
虚函数是指被关键字virtual说明的函数,作用是使用C++语言的多态特性
    补充:
   默认的析构函数不用显示调用,自建的析构函数要在程序末尾调用。 析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。
   虚函数可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。
   如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl函数名=0
面试题目
   我们把这样的函数(方法)称为纯虚函数。
   如果一个类包含了纯虚函数,称此类为抽象类 。

   4.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
   答:一些变量在整个程序中都是可见的,它们称为全局变量。一些变量只能在一个函数中可知,称为局部变量。这就是他们的区别。
   在任何函数外面定义的变量就是全局变量,在函数内部定义的变量是局部变量,这是它们在程序中的实现过程。
   操作系统和编译器是根据程序运行的内存区域知道他们的,程序的全局数据放在所分配内存的全局数据区,程序的局部数据放在栈区。
    补充:
   全局变量和局部变量的区别主要在于生存周期不同,全局变量在整个程序生成期间可见,局部变量在自己的作用域内可见。全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。局部变量的内存分配是动态的,位于线程堆栈中。如果没有初始化的,初值视当前内存内的值而定。在同一作用域中如果两个变量的名字相同,遵循低作用域覆盖高作用域的原则。
面试英语
   不过这里需要注意静态局部变量,也就是使用static修饰的变量。该变量的作用域为包含变量定义文件,生成周期同全局变量。也是存放在内存的静态存储区域。参考这篇文章
    详细例子:

//main.cpp

 int a = 0; 全局初始化区

 char *p1; 全局未初始化区

 int  main(){

 int b;// 栈

 char s[] = "abc"; //栈

 char *p2; //栈

 char *p3 = "123456";123456/0";//在常量区,p3在栈上。

 static int c =0; //全局(静态)初始化区

 p1 = (char *)malloc(10);

 p2 = (char *)malloc(20);

 //分配得来得10和20字节的区域就在堆区。

 strcpy(p1, "123456");//123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

 }

 

请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?
答:IP是Internet Protocol的简称,是网络层的主要协议,作用是提供不可靠、无连接的数据报传送。TCP是TransmitControl Protocol(传输控制协议)的缩写,在运输层,TCP提供一种面向连接的,可靠的字节流服务;UDP是UserDatagram Protocol(用户数据报协议)的缩写,在运输层,UDP提供不可靠的传输数据服务

  补充:详细点击下:
深入浅出讲解TCP/UDP协议

   5.8086是多少位的系统?在数据总线上是怎么实现的?
   答:8086的机器字长是16位,8086使用40个引脚的16个做地址/数据复用引腿来传输数据,一次读写过程由一个基本总线周期完成,它由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。在T1期间8086发出访问目的地的地址信号和地址锁存选通信号ALE;T2期间发出读写命令信号RD、WR及其它相关信号;T3期间完成数据的访问;T4结束该总线周期。可见,地址与数据信号不会同时出现在一个时钟(CLK)周期,二者可以分时复用同一组引线。
    补充:
型号          发布年份  数据总线宽度  外部总线宽度    地址总线宽度 
   8086    1978         6              16                     20 
   8088    1979        16             8                       20 
 80286    1982        16            16                      20 
 80386    1986        32            32                      32 
 80486     1989       32            32                       32 

你可能感兴趣的:(struct,面试,华为,internet,路由器,编译器)