前些天去**游戏面试了,可算是往C++这方面发展的第一次出师,之前走Web开发也才出过三次(***数码科技、***邦科技,还有一个在江苏海事学院旁边的工作室忘了叫什么名字了)。
题目差不多都抽网上的经典题,由于题目时上半学期只是稍微思考了一下,既没做笔记,也没敲代码进行彻底的研究。所以靠的基本是基本功了,考完还感觉蛮不错的,可一对比网上给出的答案,功底的距离就跃然纸上了。为了增加功底,吸收教训,特做一次比较:
1. 分别对bool,int ,floor,指针变量与“零值”比较的if语句。(假设变量为var)
if( ! var ) if( var!=0 ) if( var ==0 ) if( ! var )
正解:if( ! var ) if( var!=0 ) if( (var>= -0.00001) &&(var<=0.0001) ) if( var!=NULL )
注:浮点型变量的计算并不精确,所以不适宜用==或!=与数字比较。
2. 在Windows NT 环境下32位的C++程序,计算sizeof()的值
Void fun ( char str[10]) { sizeof(str)=? ;}
Void *p=malloc(100); sizeof(p)=?
此时的str在函数内作为参数的指针,所以为4,如果在正常语句里(char str[10],sizeof(str)则等于10*1);p为指针,所以也为4(指针占用的内存为4)。
3.用#define定义一年的秒数(不考虑闰年),写一个“标准”宏MIN,输入两参数,返回较小的一个。
#define SecondInYear 365*24*60*60
(正解:const SecondInYear=365*24*60*60; const常量有数据类型,而宏常量没数据类型,编译器无法对其进行类型安全检查,它只是字符的替代,如果处理不当替代时可能有边际效应,且编译器无法对宏常量进行调试)。
#define MIN(a,b) ( (a)>(b)?(b):(a) ) (对变量加括号防止边际效应,句末无逗号)
4.#ifndef
#define
#endif 此结构的作用是:防止重复定义。(防止被重复引用)
5.head和stack的区别;
只知道stack是栈,就写了栈的特点:先进后出,操作只能在栈顶;head就认为是队列(linear):先进先出,操作位置不固定。
其实问题的关键是问在内存中的head(堆)和stack(栈)的区别
(在内存分配上来说 栈是系统提供的内存空间,是有限的,函数的局部变量占用的就是栈空间,函数返回的时候释放栈内存,在程序编译的时候已经分配好;堆是动态分配内存的时候,动态申请的空间,就是在程序运行中可以随时申请.可以用new malloc 来获取,delete free来释放. )
6.链表与数组的区别;
数组可随已读取,链表只能顺序读取
(在访问方式上:链表只能顺序读取,而数组可以随机读取;在空间使用上:链表可以随意扩大,而数组则不能)
7.以你玩过的网络游戏为例,分析一下该游戏的“背包系统”;
不了解“背包系统“,就没进行分析;后来上网查找分析了一下;应该属于一个背包形式的数据结构,“背带”着自己游戏过程中的物品,道具等;
8.程序分析(分析程序运行的结果)
该次考的是关于函数返回类型的区别;无返回值、有返回值,在函数内执行new,而退出时没delete的情况。
9.const的作用(应该也考虑一下static的作用)。
常量变量:避免某些变量被随意改变。
函数参数:避免在被调用函数内被改变。
(a.欲阻止变量被改变,可使用const关键词,在定义时需对其初始化,以后就不能修改它了;
b.在函数声明中,用const修饰形参,表明该参数在函数内部不能被改变;
c.对于类成员函数,若指定其为const,则表明是一常函数,不能修改类的成员函数;
d.对于类的成员函数,有时必须制定气返回类值为const,以确保气返回值不为“左值”)。
10.列出变量,说出变量的含义(指针,指针的指针,指针数组,数组指针的考察)
略
11.自定义一strcopy函数,函数形式如下:
char *strcopy(char *strDest,const char *strSrc)
{
While( *strSrc!=’/0’)
{
strDest+=*strSrc; //少了对两指针的非0判断assert( (D!=NULL)&&(S!=NULL) )
strSrc++;
}
return strDest;
}
后记:过了四五天,才抽时间整理,次序就打乱了。很多题目在《程序员面试宝典》上都有,堪称程序员的《葵花宝典》。题目也很经典,就正如网上的评语“这些题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入,没有一定的知识广度和深度,不可能对这些问题给出全面的解答。”
对程序员来说内功,确实很重要,有时间多看看一些经典的题,提高自己的视野,增强实力,不论工作与否!
即使没通过,可让我深切地感受到内功的重要性!
原文发表于:http://dcxj27.blog.163.com/blog/static/2326684020096511643780/
(google收录文章比摆渡快多了)