华为面试题一

转:http://blog.chinaunix.net/uid-25132162-id-395306.html


1、static的用途?
限制变量的作用域,static全局变量和static函数的范围只限制在定义的文件内,static局部变量的值保存到下一次执行;
声明变量的存储域,由static修饰的变量存储在静态存储区,放在这个存储区的变量还有全局变量。
 
2、指针和引用的区别?
   初始化区别:引用必须初始化,而指针可以不用;
   非空区别:引用不可以为空,指针可以为空;
   可修改区别:引用初始化后不能被修改,而指针可以修改指向。
 
3、描述实时系统的基本特性?
   在特定的时间内完成特定任务,具有实时性和可靠性特征。
 
4、全局变量与局部变量有没有区别,如果有,是什么?
   有区别,区别在于存储区域不同,全局变量存储在静态存储区,而局部变量存储在栈上。
 
5、什么是平衡二叉树?
   平衡二叉树是一棵空树或具有以下特征的一棵树,其左右子树也是平衡二叉树,且左右子树高度差的绝对值不超过1.
 
6、堆栈溢出一般是由什么原因导致的?
   没有回收垃圾资源。
 
7、什么函数不能声明为虚函数?
   构造函数
 
8、冒泡排序时间复杂度?
   
      O(n2)


 


9、写出float与零值的比较


      #define EPSION 0.000001


      double x;


      if (x >= -EPSION && x <= EPSION)


 


10、Internet采用哪种网络协议?该协议的主要层次结构?


       TCP/IP,分为:物理层,数据链路层,网络层,传输层,应用层。


 


11、Internet中物理地址与网络地址的转换?


       ARP协议:IP地址到物理地址的转换;


       RARP协议:物理地址到IP地址的转换,用于无盘工作站。


 


12、IP地址编码分为哪两部分?


       网络号和主机号


 


13、不能做switch参数类型的是:实型。


 


14、某32位系统,C++程序如下,计算sizeof


 


1.#include <stdio.h>


1.#include <malloc.h>


2.


3.void Foo ( char str[100] )


4.{


5.    printf("sizeof(str)=%d \n", sizeof(str) );


6.}


7.


8.main()


9.{


10.    char str[] = "www.ibegroup.com";


11.    char *p1 = str ;


12.    int n = 10;


13.


14.    void *p2 = malloc( 100 );


15.


16.    printf("sizeof(str)=%d \n", sizeof(str) );


17.    printf("sizeof(p1)=%d \n", sizeof(p1) );


18.    printf("sizeof(n)=%d \n", sizeof(n) );


19.    printf("sizeof(p2)=%d \n", sizeof(p2) );


20.


21.    Foo(str);


22.}
答案为:17, 4,4,4,4。
 
15、头文件中的 ifndef/define/endif干什么用? 预处理
防止头文件被重复引用
 
16、#include <filename.h> 和 #include "filename.h" 有什么区别?
对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h
对于#include "filename.h" ,编译器从用户的工作路径开始搜索filename.h
 
17、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
 
18、 回答下面的问题
(1)  请问运行Test 函数会有什么样的结果?


1.Void GetMemory(char **p, int num)


1.{


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


3.}


4.void Test(void)


5.{


6.    char *str = NULL;


7.    GetMemory(&str, 100);


8.    strcpy(str, "hello");


9.    printf(str);


10.}
答:输出“hello”


(2) 请问运行Test 函数会有什么样的结果?


1.void Test(void)


1.{


2.    char *str = (char *) malloc(100);


3.    strcpy(str, “hello”);


4.    free(str);


5.    if(str != NULL)


6.    {


7.        strcpy(str, “world”);


8.        printf(str);


9.    }


10.}
答:输出“world”


(3) 请问运行Test 函数会有什么样的结果?


1.char *GetMemory(void)


1.{


2.    char p[] = "hello world";


3.    return p;


4.}


5.void Test(void)


6.{


7.    char *str = NULL;


8.    str = GetMemory();


9.    printf(str);


10.}
答:无效的指针,输出不确定。


19、 编写strcat函数,已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。


1.#include <iostream>


1.using namespace std;


2.


3.char *strcat (char *strDest, const char *strSrc)


4.{


5.    char *p = strDest;


6.    while (*p != '\0')


7.    {


8.        p++;


9.    }


10.    while (*strSrc != '\0')


11.    {


12.        *p++ = *strSrc++;


13.    }


14.    return strDest;


15.}


16.


17.int main() 


18.{ 


19.    char str[50] = "hello";


20.    char *s = "chenxu";


21.    cout<<str<<endl;


22.    cout<<s<<endl;


23.    Strcat(str, s);


24.    cout<<str<<endl;


25.    return 0; 


26.}
strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量。


20、程序什么时候应该使用线程,什么时候单线程效率高 
(1) 耗时的操作使用线程,提高应用程序响应
(2) 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
(3) 多CPU系统中,使用线程提高CPU利用率
(4) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。


21、int i=10, j=10, k=3; k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低。


22、动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。 
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了


23、判断题


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


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


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


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值