您的位置:首页 > 编程语言 > C语言/C++

C++基础面试题

2013-03-31 14:40 218 查看
C++基础面试题 ++基础面试题

一 简答题 1.static 有什么用途?(请至少说明两种)

限制变量的作用域(文件级的)。 设置变量的存储域(全局数据区)。

2.引用与指针有什么区别? 3.描述实时系统的基本特性

在特定时间内完成特定的任务,实时性与可靠性。

4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

全局变量储存在静态数据区,局部变量在堆栈中。

5.什么是平衡二叉树?

左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 1

6.堆栈溢出一般是由什么原因导致的?

1.没有回收垃圾资源 2.层次太深的递归调用

7.什么函数不能声明为虚函数? 8.冒泡排序算法的时间复杂度是什么?n2 9.写出 float x 与“零值”比较的 if 语句。 10.Internet 采用哪种网络协议?该协议的主要层次结构? 11.Internet 物理地址和 IP 地址转换采用什么协议? 12.IP 地址的编码分为哪俩部分? 13.用户输入 M,N 值,从 1 至 N 开始顺序循环数数,每数到 M 输出该数值,直至全部输出。写 出 C 程序。 循环链表,用取余操作做 14.写出判断 ABCD 四个表达式的是否正确, 若正确, 写出经过表达式中
a 的值(3 分) int a = 4; (A)a += (a++); (B) a += (++a) ; (C) (a++) += a;

(D) (++a) += (a++); a=? 15.某 32 位系统下, C++程序,请计算 sizeof 的值(5 分). char str[] = “http://www.ibegroup.com/” char *p = str ; int n = 10; 请计算 sizeof (str ) = ?(1) sizeof ( p ) = ?(2) sizeof ( n ) = ?(3) void Foo ( char str[100]) { 请计算 sizeof( str ) = ?(4) } void
*p = malloc( 100 ); 请计算 sizeof ( p ) = ?(5) 16.头文件中的 ifndef/define/endif 干什么用? 7. #include< filename> 和 #include “filename.h” 有什么区别? 18.在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? 19. switch()中不允许的数据类型是? 20.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 函数会有什么样的结果? 21. void Test(void){ char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL){ strcpy(str, “world”); printf(str); } } 请问运行 Test 函数会有什么样的结果? 22. char *GetMemory(void){ char p[] = "hello world"; return p; } void
Test(void){ char *str = NULL; str = GetMemory(); printf(str); } 23. 编写 strcat 函数 已知 strcat 函数的原型是 char *strcat (char *strDest, const char *strSrc); 其中 strDest 是目的字符串,strSrc 是源字符串。 (1)不调用 C++/C 的字符串库函数,请编写函数 strcat (2)strcat 能把 strSrc 的内容连接到 strDest,为什么还要 char
* 类型的返回值?

char * strcpy( char *strDest, const char *strSrc ) { assert( (str

Dest != NULL) &&(strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\0’ ); return address; }

24.MFC 中 CString 是类型安全类么?

25.C++中为什么用模板类。 26.CSingleLock 是干什么的。 27.NEWTEXTMETRIC 是什么。 28.程序什么时候应该使用线程,什么时候单线程效率高。 29.Windows 是内核级线程么。 30.Linux 有内核级线程么。 31.C++中什么数据分配在栈或堆中,New 分配数据是在近堆还是远堆中? 32.使用线程是如何防止出现大的波峰。 33.函数模板与类模板有什么区别? 34.一般数据库若出现日志满了,会出现什么情况,是否还能使用? 35.如果数据库满了会出现什么情况,是否还能使用?
36.SQL Server 是否支持行级锁,有什么好处? 37.关于内存对齐的问题以及 sizof()的输出 38.int i=20, j=10, k=2; k*=i+j; k 最后的值是? 39.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现? 40.TCP/IP 建立连接的过程?(3-way shake) 41.ICMP 是什么协议,处于哪一层? 42.触发器怎么工作的? 43.winsock 建立连接的主要实现步骤? 44.动态连接库的两种方式? 45.IP 组播有那些好处? 46.软件的开发流程?
47.char str[] = “hello”,sizeof (str ) = ________ strlen ( str ) = __________ 48.类和结构的区别? 49.简述下虚拟函数的含义? 50.类中访问权限 private,protested,prublic,可以被何种访问? 51.解释下面的含义: int *pTemp = new int ( 5 ); int *pTemp = new int[5];

二 编程题 题目: n 个人, 有 他们围成一个圈, 从第一个人开始数数 (第一个人默认为 1 号, 一直到 n 号) , 数 1,2,3,当数到 3 的人则退出这个圈,后面的继续数,一直进行,问到最后是否只剩一个 人,如果是,这个人的编号是多少? 题目:写一个 memcpy 函数。 题目:写一个双向链表的插入函数。 原型如下: struct node { node *head; node *end; int value; } void createnode(node **head, node **end,
int val); int main() { node *head = NULL; node *end = NULL; createnode(head, end, 1); createnode(head, end, 1); createnode(head, end, 1); return 0; } -----------------------------------------------------------------------------------------------------------------------------------公布部分的简答题答案。只做参考用。

一 简答题 1.static 有什么用途?(请至少说明两种) 在函数中,一个声明为静态的变量在函数调用的过程中其值不变。

在模块中(函数外),一个声明为静态的变量只能由模块中的函数访问,也就是一个本地的全局 变量 在模块中,一个声明为静态的函数只能由模块内的其他函数调用,这个函数被限制在了声明它 的模块的本地范围使用。 2.引用与指针有什么区别? 引用要初始化,指针可以不用。 引用不能初始化为空, 指针可以。 引

用和指针的自增运算意义不同。 引用初始化后不能改变指向的地址,指针可以。 sizeof 引用得到的是引用指向对象的大小,sizeof 指针得到的是指针本身的大小。 3.描述实时系统的基本特性 在特定的时间完成特定的任务,具有实时性和可靠性。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 有区别,全局变量的存储区域是静态存储区,局部变量的存储区域是栈。 5.什么是平衡二叉树? 左右子树都是平衡二叉树,并且左右子树的深度差值的绝对值不大于 1。 6.堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源。
7.什么函数不能声明为虚函数? 构造函数。 8.冒泡排序算法的时间复杂度是什么? 0(n ^ 2)。 9.写出 float x 与“零值”比较的 if 语句。 if(x > -0.00001 && x < 0.00001)。 10.Internet 采用哪种网络协议?该协议的主要层次结构? Tcp/Ip 协议,网络层、会话层、表示层、传输层、物理层、数据链层、应用层。 11.Internet 物理地址和 IP 地址转换采用什么协议? ARP 地址解析协议。 12.IP 地址的编码分为哪俩部分?

主机号和网络号 16.头文件中的 ifndef/define/endif 干什么用? 预处理,防止头文件被反复包含。 17. #include< filename> 和 #include “filename.h” 有什么区别? #include<filename>搜索的是系统默认目录, #include"filename.h"搜索的是本地目录,如果没有则 搜索系统默认目录。 18.在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? C++不能直接调用 C 函数,因为函数在
C++中编译后的函数名在符号库中名字与 C 中不同,所 以使用 extern "C"修饰函数按照 C 语言的方式编译和连接。 19. switch()中不允许的数据类型是? 实型。 24.MFC 中 CString 是类型安全类么? 不是,其他类型的变量可以通过 CString 中的 Format 来转换为 CString 类型。 25.C++中为什么用模板类。 与类型无关,具有很高的复用性。 与平台无关,具有可移植性。 可以创建一个动态增长或者减小的数据结构。 在编译时而不是运行时检查数据类型,保证了类型的安全。
适用基本数据类型。 26.CSingleLock 是干什么的。 一种访问机制,在多线程程序中并发的访问一个资源。 27.NEWTEXTMETRIC 是什么。 物理字体结构,设置字体的高宽大小。 28.程序什么时候应该使用线程,什么时候单线程效率高。 耗时的程序中使用多线程,提高程序的响应。 多 CPU 系统使用多线程,提高 CPU 的使用率。 改善程序结构时,一个即长有复杂的进程可以考虑分解为多线程,成为一个独立或者半独立的 运行部分,便于程序的理解和修改 并发操作时,如 C/S 中服务端并发响应客户端的请求。

其他情况使用单

线程。 29.Windows 是内核级线程么。 30.Linux 有内核级线程么。 31.C++中什么数据分配在栈或堆中,new 分配数据是在近堆还是远堆中? 局部变量、函数的返回值、函数调用的参数、函数的返回地址存储在栈区。 new 和 malloc 申请的内存存储在堆区。 32.使用线程是如何防止出现大的波峰。 使用线程池,可以提高线程同时调用的效率和限制资源使用的好处,当线程池中的线程达到最 大数时,其他线程就会排队等候。 33.函数模板与类模板有什么区别? 函数模板的实例化是编译程序在处理函数调用时自动完成,
类模板的实例化需要程序员在程序 中显实指定。 34.一般数据库若出现日志满了,会出现什么情况,是否还能使用? 只能进行查询等读操作,不能进行更改、备份等写操作,因为任何操作会记录到数据库的日志 中。也就是数据库基本属于不能使用的状态。 35.如果数据库满了会出现什么情况,是否还能使用? 只能进行查询等读操作,不能进行更改、备份等写操作,因为任何操作会记录到数据库的日志 中。也就是数据库基本属于不能使用的状态。 36.SQL Server 是否支持行级锁,有什么好处? 支持,锁机制是为了对并发操作进行控制,对干扰操作进行了封锁,保证了数据的一致性和准
确性。行级锁确保用户取得被更新的行到该行进行更新这段时间不会被其他用户所修改。因而 行级锁保证了数据的一致性又能提高数据操作的并发性。 37.关于内存对齐的问题以及 sizof()的输出 内存自动对齐的是为了提高程序的性能,数据结构应该尽量在自然边界上,原因在于处理器访 问未对齐的内存需要做两次内存访问,访问对齐的内存只需要访问一次。 39.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现? 将多个表的操作放到事物中处理。 40.TCP/IP 建立连接的过程?(3-way shake) 采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送 SYN(ack = j + 1)到服务端,并进入到 SYN_SEND 状态, 等待服务端确认。 第二次握手:服务端收到 SYN(ack = j + 1)并确认,同时发送一个 SYN + ACK 包到客户端,然后进 入 SYN_RECV 状态。 第三次握手:客户端收到 SYN+ACK 包后,向服务端发送确认包 ACK(ack = k + 1)完毕后,客户端 和服务端进入已确认状态,完成三次握手。 41.ICMP 是什么协议,处于哪一层? Internet 控制报文协议,处于网络层。
42.触发器怎么工作的? 将多个表的操作放到事物中处理。 43.winsock 建立连接的主要实现步骤? 服务端:建立套接字 socket(),绑定 bind(),监听(listen()),然后等待客户端连接 accept()。 客户端:建立套接字 socket(),连接服务器 connect(),连接上

后使用 send()和 recv()在套接字上 做读写操作,直到数据交换完毕后用 closesocket()关闭套接字。 服务端:accept()收到客户端连接后,建立一个新的套接字,并重新开始等待连接。产生的套 接字用 send()和 recv()做读写操作。数据交换完毕后用 closesocket()关闭套接字。 44.动态连接库的两种方式? 载入时动态链接,模块明确的调用导出的函数,就像使用本地函数一样。需要链接时链接函数 所在 DLL 的导入库,导入库向系统提供载入 DLL 时需要的信息和 DLL 的函数定位。
运行时动态链接, 使用 LoadLibrary 或者 LoadLibraryEx 载入 DLL。 通过调用 GetProcAddress 获取 DLL 函数的出口地址。通过返回函数的指针调用 DLL 函数,避免导入库文件。 45.IP 组播有那些好处? 组播是一种允许一个或者多个发送者发送单一的数据包到多个接收者的网络技术。 组播可以节 省大量网络宽带。无论有多少个目标地址,整个网络的任意一条链路上只传送单一的数据包。 组播的核心技术就是在节约网络资源的前提下保证了服务质量。 46.软件的开发流程? 需求确认,概要设计,详细设计,编码,单元测试,集成测试,系统测试,维护。
48.类和结构的区别? 在 c++中类默认的访问方式是 private。结构默认访问方式是 public。结构没有默认的构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: