入公司笔试嵌入式笔试题(16道C语言面试题).pdf

上传人:文*** 文档编号:93784001 上传时间:2023-07-11 格式:PDF 页数:137 大小:16.56MB
返回 下载 相关 举报
入公司笔试嵌入式笔试题(16道C语言面试题).pdf_第1页
第1页 / 共137页
入公司笔试嵌入式笔试题(16道C语言面试题).pdf_第2页
第2页 / 共137页
点击查看更多>>
资源描述

《入公司笔试嵌入式笔试题(16道C语言面试题).pdf》由会员分享,可在线阅读,更多相关《入公司笔试嵌入式笔试题(16道C语言面试题).pdf(137页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、16道试题C 语言面试题1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS PER YEAR(60*60*24*365)UL我在这想看到几件事情:1).d e fin e 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2).懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。3).意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。4).如果你在你的表达式中用到UL(表示无符号长整型),那么你有了 个好的

2、起点。记住,第一印象很重要。2.写一个“标准”宏 M IN,这个宏输入两个参数并返回较小的一个。#define MIN(A,B)(A)6)puts(6):puts(6”。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。13.评价下面的代码片断:unsigned int zero=0;unsigned int compzero=OxFFFF;/*Vs complement of

3、zero*/对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero=0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就

4、当是这个娱乐吧动态内存分配(Dynamic memory allocation)14.尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是P.J.Plauger,他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?char*ptr;if(ptr=(char*)malloc(0)=NU

5、LL)puts(Got a null pointer);elseputs(Got a valid pointer);这是一个有趣的问题。最近在我的一个同事不经意把0 值传给了函数m alloc,得到了 个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是“Got a validpointer。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。Typedef15.Typedef在 C 语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:#

6、define dPS struct s*typedef struct s*tPS;以上两种情况的意图都是要定义dP S 和 tP S 作为个指向结构s 指针。哪种方法更好呢?(如果有的话)为什么?这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:dPS pl,p2;tPS p3,p4;第一个扩展为struct s*pl,p2;上面的代码定义p l 为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了 p 3 和 p 4 两个指针。晦涩的语法16.C 语言同意一些令人震惊的结构,下面的结构是合法的吗

7、,如果是它做些什么?int a=5,b=7,c;c=a+b;这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c=a+b;因此,这段代码持行后a=6,b=7,c=12o如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(b

8、 y te)里面有多少bit被 置 14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串1 前后交换2。直接?3 o while(n=(n&n-1 )count+;4.5.动态规划电子信息类 公司招聘C 笔试题1 .改错(5 分)void test()|char str10;char*strl=0123456789”;strcpy(str,strl);)2.改错(5 分)void test()char str10,strl 10;for(int=0;i10;i+)str=a;strcpy(str,strl);3.读程序,写出结果(5

9、分)int sum(int a)(int c=0;static int b=3;c+=1;b+=2;return(a+b+c);)int main()int a=2;for(int i=0;ilink=q-link;q=p-link;B:p-link=q;q-link=p-link;C:q-Iink=p-Iink;p-link=q;D:q=p-link;p-link=q-link;3、在一种语言中,运算符是从右向左结合的(例如:a+b+c=a+(b+c)下面表达式“7-(16/(3+1)*2)-4的结果是(C)A-1;B、1 ;C、3;D 7;E、9;4、程序的局部变量存在于(B)中,全局变量

10、存在于(A)中,动态申请数据存在于(C)中A:数 据 段 B:堆 栈 C:堆空间5、循环链表指(A、C)A:最后一个节点的指针域总是指向链表头 B:可疑自由膨胀的链表C:链表含有指向上级节点的指针域 D:以上都不是6、下列是一个C 语言函数:int f(int a)int b;switch(a)(case 1 :b=10;case 2:b=20;case 3:b=30;default:b=0;return b;在其它函数中调用f(1),f(2),f(4),的返回值依次是:D,D,DA:10 B:20 C:30 D:07、进程和线程的最主要区别在于:(B、C、D)A:进程是UNIX下的概念,线程

11、是Windows下的概念;B:进程的效率比线程低;C:在进程中可以创造线程,但线程中不能生成进程;D:进程有自己的运行空间,线程的运行空间是共享的8、如下代码:unsigned int ulBuf10;int I;unsigned char uclnfdl 0;for(I=0;I10;R-b)ulBuf=I+l;uclnfb=0;sprintRuc In But);请问uclnfo0中的值应该是什么(D)A:0 B:1 C:0 或 1 D:不确定9、下面程序的运行结果是多少?(D)main()char chr=127;int sum=200;chr+=1;sum+=chr;printf(wsu

12、m=%dn,sum);retum(O);A:327 B:328 C:99 D:7211、软件需求分析阶段的测试手段一般采用(C)。A 总 结 B 阶段性报告C 需 求 分 析 评 审 D 不测试12、有如下的Hash函数:unsigned short hashf(unsigned short key)return(key 4)%256 hashf(l 6)和 hashf(256)的值 A:1,16 B:8,32 C:4,15 D:1,3213、enum A,B,C,D,E,K=8,J,M;请说出 D=jA:3 B:4 C:5 D:6 E:714、下面的代码中的含义是什么#ifhdef _oss

13、_LIB_H_#define _oss_LIB_H_#endifA.包含oss的 Lib库 B:定义一个常量 C.不包含oss的 Lib库D.防止头文件被重复引用15、下面程序的运行结果是多少?#include main()char chr=127;int sum=200;chr+=1;sum+=chr;pfintf(sum=%d/rT,sum);return 0;A:327 B:328 C:199 D:7216、以下手段哪些可用于进程间的同步与互斥 A:信号量与PV 原 语 B:B 树 C:进程上下文 D:临界区加锁17、对 栈 S 进行下列操作:push(l),push(2),pop(),

14、pop()则此时栈顶元素是A:1 B:2 C:0 D:不确定18、switch(c)中的c 不能是哪种数据类型A:char B:long C:unsigned D:double E:float19在 Windows95环境下,定义数组:int 则数组a 所占用的内存单元为A:6 字节 B:24字节 C:48字节 D:不能确定20、类型定义:chair S3=,AB,1 char*p;在执行了语句p=s之后,*(p+2)的值是A:B:字符,B,的地址 C:40 D:不确定 E:以上答案均不正确21、下面对宏的定义和使用,哪些是错误的?A:#define RECTANGLE_AREA(a,b)(a

15、*b)B:#define RECTANGLE_AREA(a,b)(a)*(b)C:#define INTI_RECT_VALUE(a,b)D:#define MBUF_CLEAR_FLAG(pstMBufM,ulflagM)(pstM EufM)-stUserTagData.stCommon Infb.ul Flag&=(-(ulFlagM)21、下面二叉树前序遍历的顺序是 azb cA:a,b,c B:b,a,c C:b,c,a D:c,b,a22、对下列关键字序列用快速排序进行排序时,速度最快的情形是A:25、23、30、17、21、5、9 B:、9、17、30、25、23、5)C:21、

16、25、5、17、9、23、30 D:5、9、17、21、23、25、3023、在下列叙述中,错误的一条是A:操作系统是用户与计算之间的接口;B:程序的并发执行,使程序失去了顺序执行时具有的封闭性和可再现性,程序与程序的执行不再-对应。C:进程从一个状态到别一个状态的转换,都是靠使用不同的原语来实现。D:在单CPU的系统中,任何时刻处于就绪状态的进程有多个,而且,只有处于就绪状态的进程经调度程序选中后方可进入运行状态。24、卜面关于内容存管理的说法哪种是正确的A:页式内存管理存在严重的碎片问题B:段式内存管理不存在抖动问题C:分区式内存管理既存在碎片问题,又存在抖动问题D:段页式内存管理既减少了

17、碎片问题,又减少了抖动问题二、简答题1、const char*,char const*,char*const 的区别?解答:把一个声明从右向左读。char*const cp;(*读成 pointer to)cp is a const pointer to charconst char*p;p is a pointer to const char;char const*p;同上因为CH里面没有const*的运算符,所以const只能属于前面的类型。2、下面这个程序执行后会有什么错误或者效果:Sdefine MAX 255int main()|unsigned char AMAX,i;for(i=

18、0;i=MAX;i+)A=i;解答:MAX=255数组A 的下标范围为:O.MAX1,这是其一.其二.当i 循环到255时,循环内执行:A255=255;这句本身没有问题.但是返回fbr(i=0;iv=MAX;i+)语句时,由于unsigned char的取值范围在(O.255),i+以后i 又为0 了.无限循环卜去.注:char类型为一个字节,取值范围是口为,127,unsigned char 0,2553、ASSERT。是干什么用的解答:ASSERT。是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,

19、则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n 在程序中不应该为0,如果为0 可能导致错误,你可以这样写程序:ASSERT(n!=0);k=10/n;ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。assert。的功能类似,它是ANSI C 标准中规定的函数,它与ASSERT的一个重要区别是可以用 在 Release版本中。4、头文件中的ifndefYdeflne/endif干什么用?解答:防止该头文件被重复引用。5、#include 和#includc filenam

20、e.h”有什么区别?解答:对于#include filename.h,编译器从标准库路径开始搜索filename.h对于#include filename.h”,编译器从用户的工作路径开始搜索filename.h6 const有什么用途?(请至少说明两种)解答:(1)可以定义const常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被 const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。7、在 C+程序中调用被C 编译器编译后的函数,为什么要加extern“C”?解答:C+语言支持函数重载,C 语言不支持函数重载。函数被C+编译后在库中的名字与 C 语

21、言的不同。假设某个函数的原型为:void fbo(int x,int y);该函数被C 编译器编译后在库中的名字为一fo。,而 C+编译器则会产生像_fdo_int_int之类的名字。C+提供了 C 连接交换指定符号extem“C”来解决名字匹配问题。8、void GetMemory(char*p)p=(char*)malloc(100);)void Test(void)char*str=NULL;GetMemory(str);strcpy(str,hello world);printf(str);请问运行T est函数会有什么样的结果?解答:程序崩溃。因为GetMemory并不能传递动态内存

22、,T est函数中的str 一直 都 是 NULL。strcpy(str,Hhello world);将使程序崩溃。9、char*GetMcinory(void)char p=hello world11;return p;)void Test(void)(char*str=NULL;str=GctMemoryO;printfifstr);请问运行T est函数会有什么样的结果?解答:可能是乱码。因为GetMemory返回的是指向“栈内存的指针,该指针的地址不是N U LL,但其原现的内容已经被清除,新内容不可知。10 void GetMemory2(char*p,int num)(*p=(ch

23、ar*)malloc(num);)void Test(void)(char*str=NULL;GetMcinory(&str,100);strcpy(str,Hhellon);printflfstr);请问运行T est函数会有什么样的结果?解答:(1)能够输出hello(2)内存泄漏11 void Test(void)(char*str=(char*)malloc(l 00);strcpy(str,hello);free(str);if(str!=NULL)(strcpy(str,world);printfi(str);)请问运行T est函数会有什么样的结果?解答:篡改动态内存区的内容,后

24、果难以预料,非常危险。因为iYee(str);之后,s tr成为野指针,if(str!=NULL)语句不起作用。12、1.下面的代码错在哪里?#includechar*Func(void)char p10;strcpy(p,ll);return p;解答:局部变量不能作为地址指针返回。13、5、请描述软件工程中的瀑布模型?解答:五、编写strcpy函 数(1 0 分)已知strcpy函数的原型是char*strcpy(char*strDest,const char*strSrc);其中strDcst是目的字符串,strSrc是源字符串。(1)不调用C+/C的字符串库函数,请编写函数strcpy

25、char*strcpy(char*strDest,const char*strSrc);assert(strDest!=NULL)&(strSrc!=NULL);/2 分char*address=strDest;2 分while(*strDest+4-=*strSrc-H-)!=0)2 分NULL;return address;2 分|六、编写用C 语言实现的求n 阶阶乘问题的递归算法:long int fect(int n)(int x;long int y;if(n0)(printf(,error!n);)if(n=0)return 1;x=n-l;y=fact(x);return(n*y

26、);七、编程实现删除有序数组中的重复元素?八、编程实现双向链表和单向链表插入一个node操作。小知识:(必须掌握)c 指针int*pn;-指针数组,每个元素均为指向整型数据的指针。int(*)pn;-p 为指向-维数组的指针,这个维数组有n 个整型数据。int*p();-函数带回指针,指针指向返回的值。int(*)p();-p 为指向函数的指针。下面一套网络的填空题:(共 15题,每 题 1.5分 合计:22.5分)1、TCP/IP模型(按从高到低的顺序)应用层传输层网络层网络接口层2、OSI参考模型(按从高到低的顺序)应用层表示层会话层传输层网络层数据链路层物理层3、地址解析协议A R P

27、是用于获得指定物理网络接口卡地址的目标主机的IP 地址4、网际控制报文协议ICM P是用以向源主机报告数据报文在交付时出现的一些错误5、传输层的主要协议TCP、SPX 和 NetBIOS UDP6、在 TCP/IP数据报格式中 字段是设置分片长度的(填写英文名称)7、在 TCP/IP数据报格式中 T O S字段是表示应该如何处理给数据报,并提供服务类型设置的(填写英文)8、-个 IP地址分为两部分前部分 网络 地址,后一部分是主机地址。9、Ipv6的地址结构中每个【P 地址长度为 1000 0000(128)位(二进制)10、两种核心路有协议更新算法:最短路径优先法和矢量距离法。11、RIP最

28、大规定最大跳数为15,若 跳 数 为 1 6 则表示不可达。12、BOOTP使 用 U D P 风装在1P中,因而已被应用程序使用。13、BOOTP是用两个知名的端口:服务器端口为 67,客 户 机 端 口 为 68。14、FTP是基于TCP连接的,所使用的端口是 21 o15、在简单网络管理协议的应用中,被管设备都应该运行tcp/ip协议。在被管设备中需要运行与管理相关的软件,叫做代理理程序(a g e n t)或 代 理 进 程。选择题:(共25题,每 题 1.5分 合计:37.5分)1、下列那些不时网际层协议cA、IPB、ARPC、MACD、ICMPE、IGMP2、TCP/IP支持那三种

29、类型的数据发送cA、多播、广播、单播B、多播、单播、IP数据C、多播、组播、单播D、IP数据、组播、广播3、传输控制协议表述正确的内容是bA、面向连接的协议,不提供可靠的数据传输B、面向连接的协议,提供可靠的数据传输C、面向无连接的服务,提供可靠数据的传输D、面向无连接的服务,不提供可靠的数据传输4、文件传输协议(F T P)使用什么样的服务cA、ICMP服务B、UDP服务C、TCP服务D、SMTP服务5、以太网最大可传送的帧(数据)长度为 个 8 位组 dA、64B、32C、256D、15006、逻辑地址202.112.108.158,用 lpv4二进制表示32地址正确的是:aA、11001

30、010 01110000 01101100 1001I110B、10111101 01101100 01101100 10011001C、10110011 11001110 10010001 00110110D、01110111 01111100 01110111 01110110E、以上都不对7、IP地址分配需要注意问题,一下对IP地址分配中描述不正确的是:dA、网络ID不能全为1B、网络ID 不能全为0C、网络ID 不能以127开头D、同一网络上的每台主机必须有不同的网络IDE、同一网络上的每台主机必须分配有唯一的主机ID8、下列地址哪一个有效:A、131.255.255.18B、220.

31、103.256.56C、240.9.12.12D、192.5.91.255E、129.9.200.219、子网掩码的设置正确的是:cA、对应于网络地址的所有位都设为0B、对应于主机地址的所有位都设为1C、对应于网络地址的所有位都设为1D、以上都不对1 0,子网掩码为255.255.0.0下列哪个IP地址不在同一网段中:cA、172.25.15.201B、172.25.16.15C、172.16.25.16D、172.25.201.1511、对于 IP 地址 192.168.168.0、192.168.169.0,192.168.170.0、192.168.171.0 将这四个 C类地址合并成一

32、个超网应该使用子网掩码:aA、255.255.0.0B、255.255.255.0C、255.240.248.0D、255.248.240.012、在每一个自治系统中,都指定一个或多个路由器负责收集并向与此自治系统相连接的 a发送本自治系统中各个网络的可达性信息aA、路由器B、核心路由器C、交换机D、服务器13、在同一自治系统中实现路由器之间自动传播可达信息、进行路由选择的协议称为。cA、EGPB、BGPC、IGPD、GGP14、RIPvl中规定活动节点每隔 秒广播一轮其当前路由表中的路由信息。dA、60B、120C、180D、3015、RIPvl中规定被动节点在学到一个路由后要立即开始计时,

33、在 秒之内,如果一直没有再次得到关于此路由的广播,则放弃此路由。bA、160B、180C、30D、6016、RIPvl 和 RIPv2 的区别:dA、支持更多IP地址数B、通过传递子网掩码扩展了对于子网路由的支持C、规定的最大跳数不同D、以上都不对17、下列对OSPF描述错误的是:eA、提供路由服务类型:如可要求低延迟或高吞吐量,路由时不仅依据路由目的,还要依据服务类型要求B、提供负载均衡:如果到某个目的机具有多个具有相同代价的路径,OSPF将均分负载给各个路径C、提供网络的“域”划分能力,个域对外部是透明的,因而可独立管理,这就提供了灵活的网络扩展能力,易于规模化D、规定路由器之间的信息交换

34、需要有授权,提高安全性。RIP中任意路由都可广播路由信息,易被利用。E、使用跳数来计算到墓地网络的距离。18、对网际控制协议(ICMP)描述错误的是:bA,ICMP封装在IP 数据报的数据部分B、ICMP消息的传输是可靠的C、一般不把ICMP作为高层协议,而只作为IP必需的一个部分。D、ICMP不是在物理层进行传送的19、对 UDP数据报描述不正确的是:dA、是无连接的B、是不可靠的C、不提供确认D、提供消息反馈20、对客户-服务器模式描述不正确的是:aA、服务器通过网络接收请求,并进而提供服务返回给请求者B、不同节点完成近乎形同功能的两个程序C、向服务器发送请求并等待相应的程序都可称为客户D

35、、客户机程序可以利用服务器节点上现有的资源21、DNS服务器进行查询时,可以有三种方式:A、递归查询方式、重复查询方式、逆向查询方式B、递归查询方式、触发更新查询方式、逆向查询方式C、重复查询方式、逆向查询方式、触发更新查询方式D、递归查询方式、重复查询方式、触发更新查询方式22、TELNET通过TCP/IP协议模块在客户机和远程登录服务器之间建立一个:AA、UDPB、ARPC、TCPD、RARP23、TFTP在传输文件时,每个传输文件为固定的。dA、256KB、54KC、128KD、512K24、简单网络管理协议工作在 层,使用 层协议进行通信。bA、传输层、网络层B、应用层、传输层C、会话

36、层、传输层D、应用层、网络层25、MIME的目的A、为允许在EMAIL中传送非ASCH数据。B、为使用新的EMAIL帐号C、为获得邮件传输的身份认证D、为设置收件箱收发邮件26、TCP/IP协议组中,传输层协议中 a 是面向连接的,d 是面向非连接的A:TCP B:IPX C:ARP D:UDP E:NETBIOS27、以下哪些协议属于路由协议?abf A:BGP B:RIP C:ICMP D:H323 E:802.lx F:OSPF28、TCP/IP中,一个c 类网能带多少台主机?A:255 B:522 C:1024 D:2048 E:以上都不是三.判断题:(共 10题,每 题 1分 合 计

37、:10)1、IP 负责数据交互的可靠性(x)2、传输层的主要功能是负责主机到主机的端对端的通信()3、用户数据报协议提供可靠的数据交互服务,且不进行差错检验(x)4、应用层提供TCP/IP应用协议以及应用程序的编程接口 N)5、普通文件传输协议(TFTP)使用UDP服 务 H)6、1P多播地址只能用于源地址,而不能为目的地址。(x)7、1CMP不能为多播报告出错消息。()8、在传输层目前,较小的端口号多址定给一些众所周知的服务,较大的留给应用程序。()9、只要一个内核中实现了 TCP/IP协议的操作系统,就可以成为TCP/IP网络操作系统()10、DHCP协议数据封装在TCP中。()四.简 答

38、 题(共 10题,每题3 分 合 计:30分)1、在 TCP/IP中,数据报一旦被分片,则在到达目的主机之前就一直以单独的数据报存在,在到达主机后,才组合成原始的数据报。简述这样做的优缺点。解答:1)包文需要分片,2)又需要组装,3)增加了开销和复4)杂度!5)包文分片到组合过程中容易丢包、出错2、已由网络设备的物理地址(网卡地址、MAC地址)作为最底层通信地址,为何还要IP地址?3、为何要做子网划分?解答:为了节约ip地址4、简述子网划分的般步骤。5、初始化路由表可能有几种方式?6、最短路径优先法和矢量距离法的比较。入 简 述 VD算法所致慢收敛问题的解决方案。8、简述建立TCP连接三次握手

39、的三个步骤。解答:1)请 求 端(通常称为客户)发送一个S Y N 段指明客户打算连接的服务器的端口,以及初始 序 号(IS N)S Y N 段为报文段1。2)服务器发回包含服务器的初始序号的S Y N 报 文 段(报文段2)作为应答。同时,将确认序号设置为客户的IS N 加 1 以对客户的S Y N 报文段进行确认。一个S Y N 将占用一个序号。3)客户必须将确认序号设置为服务器的I S N 加 1 以对服务器的S Y N 报文段进行确认(报文段 3)。这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)另外:建立一个连接需要三次握手,而终止-个连接

40、要经过4 次握手。这山T C P 的半关闭(h alf-c lo s e)造成的。既然一个T C P 连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个F IN 来终止这个方向连接。当一端收到一个F I N,它必须通知应用层另一端几经终止了那个方向的数据传送。发送F I N 通常是应用层进行关闭的结果。9、简述BOOTP请求和响应过程:客户-服务器模式。10、简述SMTP中客户和服务期间的通信过程。11、hub和交换机以及路由器别是什么?功能有哪些区别?分别在哪个层次上面实现的?12、CSMA/CD的原理和具体实现过

41、程:解答:概括成四句话:先听后发,边发边听,冲突停止,随机延时后重发。具体过程:1 当个站点想要发送数据的时候,它检测网络察看是否有其他站点正在传输,即侦听信道是否空闲.2 如果信道忙,则等待,直到信道空闲.3 如果信道闲,站点就传输数据.4 在发送数据的同时,站点继续侦听网络确信没有其他站点在同时传输数据.因为有可能两个或多个站点都同时检测到网络空闲然后几乎在同一时刻开始传输数据.如果两个或多个站点同时发送数据,就会产生冲突.5 当一个传输节点识别出一个冲突,它就发送一个拥塞信号,这个信号使得冲突的时间足够长,让其他的节点都有能发现.6 其它节点收到拥塞信号后,都停止传输,等待一个随机产生的

42、时间间隙(回退时间BackoffTime)后重发.13、IP地址如何分类?A:0 7 24 B:10 14 16C:11021 8 D:111028 E:11110 2714、Ping操作有哪些报文?解答:Icmp:request answer15、IPV6跟 IPV4的主要区别,16、改变的原因?17、18、IPV4地址不19、够用的解决办法有哪些?分别的原理是什么?解答:了网技术和VLSM(可变长)技术VLSM(Variable Length Subnet Mask面试经典试题1 编程基础1.1 基本概念1.的理解:const char*,char const*,char*const的区别

43、问题几乎是C+面试中每次 都会有的题目。事实上这个概念谁都有只是三种声明方式非常相似很容易记混。Bjarne在他的 The C+Programming Language里面给出过一个助记的方法:把一个声明从右向左读。constchar*const cp;(*读成 pointer to)cp is a const pointer to charconst char*p;p is a pointer to const char;char const*p;同上因为C+里面没有const*的运算符,所以const只能属于前面的类型。2.指针cint*pn;-指针数组,每个元素均为指向整型数据的指针。i

44、nt(*)pn;-p 为指向-维数组的指针,这个一维数组有n 个整型数据。int*p();-函数带回指针,指针指向返回的值。int(*)p();-p 为指向函数的指针。3.数组越界问题下面这个程序执行后会有什么错误或者效果:/define MAX 255int main()(unsigned char AMAX,i;for(i=0;i=MAX;i+)A=i;)解答:MAX=255,数组A 的下标范围为O.MAX-l,这是其一,其 二 当 i 循环到255时,循环内执行:A255=255;这句本身没有问题,但是返回for(i=0;iv=MAX;i+)语句时,由于unsignedchar的取值范围

45、在(O.255),i+以后i 又为0 了.无限循环下去.注:char 类型为一个字节,取值范围是-128,127,unsigned char 0,2554.和 strepy 的根本区别?C+:memset,memcpy#include memory.hmemset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为一或0;例:char a100;memset(a,O,sizeof(a);mcmcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:chara100,b50;memcpy(b,a,sizeof(b);注意如用 sizeof(a),会

46、造成 b 的内存地址溢出。strepy就只能拷贝字符串了,它遇到0就结束拷贝;例:char a100,b50;strcpy(a,b);如用strcpy(b,a),要注意a 中的字符串长度(第个)(T之前)是否超过50位,如超过,则会造成b 的内存地址溢出。strcpy原型:extern char*strcpy(char*dest,char*src);用法:#include功能:把 src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:extern voi

47、d*memcpy(void*dest,void*src,unsigned int count);用 法:#include功能:由 src所指内存区域复制count个字节到dest所指内存区域。说明:src利 dest所指内存区域不能重叠,函数返回指向dest的指针。Memset原型:extern void*memset(void*buffer,char c,int count);用法:#include功能:把 buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。5.是干什么用的ASSERT。ASSERT。是一个调试程序时经常使用的宏,在程序运行时它计算括

48、号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n 在程序中不应该为0,如果为0 可能导致错误,你可以这样写程序:ASSERT(n!=0);k=10/n;ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。assert。的功能类似,它是ANSI C 标准中规定的函数,它与ASSERT的个重要区别是可以用在Release版本中。6.(pause);系统的暂停程序,按任意键继续,屏幕会打印,按

49、任意键继续。省去 了使用 getchar();system7.请问C+的类和C 里面的struct有什么区别?C+中的类具有成员保护功能,并且具有继承,多态这类。特点,而 c 里的struct没有8.请讲一讲析构函数和虚函数的用法和作用?析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。知识在类对象生命期结束的时候,由系统自动调用释放在构造函数中分配的资源。这种在运行时,能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。另:析构函数般在对象撤消前做收尾工作,比如回收内存等工作,虚拟函数的功能是使子类可以用同名的函数对父类函数进行重载,并且在调用时自动调

50、用子类重载函数,如果是纯虚函数,则纯粹是为了在子类重载时有个统一的命名而已。9.全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?全局变量的生命周期是整个程序运行的时间,而局部变量的生命周期则是局部函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法。全局变量在main函数调用后,就开始分配,如果是静态变量则是在main函数前就己经初始化了。而局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)1 0.是多少尉的系统?在数据总线上是怎么实现的?80868086系统是16位系统,其数据总线是20位。1.2 程序设计1.编写用C 语言实现

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com