游戏开发论坛

 找回密码
 立即注册
搜索
楼主: typ77

程序面试试题(节选)

[复制链接]

5

主题

77

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2006-11-16 12:54:00 | 显示全部楼层

Re:程序面试试题(节选)

typ77真没有道德,游戏公司的面试题怎么可以刊登出来?

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2006-11-16 12:54:00 | 显示全部楼层

Re:程序面试试题(节选)

匈牙利标记法不用的原因就是一个字——“烦”!
这么罗嗦的手段,在以前还有使用的理由,现在则没有了。这个标记法出现的原因就是方便人们对变量有认识,在以前IDE不发达的时代,这样做是有很多便利的,但是现在只要鼠标一指,变量的类型马上就可以显示出来,它的意义消失了不少。再者,现在已经是OO横行的时代,大多数变量都是类,而类的数量又如此之多,使用匈牙利标记法来标记几乎是不可能了。
所以微软在推出.NET平台的时候就明确表明了:不推荐使用匈牙利标记法。

1

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2006-11-16 14:58:00 | 显示全部楼层

Re:程序面试试题(节选)

高级骑士。。。

又是一个愤青?这些题目要我可以批发给你。。。这东西对我们来说毫无作用。是哦~~~如果要骂的,貌似论坛上有很多这类型的贴,我也不是第一个这样做的。。。

1

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2006-11-16 15:10:00 | 显示全部楼层

Re:程序面试试题(节选)

回应一下neelkey
-----------------------------------------------------------------------------
个人认为你说的东西很不对。基本上就是钻牛角尖。

如果说是用你那种方法去把#define变成可以定义“变量”,那确实可笑。归根究底也就是定义了两个常量,而在某个时候把前面一个常量删除而再定义。唉~~const定义的常量也能做到,而且还方便。。。

而你说的const能做#define不能做的事情。简单来说就是没有数据类型。。。。

1

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2006-11-16 15:22:00 | 显示全部楼层

Re:程序面试试题(节选)

回应FlyMagic
----------------------------------------------------------------------------------
呵呵~~学习的速度也很快的。其实这些问题也不用太紧张,毕竟在工作上也不经常用到。但是对于一个新人来说,这些都是看其基础能力到什么水平。。。也不用细心研究这些问题,只要大概了解其原理就OK~~~

但是要说说那个匈牙利命名法的问题。其实在多人开放的时候(不管是软件或者游戏),命名规则都是必须的。我不明白为什么有OO后就不用了命名规则呢?
其实你还没有了解命名规则真正的意义。。。上网找找看吧!
嗯~~微软在推出.NET平台的时候就明确表明了:不推荐使用匈牙利标记法。没错,但是它又推荐用另外一种命名法。。。。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-11-16 15:46:00 | 显示全部楼层

Re: Re: Re:程序面试试题(节选)

typ77: Re: Re:程序面试试题(节选)


这个题目是靠算法的问题。如果连你认为这么简单的算法也不能写出来,到底是你水平问题还是出题人水平问题...


...strlen有什么特殊的算法?偶还真没听过,希望赐教...
strstr倒是有KMP优化过的版本..

52

主题

637

帖子

1420

积分

金牌会员

Rank: 6Rank: 6

积分
1420
发表于 2006-11-16 15:54:00 | 显示全部楼层

Re: Re:程序面试试题(节选)

FlyMagic: Re:程序面试试题(节选)

Re:程序面试试题(节选)

#define 增加分配空间不是他本身的作用,比如说

#define xxx (300)

void main(void)
{
int x = xxx * xxx * xxx;
}

这种写法和
void main(void)
{
int x = 300 * 300 * 300;
}
这种写法是没有区别的。问题就在这里了,三个300虽然值是一样,但是存储的空间是不一样的,也就是说要3个单位的存储空间。#define 中使用的常量越多,空间就越多。因为每个都被替换成了数字,而每个数字要分配不同的存储空间。

而写成
const int xxx = 300;
void main(void)
{
int x = xxx * xxx * xxx;
}

这样的话,三个xxx都使用的同样一个存储空间,所以不管使用多少次,存储空间都不会增加。就是这个原因。

这俩程序生成的机器代码肯定完全一样

而且根本不存在"三个xxx"这种东西,   xxx* xxx* xxx,在编译阶段就已经被
编译器计算出值,到时候就是一条简单的mov 指令而已

只要全局的,const也好,define也好,根本不会有什么储存空间之类的东西


另外,const可以修饰指针 ,define不行.const能干n多 define死活也干不了的事情

很显然的,define只对预编译器有效,对编译器无效

define和const根本就是不同处远远多于近似处

1

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2006-11-16 15:54:00 | 显示全部楼层

Re: Re: Re: Re:程序面试试题(节选)

tarkey: Re: Re: Re:程序面试试题(节选)



...strlen有什么特殊的算法?偶还真没听过,希望赐教...
strstr倒是有KMP优化过的版本..

嘻嘻~~~答案是。。。没有!也没有特殊不特殊,就是一个算法思想的问题。

52

主题

637

帖子

1420

积分

金牌会员

Rank: 6Rank: 6

积分
1420
发表于 2006-11-16 16:07:00 | 显示全部楼层

Re:程序面试试题(节选)

干脆多考个问题

int b = 4;

int b = (8 / 2 + 1) * 100 / 125;

哪条语句运行速度快?呵呵

1

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2006-11-16 16:18:00 | 显示全部楼层

Re: Re: Re:程序面试试题(节选)

neelkey: Re: Re:程序面试试题(节选)


这俩程序生成的机器代码肯定完全一样

而且根本不存在"三个xxx"这种东西,   xxx* xxx* xxx,在...

悲哀~~完全的悲哀!估计你只是依照你的经验而谈,而经验往往都不是正确的。
首先我劝你先去读读《effectiveC++》或者是编译原理之类的书。或者去http://www.cygnus.com/ 看看,这里有C++标准文件(不知道现在还有否)。
------------------------------------------------------------------------
在说一说原理。(唉~~变了老师。。。郁闷)
------------------------------------------------------------------------
#define ASPECT_RATIO 1.653
编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。那么如果要调用,就必须为其生产存储空间。

原理我只简单说说,如果你还要固执与你的想法。那么你试试看就知道结果了。做人要虚心呀。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 22:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表