《c、c++笔试题-面试题.doc》由会员分享,可在线阅读,更多相关《c、c++笔试题-面试题.doc(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、优质文本c、笔试题,面试题 笔试,面试,职业规划,考研 笔试,面试,职业规划,考研隐藏 窗体顶端窗体底端2017 C、笔试题大全,被问的概率几乎 100%。 、 笔试题大全, 笔试题大全 。很少有真正精通了 C 语言编程的学员,一般都有或多或少概念不是完全清楚的问题, 特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义 指向函数的指针类型,这也是导致学习 C 困难的一个原因。下面有几个简单测试将能发现 你对 C 语言的掌握情况。 1 35; 10; 问:()和 ()的值分别是多少? 答:() 值不确定, 根据0确定字符串是否结束。 ()=10 一个数组为数组长度
2、(,315/*共 13 个字母*/); 问:此时 x 和 ()的值分别是多少? 答:x 为 35 (* , * ) 根据 来复制 , 依照 的0决定复制的长度, 必须要提供足够的长度,这 而 里会引起溢出, 返回 13,但是数组外部的数据已经被破坏 的值为 13,在 环境下 的值是要改变的(其他编译器下没试,).虽然外表上看来, 在程序中并没有修改 x 的值,但是实际运行的结果是上面的 x 的值发生了修改,这是因为 以后,把多余的数据拷贝进了 的邻居( 类型的 x)中,所以 x 的数据也就变了.这是一 个曾让我刻骨铭心的问题,在我刚出道时遇到这个问题,虽然在朋友的帮助下解决了这个问题, 但一直
3、不明白 x 的值为何变了,只有最后走上培训教师的岗位,才开始梳理自己曾经的困惑, 才开始总结以前的经验供学员们借鉴.我觉得这个题目的价值非常之大,它能引起学员对字符 串拷贝越界问题的足够重视,并且通过这个问题更能明白字符串的处理是怎么回时,更能明白 字符串与字符数组的关系:字符串就是一个字符数组,只是把这个字符数组用在处理串的函数 中时,这些函数不考虑数组的长度,只是记住数组的首地址,从首地址开始处理,并在遇到 0 时 结束处理, 3 10; 315; (, 315) 编译能通过吗? 答:数组不能赋值,只能初始化。 10 = 315; 而且初始化时编译器会检查数组的长度与初始化串的长度是否匹配
4、 4 *; (,); 需要初始化并分配空间 上句编译能通过吗?运行时有问题吗? 答:可以通过编译,但是 指向了常量区,运行时最好只做读操作,写操作不保险。 编译可以通过,但是 没有进行有效的初始化,它指向了一个不确定的内存区,运行时会 出现内存不可写错误! *p1; * p2; 指针必须初始化 上面两句有什么区别吗? 答: * 和 * 一样,都是表示指向常量的字符指针。 * 表示指向字符的常量指针 p1=( *); 如果是 p1;编译能够通过吗?明白为什么要类型转换?类型转换的本质是什么? 答:可以通过编译。关于常量与非常量指针的关系是这样的: 指针可以指向 或者非 区域,不会造成什么问题。
5、非 指针不能指向 区域,会引起错误。呵呵,这个问题,很经典 (p1,)编译能够通过吗? 答: 不能通过,( *, *); * 不能指向 * 注意:非 指针不能指向 区域,会引起错误。 ()有问题吗? 答:没有问题,输出的是 的地址信息 *; 3000编译能过吗?如果不行,该如何修改以保证编译通过呢? 答:不能通过,* 表示 是个字符指针,不能指向 3000 的整形变量。 修改的话,可以这样: = (*)3000,把 指向 3000 这个地址; ()可以这样做吗? 答:可以,y 的值为 所指的地址。不过如果是纯粹要地址的话,最好是用 。 *; *0x00313200; ()会是什么效果?提示 0
6、x31 对应字符1,0x32 对应字符2。 答: 首先编译未必会过关,有些编译器可能不允许 * 直接指向 *。最好是改为 *p = (*); 过关了效果就是什么东西都没有。 *; p 为 所指的地址,*p 表示修改了 所指向 的内存。 由于 ()在 32 位机上, 有 4 个字节 其实具体要看编译器的配置文件, 好似是 , 一般是 4 个字节所以修改了 03 由于 0x00313200 头尾都是 0, 所以字符串为0开头, 什么都打印不出来。 这里有个 和 的问题。以 0x31323334 为例 的机器上面, 0x31323334 在内存中排列顺序为 34 33 32 31, 输出为 4321
7、, 如 芯片的 机器上面为 31 32 33 34 ,输出为 1234,如 30001 的结果会是多少? 答:3000(); 指针+1 均为原来地址加上 (指针所指的数据类型) * 100上述语句在内存中占据几个内存块,怎样的布局情况? 答: 本身 会占用函数栈一个 4 字节的指针长度 具体是否为 4 个字节要看机器和编译器 。 会在堆上申请 100 个字节 ()的连续空间。 ( *p) * 100; 这个编译函数有问题吗?外面要调用这个函数,该怎样传递参数? 答:该程序没有问题。需要在函数中对指针所指的地址进行变化是必须传入指针的地址。 原因是这样的:如果传入的为指针本身,在函数调用的时候,
8、实参会被复制一个实例,这 样就不是原来的指针了,对该指针本身进行的任何改变都不能传递回去了。 可以这样理解,如果传入的参数为 ,那么对 本身的值的改变就传不回去啦,加个* 也是一样的。 能明白 (*)( y)及其作用吗? 答:定义了一个函数指针类型的宏,这样 就表示指向返回值为 ,且同时带 2 个 参数的函数指针类型了。 可以用来定义这样的变量: 比方有个函数为 ( x, y ); p = ; 补充::函数指针最大的用处在于它可以被一个模板方法调用,这是我在学 的设计模式时 领悟到的.例如,有两个函数的流程结构完全一致,只是内部调用的具体函数不同,如下所示: 1() 一段流程代码和面向方面的代
9、理,如平安检查,日志记录等 = ( x , y); 一段流程代码和面向方面的代理,如平安检查,日志记录等 2() 与 1 完全相同的一段流程代码和面向方面的代理,如平安检查,日志记录等 = ( x , y); 与 1 完全相同的一段流程代码和面向方面的代理,如平安检查,日志记录等 那么,可以只定义一个函数,如下所示 ( p) 与 1 完全相同的一段流程代码和面向方面的代理,如平安检查,日志记录等 = p( x , y); 与 1 完全相同的一段流程代码和面向方面的代理,如平安检查,日志记录等 调用程序在调用时,让参数 p 分别指向 和 函数就可以了. 以下是腾讯的笔试面试题: 请定义一个宏,比
10、较两个数 a、b 的大小,不能使用大于、小于、 语句 2、如何输出源文件的标题和目前执行行的行数 3、两个数相乘,小数点后位数没有限制,请写一个高精度算法 4、写一个病毒 5、有 A、B、C、D 四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时 1、2、5、10 分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问, 如何安排,能够在 17 分钟内这四个人都过桥? 2016 年腾讯招聘 选择题(60) 方面的根底知识 c 的 函数有好几个! 程序填空(40) 1.(20) 4 空 x5 不使用额外空间,将 两链表的元素交叉归并 2.(20) 4 空 x5 将树序列化 转存在数组或 链表
11、中! 1, 计算 ab 2 (运算符优先级问题) 2 根据先序中序求后序 3 a34哪个不能表示 a11: *(00) *(*(1)+1) *(1+1) *(00+4) 4 ( i.) ( j.) (); (j) 会出现什么问题 5 (0 -123 () . ( * - ) n = 1; n = (); . (* ) (;!(*0);) k; k = 2; j = ; ( 3) k = k * 10; = + k; ; 附加题: 1 下调试 的命令,观察堆栈状态命令 2 写出 套接字 效劳端 客户端 通讯程序 3 填空补全程序,按照我的理解是添入:32 调入 的函数名 查找函数入口的函数名 找
12、到函数的调用形式 把 加到 的声明 将 加到 的声明 4 1 2 3 有关系 s() c() () 问上课程 的学生 成绩最高的学生号 每科大于 90 分的人数 主要是 、数据结构、操作系统等方面的根底知识。好似有 、树等选 择题。填空题是补充完整程序。附加题有写算法的、编程的、数据库 语句查 询的。还有一张开放性问题。 请定义一个宏,比较两个数 a、b 的大小,不能使用大于、小于、 语句 () ( ) 如何输出源文件的标题和目前执行行的行数 = ; * = ; () ; 两个数相乘,小数点后位数没有限制,请写一个高精度算法 写一个病毒 (1) *p = 10000000; 不使用额外空间,将
13、 两链表的元素交叉归并 将树序列化 转存在数组或 链表中 i; s; c; ; ( ); 8 * p1; * p2; p3; p410; (p14) =? 4,4,4,10 二分查找 快速排序 双向链表的删除结点 给一个奇数阶 N 幻方,填入数字 1,2,3*N,使得横竖斜方向上的和都相同 答案: ; () n; n; i; * *n动态分配二维数组 (0) i n动态分配二维数组 2 代表首行中间数作为起点,即 1 所在位置 21初始值 0; (*1) 往右上角延升,假设超出那么用%转移到左下角 ()(); 斜行的长度和 n 是相等的,超出那么转至下一斜行 (0) ; ; ; ; (0) (
14、0) ()10(n*n)+4) i j 格式控制 格式控制 (0) i ; 1; 腾讯的一道面试题:(与百度相似,可惜昨天百度死在这方面了) 在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只 写出思路即可。 答案: 1,把整数分成 256M 段, 每段可以用 64 位整数保存该段数据个数, 256M*8 = 2G 内存,先清 0 2,读 10G 整数,把整数映射到 256M 段中,增加相应段的记数 3,扫描 256M 段的记数,找到中位数的段和中位数的段前面所有段的记数, 可以把其他段的内存释放 4,因中位数段的可能整数取值已经比较小如果是 32 整数,当然如果是
15、 64 整数的话,可以再次分段,对每个整数做一个记数,再读一次 10G 整 数,只读取中位数段对应的整数,并设置记数。 5,对新的记数扫描一次,即可找到中位数。 如果是 32 整数,读 10G 整数 2 次,扫描 256M 记数一次,后一次记数因 数量很小,可以忽略不记 (设是 32 整数,按无符号整数处理 整数分成 256M 段? 整数范围是 0 - 232 - 1 一共有 4G 种取值, 4256M = 16,每 16 个数算一段 0-15 是 1 段,16-31 是一段,. 整数映射到 256M 段中? 如果整数是 0-15,那么增加第一段记数,如果整 数是 16-31,那么增加第二段记
16、数,. 其实可以不用分 256M 段,可以分的段数少一写,这样在扫描记数段时 会快一些,还能节省一些内存) 腾讯题二: 一个文件中有 40 亿个整数,每个整数为四个字节,内存为 1,写出一个 算法:求出这个文件里的整数里不包含的一个整数 答: 方法一: 4 个字节表示的整数,总共只有 232 约等于 4G 个可能。 为了简单起见,可以假设都是无符号整数。 分配 500 内存,每一 代表一个整数,刚好可以表示完 4 个字节的 整数,初始值为 0。根本思想每读入一个数,就把它对应的 位置为, 处理完 40G 个数后,对 500M 的内存遍历,找出一个 为 0 的位,输出 对应的整数就是未出现的。
17、算法流程: 分配内存 ,初始化为 0x1; j x j; (3) ( 0; i = 0; ) (!( & x i) (i); ; 以上只是针对无符号的,有符号的整数可以依此类推。 方法二: 文件可以分段读啊,这个是 O2n算法,应该是很快的了,而且空间也允 许的。 不过还可以构造更快的方法的,更快的方法主要是针对定位输出的整数 优化算法。 思路大概是这样的,把值空间等分成假设干个值段,比方值为无符号数, 那么 00 01 . 0000F0000000 . 000 这样可以订立一个规那么,在一个值段范围内的数第一次出现时,对应值 段指示值 1,如果该值段的所有整数都出现过,那么 1000H, 这
18、样后面输出定位时就可以直接跳过这个值段了,因为题目仅仅要求输 出一个,这样可以大大减少后面对标志数值的遍历步骤。 理论上值段的划分有一定的算法可以快速的实现,比方利用位运算直接 定位值段对应值进行计算。 腾讯面试题: 有 1 到 10w 这 10w 个数,去除 2 个并打乱次序,如何找出那两个数。不 准用位图! 位图解决: 位图的方法如下 假设待处理数组为 A102 定义一个数组 B10w,这里假设 B 中每个元素占用 1 比特,并初始化为全 0 (0 102) B Ai =1 那么 B 中不为零的元素即为缺少的数据 这种方法的效率非常高,是计算机中最常用的算法之一 其它方法: 求和以及平方和
19、可以得到结果,不过可能求平方和运算量比较大用 64 位 不会溢出 腾讯面试题: 腾讯效劳器每秒有 2w 个 号同时上线,找出 5 内重新登入的 号并 打印出来。 解答: 第二题如果空间足够大,可以定义一个大的数组 a 号,初始为零,然后这个 号登陆了就 a 号 最后统计大于等于 2 的 号 这个用空间来代替时间 第二个题目,有不成熟的想法。 2w x 300s 所以用 6,000,000 个桶。 删除超时的算法后面说, 所以平均桶的大小是 1 。 假设 号码一共有 1010 个,所以每个桶装的 q 号码 是 1010 / (6 * 106) 个,这个是插入时候的最坏效率插入同一个桶的 时候是顺
20、序查找插入位置的。 的节点结构和上面大家讨论的根本一样, 增加一个指针指向输出列表, 后面说。 ; ; *; *; *; 用于 节点的时候,顺便更新一下输出列表。 另外增加两个指针列表。 第一个大小 300 的循环链表, 自带一个指向 的域, 循环存 300 秒 内的 指针。时间一过 就 掉, 所以保证所有桶占用的空间在 2w X 300 以内。 第二个是 输出列表, 就是存放题目需要输出的节点。 如果登陆的用户,5 分钟内完全没有重复的话,每秒 掉 2w 个节点。 不过在 的时候,要判断一下时间是不是真的超时,因为把节点入桶 的时候,遇到重复的,会更 新一下最后登陆的时间。当然啦,这个时候,
21、要把这个 号码放到需要 输出的列表里面 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用: 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局 部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义 多个同名的局部变量,比方在两个循环体内都定义一个同名的局部变量,而那个 局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答: 可以用引用头文件的方式,也可以用 关键字,如果用引用头文件方式 来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期 间会报错,如果你用 方式引用时,假定你犯了同样
22、的错误,那么在编译期 间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个 文件包含的头文件中?为什么? 答:可以,在不同的 C 文件中以 形式来声明同名全局变量。 可以在不同的 C 文件中声明同名的全局变量,前提是其中只能有一个 C 文 件中对此变量赋初值,此时连接不会出错 4、语句 ( ;1 ;)有什么问题?它是什么意思? 答:和 (1)相同。 5、 和 有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环 6、请写出以下代码的输出内容 () ; 10; ; ; 10*; (b,c,d:,b,c,d; 0; 答:10,12,120 7、 全局变量与普通的全局变量有什么
23、区别? 局部变量和普通局 部变量有什么区别? 函数与普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以 就构成了静态的全局变量。全 局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者 在存储方式上并无不同。 这两者的区别虽在于非静态全局变量的作用域是整个源 程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中 都是有效的。 而静态全局变量那么限制了其作用域, 即只在定义该变量的源文件 内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用 域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以防止在其它 源文件中引起错误。
24、从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方 式即改变了它的生存期。 把全局变量改变为静态变量后是改变了它的作用域, 限 制了它的使用范围。 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的 函数应该说明为内部函数(),内部函数应该在当前源文件中说明和定义。对 于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数 的源文件要包含这个头文件 全局变量与普通的全局变量有什么区别: 全局变量只初使化一次, 防止在其他文件单元中被引用; 局部变量和普通局部变量有什么区别: 局部变量只被初始化一次, 下一次依据上一次结果值; 函数与普通函数有什么区别:
25、 函数在内存中只有一份,普通函数 在每个被调用中维持一份拷贝 8、程序的局部变量存在于栈中,全局变量存在于静态区 中,动态 申请数据存在于 堆中。 9、设有以下说明和定义: i; k5; c; ; ; ; ; ; ; 那么语句 ( )();的执行结果是: 52 答: 是一个 , 变量公用空间. 里面最大的变量类型是 5, 占 用 20 个字节. 所以它的大小是 20 是一个 , 每个变量分开占用空间. 依次为 4 + 20 + 8 = 32. 所以结果是 20 + 32 = 52. 当然.在某些 16 位编辑器下, 可能是 2 字节,那么结果是 2 + 10 + 8 = 20 10、队列和栈有
26、什么区别? 队列先进先出,栈后进先出 11、写出以下代码的输出内容 ( a) (); (*c) (*a*b); (1)( ); (2) (*); (2 1, *2) ; (1); (1, 2); (n,*2); () a; (,10); 0; 答:110 12、请找出下面代码中的所以错误 说明:以下代码是把一个字符串倒序,如“倒序后变为“ 1、 2、() 3、 4、 *; 5、 * ; 6、 (); 7、 (*)(); 8、 * ; 9、 * ; 10、 (0) 11、 ; 12、 (); 13、 0; 14、 答: 方法 1: () * = ; = (); * = (*)(1)要为0 分配一
27、个空间 * d = ; * s = 1指向最后一个字符 ( 0 ) *; *d = 0尾部要加0 (n); () 使用完,应当释放空间,以免造成内存汇泄露 0; 方法 2: () =; (); t; ( 0; i2; ) i; i1; 1; (); 0; 11,2,7,28,126 请问 28 和 126 中间那个数是什么?为什么? 第一题的答案应该是 43-1=63 规律是 n3-1(当 n 为偶数 0,2,4)n3+1(当 n 为奇数 1,3,5) 答案:63 2.用两个栈实现一个队列的功能?要求给出算法和思路! 设 2 个栈为 , 一开始均为空. 入队: 将新元素 入栈 A; 出队: (
28、1)判断栈 B 是否为空; (2)如果不为空,那么将栈 A 中所有元素依次 出并 到栈 B; (3)将栈 B 的栈顶元素 出; 这样实现的队列入队和出队的平摊复杂度都还是 O(1), 比上面的几种方法要 好。 3.在 c 语言库函数中将一个字符转换成整型的函数是 ()吗,这个函数的原型 是什么? 函数名: 功 能: 把字符串转换成长整型数 用 法: ( *); 程序例: () l; * = 98765432; l = (); ( = = n, , l); (0); 13.对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 中应用什 么实现? c 用宏定义,用 17.软件测试都有那些种类
29、? 黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口 18.确定模块的功能和模块的接口是在软件设计的那个队段完成的? 概要设计阶段 19. x1, x2, x3=10, x4, x5, x; 问 0x801005,0x8010f4 ; 20. *p1; *p2; p1=( *)0x801000; p2=( *)0x810000; 请问 p1+5= ; p2+5= ; 25.请问下面程序有什么错误? a602501000; (0=1000) (0250) (060) aijk=0; 把循环语句内外换一下 26. 500 ( * ) ; . (0) ; . C 语言面试题大汇总之华为面试题
30、 整理 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用: ;局部变量可以与全局变量同名,在函数内引用 这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以 定义多个同名的局部变量,比方在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就 在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答: 可以用引用头文件的方式,也可以用 关键字,如果用引用头文件方式来引用某个在 头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用 方式引用 时,假定你犯了同样的错误,那么在编译期间不会报错
31、,而在连接期间报错。 3、全局变量可不可以定义在可被多个 文件包含的头文件中?为什么? 答:可以,在不同的 C 文件中以 形式来声明同名全局变量。 4、请写出以下代码的输出内容 () ; 10; ; ; 10*; (b,c,d:,b,c,d; 0; 答:10,12,120 5、 全局变量与普通的全局变量有什么区别? 局部变量和普通局部变量有什么区别? 函 数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以 就构成了静态的全局变量。全局变量本身就是静态 存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非 静态全局变量的作用域是整
32、个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文 件中都是有效的。 而静态全局变量那么限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程 序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函 数公用, 因此可以防止在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。 把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 3) 函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(),内 可以在不同的 C 文件中
33、声明同名 的全局变量,前提是其中只能有一个 C 文件中对此变量赋初值,此时连接不会出错. 部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明, 要使用这些函数的源文件要包含这个头文件 综上所述: 全局变量与普通的全局变量有什么区别: 全局变量只初使化一次,防止在其他文件单元中被引用; 局部变量和普通局部变量有什么区别: 局部变量只被初始化一次,下一次依据上一次结果值; 函数与普通函数有什么区别: 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 6、程序的局部变量存在于栈中,全局变量存在于静态区 中,动态申请数据存在于 堆中。 7、设有以下说明
34、和定义: i; k5; c; ; ; ; ; ; ; 那么语句 ( )();的执行结果是:52 考点:区别 与 .(一般假定在 32 位机器上) 答: 是一个 , 变量公用空间. 里面最大的变量类型是 5, 占用 20 个字节. 所以它的大小 是 20. 是一个 , 每个变量分开占用空间. 依次为 4 + 20 + 8 = 32. 所以结 果是 20 + 32 = 52. 当然.在某些 16 位编辑器下, 可能是 2 字节,那么结果是 2 + 10 + 8 = 20 8、队列和栈有什么区别? 队列先进先出,栈后进先出 9、写出以下代码的输出内容 ( a) (); (*c) (*a*b); (1
35、)( ); (2) (*); (2 1, *2) 1 ; (1); (1, 2); (,*2); () a; 局部变量 a 为 0; (,10); 0; 答:110 10、请找出下面代码中的所有错误 (题目不错,值得一看) 说明:以下代码是把一个字符串倒序,如“倒序后变为“ () *; * ; (); (*)(); * ; * ; (0) ; (); 0; 答: 方法 1:一共有 4 个错误; () * = ; = (); * = (*)(1)要为分配一个空间 * s = 1; ( 0 ) *; *d = 0; (); = ; 0; 尾部要加0 使用完,应当释放空间,以免造成内存汇泄露 防止产
36、生野指针 (); 指向最后一个字符 * d = ; 方法 2: (方法一需要额外的存储空间,效率不高.) 不错的想法 () =; (); t; ( 0; i2; ) i; i1; 小心一点 1; (); 0; 11.对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 中应用什么实现? c 用宏定义,用 12.直接链接两个信令点的一组链路称作什么? 点到点连接 13.接入网用的是什么接口? V5 接口 14 都用了那些协议? H.323 协议簇、 协议、 协议、H.248 和 协议 15.软件测试都有那些种类? 黑盒:针对系统功能的测试 白盒:测试函数功能,各函数接口 16.确定模块的功
37、能和模块的接口是在软件设计的那个队段完成的? 概要设计阶段 17. *p1; *p2; p1=( *)0x801000; p2=( *)0x810000; 请问 p1+5= ; p2+5= ; 答案:0x801005(相当于加上 5 位) 0x810014(相当于加上 20 位); 选择题: 21 链接到 用到以下那个协议? D 22.属于网络层协议的是:( B C) .25 23 消息调度机制是:(C) A.指令队列.指令堆栈.消息队列.消息堆栈; 找错题: 25.请问下面程序有什么错误? a602501000; (0) 问答题: 29 的原理是什么? 又称 或 是建立在 技术上的分组化、数
38、字化传输技术,其根本原理是: 通过语音压缩算法对语音数据进行压缩编码处理,然后把这些语音数据按 等相关协议进行打包,经过 网络把数据包传输到接收地,再把这些语音数据包串起来,经过解码解压处理后,恢复成原来的语音信号,从 而到达由 网络传送语音的目的。 30 通信建立的过程怎样,端口有什么作用? 三次握手,确定是哪个应用程序使用该协议 31.1 号信令和 7 号信令有什么区别,我国某前广泛使用的是那一种? 1 号信令接续慢,但是稳定,可靠。 7 号信令的特点是:信令速度快,具有提供大量信令的潜力,具有改变和增加信令的灵活性,便于开放 新业务,在通话时可以随意处理信令,本钱低。目前得到广泛应用。
39、32.列举 5 种以上的 新业务 如“闹钟效劳、“免干扰效劳、“热线效劳、“转移呼叫、“遇忙回叫、“缺席用户效劳、“追查恶意呼叫、 “三方通话、“会议 、“呼出限制、“来电显示、“虚拟网 等 ; . 答: 死循环 找错题: 四.找错题 找错题 1.请问下面程序有什么错误? a602501000; (0=1000) (0250) (060) aijk=0; 答: 把循环语句内外换一下 2 500 ( * ) ; . (0) .; 答: 死循环 的取值范围是 0255 3.以下是求一个数的平方的程序,请找出错误: (a)(a)*(a) 5; b; (); 答:结果与编译器相关,得到的可能不是平方值
40、. 微软亚洲技术中心的面试题! 1进程和线程的差异。 答:线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的根本单位,进程作为拥有资源的根本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创立或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创立或 撤消线程时的开销。 2.测试方法 答:人工测试:个人复查、抽查和会审 机器测试:黑盒测试和白盒测试 3 与 的差异。 答 是堆,
41、 是栈。 的空间由操作系统自动分配/释放, 上的空间手动分配/释放。 空间有限, 是很大的自由存储区 C 中的 函数分配的内存空间即在堆上中对应的是 操作符。 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进 行 4 下的内存是如何管理的? 分页管理 8谈谈 32 下的分页机制 小页(4K)两级分页模式,大页(4M)一级 9给两个变量,如何找出一个带环单链表中是什么地方出现环的? 一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方 10在 32 中一共有多少种方法从用户态跳到内核态? 通过调用门,从 3 到 0,中断从 3 到 0,进入 8
42、6 等等 11如果只想让程序有一个实例运行,不能运行两个。像 一样,只能开一个窗口,怎样实现? 用内存映射或全局原子互斥变量、查找窗口句柄. ,互斥,写标志到文件或注册表,共享内存。. 12如何截取键盘的响应,让所有的a变成b? 答:键盘钩子 14存储过程是什么?有什么用?有什么优点? 答:我的理解就是一堆 的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行 速度比单独执行 快很多 15 有什么特点?什么时候用? 答: 可以独立于任何特定的类型编写代码,是泛型编程的根底. 当我们编写的类和函数能够多态的用于跨越编译时不相关的类型时,用 . 模板主要用于 中的容器,算法,迭代器
43、等以及模板元编程. (的 是实现在库设计和嵌入式设计中的关键。 能实现抽象和效率的结合;同时 还能有效地防止代码膨胀) 16谈谈 结构的特点和优点。 答 分布式应用结构,简称 是微软创立新一代高适应性商业解决方案的框架,它使公司能够充分地挖掘数字神经系 统的优点。 是第一个将 、客户/效劳器、和用于计算的 模型结合并集成在一 起的为新一类分布式计算方案而设计的应用软件体系结构 17. 网络编程中设计并发效劳器,使用多进程与多线程,请问有什么区别? 答:1)进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。 2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数 据,但拥有自己的栈空间,拥有独立的执行序列。 两者都可以提高程序的并发度,提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线 程适合于在 机器上运行,而进程那么可以跨机器迁移。 思科 1. 用宏定义写出 x,y 答 (x, y) x = x +
限制150内