华为面试题及答案.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流华为面试题及答案.精品文档.2000年的一次华为面试题及答案华为这个公司就不介绍了,前面帖子贴出过一套它的笔试题,这次是几道面试题,我能查到的资料表明该套面试题出于2000年底,也比较古老吧。其实今天(2005年11月14日)我正好也参加了华为的面试,共面完全部四轮,第一二轮是问技术问题(我报得软件研发),第三轮面的个性方面,最有意思的是第四轮,在我吃完它提供的午餐,和同桌的美眉聊完了天,趴在桌子上睡了一觉,醒来和其他学生又瞎侃了一通到没话说后,终于叫我去第四面,结果只用了两分钟,3个对话。hr:工资你了解吧,觉得怎么样?我:还可以hr:有女朋友没?我:没有hr:在深圳工作有问题没?我:没有然后就让我走人,hr的意思是要我还是敷衍几句拒我,不得而知。不管这么多了,让我们来看看别人在2000年面试的时候华为都问了些什么吧。问我些什么保密。哈哈。 1请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。答:OSI七层网络结构图应用层 表示层 会话层 传输层 网络层 数据链路层物理层TCP/IP的五层结构图应用层运输层网络层 数据链路层物理层 2请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?答:IP是Internet Protocol的简称,是网络层的主要协议,作用是提供不可靠、无连接的数据报传送。TCP是Transmit Control Protocol(传输控制协议)的缩写,在运输层,TCP提供一种面向连接的,可靠的字节流服务;UDP是User Datagram Protocol(用户数据报协议)的缩写,在运输层,UDP提供不可靠的传输数据服务 3请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?答:交换机属于第二层即数据链路层设备。它根据地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。路由器属于第三层即网络层设备,它根据地址进行寻址,通过路由表路由协议产生。交换机最大的好处是快速,路由器最大的好处是控制能力强。 4请问C+的类和C里面的struct有什么区别?答:struct的成员的默认访问说明符为Public,而class的成员的默认访问说明符为Private。其他没有区别 插播广告:版权所有:朱科 欢迎光临我的网站:,各位转贴别删,劳动成果啊5请讲一讲析构函数和虚函数的用法和作用。答:析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。虚函数是指被关键字virtual说明的函数,作用是使用C+语言的多态特性 6全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量在整个程序中都是可见的,它们称为全局变量。一些变量只能在一个函数中可知,称为局部变量。这就是他们的区别。在任何函数外面定义的变量就是全局变量,在函数内部定义的变量是局部变量,这是它们在程序中的实现过程。操作系统和编译器是根据程序运行的内存区域知道他们的,程序的全局数据放在所分配内存的全局数据区,程序的局部数据放在栈区。 78086是多少位的系统?在数据总线上是怎么实现的?答:8086的机器字长是16位,8086使用40个引脚的16个做地址/数据复用引腿来传输数据,一次读写过程由一个基本总线周期完成,它由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。在T1期间8086发出访问目的地的地址信号和地址锁存选通信号ALE;T2期间发出读写命令信号RD、WR及其它相关信号;T3期间完成数据的访问;T4结束该总线周期。可见,地址与数据信号不会同时出现在一个时钟(CLK)周期,二者可以分时复用同一组引线。 其实今天面试我的技术问题也都是关于TCP/IP协议的,谁叫它是做这个的呢。 真正的华为笔试题及我的解答今天华为打电话说要给我Offer了,怎么报答他的Offer呢,嗯,做套真正的华为笔试题吧。特意提到是真正的华为笔试题,是因为前面我做的号称华为笔试题其实是别人公司的(前面的帖子有解释),下面的内容地球人都说是华为的,难道还不是它的么。哈哈。这些题目相比其他公司的试题,较为基础,全部为C语言,没有涉及C+,但如果不细心,是很难得到较高分数的。另外大家转贴不要去掉我的个人信息啊。互相宣传下网站嘛。1. 找错 void test1() char string10; char* str1="0123456789" strcpy(string, str1); 答:表面上并且编译都不会错误。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string11,这样最后一个元素可以存储字符串结尾符'0' void test2() char string10, str110; for(int I=0; I<10;I+) str1I ='a' strcpy(string, str1); 答:strcpy使用错误,strcpy只有遇到字符串末尾的'0'才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str19='0',这样就正常了。 void test3(char* str1) char string10; if(strlen(str1)<=10) strcpy(string, str1); 答:这又会出现第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符'0'的,如果str1刚好为10个字符1结尾符,string就得不到结尾符了。可将strlen(str1)<=10改为strlen(str1)<10。 2. 找错 #define MAX_SRM 256 DSN get_SRM_no() static int SRM_no; int I; for(I=0;I<MAX_SRM;I+,SRM_no+) SRM_no %= MAX_SRM; if(MY_SRM.state=IDLE) break; if(I>=MAX_SRM) return (NULL_SRM); else return SRM_no; 答:我不知道这段代码的具体功能,但明显有两个错误1,SRM_no没有赋初值2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。 3. 写出程序运行结果 int sum(int a) auto int c=0; static int b=3; c+=1; b+=2; return(a+b+c); void main() int I; int a=2; for(I=0;I<5;I+) printf("%d,", sum(a); 答:8,10,12,14,16该题比较简单。只要注意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。插播广告啦:版权所有:朱科 欢迎光临我的网站:,各位转贴别删,劳动成果啊4. int func(int a) int b; switch(a) case 1: b=30; case 2: b=20; case 3: b=16; default: b=0; return b; 则func(1)=?答:func(1)=0,因为没有break语句,switch中会一直计算到b=0。这是提醒我们不要忘了break。呵呵。 5: int a3; a0=0; a1=1; a2=2; int *p, *q; p=a; q=&a2; 则aq-p=?答:aq-p=a2=2;这题是要告诉我们指针的运算特点 6. 定义 int *a34, 则变量占有的内存空间为:_答:此处定义的是指向指针的指针数组,对于32位系统,指针占内存空间4字节,因此总空间为3×4×448。 7.编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。 答: /*输入年月日时分秒,输出年月日时分秒的下一秒,输出仍然在原内存空间*/void NextMinute(int *nYear,int *nMonth,int *nDate,int *nHour,int *nMinute,int *nSecond) int nDays; (*nSecond)+; / 秒加1 if(*nSecond>=60) / 秒满60,做出特殊处理,下面时,日,月等类同 *nSecond=0; (*nMinute)+; if(*nMinute>=60) *nMinute=0; (*nHour)+; if(*nHour>=24) *nHour=0; (*nDate)+; switch(*nMonth) case 1: case 3: case 5: case 7: case 8: case 10: case 12: nDays=31; break; case 2:/ 判断闰年 if(*nYear%400=0|*nYear%100!=0&&*nYear%4=0) nDays=29; else nDays=28; break; default: nDays=30; break; if(*nDate>nDays) *nDate=1; (*nMonth)+; if(*nMonth>12) *nMonth=1; (*nYear)+; /*示例可运行代码*/void main() int nYear=2004,nMonth=12,nDate=31,nHour=59,nMinute=59,nSecond=59; NextMinute(&nYear,&nMonth,&nDate,&nHour,&nMinute,&nSecond); printf("The result:%d-%d-%d %d:%d:%d",nYear,nMonth,nDate,nHour,nMinute,nSecond);