华为面试测试题.docx
《华为面试测试题.docx》由会员分享,可在线阅读,更多相关《华为面试测试题.docx(50页珍藏版)》请在冰豆网上搜索。
华为面试测试题
以下是华为2004年招收应届大学毕业生技术支持面试题。
笔试内容包括:
1。
技术试题:
系统windows/linux,网络基础,通信基础,数据库
2。
能力试题:
根据两故事发表看法
3。
英语作文
筛选后进入面试。
共有四轮面试:
问题一:
两笔记本电脑连起来后拼不通,你觉得可能有哪些问题?
问题二:
我们在南京,和深圳的网络是通的,但和北京的网络不通,你以怎样的顺序检查问题?
问题三:
解释什么叫“透明”?
什么叫“网格”?
问题四:
交换和路由的区别?
VLAN的特点?
问题五:
画一个积分电路和一个微分电路。
问题六:
知道现在的路由器是第几代了吗?
Q1:
请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?
Q2:
请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?
TCP与UDP呢?
Q3:
请问交换机和路由器分别的实现原理是什么?
分别在哪个层次上面实现的?
Q4:
请问C++的类和C里面的struct有什么区别?
Q5:
请讲一讲析构函数和虚函数的用法和作用?
Q6:
全局变量和局部变量有什么区别?
实怎么实现的?
操作系统和编译器是怎么知道的?
Q7:
一些寄存器的题目,主要是寻址和内存管理等一些知识。
Q8:
8086是多少尉的系统?
在数据总线上是怎么实现的?
华为面试题[称球问题]
华为面试题
问你一道题
13个球
其中有一个重量不一样,其他都一样!
用天平称
找出那个重量不一样的球!
只有三次称的机会!
注意:
不知道是重是轻
C语言解法(编译已经通过)
源程序以及编译后的程序
放在\\server\ball
下,请各位高人指教
#include
//初始化变量和数组
intball[12];
inta,b,num,i;
voidmain()
{
//赋特别球和普通球的重量
scanf("%d,%d,%d",&num,&a,&b);//num为特殊球号码a为特殊球值,b为普通球值
//循环赋值
for(i=1;i<=13;i++){
//如果球号为特殊球,不赋值
if(i==num){
ball[i]=a;
printf("特殊球%d重量为%d\r\n",i,a);
}else{
ball[i]=b;
printf("%d号普通球重量为%d\r\n",i,ball[i]);
}
}
//触发条件A:
1,2,3,4相加与5,6,7,8相加相等特殊球在剩余球中
//B:
1,2,3,4相加与5,6,7,8相加不等特殊球在1,2,3,4,5,6,7,8中
//第一种情况
if(ball[1]+ball[2]+ball[3]+ball[4]==ball[5]+ball[6]+ball[7]+ball[8])
{
if(ball[1]+ball[2]+ball[3]+ball[4]==ball[9]+ball[10]+ball[11]+ball[12])
{
printf("特殊球为13号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[13]);
return;
}
if(ball[1]+ball[2]+ball[3]+ball[4]!
=ball[9]+ball[10]+ball[11]+ball[12])
{
if(ball[1]+ball[2]+ball[3]==ball[9]+ball[10]+ball[11]){
printf("特殊球为12号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[12]);
return;
}
if(ball[1]+ball[2]==ball[9]+ball[10])
{
printf("特殊球为11号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[11]);
return;
}
if(ball[1]==ball[9])
{
printf("特殊球为10号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[10]);
return;
}
if(ball[1]!
=ball[9]){
printf("特殊球为9号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[9]);
return;
}
}
}
//第二种情况
if(ball[1]+ball[2]+ball[3]+ball[4]!
=ball[5]+ball[6]+ball[7]+ball[8])
{
//现在双有两种情况,特殊球可能在1,2,3,4中,也可能在5,6,7,8中
//先处理第一种情况,假定特殊球在1,2,3,4中,5,6,7,8为普通球
if(ball[5]==ball[9])
{
if(ball[1]+ball[2]+ball[3]==ball[5]+ball[6]+ball[7])
{
printf("特殊球为4号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[4]);
return;
}
if(ball[1]+ball[2]==ball[5]+ball[6])
{
printf("特殊球为3号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[3]);
return;
}
if(ball[1]==ball[5])
{
printf("特殊球为2号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[2]);
return;
}
if(ball[1]!
=ball[5])
{
printf("特殊球为1号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[1]);
return;
}
}
//处理第二种情况,假定特殊球在5,6,7,8中,1,2,3,4为普通球
if(ball[1]==ball[9])
{
if(ball[1]+ball[2]+ball[3]==ball[5]+ball[6]+ball[7])
{
printf("特殊球为8号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[8]);
return;
}
if(ball[1]+ball[2]==ball[5]+ball[6])
{
printf("特殊球为7号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[7]);
return;
}
if(ball[1]==ball[5])
{
printf("特殊球为6号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[6]);
return;
}
if(ball[1]!
=ball[5]){
printf("特殊球为5号球,重量为%d,俺不知道它轻了还是重了,只知道份量不一样\r\n",ball[5]);
return;
}
}
}
}
称球问题最经典的算法
前段时间大家突然很有兴致的讨论了称球问题,看这么久也没人找出好的解法来,用信息论知识来解简直太容易了,对于这个解法,这些都是一样的,很容易。
这种题有两个版本,一个是知道不同球是轻还是重,另一个是不知道轻还是重。
其实这样类似的还有很多题。
例如题:
现有n个外观一样的小球,其中有一个小球的重量与众不同(不知其轻重或者说知道轻或者重),请问最少称多少次一定可以将这个不同的球找出。
天平称重,有两个托盘比较轻重,加上托盘外面,也就是每次称重有3个结果,就是ln3/ln2比特信息。
n个球要知道其中一个不同的球,如果知道那个不同重量的球是轻还是重,找出来的话那就是n个结果中的一种,就是有ln(n)/ln2比特信息,如果不知道轻重,找出来就是2n(n个球中的一个,轻或者重,所以是2n)个结果中的一种,那就是ln(2n)/ln2比特信息。
假设我们要称k次,根据信息理论,那显然两种情况就分别有:
(1)k*ln3/ln2>=ln(n)/ln2,解得k>=ln(n)/ln3
(2)k*ln3/ln2>=ln(2n)/ln2(k>1)解得k>=ln(2n)/ln3
这是得到下限,可以很轻易证明满足条件的最小正整数k就是所求。
比如称3次知道轻重可以从3^3=27个球中找出不同的球出来,如果不知道轻重就只能从(3^3-1)/2=13个球中找出不同的球出来。
具体称法就不说了,其实真的理解了信息论里面的那不等式的等式成立条件就知道称法了,也就是要保证每次称的信息含量ln3/ln2。
可以看看相关的一个帖子:
BBS水木清华站∶精华区
发信人:
idle(回归线),信区:
GreatTurn
标题:
称小球问题终结----m次称出(3^m-1)/2个球的解法
发信站:
BBS水木清华站(SatJul2509:
10:
511998)
对于N(m)=(3^m-1)/2个小球,现在我们来寻求m次的解法。
首先,对于m=2的情况,相当于四个小球来称两次的情况,这个已经讨论过多次了,也很
简单,在此略去?
nbsp;
其次,若m?
lt;=k-1时,假定对于N(k-1)=(3^(k-1)-1)/2个球的情况我们都有解法。
现在来考虑m=k的情况。
第一次称取[3^(k-1)-1]个球放在天平天平两端,则:
如果平衡,获得[3^(k-1)-1]个标准球,坏球在剩下的[3^(k-1)+1]/2个中。
由于
[3^(k-1)-1]>=[3^(k-1)+1]/2,(k>=2),即已知的标准球数不小于未知球数?
nbsp;
所以在以后的测量中就相当于任意给定标准球的情况,由前面的引理二可知
对于[3^(k-1)+1]/2的情况(k-1)次可解。
如果不平衡,大的那方记做A,小的那方记作B。
标准球记做C.
则现在我们有[3^(k-1)-1]/2个A球和B球,有[3^(k-1)+1]/2个C球。
第二次用3^(k-2)个A球加[3^(k-2)-1]/2个B球放左边?
nbsp;
3^(k-2)个C球加[3^(k-2)-1]/2个A球放右边。
如果左边大于右边,则说明是在左边的3^(k-2)个A球中质量大的为坏球;
如果左边等于右边,则说明是在第二次称时没用的3^(k-2)个B球中质量轻
的为坏球。
以上两种情况都可以再用三分法(k-2)次解决,加上前两
次共k次解决。
如果左边小于右边,则坏球在左边的[3^(k-2)-1]/2个B球中或在右边的同样
数目的A球中。
此时的情况和第二次开始时类似(只不过是k-1变成k-2).
用相同的办法一直往下追溯到一个A球和一个B球一次区分的情况,这时
只需拿A球和标准球比较以下就行了。
因此在这种情况下也是可以最终用k次解决的。
由以上两步加上数学归纳法知,对于N(m)=(3^m-1)/2的情况,称m次是可以称出来的。
由这个解法加上前面所给出的上界Nmax(m)<=(3^m-1)/2,知称m次能解决的最大的小球数
Nmax(m)=(3^m-1)/2。
有兴趣的人可以验证一下m=3,N=13的情况----该情况已经被反复拿出来讨论过了。
登录..[注册]忘记密码注销登录新闻标题软件名称商品名称文档标题职位名称
首页|第二书店|论坛|专题|精华|SUN|IBM|微软|微创|《程序员》|调查|聊天|黄页
新闻|Donews|文档|FAQ|专栏|人才|培训|移动|人邮|《开发高手》|搜索|软件|会员
·[eWeek:
Borland连丢大将][CTOBlakeStone辞职][讨论]·关注2004年度计算机专业考试·Oracle欲以94亿美元收购仁科·测试驱动的开发系列
(1)·JakartaCommonDigester应用·PHP4之真OO·一次编写,随处运行·超越模板引擎·ERP实践:
多级分类档案级联删除技术ID号自动编码技术·金山《剑网》官方网站2度被黑·读者盛赞InsideVCL,李维一一作答·2004Jolt大奖入围图书·gzip-1.2.4程序分析·微软MVP新一届(2004.1)名单揭晓·社区之星联动读书计划·关注Ruby语言:
Matz关于技术的对话blocks和Closure结构·CSDN专题:
网格计算·CSDN最新推出RSS客户端订阅·Dearbook新春货到付款免配送费2004.2.11
—人才招聘—
北京飞天诚信科技...
重庆海特科技发展...
明基逐鹿软件(苏...
TOM互联网事业集团...
国风因特软件(北...
北京科迈易通科技...
北京百联优力科技...
SamsungOpenTide...
武汉紫龙科技有限...
—热销商品—
《软件创富》
程序员杂志2001增...
程序员大本营2001...
程序员大本营2001...
VisualStudioâ...
《程序员》杂志20...
《程序员》杂志20...
—培训信息—
中国四达独家授权...
达洋行教育招生中...
中国国际工程和材...
中商集团经济合作...
北京康飞理想科技...
首都师大出国留学...
—图书信息—
软件创富
CSDN-文档中心-其他开发语言
标题简单一道排序题,考倒多少读书人!
——从华为一道面试题浅谈计算机专业在校大学生该如何学习专业课程,信心百倍挑战就业!
rerli(原作)
关键字排序、面试、就业
/*
===================================================================
作者:
rerli
时间:
2003-12-17
目的:
从华为一道面试题浅谈计算机专业在校大学生该如何学习专业课程,信心百倍挑战就业!
====================================================================
*/
/*
简单一道排序题,考倒多少读书人!
——从华为一道面试题浅谈计算机专业在校大学生该如何学习专业课程,信心百倍挑战就业!
大学生早已不是天之骄子,仅仅是一个普通劳动者。
网上一句顺口溜“本科生象条狗,硕士生满街走,只有博士才能抖一抖”真正恰如其分地说明了这一点。
我想许多到深圳求职的,到过宝安北路的深圳人才大市场的大学生朋友会有同感。
只要是非休息日,场场爆满,黑压压的人头攒动。
就业的残酷性已经到了”学士学士靠边站,硕士硕士中间站,博士博士往前站。
听说你是海归派,HelloHello签合同。
“的地步。
计算机专业的毕业生由于前几年就业形势好,IT整个行业还不错,工资相对高点,所以许多人纷纷转行搞编程。
这两年行业不景气,工资大不如前,但搞编程的人还是越来越多,特别是非计算机科班出生的。
面对这样的现实,我们计算机专业在校大学生应该怎样调整,迎战就业呢?
在回答这个问题之前,我们还是来看看现在的公司都是怎样招人的。
现在找工作,建议在网上找。
深圳这边效果好的网站是中国人才热线。
天天在上面发简历,等着公司打电话要你去面试就行了。
如果有公司要你去面试了,基本都是要过关斩将才有机会和人面谈。
一般都是一进公司门,前台小姐会很热情地给你一份试卷做(你不要多问,先老老实实做完题吧:
)),根本就不给你机会面谈(题目答得好,你才具备资格和人面谈)。
做完了,就放到前台那里,回家等电话吧。
机会好的话,可能是管人事方面的人跟你聊聊天,比查户口都要严,什么都问。
我是觉得有空要多看看政府发言人、影视明星发言人、公司发言人等等这类讲话,多学学他们是怎么回答记者提问的,这样你才能对付那些人力资源的人。
呵呵,这是题外话了。
看到这里,你终于明白,考试还是重要的第一关。
都考些啥?
我们从华为一道面试题来看看吧!
原题大意是这样的:
有N个大小不等的自然数(1--N),请将它们由小到大排序。
要求程序算法:
时间复杂度为O(n),空间复杂度为O
(1)。
(请你做做看,时间20分钟)
这一题40分(面试试卷总分100分,60分钟完成。
)占40%,可以说对面试成绩至关重要,借用高考的一个名词,这是最后“压轴题”。
试卷的分布是这样的,3--5个填空题,4个左右名词解释,8个左右选择题(单选、多选混在一起),2个编程题(任选一题,多做按得分少的计入总分)。
就整体难度来说不是很大,考的范围相对来说有点大--C语言、数据结构、网络基础、操作系统、软件工程、数据库等等,但都很基础很基础,都是计算机专业必修课。
如果基础知识牢固的话,可能40分钟就能做完。
我上面所说的从这道“压轴题”可窥一斑了。
相信许多人在拿到这道题,第一感觉就是很简单嘛,似乎不敢相信会考这么简单的题目!
但是,就是这么简单的题目,还真是考倒了许多人,都是大学本科生,学计算机的,有的还是研究生。
还真有点“简单一道排序题,考倒多少读书人!
”的味道。
这是我一个在华为的同学告诉我的,所以可信度应该是很高的。
如果是平时自己做作业,我相信许多人可能一下子就做出来了。
原因我分析有两个:
一是平时看题会仔细一些,有足够的时间;二是心理上觉得华为不可能考得这么简单,老想是否有什么“陷阱”,过度紧张,加之考试时间本身也不长,60分钟,估计大多数人花在这题上面的的时间一般也就20~30分钟吧。
因此,建议在校期间应加强心理素质的训练,这么多大大小小的考试都经历过了,再考一次又有何妨!
从这道题出题意图来看,出题者主要是想考面试者的思维是否敏捷清醒、做事是否认真仔细是否善于思考、基本知识掌握程度如何。
为什么这么说呢,第一这道题的确不难,就是一般排序。
排序的方法在数据结构中讲得实在是太多了,各种各样的选择排序、插入排序、冒泡排序、希尔排序、堆排序、快速排序等等。
但是,用心的人就记得它们当中没有一个算法复杂度是O(n),且不说空间复杂度要满足O
(1)。
第二就是这道题真正的考点就是看你能否想到数组的下标与这N个数存在的关系。
这就是考题中的个小玄机。
这N个数随你怎么乱序,排好序后就是数组(让下标从1开始)下标为1的元素,里面放的就一定是1,下标为n的元素,里面放的就一定是N。
观察出这点,题目就解决了。
这道题三言两语就分析完了(详细程序见后面)。
透过这道题,我来简单说说计算机专业在校大学生该如何学习专业课程。
正如你所见,IT有名的公司,考试题目的难度也不过如此。
我想只要是想招应届毕业生的公司,他们都不会出很高深的东西来考你。
大家都知道,在校是学习基础理论知识的,不是从事研究的,所以他们没有必要那么做。
因此,建议多在基础知识方面下工夫,有条件的多做习题、多上机、勤思考,多看看同一个问题其他人是怎么解决的,和你的有什么不同。
有精力的人,试着考程序员、高级程序员,这样你有个目标,学习起来可能更来劲,各专业课学起来联系更紧密。
总之一句话,注重基础知识,有目标的学习,理论结合习题集。
[一家之言,欢迎有兴趣的朋友一起讨论:
)]
*/
voidsort(inte[],intn)
{
inti;
intt;/*临时变量:
空间复杂度O
(1)*/
for(i=1;i{
t=e[e[i]];/*下标为e[i]的元素,排序后其值就是e[i]*/
e[e[i]]=e[i];
e[i]=t;
}
}
voidmain()
{
#defineMAX10
inti,a[MAX+1];
printf("Inputthenumberfrom1to%d:
\n",MAX);
for(i=1;i{
scanf("%d",&a[i]);
}
sort(a,MAX);
printf("\n====sortover====\n");
for(i=1;i{
printf("%d",a[i]);
}
printf("\n");
system("pause");
}
作者相关文章:
重温经典排序思想--C语言常用排序全解(原作)
单向链表操作详解
(二)[TheEnd](原作)
单向链表操作详解
(一)(原作)
对该文的评论人气:
9235
webrolling(2004-2-213:
03:
31)
这种题目是考编程还是考语文?
?
?
?
?
?
?
?
?
?
for(inti=0;i<N;++i){e[i]=1+i;}
我没话说了
oo(2003-12-2510:
13:
08)
voidMySort(int*Array,intnum)
{
inti;
inttemp;
for(i=0;i<num;++i)
{
while(Array[i]!
=i+1)
{
temp=Array[Array[i]-1];
Array[Array[i]-1]=Array[i];
Array[i]=temp;
}
}
}
LorisChen(2003-12-2313:
41:
11)
我参加的今年的华为的笔试没有这道题啊!
!
!
!
freetomcat(2003-12-2312:
21:
28)
有什么的,哈理工,有个小子叫人替考,照样去了华为!
气愤呀!
!
!
lonelyeagle(2003-12-2311:
04:
17)
#include<stdio.h>
voidsort(int*e,intn)
{
inttmp;
intj=0;
for(inti=0;i<10;i++)
{
if(e[j]==j+1)j++;
tmp=e[j];
e[j]=e[tmp-1];
e[tmp-1]=tmp;
}
}
voidmain()
{
inta[10]={5,6,8,9,10,7,4,3,2,1};
sort(a,10);
for(inti=0;i<10;i++)
printf("%d",a[i]);
return;
}
这么总可以吧
wuder2002(2003