华为笔试题

static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别?

答案:全局变量( 外部变量) 的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static) ,内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static 全局变量与普通的全局变量有什么区别:static 全局变量只初使化一次,防止在其他文件单元中被引用; static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值; static 函数与普通函数有什么区别:static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2 、程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于( )中。

答案:栈;静态区;堆

3 、设有以下说明和定义:

typedef union

{  long i;

int k[5];

char c;

} DATE;

struct data

{ int cat;

DATE cow;

double dog;

} too;

DATE max;

则语句 printf("%d",sizeof(too)+sizeof(max)); 的执行结果是:______

答案:DATE 是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20 个字节. 所以它的大小是20 data 是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52. 当然... 在某些16 位编辑器下, int 可能是2 字节, 那么结果是 int2 + DATE10 + double8 = 20

4 、队列和栈有什么区别?

答案:队列先进先出,栈后进先出。

5 、这道题目出错了,这里就不写上了。

6 、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。

答案:

slnodetype *Delete(slnodetype *Head,int key){} 中

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;

}

void delete(Node* p)

{

if(Head = Node)

while(p)

}

7 、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd” 倒序后变为“dcba”

1 、#include"string.h"

2 、main()

3 、{

4 、    char*src="hello,world";

5 、    char* dest=NULL;

6 、    int len=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 、   return 0;

14 、}

答案:还要加上

#include

int main()

{ char* src = "hello,world";

int len = strlen(src);

char* dest = (char*)malloc((len+1)*sizeof(char));  // 要为/0 分配一个空间

char* d = dest;

char* s = &src[len-1]; // 指向最后一个字符

while( len-- != 0 )

*d++=*s--;

*d = 0; // 尾部要加/0

printf("%s/n",dest);

free(dest);// 使用完,应当释放空间,以免造成内存汇泄露

return 0;

}     

华为笔试题(3

一、判断题(对的写T ,错的写F 并说明原因,每小题4 分,共20 分)

1 、有数组定义int a[2][2]={{1},{2,3}}; 则a[0][1] 的值为0 。(  正确)

2 、int (*ptr) (), 则ptr 是一维数组的名字。(错误  int (*ptr) (); 定义一个指向函数的指针变量)

3 、指针在任何情况下都可进行>, <,>=, <=,== 运算。(  错误  )

4 、switch(c) 语句中c 可以是int ,long,char ,float ,unsigned int 类型。(错,不能用实形)

二、填空题(共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)=(    ) 

答案:6 ,4 ,4 ,4, 具体解释请参看我的空间里的“C/C++ 程序员应聘试题剖析”

2 、void getmemory(char **p, int num)

{

*p=(char *) malloc(num);

}

void test(void)

{

char *str=NULL;

getmemory(&str,100);

strcpy(str, "hello ");

printf(str);

}

运行test 函数有什么结果?(                                )10 分 

答案:输出hello ,但是发生内存泄漏。

 

 

 

 

3 、设int arr[]={6,7,8,9,10};

int *ptr=arr;

*(ptr++)+=123;

printf( "%d,%d ",*ptr,*(++ptr));

(                                  ) 10 分答案:8 ,

8 。这道题目的意义不大,因为在不同的编译器里printf 的参数的方向是不一样的,在vc6.0 下是从右到左,这里先*(++ptr) 后*pt ,于是结果为8 ,8

三、编程题(第一小题20 ,第二小题30 分)

1 、  不使用库函数,编写函数int strcmp(char  *source, char *dest) 相等返回0 ,不等返回-1 ;

答案:

一、

int strcmp(char  *source, char *dest)

{

assert((source!=NULL)&&(dest!=NULL));

int i,j;

for(i=0; source[i]==dest[i]; i++)

{

if(source[i]=='/0' && dest[i]=='/0')

return 0;

else

return -1;

}

}

答案:

二、

int strcmp(char *source, char *dest)

{   

while ( (*source != '/0') && (*source == *dest))   

{

source++;

dest++;   

}   

return ( (*source) - (*dest) ) ? -1 : 0;

}

2 、写一函数int fun(char *p) 判断一字符串是否为回文,是返回1 ,不是返回0 ,出错返回-1

答案:

一、

int fun(char *p)

if(p==NULL) 

return -1; 

else 

int length = 0; 

int i = 0; 

int judge = 1; 

length = strlen(p); 

for(i=0; i

{   

if(p[i]!=p[length-1-i])   

judge = 0;   

break; 

if(judge == 0)   

return 0; 

else   

return 1; 

}

}

答案:

二、

int fun(char *p)

{

int len = strlen(p) - 1;

char *q = p + len;

if (!p) return -1;

while (p < q)

{

if ((*p++) != (*q--))

return 0;

}

return 1;

}

华为笔试网络题(3

1. 在OSI 7 层模型中, 网络层的功能有(B )

A. 确保数据的传送正确无误  B. 确定数据包如何转发与路由 C. 在信道上传送比特流    D. 纠错与流控

2.FDDI 使用的是___ 局域网技术。(C )

A. 以太网;    B. 快速以太网;    C. 令牌环;    D. 令牌总线。

3. 下面那种LAN 是应用CSMA/CD 协议的(C )

A. 令牌环    B.FDDI    C.ETHERNET    D.NOVELL

4.TCP 和UDP 协议的相似之处是 ( C)

A. 面向连接的协议    B. 面向非连接的协议    C. 传输层协议    D. 以上均不对

5. 应用程序PING 发出的是___ 报文.(C )

A.TCP 请求报文。    B.TCP 应答报文。    C.ICMP 请求报文。  D.ICMP 应答报文。

6. 以下说法错误的是( 多) (B D)

A. 中继器是工作在物理层的设备    B. 集线器和以太网交换机工作在数据连路层

C. 路由器是工作在网络层的设备    D. 桥能隔离网络层广播

7. 当桥接收的分组的目的MAC 地址在桥的映射表中没有对应的表项时, 采取的策略是( C)

A. 丢掉该分组  B. 将该分组分片    C. 向其他端口广播该分组    D. 以上答案均不对

8.LAN Switch 在网络层次模型中的地位(B )

A. 物理层    B. 链路层    C. 网络层    D. 以上都不是

9. 小于_C__ 的TCP/UDP 端口号已保留与现有服务一一对应, 此数字以上的端口号可自由分配。( ) A.199      B.100    C.1024      D.2048

10. 当一台主机从一个网络移到另一个网络时, 以下说法正确的是 ( )

A. 必须改变它的IP 地址和MAC 地址    B. 必须改变它的IP 地址, 但不需改动MAC 地址

C. 必须改变它的MAC 地址, 但不需改动IP 地址   

D.MAC 地址.IP 地址都不需改动答案:1.B; 2.C; 3.C; 4.C; 5.C; 6.BD; 7.C; 8.B; 9.C; 10.B.

华为笔试题(4

1.      找错

void test1()

{   

char string[10];   

char* str1="0123456789";   

strcpy(string, str1);

}

  答:表面上并且编译都不会错误。但如果string 数组原意表示的是字符串的话,那这个赋值就没有达到意图。最好定义为char string[11] ,这样最后一个元素可以存储字符串结尾符'/0';

void test2()

{   

char string[10], str1[10]; 

for(int I=0; I <10;I++) 

{   

str1[I] ='a'; 

strcpy(string, str1);

}

  答:strcpy 使用错误,strcpy 只有遇到字符串末尾的'/0' 才会结束,而str1 并没有结尾标志,导致strcpy 函数越界访问,不妨让str1[9]='/0' ,这样就正常了。

void test3(char* str1)

{   

char string[10];   

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

{

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 声明。

2.      写出程序运行结果

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 a[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 秒。

答:

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);

}  

华为硬件笔试题

一 选择 13 个题目, 没有全部抄下来, 涉及的课程有电路, 模拟电路, 数字电路, 信号与系统, 微机原理, 网络, 数字信号处理有关于 1. 微分电路 2.CISC,RISC 3. 数据链路层

二 填空 10 个题目, 没有全部抄下来, 涉及的课程有电路, 模拟电路, 数字电路, 信号与系统, 微机原理, 网络, 数字信号处理有关于

1.TIC6000 DSP 2. 二极管 3.RISC 4.IIR

三 简答

1.x(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. 波形变换题目从正弦波-> 方波-> 锯齿波-> 方波, 设计电路 2.74161 计数器组成计数电路, 分析几进制的

3. 用D 触发器构成2 分频电路

4. 判断MCS-51 单片机的指令正确还是错误, 并指出错误原因 (1) MUL R0,R1 (2) MOV A,@R7 (3) MOV A,#3000H (4) MOVC @A+DPTR,A (5) LJMP #1000H ()

5.MCS-51 单片机中, 采用12Mhz 时钟, 定时器T0 采用模式1(16 位计数器), 请问在下面程序中,p1.0 的输出频率 MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP    

华为硬件面试题

(全都是几本模电数电信号单片机题目)  

1. 用与非门等设计全加法器   

2. 给出两个门电路让你分析异同   

3. 名词:sram,ssram,sdram   

4. 信号与系统: 在时域与频域关系   

5. 信号与系统: 和4 题差不多  

6. 晶体振荡器, 好像是给出振荡频率让你求周期( 应该是单片机的,12 分之一周期..   ..)   

7. 串行通信与同步通信异同, 特点, 比较   

8.RS232c 高电平脉冲对应的TTL 逻辑是?( 负逻辑?)   

9. 延时问题, 判错   

10. 史密斯特电路, 求回差电压   

11.VCO 是什么, 什么参数( 压控振荡器?)   

12. 用D 触发器做个二分颦的电路. 又问什么是状态图

13. 什么耐奎斯特定律, 怎么由模拟信号转为数字信号   

14. 用D 触发器做个4 进制的计数  

15. 那种排序方法最快?   

一、 研发(软件)   

用C 语言写一个递归算法求N !;   

给一个C 的函数,关于字符串和数组,找出错误;   

防火墙是怎么实现的?  

你对哪方面编程熟悉?

硬件:

1 、继电器控制电路。

2 、SDRAM 是怎么工作的

3 、写出逻辑表达式说明A2A1A0 大于B2B1B0 。

4 、常用触发器有几种

5 、示波器有几种触发方式,举出三种    

华为3COM 数据通信工程师试题

1 H.323 协商答案:12 个包协商,先H225 然后H245 ,需要注意的是面试官可能会问到跟SIP 的比较

2 ipsec 为什么是三层的。L2tp 为什么是二层的?

答案:IPSec (Internet 协议安全) 是一个工业标准网络安全协议,为 IP 网络通信提供透明的安全服务,保护 TCP/IP 通信免遭窃听和篡改,可以有效抵御网络攻击,同时保持易用性。IPSec 有两个基本目标:1 )保护IP 数据包安全;2 )为抵御网络攻击提供防护措施。第三层保护的优点  通常IPSec 提供的保护需要对系统做一定的修改。但是IPSec 在IP 传输层即第三层的" 策略执行" (strategic implementation )几乎不需要什么额外开销就可以实现为绝大多数应用系统、服务和上层协议提供较高级别的保护;为现有的应用系统和操作系统配置IPSec 几乎无须做任何修改,安全策略可以在Active Directory 里集中定义也可以在某台主机上进行本地化管理。  IPSec 策略在ISO 参考模型第三层即网络层上实施的安全保护,其范围几乎涵盖了TCP/IP 协议簇中所有IP 协议和上层协议,如TCP 、UDP 、ICMP ,Raw (第255 号协议)、甚至包括在网络层发送数据的客户自定义协议。在第三层上提供数据安全保护的主要优点就在于:所有使用IP 协议进行数据传输的应用系统和服务都可以使用IPSec ,而不必对这些应用系统和服务本身做任何修改。  运作于第三层以上的其他一些安全机制,如安全套接层SSL ,仅对知道如何使用SSL 的应用系统(如Web 浏览器)提供保护,这极大地限制了SSL 的应用范围;而运作于第三层以下的安全机制,如链路层加密,通常只保护了特定链路间的数据传输,而无法做到在数据路径所经过的所有链路间提供安全保护,这使得链接层加密无法适用于 Internet 或路由 Intranet 方案中的端对端数据保护。 L2TP (第二层隧道协议)通过使用虚拟专用网 (VPN) 连接和第二层隧道协议 (L2TP) ,可以通过 Internet 或其他公共网络访问专用网。L2TP 是一个工业标准 Internet 隧道协议,它和点对点隧道协议 (PPTP) 的功能大致相同。利用L2TP 来构建企业的VPN ,一样需要运营商支持,因为LAC 一般是在传统电话交换网络中部署的,并且一个公司的分支机构以及移动办公的员工在地域上分布很广,所以需要各地的运营商都具备LAC 才能够实现企业大范围构建VPN 网络。当然企业也可以构建自己的基于L2TP 的VPN 网络在L2TP VPN 中,用户端的感觉就像是利用PPP 协议直接接到了企业总部的PPP 端接设备上一样,其地址分配可以由企业通过DHCP 来分配,认证方式可以沿用PPP 一直沿用的各种认证方式,并且L2TP 是IETF 定义的,其MIB 库也将定义出来从而可以实现全局的网络管理。

3 ospf 中包的ttl 值是多少?

答案:1 ,因为224.0.0.5/224.0.0.6 是本地链路组播

4 OSPF 为什么要划分区域?

答案:RD 用于BGP 区分VPN 路由,RT 用于在各VRF 中导入或导出路由

5 MPLS VPN 的标签一共有几层。内网的标签放在哪里。

答案:如果没有流量工程则是2 层,内网标签在隧道标签之后

6 MPLS 中RD 和RT 的作用分别是什么?

答案:减少CPU 负载,区域间使用距离矢量算法,因此其它区域的泛洪不会影响区域的SPF 运算,这里注意面试官可能会问OSPF 多区域如何防止环路。( 注意答本质而不是现象,免得面试官追问)

7 RR 防止环路的机制。

答案:RR 中通过ORIGIN ID 和CLUSTER ID 防止环路,若RR 收到带有自己CLUSTER ID 的路由则丢弃

8 BGP 控制out-bound 用local-pre ,控制进来的用med.

答案:正确

9 ospf 是工作在哪个协议上的?

答案:IP ,OSPF 协议号89

10 ospf 的LSA 类型。

答案:1 ,2 ,3 ,4 ,5 ,6 ,7 ,没有什么好说的,注意考官问到第6 类LSA ,组播再准备多点

11 简述OSPF 的基本工作机制。

答案:这个没什么可以说了,把知道的都说出来就行了

12 ppp 的lcp 和ncp 协商过程。

答案:LCP 过程协商二层链路相关参数,MTU/PPP 压缩/ 认证协议类型等~~~NCP 协商第三层协议,IP 地址,IP 压缩等等,这里记住最好不要说CDP

13 笔试中还有一道PSTN 的信令控制有哪三种?

答案:这个我只知道随路信令和共路信令,信工同学提供的答案是:监视/ 号码/ 音信号/ ,知道正确答案的朋友麻烦纠正一下

14sloari 8.0 查看进程的命令是什么?linux 7.3 查看IP 的命令是什么?

答案:不知道华为为什么问这个,第一个是PS 吧?第二个是 IFCONFIG /A
15 IP 是5.32.0.0, 掩码255.224.0.0 。请问最大的有效地址是多少。答案:最大主机地址5 。64 。255 。254

17 lx/lh 的有效距离是多少?

答案:???

18 IP 包头几个字节?加上数据部分几个字节

答案:应该是问IPV4 ,一般20 字节,加上源路由选择等后最大60 字节,加上数据部分还是根据链路MTU 决定

20 CQ 能不能有一种流量dominate 第二种流量?

答案:CQ 不能有一种流量DOMINATE 其它任何流量 21 FTP 下载一个文件完成。有几个TCP 连接答案:4 个

 

你可能感兴趣的:(10_笔/面试题集锦分析)