编程题自测

  1. 编写一个函数,从字符串中寻找整个连续的数字字符,将其转化成整数并保存在arr整型数组里,溢出以-1作为标志。字符串以‘#’结束(如”uestc2015jsj123#”)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[50];
int i = 0;

int str_to_int(char str[], int len) {
int num = 0;
for (int j = 0; j < len; j++)
num = num * 10 + (str[j] - '0');

return num;
}

void int_find(int a[], char *t) {
char *p = t, *q;
while (*p != '#') {
if (*p >= '0' && *p <= '9') {
q = p + 1;
while (*q >= '0' && *q <= '9') q++;
a[i++] = str_to_int(p, q - p);
p = q;
}
else p++;
}
a[i] = -1;
}

int main() {
char src[] = "uestc2015jsj123#";
int_find(a, src);
int t = i;
for (int x = 0; x < t; x++)
printf("%d ",a[x]);
return 0;
}
  1. 随机输入若干整数和若干浮点数(顺序也是随机的,最多100个),要求编写完整的程序,将整数按从大到小排列,浮点数按从小到大排列(浮点数排序可省略),并输出。如:输入10 12.3 12 5 52.1 3.65 88.6 输出:12 10 5 3.65 12.3 52.1 88.6
#include <stdio.h>
#include <stdlib.h>

void sort_int(int num[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j <= n - 1; j++) {
if (num[j] < num[i]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}

int main() {
float temp;
int num_int[100], count_int=0, count_foat=0;
float num_float[100];
int n;

scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%f", &temp);
if (temp == (int)temp)
num_int[count_int++] = (int)temp;
else
num_float[count_foat++] = temp;
}
sort_int(num_int, count_int);
sort_float(num_float, count_foat);
for (int i = 0; i < count_int; i++)
printf("%d ", num_int[i]);
for (int i = 0; i < count_foat; i++)
printf("%f", num_float[i]);
return 0;
}
  1. 编写完整的程序,构造整数集合(其实就是一个整数链表),并实现对该集合操作的若干功能:加入一个新元素,判断某元素是否在集合内,输出两个集合并集,输出两个集合交集,删除集合中某一元素。struct set{int numb; struct set *next;}
#include <stdio.h>
#include <stdlib.h>

struct set {
int numb;
struct set *next;
};

// 往集合中添加一个元素--头插法
void add(struct set *L,int x) {
struct set *temp = (set *)malloc(sizeof(set));
temp->numb = x;
temp->next = L->next;
L->next = temp;
}

// 输出集合
void print(struct set *L) {
struct set *temp = L->next;
while (temp) {
printf("%d ",temp->numb);
temp = temp->next;
}
printf("\n");
}

// 查找集合中的某一个元素
int isExitList(struct set *L,int x) {
struct set *temp = L->next;
while (temp) {
if (temp->numb == x) return 1;
temp = temp->next;
}
return 0;
}

// 删除集合的某一个元素
void deleteList(struct set *L,int x) {
struct set *temp = L->next;
struct set *pre = L;
while (temp) {
if (temp->numb == x) { //集合元素是互异的,找到即结束
pre->next = temp->next;
delete(temp);
break;
} else {
pre = temp;
temp = temp->next;
}
}
}

// 输出两个集合的并集
void interSectin(struct set *L1,struct set *L2) {
struct set *p1 = L1->next;
struct set *p2 = L2->next;
int flag;
while (p1) {
printf("%d ",p1->numb);
p1 = p1->next;
}
while (p2) {
p1 = L1->next; //每次都得初始化的数据
flag = 0;
while (p1) {
if (p1->numb == p2->numb) {
flag = 1;
break;
}
p1 = p1->next;
}
if (flag == 0) printf("%d ",p2->numb);
p2 = p2->next;
}
}

// 输出两个集合的交集
void Union(struct set *L1,struct set *L2) {
struct set *p1 = L1->next;
struct set *p2 = L2->next;
int flag;
while (p1) {
p2 = L2->next;
flag = 0;
while (p2) {
if (p1->numb == p2->numb){
printf("%d ",p1->numb);
break; //找到即可结束循环,因为集合元素是互异的
}
p2 = p2->next;
}
p1 = p1->next;
}
}

int main() {
struct set *L1 = (set *)malloc(sizeof(set));
struct set *L2 = (set *)malloc(sizeof(set));
L1->next = NULL;
L2->next = NULL;
int temp;
scanf("%d", &temp);
while (temp != -1) {
add(L1, temp);
scanf("%d", &temp);
}
scanf("%d", &temp);
while (temp != -1) {
add(L2, temp);
scanf("%d", &temp);
}
printf("输出交集:");
Union(L1, L2);
printf("\n");
printf("输出并集:");
interSectin(L1, L2);
return 0;
}
  1. 编写函数,实现字符串的逆序,不允许申请新的数组空间
#include<stdio.h>
#include<stdlib.h>

int main() {
char str[50] = "UESTC2017/3/12";

int len = 0;
char ch;
while (str[len] != '\0') len++;

for (int i = 0; i <= len / 2; i++) {
ch = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = ch;
}
for (int i = 0; i < len; i++)
printf("%c", str[i]);
return 0;
}
  1. 身份证长度是18,其中第7至14个数字是生日,编写完整程序判断2个身份证号的出生日期先后。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int is_Same(char st1[],char st2[]) {
int low = 6, high = 13;
while (low <= high && st1[low] == st2[low]) low++;
return st1[low] - st2[low];
}

int main() {
char st1[19],st2[19];
gets(st1);
gets(st2);
int t = is_Same(st1,st2);
if(t > 0) printf("第二个人生日先\n");
else if (t < 0) printf("第一个人生日先\n");
else printf("生日相同\n");

return 0;
}
  1. 编写完整程序,计算1-x+x^2/2!-x^3/3!+…+x^n/n!,只允许有Main函数,不允许定义其他函数,x是单浮点数,n是整数。
#include <stdio.h>
#include <stdlib.h>

int main() {
double item = 1, sum = 1;
int n;
scanf("%d", &n);
int x = 1;
for (int i = 1; i <= n; i++) {
item *= -1 * 1.0 * x / i;
sum += item;
}
printf("%f\n", sum) ;
return 0;
}
  1. 编写完整程序,一个链表,找出其中数据项最大的结点,然后将其移动到链表尾部(结点node由整型data和节点指针next构成),不允许申请新的结点。
#include <stdio.h>
#include <stdlib.h>

struct node {
int data;
struct node *next;
};

void print(struct node *L) {
struct node *temp = L->next;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}

//头插法建立单链表
void init_List(struct node *L, int n) {
int x;
for (int i = 1; i <= n; i++) {
scanf("%d", &x);
struct node *temp = (node *)malloc(sizeof(node));
temp->data = x;
temp->next = L->next;
L->next = temp;
}
}

void max_Node(struct node *L) {
struct node *temp = L->next;
struct node *pre = L;
struct node *max = L->next;

while (temp) {
if (temp->data > max->data) {
max = temp;
}
pre = temp;
temp = temp->next;
}
// 循环结束temp肯定为空,则pre指向链表的最后一个结点
int tempnum = pre->data;
pre->data = max->data;
max->data = tempnum;
}

int main() {
int n;
struct node *L = (node *)malloc(sizeof(node));
L->next = NULL;
scanf("%d", &n);

init_List(L,n);
print(L);

max_Node(L);
print(L);

return 0;
}
  1. 把整数分解成素数 如90=2*3*3*5*
#include <stdio.h>
int main() {
int i, x;
while (scanf("%d", &x)) {

for (i = 2; i <= x; i++) // 找<=x的质数
{
while (x != i) // 若x=i,则输入的x是质数
{
if (x % i == 0) // 若x可以被质数i整除
{
printf("%d ",i); // 则质数i是其中一个质因数
x = x / i; // x=x/i 用整除后的x求解下一个质因数,若x=i(质数)则退出打印x,若不等且不能整除i,则i+1
}
else
break;
}
}
printf("%d \n", x);
}

return 0;
}

。。。

操作系统

  1. 处理中断的过程:
    测定是否有未响应的中断信号;
    保护被中断进程的CPU环境;
    转入相应的设备处理程序;
    中断处理;
    恢复CPU的现场并退出中断。
  2. RAID工作原理:
    磁盘阵列由很多块独立磁盘组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。将数据切割成许多区段,分别存放在各个硬盘上。
    利用同位检查的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
    在磁盘阵列内部为加快与主机交互速度,都带有一定量的缓冲存储器。主机与磁盘阵列的缓存交互,缓存与具体的磁盘交互数据。

数据库

  1. 数据库保护、访问的内容有哪些:
    利用权限机制和完整性约束防止非法数据进入数据库;
    提供故障恢复能力和并发访问控制。
  2. DBA的职责:
    管理和控制数据库系统。
    决定数据库中存放信息的内容和结构;
    决定数据库的存储结构和存取策略;
    定义数据的安全性要求和完整性约束条件;
    监控数据库的使用和运行;
    改进和重构数据库。
  3. 数据库系统和文件系统相比有何特点:
    共享性高、冗余度小;
    采用数据模型描述,整体结构化;
    由数据库管理系统提供数据安全性、完整性,并发访问控制和故障恢复;
    具有高度的物理独立性和逻辑独立性;
  4. 什么是完整性约束:
    完整性约束包含实体完整性、参照完整性、用户自定义完整性;用于确保数据库中数据的正确相容。
  5. DBMS支持哪几种数据模型:
  6. SQL(Structured query language)的四个组成部分:
    数据定义语言、查询语言、数据操纵语言、数据控制语言。
  7. 数据库操纵语言举例:
    即DML,用户可通过它实现对数据库的基本操作。包含增删改查。
  8. 介绍下有哪些应用数据库:
    桌面型:Access
    企业型:SQL Server、MYSQL、Oracle
  9. 什么是数据独立性(数据库的两种独立性):
    数据独立性包括数据的物理独立性和逻辑独立性。
    物理独立性指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。即数据在磁盘上怎样存储由DBMS(数据库管理系统)管理,应用程序只处理数据的逻辑结构。当数据的物理存储改变,应用程序不用修改。
    逻辑独立性指用户的应用程序与数据库的逻辑结构是相互独立的,即当数据库的逻辑结构改变时,用户程序可以不变。
  10. 数据模式:数据库存放数据的模式。以此才能构造复杂的数据结构来建立数据间的联系。
    1NF:数据库表中字段都是单一属性,不可再分;
    2NF:不存在非主属性对任一主属性的部分函数依赖;
    3NF:不存在非主属性对任一主属性的传递函数依赖。
    BNCF范式:在第三范式的基础上,消除主属性之间的部分函数依赖。
  11. 数据库的关系操作有哪些?各有什么作用?
    包括查询(query)和插入(insert)、删除(delete)、修改(update)两大部分。
    查询操作又可以分为选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except)、交(intersection)、笛卡儿积等。
  12. DB并发操作通常带来哪三类问题:
    丢失修改:当一个事务修改了数据,并且还未提交到数据库时,另一个事务又对同样的数据进行了修改,并且提交到了数据库中。这样,数据库中没有出现第一个事务修改数据的结果,好像这种数据修改丢失了一样。
    脏读:当一个事务正在访问数据,并对数据进行了修改,且还未提交到数据库时,另一个事务也访问这个数据,且使用了这个数据。因为这个数据是还没有提交的数据,那么另一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
    不可重复读:在一个事务内,多次读同一数据。在这个事务还没有结束时,另一个事务也访问同一数据,在第一个事务中的两次读数据之间,由于第二个事务的修改,所读到的数据可能是不一样的。
  13. 两段锁协议:
    规定所有事务应遵守的规则:
    在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
    在释放一个封锁之后,事务不再申请和获得其它任何封锁。
    即事务的执行分为两个阶段:
    第一阶段获得封锁,称为扩展阶段。
    第二阶段释放封锁,称为收缩阶段。
  14. 事务的四个特点:
    事务:用户定义的一个数据库操作序列,这些操作要么不做要么全做。
    一致性、原子性、隔离性、持续性。
  15. 数据库故障的种类:
    事务故障、系统故障、介质故障、计算机病毒。
  16. 数据库恢复策略有哪几种:
    转储:定期地将数据库中的内容复制到其它存储设备中去。
    日志:数据库系统创建和维护的用于自动记载数据库中修改型操作的数据更新情况
  17. 数据库的三级模式:
    外模式、模式、内模式。
    模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
    外模式也称子模式(Subschema)或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
    内模式也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
  18. 什么是表、什么是视图、两者的区别和联系是什么:
    表是保存数据的实体,视图是一条语句,不保存数据也没有数据,从表中获取数据。
    表可以建立各种触发器、索引、主键约束等,但视图无法建立这些对象。表和视图都可以更新,但视图的更新受到约束。
  19. 1NF有哪些缺点:
    数据冗余太大;更新、插入、删除异常。
  20. 数据字典通常包含五个部分:
    数据项、数据结构、数据流、数据存储、处理过程。
  21. 数据库中视图的优点:
    简化用户操作;
    使用户以不同方式查询同一数据;
    对数据库重构提供一定程度的逻辑独立性;
    对机密数据提供安全保护。
  22. 在做数据库开发中使用视图的优点:
    可以访问表中列的子集,隐藏敏感数据;
    可以访问表中行的子集,进行条件过滤;
    可以重命名列名,增加代表意义;
    可以快速访问多表连接所组成的数据;
    可以快速读取聚合函数运算返回的数据集;
  23. 数据库的三要素:
    静态特征(数据结构)、动态特征(数据操作)、完整性约束条件。
  24. 数据库索引:
    目的:提供多种存储路径,加快查找速度
    没有查询、统计的需求则不建;数据增删改频繁,系统会花费许多时间维护索引,从而降低查询效率。
  25. 哪些视图可以更新,哪些不可以更新,举例说明:
    基本表的行列子集视图一般是可更新的;
    若视图的属性来自聚合函数,表达式,则该视图肯定不可以更新。
  26. 日志文件的定义与作用:
    定义:用来记录事务对数据库的更新操作的文件;
    作用:用于数据库恢复,协助后备副本进行介质故障恢复。
  27. 数据库完整性和安全性的区别:
    前者防止数据库中存在不符合语义的数据,后者防止数据库被恶意破坏和非法存取。
  28. 数据库有哪几种备份策略:
    完全备份:每次对数据进行完整的备份;
    增量备份(Incremental Backup):只备份上次完全备份或增量备份后被修改的文件;
    差异备份(Differential Backup):只备份上次完全备份后被修改过的文件。
  29. 什么是数据库控制语言,举例说明:
    DCL用来设置或更改数据库用户角色权限的语句。
    包括授权(grant)、拒绝(deny)、删除(remove)
  30. 数据库采用什么机制保证数据库并发操作的正确性:
    并发控制。相应技术:封锁、时间戳、乐观控制法等。
  31. 数据库安全系统和计算机安全系统的关系:
    安全性问题并非数据库系统独有,所有计算机系统都有这个问题。只是数据库系统中存放大量数据,并且为许多用户直接共享,从而使安全性问题更为突出。两者是紧密联系、相互支持的关系。
  32. 函数模板和类模板的区别:
    实例化不同。函数模板的实例化由编译程序在处理函数调用时自动完成,而类模板的实例化必须由程序员在程序中显式指定
  33. 数据库管理系统的完整性要完成的功能:
    防止不符合语义的数据进入数据库,造成无效操作和错误结果。
  34. DBMS控制管理功能:
    数据定义;数据操纵;数据库运行管理;数据库组织和存储;数据库建立和维护。
  35. DBMS的控制操作有哪些:
    数据的安全性保护、数据的完整性检查、并发控制、数据恢复。
  36. 数据库两级映像的作用:
    外模式/模式映像:保证数据库中的数据具有较高逻辑独立性;
    模式/内模式映像:保证数据库中的数据具有较高物理独立性;
  37. 笛卡尔积:
    又称直积,X×Y,第一个对象是X的成员而第二个对象是Y的一个成员所构成的所有可能有序对。
  38. 数据库中的primary key约束和unique约束有何区别:
    主键约束:标识数据库记录唯一性,针对主键列,不允许记录重复,且键值不为空
    UNIQUE KEY:防止数据插入时重复,只针对非主键列,允许有空值。

计算机网络

  1. 1.比较TCP与UDP:
    TCP传输控制协议:提供面向连接、可靠的数据传输服务,其数据传输单位是报文段;
    UDP用户数据报协议:提供无连接、尽最大努力的数据传输服务,不保证可靠性,但其开销比TCP小很多,其数据传输单位是用户数据报。
  2. 网络协议的三个核心要素及作用:
    语法:定义数据与控制信息的格式;
    语义:定义需要发出何种控制信息,完成何种动作以及做出何种响应;
    同步:定义事件实现顺序的详细过程。
  3. 解释网络体系结构,其实现和理论有何区别:
    网络体系结构是指通信系统的整体设计,它为网络硬件、软件、协议、存储控制和拓扑提供标准。采用分层结构,各层相互独立、易维护。国际标准化组织制定了OSI/RM标准,该标准采用了七层结构,即应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。七层协议体系结构既复杂又不实用,但概念清晰、理论完整。而TCP/IP成为了事实上的标准,它采用四层结构,即应用层、传输层、网络层和网络接口层。
  4. 波特和比特的区别:
    波特是计量单位,用于度量调制解调器等设备每秒信号变化次数的多少;
    比特是信息量的单位,1位二进制数所携带的信息量即为1bit。
  5. 什么是网络时延:
    时延是指一个报文或分组从一个网络的一端传送到另一端所需的时间。
  6. 什么是码元、码元长度:
    数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为(二进制)码元,而这个间隔被称为码元长度。
  7. 结合Internet,说说有连接服务和无连接服务:
    有连接服务包含建立连接、数据传输、释放连接三个阶段。在数据交换前必须建立连接,数据交换结束后必须终止连接。传输数据时按序传输,是可靠交付。
    无连接服务,两个实体之间通信不需要建立连接,故无需事先预定保留下层有关资源,这些资源将在数据传输时动态进行分配。具有灵活方便、速度快的优点,但不能防止报文的丢失、重复或失序,是一种不可靠服务。
  8. 点对点和端到端工作在哪层,及其工作机制:
    点对点工作在数据链路层和网络层,端到端工作在传输层。点对点是基于MAC地址或者IP地址,指发送端把数据传给与它直接相连的设备,这台设备在合适的时候又把数据传给与之相连的下一台设备,通过一台一台直接相连的设备,把数据传到接收端。端到端是网络连接,应用程序之间的远程通信,是一条逻辑链路。在数据传输前,经过各种各样的交换设备,在两端设备间建立一条链路,链路建立后,发送端就可以发送数据,直到数据发送完毕,接收端确认接收成功。
  9. 网络时延由哪几部分组成,各产生于何处:
    包含发送时延、传播时延、处理时延、排队时延。
    发送时延是主机或路由器发送数据帧所需要的时间;
    传播时延是电磁波在信道中传播一定距离所花费的时间;
    处理时延指主机或路由器在收到分组时要花费一定的时间进行处理;
    排队时延指分组在经过网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待处理。在路由器确认了转发接口后,还要在输出队列中排队等待转发。
  10. 实体,协议:
    实体表示任何可发送或接受信息的硬件或软件进程。
    协议是控制两个对等实体或多个实体进行通信的规则的集合。
  11. TCP/IP网络协议的核心是什么,如何引出“over everything”和“everything over”:
    TCP/IP协议的核心是TCP、UDP、IP协议。
    分层次画出具体的协议来表示TCP/IP协议族,它的特点是上下两头大而中间小:应用层和网络接口层都有很多协议,而中间的IP层很小,上层的各种协议都向下汇聚到IP层。这种很像沙漏计时器形状的TCP/IP协议族表名:TCP/IP协议可以为各种应用提供服务(everything over ip),同时也允许IP协议在各种网络构成的互联网上允许(IP over everything)
  12. 用白军和蓝军解释下没有100%可靠的通信:
    占据东、西两个山头的蓝军1和蓝军2与驻扎在山谷的白军作战。其力量对比是:单独的蓝军1或蓝军2打不过白军,但蓝军1和蓝军2协同作战则可战胜白军。现蓝军1拟于次日正午向白军发起进攻,于是用计算机发送电文给蓝军2。但通信线路很不稳定,电文出错或丢失的可能性较大。因此要求收到电文的友军必须发回一个确认电文,但此确认电文也可能出错或丢失。
    无限循环下去,蓝军1和蓝军2都始终无法确定自己最后发出的电文对方是否已经收到。因此,在本例给出的条件下,没有一种协议可以使蓝军1和蓝军2能够100%地确保胜利。
  13. 电路交换与分组交换的区别:
    电路交换是以电路连接为目的的交换方式,通信前要在通信双方之间建立一条被双方独占的物理通道。
    分组交换是以分组为单位进行传输和交换,它是一种存储–转发交换方式,即将到达交换机的分组先送到存储器暂时存储和处理,等到相应的输出电路有空闲时再送出。
  14. DNS:
    即域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析。DNS协议运行在UDP协议之上,使用端口号53。
  15. NAT:
    网络地址转换,属于接入广域网技术,可以将私有地址转化为合法IP地址,广泛应用于各种类型的网络中。不仅解决了IP地址不足的问题,还能够有效避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
  16. 数据链路层协议分类:
    可分为异步协议和同步协议两大类。
    点对点协议(Point-to-Point Protocol);
    以太网(Ethernet);
    高级数据链路协议(High-Level Data Link Protocol);
    帧中继(Frame Relay);
    异步传输模式(Asynchronous Transfer Mode);
  17. 路由器的组成:内部构件和外部构件
    内部构件:
    RAM(随机存储器)、NVRAM(非易失性RAM)、FLASH(快速闪存)、ROM(只读存储器)、CPU(中央处理器)、背板;
    外部构件:
    各种接口:主要有以太口,快速以太口,只适应以太口,光纤口,console口,辅助口
    开关、电源接口
  18. IPV4和IPV6的区别:
    地址空间更大。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址;
    路由表更小。IPv6的地址分配一开始就遵循聚类原则,使得路由器能在路由表中用一条记录表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
    组播支持以及对流的支持增强。
    加入对自动配置的支持。这是对DHCP协议的改进和扩展,使得网络的管理更加方便和快捷。
    具有更高的安全性。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,极大增强了网络安全。
  19. TCP的拥塞控制与流量控制的功能与区别:
    拥塞控制:防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机、路由器,以及与降低网络传输性能有关的所有因素。
    流量控制:指点对点通信量的控制,是端到端的问题。流量控制就是抑制发送端发送数据的速率,以便使接收端来得及接收。
  20. PPP协议:
    即点到点协议,运用在数据链路层,支持全双工的同、异步链路上进行点到点的传输,主要由链路控制协议族(LCP)和网络控制协议族(NCP)组成。
  21. P2P网络编程的特点:
    P2P对等网络,是一种有别于传统C/S架构的分布式网络,用户不必连接到服务器区浏览下载文件,而是寻找对等节点建立网络连接,直接进行数据传输。
  22. DNS的递归查询和迭代查询(区别):
    递归查询:DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
    迭代查询:DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
  23. ARP协议的过程:
    即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
  24. 计算机网络的接入类型有哪些:
    局域网、城域网、广域网、互联网
  25. 中继器、集线器、交换机、网桥、网关、路由器的功能作用,区别是什么:
    (集线器、路由器和交换机有何区别)
    (集线器、交换机、路由器各工作在哪层)
    中继器:物理层,简单的信号放大器;
    集线器:物理层,用于信号放大和连接多个终端;
    交换机:数据链路层,有多个端口以连接各个主机,使用物理地址(MAC),转发数据较快;
    网桥:数据链路层,将两个局域网连起来,根据MAC地址来转发数据帧;
    网关:网络层以上实现网络互连,是连接两个不同网络的接口;
    路由器:网络层,阻止广播,安全性高,是用逻辑地址(IP),转发数据较慢。
  26. IP和MAC特点:
    MAC地址存放在MAC帧首部,是数据链路层和物理层使用的地址;
    IP地址存放在IP数据报的首部,IP数据报是MAC帧的数据,IP是网络层及以上各层使用的地址,是一种逻辑地址。
  27. 多路复用与多路分解:
    多路复用:从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层;
    多路分解:将运输层报文段中的数据交付到正确的套接字。
  28. 计算机网络接入方式?举例说明:
    电话线(ADSL接入);
    有线电视网(光纤同轴混合接入(HFC));
    无线的WiFi接入;
    光纤接入(FTTX)。
  29. 什么是虚电路网络,什么是数据报网络:
    虚电路网络:两个通信主机在通信之前事先建立一条通道线路,所有分组都将沿这条线路有序传输。但这个线路上的某个路由器或者链路也可以为其他用户进行服务;
    数据报网络:将要发送的数据分为许多分组进行独立发送,在发送过程中各个分组各自走自己的路线。
  30. 简述C/S和P2P混合结构的特点:
    网络上每台主机既是服务器又是客户端。
  31. 公司配置域名服务器,该如何配置:
    代理商注册域名,域名申请成功后做域名解析,绑定IP地址。
  32. 计算机网络有哪几种校验算法:
    循环冗余校验CRC,奇偶校验,海明码校验。
  33. 子网掩码和默认网关是什么及作用:
    子网掩码是一个32位地址,用于将某个IP地址划分为网络地址和主机地址两部分,可判断任意两台计算机的IP地址是否属于同一子网络;
    默认网关是一个用于 TCP/IP 协议的配置项,是一个可直接到达的 IP 路由器的 IP 地址。一台主机若找不到可用网关,就把数据包发给指定的默认网关,由这个网关来处理数据包。
  34. 网络中数据的分片与重组发生在何时:
    (IP协议在传输数据包时会将数据报文分成若干片进行传输,并在目标系统中进行重组。)
    如果IP数据报加上数据帧头部后大于MTU,数据报文就会分成若干片进行传输。
    在目标系统中具有同一个ID的IP分片将会从新组装,直到接收所有片段,形成正确的顺序。
  35. 如何实现IPV4和IPV6的互通:
    双IP层技术:保持IPv6与IPv4互操作性的最直接方式。适用于Internet由IPv4向IPv6过渡的前期。具有双IP层的节点成为IPv4/IPv6节点。它具有两个IP协议的完整实现。
    隧道技术:适用于Internet由IPv4向IPv6过渡的中期。其原理是两个IPv6的网络之间的中间网络的多协议路由器接收到源主机的IP包时,将其放入中间网络层数据包在和域中,当其到达中间网络另一端多协议路由器时再恢复源IP包并转发到目的主机。
    报头翻译技术:当Internet中只有极少数IPv4节点时(过渡阶段后期),报头翻译技术可以保持IPv6与IPv4节点间的通讯。向IPv4节点发送消息时,路径上最后一个IPv6/IPv4路由器发现目的地址是IPv4映射地址则进行报头翻译,将IPv6报头替换成IPv4报头,并转发到目的IPv4节点。
  36. UDP和TCP套接字编程的区别:
    UDP程序结构更简单,对系统资源的要求更少;
    TCP保证数据正确性,UDP可能丢包;
    TCP保证数据顺序,UDP不保证。
  37. 发送序号和确认序号的作用:
    发送方发送序号作为数据包的唯一标示,保证了传输数据包的顺序,同时接收方通过确认序号来保证所有传输的数据按照正常顺序重组,从而保障数据传输的完整。
  38. TCP建立连接:即三次握手。
    第一次握手:客户端发送同步包到服务器;
    第二次握手:服务器收到同步包,必须确认客户的同步请求,同时也发送一个同步确认包(ask=k);
    第三次握手:客户端收到服务器的同步确认包,向服务器发送确认包。三次握手完成后,客户端和服务器就建立了tcp连接。