在关系代数运算中,五种基本运算为 ?
并、差、选择、投影、笛卡尔乘积 ( + - * 选择 投影)
关于OSI参考模型的描述中,正确的是?
按功能可以分为7个层次
OSI参考模型
自下而上:物理层(物理介质,比特流)、数据链路层(网卡、交换机)、网络层(IP协议)、传输层(TCP/UDP协议)、会话层(创建/建立/断开连接)、表示层(翻译,编码,压缩,加密)、应用层(HTTP协议)
简化为TCP/IP模型:网络层(物理层、数据链路层、网络层)、传输层,会话层,应用层(表示层,应用层)
报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。
应用层:报文(message),一般指完整的信息,传输层实现报文交付,位于应用层的信息分组称为报文;
传输层:报文段(segment),组成报文的每个分组;
网络层:分组(packet)是网络传输中的二进制格式单元,数据包(datapacket)是TCP/IP通信协议传输中的数据单位;通过网络传输的数据基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地及其与其他数据之间的关系,可以理解为数据传输的分组,我们将通过网络传输的基本数据单元称为数据报(Datagram);
链路层:帧(frame),数据链路层的协议数据单元,为了保证数据的可靠传输,把用户数据封装成帧;
物理层:PDU(bit),协议数据单元;
抓包,抓到的是传输层的包,packet/frame/Datagram/segment是存在于同条记录中的,这些是基于所在协议层的不同取了不同的名字。
物理层
主要设备:中继器、集线器
物理层中双绞线的传输距离是有限的,信号会缩减,影响数据的传输。为了使传输的数据能够准确的传输,中继器是可以放大传输信号,保持原数据的准确。
比如,双绞线的传输距离是100m,而超过100m则信号会衰减
在两台pc中间加上一个中继器,则相当于两台pc到中继器的距离均为100m,有助于信号的增强。
集线器和中继器的区别是:
中继器只有两个以太网接口,而集线器相当于多个端口的中继器。
知识点:冲突域、广播域
冲突域:当两个比特流在同一介质上同时传输时产生冲突,冲突域是指发送数据给一个单一目标(单播)所影响的范围
广播域:发送数据给一个不明确的目标所影响的范围
集线器有一个冲突域和一个广播域
IP地址192.168.1.1 ping1.2:
>ping 192.168.1.2(ping命令所用的协议有ICMP/ARP协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机(在服务器上用一定的技术划分出多个空间以后,在每个虚拟主机上配上独立的ip)、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用 等网络本身的消息。
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。
数据链路层
功能:完成网络之间相邻结点的可靠传输,通过Mac地址负责主机之间的数据的可靠传输。
物理层传输的是比特流,而数据链路层传输的是帧。
Mac地址与IP地址的区别:
Mac地址:是厂商烧录在只读存储器上的,出厂厂商的唯一标识,且不可更改
IP地址:网络地址,相当于门牌号
OSI模型的总结
OSI模型上层(会话层,表示层,应用层)处理用户接口、数据格式、应用访问。
OSI模型下层(物理层,数据链路层,网络层,传输层)处理数据在网络介质中的传送。
(1)物理层
物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性,确保原始的数据可在各种物理媒体上传输,为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
(2)数据链路层
主要提供链路控制(同步,异步,二进制,HDLC),差错控制(重发机制),流量控制(窗口机制)
1) MAC:媒体接入控制,主要功能是调度,把逻辑信道映射到传输信道,负责根据逻辑信道的瞬时源速率为各个传输信道选择适当的传输格式。MAC层主要有3类逻辑实体,第一类是MAC-b,负责处理广播信道数据;第二类是MAC-c,负责处理公共信道数据;第三类是MAC-d,负责处理专用信道数据。
2)RLC:无线链路控制,不仅能载控制面的数据,而且也承载用户面的数据。RLC子层有三种工作模式,分别是透明模式、非确认模式和确认模式,针对不同的业务采用不同的模式。
3)BMC:广播/组播控制,负责控制多播/组播业务。
4)PDCP:分组数据汇聚协议,负责对IP包的报头进行压缩和解压缩,以提高空中接口无线资源的利用率。
(3)网络层
提供阻塞控制,路由选择(静态路由,动态路由)等
1)IP:IP协议提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。IP地址是重要概念
2)ARP:地址解析协议。基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核必须知道目的端的硬件地址才能发送数据。P2P的连接是不需要ARP的。
3)RARP:反向地址转换协议。允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。局域网网关路由器中存有一个表以映射MAC和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器。
4)IGMP:组播协议包括组成员管理协议和组播路由协议。组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。IGMP 信息封装在IP报文中,其IP的协议号为2。
5)ICMP:Internet控制报文协议。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
6) BGP :边界网关协议。处理像因特网大小的网络和不相关路由域间的多路连接。
7)RIP:路由信息协议。是一种分布式的基于距离矢量的路由选择协议。
(4)传输层
提供分割与重组数据,按端口号寻址,连接管理差错控制和流量控制,纠错的功能。传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。
1)TCP: 一种面向连接的、可靠的、基于字节流的传输层通信协议。
2) UDP: 用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
3)RTP: 实时传输协议,为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。
4)SCTP: 一个面向连接的流控制传输协议,它可以在两个端点之间提供稳定、有序的数据传递服务。SCTP可以看做是TCP协议的改进,它继承了TCP较为完善的拥塞控制并改进TCP的一些不足:
a. SCTP是多宿主连接,而TCP是单地址连接。
b.一个TCP连接只能支持一个流,一个SCTP连接可以支持多个流。
c.SCTP有更好的安全性。
(5)应用层
1)HTTP:超文本传输协议,基于TCP,是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。
2)SMTP:简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
3)SNMP:简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象。
4)FTP:文件传输协议,用于Internet上的控制文件的双向传输。同时也是一个应用程序。
5)Telnet:是Internet远程登陆服务的标准协议和主要方式。为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。
6)SSH:安全外壳协议,为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
7)NFS:网络文件系统,是FreeBSD支持的文件系统中的一种,允许网络中的计算机之间通过TCP/IP网络共享资源。
关于UNIX操作系统的描述中,错误的是()。
属于多用户操作系统
由内核与外壳组成
内核的操作原语对硬件不起作用
主要用C语言写成
UNIX操作系统结构由三大部分组成:
- Kernel(内核)
- Shell(外壳)
- 工具及应用程序
UNIX Kernel(UNIX内核)是UNIX操作系统的核心,指挥调度UNIX机器的运行,直接控制计算机的资源,保护用户程序不受错综复杂的硬件事件细节的影响。
UNIX Shell(UNIX外壳)是一个UNIX的特殊程序,是UNIX内核和用户的接口,是UNIX的命令解释器、也是一种解释性高级语言。目前常见的Shell有三种:Shell类型简称命令主要特点Bourne ShellB Shellsh最老、使用最广泛,每个UNIX都提供。 Korn ShellK Shellksh是对B Shell的扩充,兼容B Shell。 C-Shellcsh格式有点象C语言。功能强,命令记忆稍难,在大学和学院中较为流行。 一般系统缺省为Bourne Shell, 本文以此Shell为例。 要想将当前Shell改为其它 Shell,只需在操作系统提示符下键入相应的Shell命令即可。如在其它Shell下键输入命令:ksh就进入了K Shell。
工具及应用程序 UNIX提供了很多工具软件和应用程序供用户使用,如vi编辑器、文件查找、备份等等。
分别描述信号量和互斥锁的异同:
1. 互斥量用于线程的互斥,信号量用于线程的同步。
这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
2. 互斥量值只能为0/1,信号量值可以为非负整数。
也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量时,也可以完成一个资源的互斥访问。
3. 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到
请列出至少三种TCP拥塞控制机制,并请就其中一种描述其工作原理。
慢启动,拥塞避免,快速重传,快速恢复
快速重传 要求接收方在收到一个失序的报文端就立即发出重复确认(为的是使发送尽早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。
5个PM和3个QA围一圆桌而坐,只考虑每个人左边和右边是谁,要求3个QA互不相邻,问有多少种坐法。(解析我已写在牛客网上:鹿远与诗)
三个QA(工程师)坐好 就变成了 中间有三个框
五个PM(项目经理)进三个框 每个框必须有一个人
变成数学题(排列组合):五个不同的球放进三个不同的盒子里,要求每个盒子至少放一个球,一共有多少种方法
肯定会有三个球放在一个盒子里,然后其他每个盒子里一个球.
先选择三个球:C(5,3),然后把这三个球看成1个,共三个全排:A(3,3)
C( 5, 2) × A( 3, 3 )
= 10 * 6
= 60
文件包含命令中被包含的文件的扩展名
包含的文件只要是文本文件都可以,可以是.h .c .cpp 等
T是一个数据类型,关于std::vector::at 和 std::vector::operator[] 描述正确的是:
一、下标运算符接受一个下标参数,返回容器中该位置的元素的引用。给定下标必须保证”在范围内“(即,大于等于0,且小于容器的大小)。保证下标有效是程序员的责任,下标运算符并不检查下标是否在合法范围内。使用越界的下标是一种严重的程序设计错误,而且编译器并不检查这种错误。
c[n] : 返回c中下标为n的元素的引用,n是一个无符号整数。若n>=c.size(),则函数行为未定义。
二、如果希望确保下标是合法的,可以使用at成员函数。at成员函数类似下标运算符,但如果下标越界,at会抛出一个out_of_range异常。
c.at(n): 返回下标为n的元素的引用。如果下标越界,则抛出一个out_of_range异常。
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?
C c;
void main()
{
A*pa=new A();
B b;
static D d;
delete pa;
}
A B D C
在Windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为()?
C++对空类或者空结构体 ,对其sizeof操作时候,默认都是 1个字节
下列等式正确的是()?
C继承自A和B,A和B各有一个虚函数表,所以C和A首地址相同,和B首地址不同
重载多态和强制多态是 指特定多态。
参数多态和包含多态是指通用多态。
在执行读文件操作时,如果遇到文件尾,则函数feof(fp)返回逻辑真(非0值):
否则,返回逻辑假(0)
A,Java不支持指针,C/C++支持
B,Java程序不需要显式地关心内存释放,而C/C++需要
C,java不完全算是编译型语言,他编译的字节码文件运行时是解释执行的,其次,java和C++的类也不都完全是静态绑定的,比如C+++的虚函数,java的父类引用子类对象等情况。
D,java也可以数组溢出,溢出是会抛出异常,也就是ArrayIndexOutOfBoundsException