Autodesk面试题70道 Autodesk面试题70道

本文汇总了70道C++面试题,内容涉及多态、成员变量初始化、数据结构(如链表、哈希表)、算法(如哈希算法、最短路径)、设计模式、面向对象特性等,全面考察C++程序员的技术功底。
摘要由CSDN通过智能技术生成
 
近一年以来,AUTODESK的面试题在网上是闹的沸沸扬扬,作为一个名企,这是可以理解的,况且其面试题质量也是不错的。抽一些闲暇时间,把网上传的比较多的70道题简单的解答了一遍,不为别的,只为再熟悉一下在大学学过的一些基础知识。希望对大家有用。当然,这只是我的个人解答,有什么不对的或者需要补充的,大家尽管提上来,好的话我加上去的。。。

     

1. 在类的普通成员函数中调用虚函数,情况是怎么样的?(对象、引用、指针)

多态, 事实上,这是 Template Method模式的关键
2. 关于成员变量初始化顺序,几个有依赖关系的成员变量要初始化,让写出构造函数。

在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。

3. 写一个双链表。

Struct ListNode

{

    int nData;

    ListNode* pPreviousNode;

    ListNode* pNextNode;

}

一般链表都会有一个表头节点与指向表头节点的头指针, 应该会提供列表接口, 按此数据结构实现即可。

4. 写个is-a和has-a。

这个比较简单

Class Pet{};

Class Dog: public Pet{};

Class Boy{Pet* m_pPet;};

5. struct vs. class.

1)默认访问属性, struct为public, class为private

2) 默认继承属性,struct为public, class为private
3)class可以用来声明模板参数,而struct不能

6. 称8个小球的问题

没题

7. stl 里面vector的实现(内部空间的申请与分配)

Vector中文名字是动态数组, 其内部数据结构就是一个数组, 但是在数组元素不够用的时候,就要动态的重新分配, 一般是现在大小的两倍, 然后把原数组的内容拷贝过去。所以, 在一般情况下, 其访问速度同一般数组, 只有在重新分配发生时, 其性能才会下降

8. struct /class的区别

重复了

9. 为什么要用struct

成员的默认属性不同,用struct的话,主要是作为数据的集合。

10. 怎样使一个class不能被实例化

1,构造函数私有化,2,抽象类

11. 私有继承和public继承的区别。

私有继承: 只继承实现,不继承实现 has-a

公有继承:继承接口与实现    is-a

12. void *p的问题

不能++

13. 引用和指针的区别与联系。引用是否可以更改

联系: 支持多态,可以用来引用同一对象

区别:指针可以为NULL, 引用不可以; 指针可以重赋值, 引用不可以;

14. windows编程基础,线程与进程的区别

程序是一系列静态的指令序列

进程是程序的一次动态执行,进程其实是一个资源的容器,包括一个私有的虚拟地址空间,一些初始的代码与数据, 一些系统资源的句柄等

线程是一个进程中的执行体, 一般包括CPU寄存器状态,两个栈(内核模式,用户模式)以及一个TLS(Thread-Local Storage)等

15. com+是否熟悉

COM+是COM技术的延伸与发展, 它包括了所有COM的基本功能(基于接口的编程模型,基本组件服务),并组合了DCOM(使组件技术延伸到了分布式领域)和MTS-Microsoft Transaction Server(提供了服务器端的组件管理与配置管理),并新增了一些服务:负载平衡,内存数据库,事件模型,队列服务等,主要用于Windows DNA(Distributed interNet Application Architecture)三层结构的中间层。

16. 简述一下hash算法

哈希表的目的是表查询插入修改能够达到O(1)的算法复杂度, 通过对key编码来确定其存储地址来实现, 当不同的key得到相同的编码时,便需要进行冲突检测与处理,一般方法有除留余数法, 线性探测法,平方探测法, 这使其无法真正达到O(1)

17. 一个32位的数据,怎样找到最左边的一个1?

如果是在最左位,这个数是负数,否则的话,左移一位,看是否变成负数,这是O(n)的算法, 也可以用一个模板去与,并不断改变这个模板

O(n/2)的算法:二分方式查找 ???

18. 一个4*4的格子,填入1~15 然后给个目标状态,怎样去搜索。
比如:
 1   2  3    6
 0   4  5    7
 8   9  10 11
12 13 14 14

再给出个最终的状态 (随便都可以)
0 表示一个空格,可以移动,有点像拼图;
 

人工智能的教材上用的应该就是这个例子,用A*算法,它既不是广度搜索,也不是深度搜索,而是一种启发式搜索,在进行下一步搜索之前,会用一个估价函数来对后面的节点评分, 取评分最优的进行下一步搜索,如果找不到结果,回溯。对于本题,用曼哈顿距离作为评分标准是个不错的选择。

19. 给你100万个数据,数据的值在0~65535之间 用最快的速度排序

多关键字基数排序MSD(MOST SIGNIFICANT DIGIT FIRST)

20. 如果我们的一个软件产品,用户回复说:运行速度很慢,你怎么处理?

询问其Workflow, 用户的硬件环境

21. 八皇后问题,详述解法 (八皇后问题说的是在8*8国际象棋棋盘上,要求在每一行放置一个皇后,且能做到在竖方向,斜方向都没有冲突)

回溯法

22. kmp快速匹配算法 ---不算轻松的搞定

普通的模式匹配算法,一旦不匹配,模式串右移一位;但是其实根据一直条件,我们可以算出应该向右移几位以避免不必要的比较;算法实现比较曲折

23. 无向图中两点间最短路问题 ---伟大的迪杰克斯拉算法

假设一共有N个节点, 需要一个一维数组Previous[N]来记录前一个节点序号;一个一维数组TotalLength[N]来记录从原点到当前节点最短路径;一个二维数组Weights[N][N]来记录各点之间边的权重(如果存在), 然后从源点到终点进行深度搜索或广度搜索, 按以下规则:搜索到某个节点b时,假设其前一个节点为a, 把TotalLength[a] + Weights[a][b]与TotalLength[b]相比较,如果小于TotalLength[b], 则TotalLength[b] = TotalLength[a] + Weights[a][b], Previous[b] = a; 反之则不做任何操作。这样到搜索结束后, 从Previous[N]数组中就能得到整条最短路径了

24. 空间中任意给两个向量,求角平分线

先单位化, 假设单位化后结果为nv1, nv2, 则角平分线为(nv1+nv2) / 2

25. 什么是平衡树

左右子树都是平衡树,且高度相差不超过1的有序二叉树

26. 哈夫曼编码问题

理论基础:霍夫曼树是带权路径长度(WPL:Weighted Path Length)最小的二叉树,它不一定是完全二叉树,应该是权值大的外结点离根节点最近的扩充二叉树。霍夫曼编码是为了实现数据的最小冗余编码,是数据压缩学的基础。 它根据字符在电文中出现的频率为权值,构造霍夫曼树,左为0, 右为1. 其有两个效果,一是保证电文有最短的编码,二是字符间不需要分隔符,因为不同的字符必定有不同的开头(成为前缀编码)。

2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值