华为软件笔试题.docx
- 文档编号:11215927
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:55
- 大小:48.68KB
华为软件笔试题.docx
《华为软件笔试题.docx》由会员分享,可在线阅读,更多相关《华为软件笔试题.docx(55页珍藏版)》请在冰点文库上搜索。
华为软件笔试题
华为软件笔试题
一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)
1、有数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。
()
2、int(*ptr)(),则ptr是一维数组的名字。
()
3、指针在任何情况下都可进行>,<,>=,<=,==运算。
()
4、switch(c)语句中c可以是int,long,char,float,unsignedint类型。
()
5、#defineprint(x)printf("theno,"#x",is")
二、填空题(共30分)
1、在windows下,写出运行结果,每空2分,共10分。
charstr[]="Hello";
char*p=str;
intn=10;
sizeof(str)=()
sizeof(p)=()
sizeof(n)=()
voidfunc(charstr[100])
{}
sizeof(str)=()
2、voidsetmemory(char**p,intnum)
{*p=(char*)malloc(num);}
voidtest(void)
{char*str=NULL;
getmemory(&str,100);
strcpy(str,"hello");
printf(str);
}
运行test函数有什么结果()10分
3、设intarr[]={6,7,8,9,10};
int*ptr=arr;
(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
()10分
二、编程题(第一小题20,第二小题30分)
1、不使用库函数,编写函数intstrcmp(char*source,char*dest)
相等返回0,不等返回-1;
2、写一函数intfun(char*p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1
(1)什么是预编译,何时需要预编译:
答案:
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
(2)char*constpcharconst*pconstchar*p上述三个有什么区别
答案:
char*constp;7。
请问以下代码有什么问题:
intmain(){chara;char*str=&a;strcpy(str,"hello");printf(str);return0;}答案:
没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
8。
char*s="AAA";printf("%s",s);s[0]='B';printf("%s",s);有什么错答案:
"AAA"是字符串常量。
s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosntchar*s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
9。
写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
答案:
.#defineMin(X,Y)((X)>(Y)(Y):
(X))321fb=a^b;a=a^b;ora^=b^=a;
和c++中的struct有什么不同答案:
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。
c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private
18.#include<>#include<>voidgetmemory(char*p){p=(char*)malloc(100);strcpy(p,"helloworld");}intmain(){char*str=NULL;getmemory(str);printf("%s/n",str);free(str);return0;}答案:
程序崩溃,getmemory中的malloc不能返回动态内存,free()对str操作很危险
[10];产生什么结果为什么答案:
长度不一样,会造成非法的OS
20.列举几种进程的同步机制,并比较其优缺点。
答案:
原子操作信号量机制自旋锁管程,会合,分布式系统
21.进程之间通信的途径答案:
共享存储系统消息传递系统管道:
以文件系统为基础
22.进程死锁的原因答案:
资源竞争及进程推进顺序非法
23.死锁的4个必要条件答案:
互斥、请求保持、不可剥夺、环路
24.死锁的处理答案:
鸵鸟策略、预防策略、避免策略、检测与解除死锁
25.操作系统中进程调度策略有哪几种答案:
FCFS(先来先服务),优先级,时间片轮转,多级反馈
26.类的静态成员和非静态成员有何区别答案:
类的静态成员每个类只有一个,非静态成员每个对象一个
27.纯虚函数如何定义使用时应注意什么答案:
virtualvoidf()=0;是接口,子类必须要实现
28.数组和链表的区别答案:
数组:
数据顺序存储,固定大小连表:
数据可以随机存储,大小可动态改变
的七层模型是什么tcp/udp是属于哪一层tcp/udp有何优缺点答案:
应用层表示层会话层运输层网络层物理链路层物理层tcp/udp属于运输层TCP服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。
由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。
tcp:
提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好udp:
不提供稳定的服务,包头小,开销小
30:
(void*)ptr和(*(void**))ptr的结果是否相同其中ptr为同一个指针答案:
.(void*)ptr和(*(void**))ptr值是相同的
31:
intmain(){intx=3;printf("%d",x);return1;}问函数既然不会被其它函数调用,为什么要返回1答案:
mian中,c标准认为0表示成功,非0表示错误。
具体的值是某中具体出错信息
32,要对绝对地址0x100000赋值,我们可以用(unsignedint*)0x100000=1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做答案:
*((void(*)())0x100000)();首先要将0x100000强制转换成函数指针,即:
(void(*)())0x100000然后再调用它:
*((void(*)())0x100000)();用typedef可以看得更直观些:
typedefvoid(*)()voidFuncPtr;*((voidFuncPtr)0x100000)();
33,已知一个数组table,用一个宏定义,求出数据的元素个数答案:
#defineNTBL#defineNTBL(sizeof(table)/sizeof(table[0]))
34。
线程与进程的区别和联系线程是否具有相同的堆栈dll是否有独立的堆栈答案:
进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。
每个线程有自己的堆栈。
DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。
因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃
35。
unsignedshortA=10;printf("~A=%u\n",~A);charc=128;printf("c=%d\n",c);输出多少并分析过程答案:
第一题,~A=0xfffffff5,int值第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。
这两道题都是在考察二进制向int或uint转换时的最高位处理。
(二)
2,7,28,,126请问28和126中间那个数是什么为什么答案:
第一题的答案应该是4^3-1=63规律是n^3-1(当n为偶数0,2,4)n^3+1(当n为奇数1,3,5)
2.用两个栈实现一个队列的功能要求给出算法和思路!
答案:
设2个栈为A,B,一开始均为空.入队:
将新元素push入栈A;出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O
(1),比上面的几种方法要好。
3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么答案:
函数名:
atol功能:
把字符串转换成长整型数用法:
longatol(constchar*nptr);程序例:
#include<>#include<>intmain(void){longl;char*str="";l=atol(lstr);printf("string=%sinteger=%ld\n",str,l);return(0);}
4。
对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现答案:
c用宏定义,c++用inline
5。
直接链接两个信令点的一组链路称作什么答案:
PPP点到点连接
7。
软件测试都有那些种类答案:
黑盒:
针对系统功能的测试白合:
测试函数功能,各函数接口
8。
确定模块的功能和模块的接口是在软件设计的那个队段完成的答案:
概要设计阶段
9。
enumstring{x1,x2,x3=10,x4,x5,}x;问x;答案:
取值在0。
1。
10。
11。
12中的一个
10。
unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;请问p1+5=;p2+5=;答案:
801005;810014。
不要忘记了这个是16进制的数字,p2要加20变为16进制就是14选择题:
链接到Internet用到以下那个协议;;;;.属于网络层协议的是:
消息调度机制是:
A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;答案:
b,a,c
四.找错题:
1.请问下面程序有什么错误inta[60][250][1000],i,j,k;for(k=0;k<=1000;k++)for(j=0;j<250;j++)for(i=0;i<60;i++)a[i][j][k]=0;答案:
把循环语句内外换一下
2。
以下是求一个数的平方的程序,请找出错误:
#defineSQUARE(a)((a)*(a))inta=5;intb;b=SQUARE(a++);答案:
这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了3。
typedefunsignedcharBYTEintexamply_fun(BYTEgt_len;BYTE*gt_code){BYTE*gt_buf;gt_buf=(BYTE*)MALLOC(Max_GT_Length);......if(gt_len>Max_GT_Length){returnGT_Length_ERROR;}.......}答案:
要释放内存问答题:
的原理是什么答案:
IP通信建立的过程怎样,端口有什么作用答案:
三次握手,确定是哪个应用程序使用该协议(三)
1、局部变量能否和全局变量重名答案:
能,局部会屏蔽全局。
要用全局变量,需要使用":
:
"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内
2、如何引用一个已经定义过的全局变量答案:
extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错
3、全局变量可不可以定义在可被多个.C文件包含的头文件中为什么答案:
可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
4、语句for(;1;)有什么问题它是什么意思答案:
和while
(1)相同。
5、do……while和while……do有什么区别答案:
前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容#include<>main(){inta,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:
%d,%d,%d",b,c,d);return0;}答案:
10,12,120a=10;b=a++;10c12c面最大的变量类型是int[5],占用20个字节.所以它的大小是20data是一个struct,每个变量分开占用空间.依次为int4+DATE20+double8=32.所以结果是20+32=52.当然...在某些16位编辑器下,int可能是2字节,那么结果是int2+DATE10+double8=20
4、队列和栈有什么区别
答案:
队列先进先出,栈后进先出÷
5、这道题目出错了,这里就不写上了。
6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。
答案:
slnodetype*Delete(slnodetype*Head,intkey){}中if(Head->number==key){Head=Pointer->next;free(Pointer);break;}Back=Pointer;Pointer=Pointer->next;if(Pointer->number==key){Back->next=Pointer->next;free(Pointer);break;}voiddelete(Node*p){if(Head=Node)while(p)}
7、请找出下面代码中的所以错误说明:
以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
1、#include""2、main()3、{4、char*src="hello,world";5、char*dest=NULL;6、intlen=strlen(src);7、dest=(char*)malloc(len);8、char*d=dest;9、char*s=src[len];10、while(len--!
=0)11、d++=s--;12、printf("%s",dest);13、return0;14、}答案:
还要加上#include<>intmain(){char*src="hello,world";intlen=strlen(src);char*dest=(char*)malloc((len+1)*sizeof(char));OSI7层模型中,网络层的功能有()A.确保数据的传送正确无误B.确定数据包如何转发与路由C.在信道上传送比特流D.纠错与流控
使用的是___局域网技术。
()A.以太网;B.快速以太网;C.令牌环;D.令牌总线。
3.下面那种LAN是应用CSMA/CD协议的()A.令牌环和UDP协议的相似之处是()A.面向连接的协议B.面向非连接的协议C.传输层协议D.以上均不对5.应用程序PING发出的是___报文.()请求报文。
应答报文。
请求报文。
应答报文。
6.以下说法错误的是(多)()A.中继器是工作在物理层的设备B.集线器和以太网交换机工作在数据连路层C.路由器是工作在网络层的设备D.桥能隔离网络层广播
7.当桥接收的分组的目的MAC地址在桥的映射表中没有对应的表项时,采取的策略是()A.丢掉该分组B.将该分组分片C.向其他端口广播该分组D.以上答案均不对
在网络层次模型中的地位()A.物理层B.链路层C.网络层D.以上都不是
9.小于___的TCP/UDP端口号已保留与现有服务一一对应,此数字以上的端口号可自由分配。
().100C当一台主机从一个网络移到另一个网络时,以下说法正确的是()A.必须改变它的IP地址和MAC地址B.必须改变它的IP地址,但不需改动MAC地址C.必须改变它的MAC地址,但不需改动IP地址地址.IP地址都不需改动答案:
;;;;;;;;;.
华为笔试题(4)2006-09-3013:
00
1.找错voidtest1(){charstring[10];char*strcpy(string,str1);}答:
表面上并且编译都不会错误。
但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。
最好定义为charstring[11],这样最后一个元素可以存储字符串结尾符'\0';voidtest2(){charstring[10],str1[10];for(intI=0;I<10;I++){str1[I]='a';}strcpy(string,str1);}答:
strcpy使用错误,strcpy只有遇到字符串末尾的'\0'才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]='\0',这样就正常了。
voidtest3(char*str1){charstring[10];if(strlen(str1)<=10){strcpy(string,str1);}}答:
这又会出现第一道改错题的错误了。
strlen(str1)算出来的值是不包含结尾符'\0'的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了。
可将strlen(str1)<=10改为strlen(str1)<10。
2.找错#defineMAX_SRM256DSNget_SRM_no(){staticintSRM_no;intI;for(I=0;I
我不知道这段代码的具体功能,但明显有两个错误1,SRM_no没有赋初值2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。
这里应该去掉static声明。
3.写出程序运行结果intsum(inta){autointc=0;staticintb=3;c+=1;b+=2;return(a+b+c);}voidmain(){intI;inta=2;for(I=0;I<5;I++){printf("%d,",sum(a));}}答:
8,10,12,14,16该题比较简单。
只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。
(inta){intb;switch(a){case1:
b=30;case2:
b=20;case3:
b=16;default:
b=0;}returnb;}则func
(1)=答:
func
(1)=0,因为没有break语句,switch中会一直计算到b=0。
这是提醒我们不要忘了break。
呵呵。
5:
inta[3];a[0]=0;a[1]=1;a[2]=2;int*p,*q;p=a;q=&a[2];则a[q-p]=答:
a[q-p]=a[2]=2;这题是要告诉我们指针的运算特点
6.定义int**a[3][4],则变量占有的内存空间为:
_____答:
此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为3×4×4=48。
7.编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。
如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
答:
/*输入年月日时分秒,输出年月日时分秒的下一秒,输出仍然在原内存空间*/voidNextMinute(int*nYear,int*nMonth,int*nDate,int*nHour,int*nMinute,int*nSecond){intnDays;(*nSecond)++;分电路,RISC3.数据链路层
二填空10个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理,网络,数字信号处理有关于
.二极管三简答
(t)的傅立叶变换为X(jw)=$(w)+$(w-PI)+$(w-5)h(t)=u(t)-u(t-2)问:
(1),x(t)是周期的吗
(2),x(t)*h(t)是周期的吗(3),两个非周期的信号卷积后可周期吗2.简述分组交换的特点和不足四分析设计1.波形变换题目从正弦波->方波->锯齿波->方波,设计电路计数器组成计数电路,分析几进制的3.用D触发器构成2分频电路4.判断MCS-51单片机的指令正确还是错误,并指出错误原因
(1)MULR0,R1
(2)MOVA,@R7(3)MOVA,#3000H(4)MOVC@A+DPTR,A(5)LJMP#1000H()单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,的输出频率MOVTMOD,#01HSETBTR0LOOP:
MOVTH0,#0B1HMOVTL0,#0E0HLOOP1:
JNBTF0,
华为硬件面试题2006-09-3013:
02 全都是几本模电数电信号单片机题目
1.用与非门等设计全加法器
2.给出两个门电路让你分析异同
3.名词:
sram,ssram,sdram
4.信号与系统:
在时域与频域关系
5.信号与系统:
和4题差不多
6.晶体振荡器,好像是给出振荡频率让你求周期(应该是单片机的,12分之一周期.. ..)
7.串行通信与同步通信异同,特点,比较
232c高电平脉冲对应的TTL逻辑是(负逻辑)
9.延时问题,判错
10.史密斯特电路,求回差电压
是什么,什么参数(压控振荡器)
12.用D触发器做个二分颦的电路.又问什么是状态图
13.什么耐奎斯特定律,怎么由模拟信号转为数字信号
14.用D触发器做个4进制的计数
15.那种排序方法最快
一、研发(软件)
用C语言写一个递归算法求N!
; 给一个C的函数,关于字符串和数组,找出错误; 防火墙是怎么实现的 你对哪方面编程熟悉
硬件:
1、继电器控制电路。
2、SDRAM是怎么工作的3、写出逻辑表达式说明A2A1A0大于B2B1B0。
4、常用触发器有几种5、示波器有几种触发方式,举出三种
华为3COM数据通信工程师试题2006-09-2918:
53
协商答案:
12个包协商,先H225然后H245,需要注意的是面试官可能会问到跟SIP的比较
2ipsec为什么是三层的。
L2tp为什么是二层的答案:
IPSec(Internet协议安全)是一个工业标准网络安全协议,为IP网络通信提供透明的安全服务,保护TCP/IP通信免遭窃听和篡改,可以有效抵御网络攻击,同时保持易用性。
IPSec有两个基本目标:
1)保护IP数据包安全;2)为抵御网络攻击提供防护措施。
第三层保护的优点 通常IPSec提供的保护需要对系统做一定的修改。
但
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 软件 笔试