MyException - 我的异常网
当前位置:我的异常网» C++ » 请大家讨论一下:moto的18道C++面试题.该如何处理

请大家讨论一下:moto的18道C++面试题.该如何处理

www.MyException.Cn  网友分享于:2013-04-09  浏览:7次
请大家讨论一下:moto的18道C++面试题...
请大家讨论一下:moto的18道C++面试题... 
   1.介绍一下STL,详细说明STL如何实现vector。 
   2.如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。 
   3.继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。 
   4.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? 
   5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么; 
   6.结合一个项目说明你怎样应用设计模式的理念。 
   7.介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的) 
   8.C++和C定义结构的分别是什么。 
   9.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢? 
   10,拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。 
   11.结合1个你认为比较能体现OOP思想的项目,用UML来描述。(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半 
   ,并且会问很多问题,一不小心可能会被问住)。 
   12。基类的有1个虚函数,子类还需要申明为virtual吗?为什么。 
   13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。 
   14.C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。 
   15.为什么要引入抽象基类和纯虚函数? 
   16.介绍一下模板和包容器。如何实现?(也许会让你当场举例实现) 
   17.你如何理解MVC。简单举例来说明其应用。 
   18,多重继承如何消除向上继承的二义性。 
  -----------------
  你能搞定几道?
  最先说说你对12题的理解如何?


------解决方案--------------------
1.vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。
2.如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。
Answer:
  在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
  unresolved external symbol “symbol”(不确定的外部“符号”)。
  如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此
错误消息。

一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用
错误;其次可能使用了不同版本的连接库。

编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难
解决的错误.

3.继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。
在OOD,OOP中,组合优于继承.
当然多态的基础是继承,没有继承多态无从谈起。

当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。
当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类.

4.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不
行吗?
(1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初
始化,可以在定义后面的任何地方重新赋值.
(2) 不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL.
(3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任
何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系.
(4) 引用的创建和销毁并不会调用类的拷贝构造函数
(5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,
只不过编译器帮我们完成了转换.

不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引
用,显得很安全。
const 指针仍然存在空指针,并且有可能产生野指针.

总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性.

5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什
么;
传值,传指针或者引用

6.结合一个项目说明你怎样应用设计模式的理念。
设计模式更多考虑是扩展和重用,而这两方面很多情况下,往往会被忽略。
不过,我不建议滥用设计模式,以为它有可能使得简单问题复杂化.

7.介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的)
设计模式概念是由建筑设计师Christopher Alexander提出:"每一个模式描述了一个在我们
周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该
方案而不必做重复劳动."上述定义是对设计模式的广义定义.将其应用到面向对象软件的领
域内,就形成了对设计模式的狭义定义.
可以简单的认为:设计模式就是解决某个特定的面向对象软件问题的特定方法, 并且已经上
升到理论程度。

框架与设计模式的区别:
1,设计模式和框架针对的问题域不同.设计模式针对面向对象的问题域;框架针对特定业务的
问题域
2,设计模式比框架更为抽象.设计模式在碰到具体问题后,才能产生代码;框架已经可以用代
码表示
3,设计模式是比框架更小的体系结构元素.框架中可以包括多个设计模式
设计模式就像武术中基本的招式.将这些招式合理地纵组合起来,就形成套路(框架),框架是
一种半成品.

8.C++和C定义结构的分别是什么。
C language 的结构仅仅是数据的结合
C plus plus的struct 和 class 其实具备几乎一样的功能,只是默认的访问属性不一样而
已。

9.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?
构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个
对象。
析构函数可以为纯虚函数。

10,拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。
深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源
这样使得两个指针指向同一份资源,造成对同一份析构两次,程序崩溃。

临时对象的开销比局部对象小些。

11.结合1个你认为比较能体现OOP思想的项目,用UML来描述。(最好这个项目继承,多态,
虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会
被问住)。
。。。

12。基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
不申明没有关系的。
不过,我总是喜欢显式申明,使得代码更加清晰。

13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为
实现重用。
并不仅仅是这样的。
OOD,OOP从根本上改变了程序设计模式和设计思想,具备重大和深远的意义。
类的三大最基本的特征:封装,继承,多态.

14.C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。
多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。

子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,
operator=函数,友元函数等等

15.为什么要引入抽象基类和纯虚函数?
主要目的是为了实现一种接口的效果。

16.介绍一下模板和容器。如何实现?(也许会让你当场举例实现)
模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。
它体现了一种通用和泛化的思想。

STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.

文章评论

程序员和编码员之间的区别
程序员和编码员之间的区别
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
一个程序员的时间管理
一个程序员的时间管理
漫画:程序员的工作
漫画:程序员的工作
程序员的鄙视链
程序员的鄙视链
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Java程序员必看电影
Java程序员必看电影
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
如何成为一名黑客
如何成为一名黑客
 程序员的样子
程序员的样子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我是如何打败拖延症的
我是如何打败拖延症的
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
我的丈夫是个程序员
我的丈夫是个程序员
编程语言是女人
编程语言是女人
鲜为人知的编程真相
鲜为人知的编程真相
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
代码女神横空出世
代码女神横空出世
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
那些争议最大的编程观点
那些争议最大的编程观点
中美印日四国程序员比较
中美印日四国程序员比较
旅行,写作,编程
旅行,写作,编程
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
老程序员的下场
老程序员的下场
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员都该阅读的书
程序员都该阅读的书
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员必看的十大电影
程序员必看的十大电影
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
总结2014中国互联网十大段子
总结2014中国互联网十大段子
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有