Autodesk笔试题收集
1.What is virtual function ?what is vtable used for?
虚函数用来表现基类和派生类的成员函数之间的一种关系.
虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual.
基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义.
在派生类中重新定义时,其函数原型,包括返回类型,函数名,参数个数,参数类型及参数的先后顺序,都必须与基类中的原型完全相同.
虚函数是override的一种表现形式.
2.What\’s the difference between “struct” and “class” in c++?
3.What do we need to make destructor vitual?why?
为了防止资源泄露
例如:
Base *ptr= new Derived;
//…
delete ptr;
如果析构不为virtual,则只会调用Derived对象中Base子对象的析构函数
4.What to declare member function as const?
5.What is the Message reflection in MFC?
父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。
6.How many ways to get the handle of a model dialog?what are they?
7.How to change the default window procedure after the window shows up?
8.What is the difference between STA and MTA in COM?
STA是只能容纳一个线程的容器,MTA是能容纳多个线程的容器
9.What is marshaling in COM?
10.What is dual interface in COM?
Dual interface is one that supports both – IDispatch interface and vtbl-based interface. Therefore, it might be used in scripting environment like VBScript and yet to use power and speed of vtbl-based interface for non-scripting environment. Discussion then may easily transform into analyzing of dual interface problems – be prepared to this twist.
11.What is the difference between aggregated and contained object in COM?
12.Write an insert function for a sorted singly linked list please take into considerations of various conditions including error conditions?
13.甲乙丙丁是血缘关系,其中一个与其他三个性别不同,其中有甲的母亲,乙的哥哥,丙的父亲,丁的女儿。知道其中年龄最大的和最小的性别不同,问谁和其他人性别不同。
Task: Use C++ to implement the functionality of matrix and a simple user interface to manipulate matrix
Requirements:
1. Good programming style, design & production code quality
2. Can hold any type of data which meet certain requirements
3. Support any number of elements
4. Support common matrix operators (Only +, -, * are required)
5. Correct copy behavior
6. Support different ways to store the matrix data in a optimized way(For example, does sparse matrix & normal matrix use the same data structure?)
Optional Requirements:
7. Can send events occurring inside matrix to others (For example, when the size of matrix changes, send a OnSizeChange event to those who are interested in this event)
8. Achieve best possible performance
9. Or whatever you think appropriate(Reference counting, etc)
Autodesk笔试题目
C/C++ Programming
1,列出两个情况是必须使用成员初始化列表,而不在构造函数里面赋值
class Base
{
Base(int a);
//..
};
class Derived
{
Derived(int a) : Base(a){};
//...
};
2,#define DOUBLE(x) x+x
i = 5 * DOUBLE(10)
这个时候i是什么结果?60
正确的DOUBLE应该怎样写?
#define DOUBLE(x) ((x)+(x))
3,static_cast和dynamic_cast有什么区别?
1)。dynamic_cast:运行时检查,用于多态的类型转换(upcast,downcast和crosscast),只能转换指针和引用。
2)。static_cast:编译时检查,用于非多态的转换,可以转换指针及其他,比如:int->float还可以逆隐式转换,比如:int->char。It is left to the programmer to ensure that the results of a static_cast conversion are safe.
4,namespace解决了什么问题?
名字冲突
5,auto_ptr是什么东西,有什么用?
智能指针,主要是用来自动管理指针所指向的内存(memory)资源
1)所有权概念:不要让两个auto_ptr对象拥有空闲存储区内同一对象的所有权
2)不能用一个指向“内存不是通过应用new表达式分配的”指针来初始化或者赋值auto_ptr
Algorithm and GP
1, 写出三个你熟悉的排序法,以时间复杂度的大小排序
2, 写出一个使用递归来反转一个单向链表的函数
3, 写一个程序测试系统是Big_Endian的还是Little_Endian的(以前万老师发帖讨论过了)
联合体union
int checkEndian()
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
C++ Programming
1, C++有管理多种内存,分别写出他们是什么,他们的特性和性能如何?
静态存储
栈
堆
2, 写出一个基于char*的string类,包括构造析构函数和赋值运算符,取字串长度等基本操作
Graphic(两题都不会,全忘了)
……
IQ
1, 称面粉(经典题)
2, 在平面上有一系列间距为2的无限长的平行线,在上面扔单位长度的线段,和平行线相交的概率是多少?
3, A君和B君见到B君的三个熟人X,Y,Z
A君问B君:“他们的多大”
B君说:“他们的年龄之和是我们的年龄之和,他们的年龄的乘积是2450”
A说:“我还是不知道”
B说:“他们都比我们的朋友C要小”
A说:“那我知道了”
问C的年龄是多少?
MFC(不太会做,记不清楚了)
1, 怎么为窗口自定义消息
Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令。然而,有时我们需要定义自己的消息来通知程序什么事情发生了,这就是用户自定义消息
2, SendMessage和PostMessage的区别
PostMessage 是异步的,SendMessage 是同步的。
PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。
3, CRuntimeClass是由什么用的?他是怎样得到的?
MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例
4, 怎样通过一个句柄得到CWnd的指针
直接转换CWnd* wnd=(CWnd *)handle;
或
用FromHandle();
或
Attach()函数
都可以
智力题:
甲,乙,丙,丁是亲缘关系,他们之间没有违反伦理道德的问题。1)其中一个与其他三个性别不同。2)在这四个人中,有甲的母亲,乙的哥哥,丙的父亲,丁的女儿。3)最年长的和最年轻的性别不同。
问:谁与其他三个性别不同?
答案:丁
一天,A君和B君一起在路上走着,遇见B君的三个熟人 X,Y,Z。A君问起B君:“他们三个人今年多大?”B君想了想说:“那我就考考你吧:他们三人的年龄之和为我们两人年龄之和,他们三人的年龄相乘等于2450。”A君算了算说:“我还是不知道!”B君听后笑了笑说:“喔!那我再给你一个条件–他们三人的年龄都比我们的朋友C君要小。”A君听后说:“喔!那我知道了。”
最后问C君的年龄是多少?25<C<=35
x y z
7 14 25
1. 分析一下这段程序的输出 (Autodesk)
class B
{
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i) : data(i) //B(int) works as a converter ( int -> instance of B)
{
cout<<"constructed by parameter " << data <<endl;
}
private:
int data;
};
B Play( B b)
{
return b ;
}
(1) results:
int main(int argc, char* argv[]) //constructed by parameter 5
{ //destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(t1); //destructed t1形参析构
return 0; //destructed t2 注意顺序!
} //destructed t1
(2) results:
int main(int argc, char* argv[]) //constructed by parameter 5
{ //destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(10); //constructed by parameter 10
return 0; //destructed B(10)形参析构
} //destructed t2 注意顺序!
//destructed t1
2. 写一个函数找出一个整数数组中,第二大的数(microsoft)
答案:
下面是一个O(n)算法
const int MINNUMBER = -32767 ;
int find_sec_max( int data[] , int count)
{
int maxnumber = data[0] ;
int sec_max = MINNUMBER ;
for ( int i = 1 ; i < count ; i++)
{
if ( data[i] > maxnumber )
{
sec_max = maxnumber ;
maxnumber = data[i] ;
}
else
{
if ( data[i] > sec_max )
sec_max = data[i] ;
}
}
return sec_max ;
}
但是如果要求第n大的数,可能整个算法就无能为力了
一种求第n大的算法是,借助于快速排序的思想,对其进行改进
3. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。
KMP算法效率最好,时间复杂度是O(n+m)。
4. 多重继承的内存分配问题:
比如有class A : public class B, public class C {}
那么A的内存结构大致是怎么样的?
这个是compiler-dependent的, 不同的实现其细节可能不同。
如果不考虑有虚函数、虚继承的话就相当简单;否则的话,相当复杂。
可以参考《深入探索C++对象模型》,或者:
http://blog.csdn.net/wfwd/archive/2006/05/30/763797.aspx
5. 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)
struct node { char val; node* next;}
bool check(const node* head) {} //return false : 无环;true: 有环
一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):
bool check(const node* head)
{
if(head==NULL) return false;
node *low=head, *fast=head->next;
while(fast!=NULL && fast->next!=NULL)
{
low=low->next;
fast=fast->next->next;
if(low==fast) return true;
}
return false;
}
— autodesk面经以及笔试题目回忆
1.******************************************************************
发信人: bny (bny += 发芽的土豆 | 不要变成土豆泥), 信区: Job
标 题: autodesk面筋
发信站: 武汉白云黄鹤站 (2005年04月08日20:01:28 星期五), 站内信件
introduce yourself.
your weakness.
display a form in c#.
by value and by ref in c#.
估计面试官不想自己的耳朵再受我的折磨,改用中文。
处理xml文档的方式。
改用c++继续轰炸,写构造函数和赋值运算符。
虚函数的一些东东,还有cast。
写一个双链表。
…忘了。
你有什么要问的?
握手。汗~传说中握手就没戏了。
大约一个小时。基本就是c++和简历上的东东。
口语太烂,几题没答好,估计被锯。
btw,感觉这次面试有点奇怪,跟其它地区和去年的不大一样,不知道大家的情况怎么样?
说说看。
2.******************************************************************
发信人: bny (bny += 发芽的土豆 | 不要变成土豆泥), 信区: Job
标 题: autodesk面筋2
发信站: 武汉白云黄鹤站 (2005年04月18日21:03:03 星期一), 站内信件
收到面试通知有点意外,因为记得上次说的是final,而且自己感觉是希望不大的。
加上以前的电话面试的话,这算是三面了吧。
听说前面面过的同学说,这次面试官和上次一样也是两个,一个是上次的那个,另一个就
是这次招聘的部门的头头。
由于头头是老外,所以全e文,大约一个小时。汗-_-!
又听说这次招聘的是一个新成立的团队,目前没几个人。狂汗-_-!! 希望不要像03年那样
不厚道。
自我介绍。
没想到这次还是以技术为主。其实内容和上次差不多,只是以c++为主。
关于成员变量初始化顺序,一开始就中了圈套
几个有依赖关系的成员变量要初始化,让写出构造函数。后来面试官说不对,才想起来和
构造函数没关系,而是声明的顺序。
后来一个稍微简单一点,成员变量是一个指针,就是new和delete了。
还有纯虚函数的一些东东,基类的析构函数也该是虚的。
让我写一个双链表,我说上次写的就是这个,换个singleton吧。
写个is-a和has-a。
struct vs. class.
称8个小球的那个问题。
问我还有什么问题,我说上次都问了……
好几天了,忘了不少,只记得这些
说一个星期通知,握手~再汗-_-!!!
3.******************************************************************
发信人: fengbaoshiyi (fengbaoshiyi), 信区: Job
标 题: autodesk电话面试题目解答
发信站: 武汉白云黄鹤站 (2005年05月28日11:51:18 星期六)
stl 里面vector的实现(内部空间的申请与分配)–我晕 这个我也不会,没看过
struct /class的区别
为什么要用struct //成员的默认属性不同,用struct的话,主要是作为数据的集合
怎样使一个class不能被实例化 //1,构造函数私有化,2,抽象类
私有继承和public继承的区别。 //is-a has-a
void *p的问题 //不能++
引用和指针的区别与联系。引用是否可以更改 //引用类似于常量指针,一旦初始化,不
能更改。
windows编程基础,线程与进程的区别 //我竟然忘了
com+是否熟悉,(没用过)
还问了我几个我都没有听说过的名词
然后就是数据结构/算法的问题
简述一下hash算法
一个32位的数据,怎样找到最左边的一个1
一个4*4的格子,填入1~15 然后给个目标状态,怎样去搜索。
给你100万个数据,数据的值在0~65535之间 用最快的速度排序
最后一个问题:
如果我们的一个软件产品,用户回复说:运行速度很慢,你怎么处理
c++的就不说了,只说数据结构的吧。可能这个我比较好一些。
1,hash算法,这个我忘得差不多了,他给了我一个提示,我想起来了。ok
2,n位的2进制数据怎样找罪左边的1,如果是在最左位,这个数是负数,否则的话,左移
一位,看是否变成负数,这是O(n)的算法,O(n/2)的算法:二分方式查找
3,广度优先搜索+启发式
4,统计每个数字出现的频率
5,这个我也没经验,乱说了一通。
4.******************************************************************
发信人: rongboge (荣伯格), 信区: Job
标 题: autodesk2面纪实–fengbaoshiyi
发信站: 武汉白云黄鹤站 (2005年06月02日17:48:18 星期四)
经过我不懈的努力,竟然真的争取到了2面的机会,虽然是电话面试,也好了,省钱啦!!
一上来面试官就说,根据你的简历,我们会关注与算法方面的问题,
1,八皇后问题,详述解法 —轻松搞定
2,kmp快速匹配算法 —不算轻松的搞定
3,无向图中两点间最短路问题 —伟大的迪杰克斯拉算法
4,空间中任意给两个向量,求角平分线 他给了个提示,解决
5,什么是平衡树 —光说上概念来了,其他的不会了(昨晚光看b-,b+树了)
6,哈夫曼编码问题 —回答的有些混乱
7,求1~10000的素数 —筛选法,有点细节没处理好
8,有向图求环 —我只会搜索,在他的提示下,还是没有做出来
9,给n个点,求凸包问题 —hiahia,牛X一把,用二分作的!
10,堆排序 —明确地告诉了他,俺忘了
11,四则运算
(1)给一个前缀表达式,然后求解 —勉强做上来了
(2)给一个中缀表达式,求解 —更勉强的作上来了
12,正则表达式 —一开始不知道什么东西,后来他一解释,原来是正规式,刚考完,轻
松搞定
然后,换人,考智力:
1,3个门,分别叫做:日月星
日:此门通向光明
月:此门非通向光明
星:月非通向光明
至少一个说真话,至少一个说假话,一个通向光明
问:谁通向光明,—-答:星,需要假设来做
2,不均匀的绳子测一个小时,答:两头烧,—我和他讨论了一下,是否可能无法解决,
他说,就是两头烧
3,一个长方形,里面随即挖去另一个长方形,一刀把它平分。—中点相连接
4,4个人过河,怎样最快 1,2,5,7。 答:我以前做过,给我点时间
5,给你三个盒子,其中一个放了东西,你指定一个,然后打开另外两个中的一个,发现是
空的,问:你是否要改变你的选择。 答:我觉着不应该改变,但他说要改变,我想了半天
,没想出来,放弃
6, 1,2,5 3中硬币,有无数个,然后给你个n,让你用最少的硬币数组成n —我竟然用
动态规划作,他告诉我,麻烦了, 贪心,搞定
7,开放性题目:怎样测一个飞机的重量,—答:问厂商,问:还有呢?答:根据发动机
的推力和耗油量,可以推出一个大体值,但有很多影响因素,放弃。
8,给一个正方体,两个对面上有两个点,沿着体表面,找一条最短路,---答:拆开,
直线最短
期间还问了我 线程和进程的区别,---答:上次问过了。
完毕。
好的,你还有什么问题吗?---什么时候给答复
一个星期以内,email回复你,不论录取与否
bye~ef
过了一会儿,手机响,请问你的email地址是什么?---答:*********
好的,我们这就给您发email。请注意查收
开mail,没有:(
结束
5.******************************************************************
发信人: idoloveyou (idoloveyou), 信区: Job
标 题: autodesk intern面试题——STL部分(转载)
发信站: 武汉白云黄鹤站 (2005年07月06日23:38:35 星期三), 站内信件
【 以下文字转载自 VC 讨论区 】
【 原文由 idoloveyou 所发表 】
1.STL中container有哪些?
答:vector,list,set,multiset,map,multimap,deque,bitset
2.map中的数据存储方式是什么?
答:Hashtable
3.map和hashmap有什么区别?
答:不知道。
4.hashmap是标准库中的吗?
答:不是。
5.vector中的erase方法跟algorithm的remove有什么区别?
答:我不怎么清楚,只知道remove_if可以用function object。还有可能vector自带的erase在执行过后会有一些优化的方法吧。
6.function object是什么?
答:(这个我说了半天,反正就是描述一下)
大概就是这么几道题,他问我的STL不多,欢迎大家讨论:)
其他部分过几天陆续放出,敬请期待!
5.******************************************************************
发信人: idoloveyou (idoloveyou), 信区: VC
标 题: autodesk intern面试题——C++语言部分
发信站: 武汉白云黄鹤站 (2005年07月07日23:46:44 星期四), 站内信件
这部分他问了我特别多,回答也比较麻烦,有些题目我就不说我的回答了
1. C++中如何阻止一个类被实例化?
答:抽象类,或者构造函数被声明成private
2. 一般在什么时候构造函数被声明成private呢?
答:比如要阻止编译器生成默认的copy constructor
3. 什么时候编译器会生成默认的copy constructor呢?
答:只要自己没写,而程序中需要,都会生成
4. 如果你已经写了一个构造函数,编译器还会生成copy constructor吗?
答:会
5. struct和class有什么区别?
答:默认的访问级别不同,struct是public,class是private
6. 没有别的不同了吗?
答:好像没有了吧……
7. 为什么说如果一个类作为基类,则它的析构函数要声明成virtual的?
答:(Effective C++ 条款14,我当时刚刚复习过,呵呵)
8. inline的函数和#define有什么区别?
答:类型检查
9. inline是什么意思?
答:就是不产生call,直接把函数的代码嵌入程序。但是inline不是强制的,是
编译器根据需要决定函数是否真的被inline
10. 那你说说什么时候会真的被inline,什么时候不会呢?
答:(略)
11. 如果把一个类的成员函数写在类的声明中是什么意思?
答:inline
12. public继承和private继承有什么架构上的区别?
答:public是is-a的关系,private是has-a的关系
13. 在多继承的时候,如果一个类继承同时继承自class A和class B,而class A和
B中都有一个函数叫foo(),如何明确的在子类中指出override哪个父类的foo()?
答:虚拟继承吧……(我想了半天也不记得这个怎么弄了,他也就没有继续难为
我)
14. 虚拟继承的语法是什么?
答:class C : public A, virtual public B
15. 部分模版特例化(我忘了他当时怎么翻译这个词的了,反正就是partial temp
late specialization)和全部模版特例化有什么区别?
答:(想了半天)就是是不是还有一个通用的模版的区别。这个特性在VC中不支
持,所以我不是很熟悉,不好意思……
16. 哦?VC不支持?你确定
答:确定!(.net刚出的时候,我特意看过MSDN,上面写着VC7.0中有3个C++的
特性没有支持,其中就有这个,没想到他连这个都考!)
……
剩下的忘了,想起来再添吧
6.***********************************************
大家讨论啊!希望对我的回答更正一下,谢谢:)
1.编一个函数,使一个单项链表转置。
2.拆解一个整数,比如4,可以拆解成
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
3.哈希表
4.不用库函数,实现strcpy或者memcpy等函数