华为笔试题六

1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。
 
OSI 七层网络模型

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

 
TCP五层模型

应用层

传输层

网络层

链路层

  物理层 
 
2.请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?
 
IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与TCP协议(传输控制协议)一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能, 包括IP数据报规定互连网络范围内的IP地址格式。
 
IP是网络层协议,工作在数据链路层的上面。

IP协议的作用就是向传输层(TCP层)提供统一的IP包,即将各种不同类型的MAC帧转换为统一的IP包,并将MAC帧的物理地址变换为全网统一的逻辑地址(IP地址)。这样,这些不同物理网络MAC帧的差异对上层而言就不复存在了。正因为这一转换,才实现了不同类型物理网络的互联。
 
TCP和UDP都是传输层协议.
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立连接。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。
 
 

3.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?
 
交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。
所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。那么路由器具体是如何进行“翻译”工作的呢?我们平时在学习、翻译英语时,肯定会准备一本英汉字典,通过它来实现英文与中文之间的互现转换。而对于路由器而言,它也有这种用于翻译的字典--路径表。路径表(Routing Table)保存着各种传输路径的相关数据,如子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。

4.请问C++的类和C里面的struct有什么区别?

C++中的类有构造函数,析构函数,继承等等。
C中的struct中,没有构造函数等C++类才有的元素。
 
然而,C++中的class和C++的struct基本上是等同的,除了一点
它们数据成员的默认访问权限是不同的。
class的默认访问权限为private,而struct为public
.
ps:

1.c语言的struct和C++的struct有什么区别?
答:c的struct里面只能有成员数据,不能有函数,如:
//c的struct
struct Str{
    int rInt;
    char ch;
}Str1;//c语言经常在这里加上一个struct的实例(在c++里面可以称为对象)

//c++
struct Str{
private://默认是public,则也是C++的struct和class的唯一区别,即class默认是private
    int rInt;

public:
    void test();//C++的struct和class可以有成员函数,但是c的struct不可以有
};//一般不直接产生一个对象,你想产生也行,但是习惯还是应该养成否则别人会觉得别扭的

2.C++的struct和C++的class有什么区别?
答:唯一的区别是默认的权限不一样,上面的例子同时给出了说明了

3.c语言的struct和C++的class有什么区别?
答:前面的两个问题解决了,这个就自然明白了。
前面C++的那个struct写出class的形式如下:

class Str{
private://这个可以不写,默认就是private
    int rInt;

public:
    void test();
};


5.请讲一讲析构函数和虚函数的用法和作用。


假设有一个名为A的类,那么A的析构函数为如下形式
  A::~A(){}, 没有参数也无返回值。
析构函数主要作用是在对象销毁前释放其占用的资源。
 
要将类的成员函数定义为虚函数,只需在函数声明前加上关键字virtual.
虚函数的作用是为了实现多态,可以在运行时决定具体调用哪个函数(动态绑定)。
 
6.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
 
全局变量和局部变量的区别主要在于它们的作用域和生存期不同。
全局变量对于整个程序均可见,而局部变量只对它所在的函数或者语句块可见。
全局变量的生存期与程序的生存期相同,而局部变量的生存期在退出函数或语句块后便结束。
    通过将全局变量和局部变量置于内存中不同的段来实现的,全部变量存放与全局数据区,局部变量位于栈内。
   

全局变量是在所有函数之外声明的变量,局部变量则是在函数体内声明的变量。全局变量放在内存的全程数据区,局部变量在栈上申请。全局数据区(静态数据区),静态数据区专门存放static变量。static的全局变量只在该文件范围内可见,不能用extern声明为外部变量。 编译器会自动初始化全局变量。

全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。局部变量的内存分配是动态的,位于线程堆栈中。如果没有初始化的,初值视当前内存内的值而定。

局部变量是在栈中,外部变量是放在数据段,手动分配malloc的才是放在堆中。

 

7.8086是多少位的系统?在数据总线上是怎么实现的?
8086是16位的系统。
8086地址总线有20位,CPU有1M的寻址空间,然而8086只有16位,为了能够寻址1M内存空间,必须通过分段来完成,即:物理地址=16位的段基址左移4位 + 16位的段内偏移量, 这样就可以寻址全部的地址空间了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值