moto的笔试题

作者在 2006-10-24 04:28:00 发布以下内容

1、智能指针,com实现的原理,
2、printf()可变参数如何实现
3、标准模板库vector追加数据如何实现。是底层如何实现,不能用现有的东东。
4、还有,java的垃圾收集机制如何实现为什么?如果是你自己实现垃圾收集机制,如何实
现? 用什么数据结构。
5、二叉排序树和哈希表那个查找效率高,实用于pda 。
6、.net的底层实现机制。
7、进程间通信如何实现。
8、还有迭代问题,什么问题用迭代,迭代在操作系统中如何实现的 。
9、如何交换两个变量,不能用中间变量。
10、c与c++static函数的区别???
11、const 函数的作用,如何实现钩子函数。
12、两层容错技术怎么实现?
13、写出函数指针,函数返回指针,const指针,指向const的指针,指向const的const指针.
14、函数调用如何实现,注意什么问题。
15、指针和引用的差别,
16、拷贝构造函数如何实现,什么情况下会用到。

高手们的杰作 | 阅读 1257 次
文章评论,共5条
海啸南风(作者)
2006-10-24 04:29
1
转自csdn,在那些高人的口中看起来很简单,不过我确实有很多题答不上,真实学海无涯,还得努力啊!
海啸南风(作者)
2006-10-24 04:36
2
附上一些有意义的回帖吧,很多看不懂,不过可以助于理解。

看看高手们是怎么分析问题的。
海啸南风(作者)
2006-10-24 04:37
3
4、java的垃圾收集机制如何实现为什么?如果是你自己实现垃圾收集机制,如何实
现? 用什么数据结构。

垃圾收集没有统一的实现。《深入Java虚拟机》中提了几种算法,包括引用计数,跟踪收集,拷贝收集(这个挺有趣的),还有重头火车算法。但是这本书有点旧了,新的技术不清楚。
最简单的实现做法,莫过于new的时候纪录,程序exit的时候批量delete……

5、二叉排序树和哈希表那个查找效率高,实用于pda 。 
质量精良的hash肯定是查找效率最高的。但是pda上,应该是二叉树比较好吧。在内存限制的条件下,hash可能会有变态表现。而有序二叉树的查找算法就比较稳定,空间复杂度n,最坏时间复杂度nlog(n),而且避免了不同情况下hash函数的设计困难。

12、两层容错技术怎么实现?
啥?



9、如何交换两个变量,不能用中间变量。
///////////////////////////////////////////////////
我只会这一题,还不知道这样做对不对:
  int a;
  int b;
//交换 a,b
   
  a = a+b;
  b = a - b;
  a = a -b;
这样做,可能会出现的的一个问题是:溢出.就是当 a+b的值超过 int 类型所能表示的最大范围时,会出错!




9、交换两个变量,不能用中间变量
---------------------------------
如下实现:
int i;
int j;

j = (i + j)- (i = j);





//////////////////////////////////////////////////////////////////////////////
  a = a+b;
  b = a - b;
  a = a -b;
这样做,可能会出现的的一个问题是:溢出.就是当 a+b的值超过 int 类型所能表示的最大范围时,会出错!
//////////////////////////////////////////////////////////////////////////////

我的方法是这样的:
int swap(int &a,int &b)
{
   if(a>b) exchage(a,b)
   else exchage(b,a);
}
int exchange(int &a,int &b)
{
    a=a-(a-b)/2;b=b+(a-b)*2;a=a-(b-a);
}
这个方法就不存在表数溢出问题了



////////////////////////////////////////////////////////
如下实现:
int i;
int j;

j = (i + j)- (i = j);
////////////////////////////////////////////////////////
我试了一下,这个方法没能实现交换,
最后i和j的值都等于原来j的值。
不知道你调试过没有?




TO  Elivs() ( ) 信誉:100    Blog 

我的方法是这样的:
int swap(int &a,int &b)
{
   if(a>b) exchage(a,b)
   else exchage(b,a);
}
int exchange(int &a,int &b)
{
    a=a-(a-b)/2;b=b+(a-b)*2;a=a-(b-a);
}
这个方法就不存在表数溢出问题了
///////////////////////////////
你的方法在a-b为偶数没有问题,如果是奇数是不对的。

海啸南风(作者)
2006-10-24 04:37
4
交换两个变量的值不使用第三变量:
int a,b;
a = a^b;
b= a^b;
a = b^a;





int swap(int &a,int &b)
{
   if(a>b) exchage(a,b)
   else exchage(b,a);
}
int exchange(int &a,int &b)
{
    a=a-(a-b)/2;b=b+(a-b)*2;a=a-(b-a);
}
这个算法比较取巧,但是正如楼主先发现的Golfen() ( )所说,奇数不行,不过可以改进.



int a,b;
a = a^b;
b= a^b;
a = b^a;
-------------------------------------------------------
这不具有可移植性。它试图在序列点之间两次修改变量 a, 而这是无定义的。 
例如,有人报告如下代码: 
    int a = 123, b = 7654;
    a ^= b ^= a ^= b;
在 SCO 优化 C 编译器 (icc) 下会把 b 置为 123, 把 a 置为 0。 





很多题都没有标准答案,在不同的环境下会有不同的结果!!!!
智能指针,com实现的原理?是在面试WINDOWS程序员吗?如果不是的话,COM实现原理没必要了解
printf()可变参数如何实现??这个问题还问得很有水平,如果是面试嵌入式职位的话
标准模板库vector追加数据如何实现?如果仅是C程序员,没必要知道
java的垃圾收集机制如何实现为什么?更通用的问法:“自动内存管理机制如何实现”
二叉排序树和哈希表那个查找效率高???问得一点水平都没有,没有给特定环境,无法比较
.net的底层实现机制??在面试.NET程序员吗?如果不是,还不如问“类似于.net之类的虚拟机如何实现”
进程间通信如何实现??进程间通信机制有N种,不同的种类有不同的机制,这样的题都有???
迭代在操作系统中如何实现的???真不晓得在说什么,如果是“迭代在编译器中如何实现的”还差不多。
两层容错技术怎么实现?我知识面窄,不晓得是个什么东东
函数调用如何实现,注意什么问题??MOTO出这样的问题,简直有损形象,如果是“函数调用在编译器中如何实现,在程序中进行函数调用时应该注意什么问题(用汇编语言或者C语言举例)”还差不多
指针和引用的差别??这样问得太笼统了,还不如问“指针和引用在C++编译器中如何实现的”
如何实现钩子函数??问得也没水平,应该问“在C语言中如何实现一个回调函数,用代码举例”


综上所述,我真不知道MOTO出的这些题是用来招什么样的程序员,既有嵌入式C与操作系统开发方面,也有C++应用程序开发方面,还有WINDOWS程序开发,JAVA开发,我真还没有见过一个程序员在这几方面都很精通的人,一个公司招人都没有针对性,题出得又特别烂,简直有损MOTO在我心目中的形象!!!!!!




1、智能指针,com实现的原理。这个够写个文章了。
2、printf()可变参数如何实现。就是得到esp和ebp的差值,来确定参数个数
3、标准模板库vector追加数据如何实现。是底层如何实现,不能用现有的东东。
直接往后面放就是了,不够再重新分配内存。(这个问题莫名其妙,不知道问什么)
4、还有,java的垃圾收集机制如何实现为什么?如果是你自己实现垃圾收集机制,如何实
现? 用什么数据结构。
防止内存泄露了,自己实现的话,boost的智能指针。
5、二叉排序树和哈希表那个查找效率高,实用于pda 。哈希效率高,(二叉排序树?二叉树本来就是排序的吧)
6、.net的底层实现机制。kao。。。。够写一本1K页的书了。说白了就是虚拟机,伪代码。
7、进程间通信如何实现。windows 用管道,unix用文件描述符,或者用socket
8、还有迭代问题,什么问题用迭代,迭代在操作系统中如何实现的 。kao又是一个这么泛的问题
9、如何交换两个变量,不能用中间变量。easy
push a 
push b 
pop a 
pop b
10、c与c++static函数的区别???真不知道。俺只知道基本相同。
11、const 函数的作用,如何实现钩子函数。
12、两层容错技术怎么实现?这是啥东西?
13、写出函数指针,函数返回指针,const指针,指向const的指针,指向const的const指针.
昏了,谁天天用举手。
14、函数调用如何实现,注意什么问题。
没明白问啥
15、指针和引用的差别,
写法不同,本质都是指针。
16、拷贝构造函数如何实现,什么情况下会用到。
用一个对象构造另外一个对象的时候。

这个职位是干啥呢?啥都有,精通一个都难啊。
moto啊,啥公司出这么高水平的题,肯定招不到人



int swap(int &a,int &b)
{
   if(a>b) exchage(a,b)
   else exchage(b,a);
}
int exchange(int &a,int &b)
{
    a=a-(a-b)/2;b=b+(a-b)*2;a=a-(b-a);
}

算法有问题,输入a=2,b=3的时候是错误的!

海啸南风(作者)
2006-10-24 04:39
5
不知道大家看了这些题目以后,感觉如何,如果哪位能给出参考答案,那太感谢了!相信会有这样的高手的,欢迎不吝赐教!
游客请输入验证码