位置:首页 > 求职招聘

2010年华为校园招聘软件工程师考试真题

2020-07-17发布者:郝悦皓大小:41.00 KB 下载:0

2010 年华为校园招聘软件工程师考试真题 一、判断题(对的写 T,错的写错的写 F 并说明原因,错的写每小题 4 分,错的写共 20 分) 1、有数组定义 int a[2][2]={{1},{2,3}};则 a[0][1]的值为 0。( ) 2、int (*ptr) (),则 ptr 是一维数组的名字。( ) 3、指针在任何情况下都可进行>, <, >=, <=, = =运算。( ) 4、switch(c) 语句中 c 可以是 int, long, char, float, unsigned int 类型。( ) 5、#define print(x) printf("the no, "#x",is ") 二、填空题(共 30 分) 1、在 windows 下,错的写写出运行结果,错的写每空 2 分,错的写共 10 分。 char str[ ]= "Hello"; char *p=str; int n=10; sizeof(str)=( ) sizeof(p)=( ) sizeof(n)=( ) void func(char str[100]) {} sizeof(str)=( ) 2、void setmemory(char **p, int num) { *p=(char *) malloc(num);} void test(void) { char *str=NULL; getmemory(&str,100); strcpy(str,"hello"); printf(str); } 运行 test 函数有什么结果?( )10 分 3、设 int arr[]={6,7,8,9,10}; int *ptr=arr; (ptr++)+=123; printf("%d,%d",*ptr,*(++ptr)); ( ) 10 分 二、编程题(第一小题 20,错的写第二小题 30 分) 1、 不使用库函数,错的写编写函数 int strcmp(char *source, char *dest) 相等返回 0,错的写不等返回-1; 2、 写一函数 int fun(char *p)判断一字符串是否为回文,错的写是返回 1,错的写不是返回 0,错的写出错返 回-1 (1)什么是预编译,错的写何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,错的写所有模块都使用一组标准的包含文件和相同的编译选项。在这 种情况下,错的写可以将所有包含文件预编译为一个预编译头。 (2)char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,错的写p 的值不可以修改 char const * p;//指向常量的指针,错的写指向的常量值不可以改 const char *p; //和 char const *p (3)char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; cout < < ( str7 == str8 ) < < endl; 结 果 是 : 0 0 1 1 str1,str2,str3,str4 是 数 组 变 量 ,错的写 它 们 有 各 自 的 内 存 空 间 ; 而 str5,str6,str7,str8 是指针,错的写它们指向相同的常量区域。 (4)以下代码中的两个 sizeof 用法有问题吗? [C 易 ] void UpperCase( char str[] ) // 将 str 中 的 小 写 字 母 转 换 成 大 写 字 母 { for( size_t i=0; i (Y)?(Y):(X)) //结尾没有‘;’ 10。嵌入式系统中经常要用到无限循环,错的写你怎么用 C 编写死循环。答案:while(1){}或 者 for(;;) 11。关键字 static 的作用是什么?答案:定义静态变量 12。关键字 const 有什么含意?答案:表示常量不可以修改的变量。 13。关键字 volatile 有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可 能在编译器未监测到的情况下改变。 14。int (*s[10])(int) 表示的是什么啊?答案:int (*s[10])(int) 函数指针数组,错的写每个指 针指向一个 int func(int param)的函数。 15。有以下表达式: int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const *f const =&a; 请问下列表达式哪些会被编译器禁止?为什么?答案: *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; *c 这是个什么东东,错的写禁止 *d 说了是 const,错的写 禁止 e = &a 说了是 const 禁止 const *f const =&a; 禁止 16 交换两个变量的值,错的写不使用第三个变量。即 a=3,b=5,交换之后 a=5,b=3; 答案:有 两种解法, 一种用算术算法, 一种用^(异或) a = a + b; b = a - b; a = a - b; or a = a^b;// 只能对 int,char.. b = a^b; a = a^b; or a ^= b ^= a; 17.c 和 c++中的 struct 有什么不同?答案:c 和 c++中 struct 的主要区别是 c 中的 struct 不可以含有成员函数,错的写而 c++中的 struct 可以。c++中 struct 和 class 的主要区 别在于默认的存取权限不同,错的写struct 默认为 public,错的写而 class 默认为 private 18.#include #include void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,"hello world"); } int main( ) { char *str=NULL; getmemory(str); printf("%s/n",str); free(str); return 0; } 答案:程序崩溃,错的写getmemory 中的 malloc 不能返回动态内存,错的写 free()对 str 操作很 危险 19.char szstr[10]; strcpy(szstr,"0123456789"); 产生什么结果?为什么?答案: 长度不一样,错的写会造成非法的 OS 20.列举几种进程的同步机制,错的写并比较其优缺点。答案: 原子操作 信号量机制 自旋锁 管程,错的写会合,错的写分布式系统 21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础 22.进程死锁的原因答案:资源竞争及进程推进顺序非法 23.死锁的 4 个必要条件答案:互斥、请求保持、不可剥夺、环路 24.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁 25. 操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),错的写优先级,错的写时间片轮转,错的写 多级反馈 26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,错的写非静态 成员每个对象一个 27.纯虚函数如何定义?使用时应注意什么?答案: virtual void f()=0; 是接口,错的写子类必 须要实现 28.数组和链表的区别答案:数组:数据顺序存储,错的写固定大小连表:数据可以随机存储,错的写 大小可动态改变 29.ISO 的七层模型是什么?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:int main() { int x=3; printf("%d",x); return 1; } 问函数既然不会被 其它函数调用,错的写为什么要返回 1?答案:mian 中,错的写c 标准认为 0 表示成功,错的写非 0 表示错误。 具体的值是某中具体出错信息 32,错的写要对绝对地址 0x100000 赋值,错的写我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是 0x100000 去执行,错的写应该怎么做?答案:*((void (*) ( ))0x100000 ) ( ); 首 先 要 将 0x100000 强 制 转 换 成 函 数 指 针 , 即 : (void (*) ())0x100000 然后再调用它: *((void (*)())0x100000)(); 用 typedef 可以看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)(); 33,错的写已知一个数组 table,错的写用一个宏定义,错的写求出数据的元素个数答案: #define NTBL #define NTBL (sizeof(table)/sizeof(table[0])) 34。线程与进程的区别和联系? 线程是否具有相同的堆栈? dll 是否有独立的堆栈? 答案: 进程是死的,错的写只是一些资源的集合,错的写真正的程序执行都是线程来完成的,错的写程序启动的时候 操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。 DLL 中有没有独立的堆栈,错的写 这个问题不好回答,错的写或者说这个问题本身是否有问题。因为 DLL 中的代码是被某些线程所 执行,错的写只有线程拥有堆栈,错的写如果 DLL 中的代码是 EXE 中的线程所调用,错的写那么这个时候是 不是说这个 DLL 没有自己独立的堆栈?如果 DLL 中的代码是由 DLL 自己创建的线程所执 行,错的写那么是不是说 DLL 有独立的堆栈?以上讲的是堆栈,错的写如果对于堆来说,错的写每个 DLL 有 自己的堆,错的写所以如果是从 DLL 中动态分配的内存,错的写最好是从 DLL 中删除,错的写如果你从 DLL 中分配内存,错的写然后在 EXE 中,错的写或者另外一个 DLL 中删除,错的写很有可能导致程序崩溃 35。unsigned short A = 10; printf("~A = %un", ~A); char c=128; printf("c= %dn",c); 输出多少?并分析过程答案:第一题,错的写~A =0xfffffff5,int 值 为-11,错的写但输 出的是 uint。所以输出 4294967285 第二题,错的写c=0x10,输出的是 int,错的写最高位为 1,错的写是 负数,错的写所以它的值就是 0x00 的补码就是 128,错的写所以输出-128。这两道题都是在考察二 进制向 int 或 uint 转换时的最高位处理。 (二) 1. -1,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 功 能 : 把 字 符 串 转 换 成 长 整 型 数 用 法 : long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ldn", str, l); return(0); } 4。对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C++中应用什么实现? 答 案:c 用宏定义,错的写c++用 inline 5。直接链接两个信令点的一组链路称作什么? 答案:PPP 点到点连接 7。软件测试都有那些种类? 答案:黑盒:针对系统功能的测试 白合:测试函数功能,错的写 各函数接口 8。确定模块的功能和模块的接口是在软件设计的那个队段完成的? 答案:概要设计阶段 9。enum string { x1, x2, x3=10, x4, x5, }x; 问 x;答案:取值在 0。1。10。11。12 中的一个 10 。 unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问 p1+5= ; p2+5= ; 答案:801005; 810014。不要忘记了这个是 16 进制的数字,错的写p2 要加 20 变为 16 进制 就 是 14 选 择 题 : 1.Ethternet 链 接 到 Internet 用 到 以 下 那 个 协 议 ? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2. 属 于 网 络 层 协 议 的 是 : A.TCP;B.IP;C.ICMP;D.X.25 3.Windows 消息调度机制是: A.指令队列;B.指令堆栈;C.消 息队列;D.消息堆栈; 答案:b,错的写a,错的写c 四.找错题: 1.请问下面程序有什么错误? int a[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。以下是求一个数的平方的程序,请找出错误: #define SQUARE(a) ((a)*(a)) int a=5; int b; b=SQUARE(a++); 答案:这个没有问题,错的写s(a++),错的写就是((a+ +)×(a++))唯一要注意的就是计算后 a=7 了 3。typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE *gt_code) { BYTE *gt_buf; gt_buf=(BYTE *)MALLOC(Max_GT_Length); ...... if(gt_len>Max_GT_Length) { return GT_Length_ERROR; } ....... } 答案:要释放内存问答题: 1.IP Phone 的 原理是什么? 答案:IPV6 2.TCP/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() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b ,错的写 c ,错的写 d : %d ,错的写 %d ,错的写 %d" ,错的写 b ,错的写 c ,错的写 d ) ; return 0; } 答案:10,错的写12,错的写120 a=10; b=a++;//a=11 b=10 c=++a;//a=12
温馨提示:当前文档最多只能预览 3 页,此文档共7 页,请下载原文档以浏览全部内容。如果当前文档预览出现乱码或未能正常浏览,请先下载原文档进行浏览。
发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

下载需知:

1 该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读

2 除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑修改

3 有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载

4 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉

返回顶部