嵌入式面试题

1.交换机与路由器

交换机:用于局域网内的转发

路由器:用于连接局域网和外网,也能进行数据转发

2.IP地址基本概念

1.IP地址是Internet中主机的标识

2.Internet中的主机要和其它机器通信,必须要有一个IP地址

3.IP地址分为32IPv4和128位IPv6

4.IP地址的表示方式是点分制。

IP地址=网络号+主机号

网络号:用来表示是否在一个网段内

主机号:标识在本网段内的ID(不能重复,同一网段内)

a

三只划分:重新划分网络号和主机号,重新组网,从而提高资源利用率。

3.TCP:(传输控制协议)全双工通信,面向连接的传输层协议,提供高可靠的性通信(数据无失误,数据无失序,数据无缺失,数据无重复到达)

高可靠性:1.三次握手和四次挥手  

                  2.序列号和确认机制

                  3错误和超时重传.

UDP:(用户数据报协议)全双工通信,面向无连接,不可靠,不需要连接,所以效率高。

4.TCP编程步骤

服务器:

(1)创建流套接字

(2)填充结构体

(3)bind绑定

(4)listen监听

(5)accept等待客户端连接

(6)发送/接收消息

(7)close关闭

客户端:

(1)创建流式套接字

(2)填充结构体

(3)connect连接服务器

(4)接收发送数据

(5)关闭套接字

5.UDP编程流程

服务器:

(1)创建数据报套接字

(2)填充结构体

(3)bind绑定

(4)recvfrom/sendto

(5)关闭套接字

客户端:

  1. 创建数据报套接字 socket---------------------------》有手机
  2. 填充网络信息     --------------------------------------》有对方联系方式
  3. 发送/接收消息 sendto recvfrom-------------------》通信
  4. 关闭套接字 close

6.并发服务器

多进程:

优点:服务器更稳定,每个进程资源独立,安全性高

缺点:需要开启多个进程,资源消耗大

多线程:

优点:相对多进程资源消耗相对较小,每个线程共享进程资源

缺点:需要建立多个线程,安全性较差。

IO多路复用:

优点:节省资源,减少系统开销,性能高。

缺点:代码复杂高

7.简述一下类和对象(C++)

类:类是一个抽象的概念,用于描述一类对象的特点。类主要包括成员变量和成员函数。

对象:根据类的概念所创造出来的实例。

8.简述一下封装

封装是指,将类的属性和细节进行隐藏,重新提供外部接口。封装可以提高代码的安全性,并且可以让程序员更关注上层架构而非内部细节。

9.简述构造函数

(1)构造函数不谢返回值。

(2)构造函数必须和类名相同。

(3)如果程序员不手动编写,编译器会手动添加一个默认构造函数。

(4)构造函数再创建对象时,常用来给对象初始化。

(5)构造函数可以进函数重载和函数默认值

10.简述一下浅拷贝和深拷贝

当成员变量出现指针类型时,浅拷贝使两成员变量同时指向同一块内存空间。不符合面向对象的设计规范,不安全,调用析构函数时,可能使程序崩溃。手动添加一个深拷贝,每次赋值都创建一个新的副本,从而每个对象单独持有自己的成员变量,这种方式被称为“深拷贝”。

11.简述一下继承

继承时面向对象的三大特性之一,体现了代码的复用性。继承就是在一个已存在的类上建立一个新的类,并拥有其特性。

已存在的类被称为基类或父类

新建立的类被称为派生类或子类

12.简述一下多态

多态可以理解为“一种接口,多种状态”。只需要编写一个函数接口,根据传入的参数类型,执行不同的策略代码。

多态的使用需要具有三个前提条件。

  • 公有继承
  • 函数覆盖
  • 基类的指针/引用指向派生类的对象。
13.多态原理
具有虚函数的 存在 一张表, 每个类 对象 内部 都会 一个 隐藏的 虚函数 指针 成员。 指向 当前类的虚函数表。在代码运行时,通过对象的虚函数是指针找到虚函数表,在表中定位到虚函数的调用地址,从而执行对应的虚函数内容。多态会产生一些额外的开销。优点是代码编写更加灵活高效。缺点会降低代码可读性。和执行速度。

14.模版

模板可以让类或者函数支持一种通用类型,这种通用类型在实际的运行过程中可以使用任何数据类型,因此程序员可以写出一些与类型无关的代码。这种编程方式也叫“泛型编程”。

通常有两种形式:

  • 函数模板
  • 类模板

15.malloc与new 的区别
  • malloc与free是c/c++的标准库函数。new与delete是c++的运
    • 对于非内部数据类型成员来说,只用malloc与free是不能达到要求的,malloc和free只申请和释放内存,不会调用构造函数,与析构函数,而malloc和free是库函数,不是运算符,不归编辑器所管辖,构造与析构也不能强加给malloc和free,所以c++就自己创造了一个运算符,可以申请内存,调用构造函数初始化的一个运算符,它就是new,只有申请没有释放是不行的,所以有创造了一个用于释放内存,和调用析构函数的运算符他就是delete。
    • New 的返回值是那种数据类型使用他申请空间,它就返回那种数据类型
    • 而malloc返回值类型是void
16.构造函数

构造函数是一种特殊的成员函数,用于创建对象,写法上又以下要求:

  • 函数名称必须与类名完全相同
  • 构造函数不写返回值
  • 如果程序员不手动编写构造函数,编译器会自动添加一个无参的构造函数。
17.函数覆盖

函数覆盖与函数隐藏比较相似,但是函数隐藏不支持多态。函数覆盖是多态的必要条件。

在编写方式上,函数覆盖比函数隐藏有以下几点区别:

  • 被覆盖的函数必须是虚函数
  • 在C++11中,可以在派生类的新覆盖的函数上使用overide关键字验证覆盖是否成功。
protected
explicit

virtual

inline

你可能感兴趣的:(网络)