IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 嵌入式笔试题4 -> 正文阅读

[网络协议]嵌入式笔试题4

1.下面关于关键字的描述及使用中,错误的是:(B)

A、volatile可用于定义多线程应用中的共享变量。

B、const可用于定义全局变量。

C、一个变量既可以是const,同时也是volatile。

D、register static int i = 0

解析:int b = i;volatile使i可能随时发生变化,每次使用前必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。volatile会保证对特殊地址的稳定访问。

? register变量是直接放在寄存器中的,这样就大大提高了变量存取的速度,但是静态变量不能定义为register。

2、假设有10个记录,他的初始关键字序列为{55,2,6,4,32,12,9,73,26,37},用插入排序对此排序,则第五次排序结果为:2,4,6,12,32,55,9,73,26,37。

插入排序相关概念:有一个已经有序的数据序列,要求在已经排好的数据序列中插入一个数,但要求此数据插入后依然有序,此时用插入排序法。

相关代码:

#include <stdio.h>

void insert(int *arr,int len)
{
	int i,j,temp;
	
	printf("排序前:\n");
	for(int i  = 0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	printf("\n");
	
	
	for(i=1;i<len;i++)
	{
		temp = arr[i];
		j=i-1;
		while(j>-1&&temp<arr[j])
		{
			arr[j+1]=arr[j];
			j--;
		}
		arr[j+1] = temp;
	}
	
	printf("排序后:\n");
	for(int i  = 0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = {3,25,432,321,243,212,34,4,45,65,5};
	int len = sizeof(arr)/sizeof(arr[0]);
	insert(arr,len);
	return 0;
}

3.中断响应时间是指从发出中断请求到进入中断处理。

4.ftp协议使用的默认端口号是21;http协议使用的默认端口号是8080。

5.SQL语言具有①数据定义 ②数据操控 ③数据控制 ④数据查询 功能。

6.下面代码完成两个值互换,①处填写的代码正确的是:*b=*a^*b;? ? ? ? ? ? *a = *a^*b;

void swap (int *a,int *b)
{
    *a = *a^*b;
    ①
}

7.统一进程内的所有线程除了共享全局变量外共享程序计数器。

堆栈是保证线程独立运行所必需的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常进行,不受其他线程的影响。

由于一个进程中有多个线程在同时运行,可能某个线程进行系统调用,后设置了error值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被删改。

8.?

9.在ANSIC标准中,signal函数的声明如下void(*signal(int sig,void(*fun)(int)))(int),对此函数进行分析:

signal是一个函数,其返回值是一个函数指针,该指针指向一个带一个int参数、无返回值得函数。

void(*func)(int):? ? 返回值类型(*指针变量名){[形参列表]}

int func(int x);? ? ? ?返回int型 函数名称(形参列表)

int (*f) (int x);? ? ? ???返回int型 函数指针名称(形参列表)

f= func;? ? ? ? ? ? ? ? ?将func函数的首地址赋值给函数指针,或者使用(f=&func);

例:

? ? ? ? ①void hello (void){printf("你好");}

? ? ? ? ②void bye (void) {printf("再见");}

? ? ? ? ③void ok(void) {printf("好的!");}

构造一个通用函数:typedef void (*funcptr)(void);

使用时如下:

void speak(int id)
{
    funcptr words[3] = {&hello,&bye,&ok};
    funcptr fun = word[id];
    (*fun)();
}

此结果显示为:speak(0):你好;speak(1):再见;speak(2):好的

10.下面代码求n值,空白处应填写的代码是?

void fact(int n)
{
    if(n==1)
    {
        return 1;
    }
    else
    {
        return fact(n-1)*n;   //空白处
    }
}

11.在TCP通信中,其建立连接需要经过3次握手,终止连接需要经过4次挥手。

TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接三个部分。

? ? TCP建立连接的过程称为三次握手,其具体流程为:①主机A通过主句B,发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段主机A告诉主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主句B两件事,我想要和你通信你可以用那个序列号作为起始数据段来回应我。②主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段相应主机A,也告诉主机A两件事:我已经收到了你的请求,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我。③主机A收到这个数据段后,再发送一个确认应答,确认已经收到主机B的数据段:我已经收到回复,我现在要开始传输实际数据了。

? ? TCP断开连接的过程称为四次挥手,其流程为:①当主机A完成数据传输后,将控制位(FIN)位置1,提出停止TCP连接的请求。②主机B收到FIN后对其做出响应,确认这一方向上的TCP连接将关闭,将ACK置1.③由B端再提出反方向的关闭请求,将FIN置1.④主机A对主机B的请求进行确认,将ACK置1,双向的关闭结束。

? ?由三次握手和四次挥手可以看出,TCP通信提高了数据传输的可靠性,为数据正式传输打下了坚实的基础。

12.函数foo的原型为:

unsigned int foo(unsigned int _in)
{
    unsigned char ret = 0,uc = -1;
    return _in >> 24^uc; 
}

则foo(0xAABB4455)的返回结果是:0X55;

解析:在计算机中,数据一律用补码来表示和存储。所以UC其实是-1的补码,即11111111,而_in>>24^uc先后移24位再和uc进行异或。

13.UDP通信是面向报文的通信,TCP是面向字节流的通信。UDP可靠性必须由上层应用实现,一般都会采用消息重传方式来实现,消息重传有两种方式方式,一是发送者发起,二是接受者发起。

14.事务是DBMS的基本单位,它是用户定义的。

15.函数foo原型如下,则foo(0x32)打印结果为:error

void foo(char _case)
{
    switch (_case)
    {
        case '1':printf("1");break;
        case '2':printf("2");
        case '3':printf("3");break;
        case '4':printf("4");
        default:printf("error");break;
    }
}

16.在32 位系统中,以下代码输出结果为:

#include <stdio.h>

void foo(void)
{
#pragma pack(2)
	typedef struct 
	{
		unsigned long index;
		char name[9];
		char *attr[4];
	}tSA,*ptSA;
	
#pragma pack()
	tSA sa[5];
	ptSA psa1 = sa,psa2 = &sa[4];
	unsigned long i = (unsigned long )psa1,j= (unsigned long)psa2;
	printf("%ld,%ld",psa2 - psa1,j-1);
}
int main()
{
	foo();
	return 0;
}

17.白盒测试方法一般适用于单元测试。

18.进程是系统执行的最小单位,线程是系统分配资源的最小,进程可以包含多个线程。

19.heap和stack的差别是stack空间由操作系统自动分配/释放,heap空间用户手动分配/释放。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:03:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 20:47:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计