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)关闭套接字
客户端:
- 创建数据报套接字?socket---------------------------》有手机
- 填充网络信息?????--------------------------------------》有对方联系方式
- 发送/接收消息?sendto?recvfrom-------------------》通信
- 关闭套接字?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.构造函数
构造函数是一种特殊的成员函数,用于创建对象,写法上又以下要求:
- 函数名称必须与类名完全相同
- 构造函数不写返回值
- 如果程序员不手动编写构造函数,编译器会自动添加一个无参的构造函数。
函数覆盖与函数隐藏比较相似,但是函数隐藏不支持多态。函数覆盖是多态的必要条件。
在编写方式上,函数覆盖比函数隐藏有以下几点区别:
- 被覆盖的函数必须是虚函数
- 在C++11中,可以在派生类的新覆盖的函数上使用overide关键字验证覆盖是否成功。
protected explicit
virtual
inline