中青宝网C笔试题及答案.docx
- 文档编号:27655652
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:9
- 大小:40.68KB
中青宝网C笔试题及答案.docx
《中青宝网C笔试题及答案.docx》由会员分享,可在线阅读,更多相关《中青宝网C笔试题及答案.docx(9页珍藏版)》请在冰豆网上搜索。
中青宝网C笔试题及答案
中青宝网C++笔试题及答案
中青宝网面试题:
以下给出的是我之前参加一家网络游戏公司招聘C++程序员的
笔试题,这套题目整个测试的时间长达三个小时
前言:
1请写代码打印100之内的素数,讲求效率(请做你的解法的效率分析)
考察数据结构的知识点,这里可使用筛选法,该方法是大部分数据结构书籍都有讲解的算法,当然还有时间复杂度更低的算法(空间复杂度),但是因为求值范围为1—100,故综合来看,筛选法的效率是最咼的。
intmain()
{
int*sieve;
intn;
intiCounter=2,iMax,i;
printf(Pleaseinputmaxnumber:
);
scanf(%d,
sieve=(int*)malloc((n-1)*sizeof(int));
for(i=0;i
sieve[i]=i+2;
iMax=(int)sqrt(n);
while(iCounter
for(i=2*iCounter-2;i
sieve[i]=0;
iCounter++;}
for(i=0;i
if(sieve[i]!
=0)printf(%d,sieve[i]);
return0;
}
2求m,n的最大公约数
考察数据结构的知识点,求公约数的算法很多,可考虑效率较高的欧几里德递归算法,
intgcd(intm,intn){
inttemp=0;
if(m
temp=m;
m=n;
n二temp;
}
if(n二二0)
returnm;
else
returngcd1(n,m%n);
}
3输入10个字符串,打印出其中重复的字符串以及重复的次数
考察C++容器的知识,这里考察的MAP
intmain()
{
stringstr;
mapcontent;
for(intent=0;ent
{
cin>>str;
(content.insert(make_pair(str,O)).first)->second++;
}
map:
:
iteratorit=content.begin();
for(;it!
=content.end();++it)
coutfirst
return0;
}
4请画图例(UML最好),给出windows下的文件目录的设计模式
考察数据结构,文件目录是一个树
5用00表示狼吃羊羊吃草
考察00思想,定义4个或5个类,有继承体系、虚函数即可。
以4个类的模型为例,定义动物基类、狼类、羊类,草类。
羊、狼类从动物基类派生,基类有虚eat方法。
在狼类里实现成员函数eat(参数),参数为羊类,同样羊类的eat函数的参数为草类。
问答题:
1什么是subversion?
它与vss,cvs的区别在哪?
或者有什么优势?
Subversion是版本管理工具,它与vss的区别在SVN采用的是
“拷贝-修改-合并”模型,而VSS使用的是“锁定-修改-解锁”模型,SVN的优势在于版本可恢复:
每次更新都会产生一个新的版本,如果需要回复到之前的版本,只需要简单地执行版本回复即可。
2什么是wiki,关于程序项目的wiki你使用过哪些?
wiki对你有什么帮助吗?
wiki与程序文挡的差别在哪?
Wiki指一种超文本系统。
这种超文本系统支持面向社群的协作
式写作,同时也包括一组支持这种写作的辅助工具。
有人认为,Wiki
系统属于一种人类知识网格系统,我们可以在Web的基础上对Wiki文本进行浏览、创建、更改,而且创建、更改、发布的代价远比HTML文本小;同时Wiki系统还支持面向社群的协作式写作,为协作式写作提供必要帮助;最后,Wiki的写作者自然构成了一个社群,Wiki系统为这个社群提供简单的交流工具。
与其它超文本系统相比,Wiki有使用方便及开放的特点,所以Wiki系统可以帮助我们在一个社群内共享某领域的知识。
3什么是tdd?
你使用过吗?
tdd的关键在哪?
跟传统的单元测试相比,有什么优越性?
TDD,测试驱动开发,它的基本思想就是在开发功能代码之前,先编写测试代码。
也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。
然后循环进行添加其他功能,直到完成全部功能的开发。
代码整洁可用是测试驱动开发的目标。
4什么是单元测试?
你用过哪些单元测试工具?
他们的区别和
好处各有哪些?
你主要倾向于哪一种?
单元测试,是最小粒度的测试,以测试某个功能或代码块。
一般由程序员来做,因为它需要知道内部程序设计和编码的细节。
单元测
试的对象是软件设计的最小单位一一模块。
单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便
发现模块内部的错误。
单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。
工具包括CUNIT,CPPUNIT,VS2005自带工具等。
5什么是编程规范?
你倾向于什么样的规范?
他的好处在哪?
编程规范就是为了便于自己和他人阅读理解源程序,而制定的一个规范。
如在VisualC++中源程序中变量的取名一般采用匈牙利表示法则,该法则要求每个变量名都有一个前缀,用于表示变量的类型,后面是代表变量含义的一串字符串。
例如,前缀n表示整形变量,前缀sz表示以0结束的字符串变量,前缀Ip表示指针变量。
编程规范只是一个规范,也可以不遵守,但是要做一个有良好编程风格的程序员,就一定要遵守编程规范,不仅方便自己以后的阅读,也方便与其他程序员的交流。
6什么是mfc?
你经常使用那些mfc类?
那么为什么很多人不主张使用mfc?
MFC,微软基础类(MicrosoftFoundationClasses),同VCL类
似,是一种ApplicationFramework,随微软VisualC++开发工具发布。
目前最新版本为9.0(截止2008年11月)。
该类库提供一组通用的可重用的类库供开发人员使用。
大部分类均从CObject直
接或间接派生,只有少部分类例外。
为什么很多人不主张使用mfc,
首先MFC不具备跨平台的能力,其次MFC的高度封装(比如网络相关的类),导致一些细节的处理反而不方便。
7什么是头文件依赖?
你注意过这些问题吗?
你注意过编译的
时间吗?
你怎么改进编译时间?
源文件所需要(#include)的头文件称为头文件依赖。
改进编译时间可以采取“预编译头文件”的方法。
8什么是面向对象?
你在哪些方面用过面向对象?
带来了什么好处?
又有什么弊端?
“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。
可是,这个定义显然不能再适合现在情况。
面向对象的思想已经涉及到软件开发的各个方面。
女口,面向对象的分析(00A,Object
OrientedAnalysis),面向对象的设计(OOD,ObjectOriented
Design)、以及我们经常说的面向对象的编程实现(OOP,ObjectOrientedProgramming)。
好处:
第一,类具有独立性
由于这种独立的存在,使得和其他的过程也好,对象也罢能够不彼此牵引•避免牵一发而动全身的局面,这有利于维护和调试。
第二,类具有通用性
这种通用性,是通过抽象得来的•所谓抽象,就是抽取出事物的共同特征并且加以概括。
正是因为这种通用性的实现,才造就了
re-use的可能。
第三,类具有灵活性
由于第二个特征的存在,加上客观事物的特殊性,有可能通用的类中一部分成员方法变得不通用,这个时候通过继承和Overload的机制,使得它能够应付某些特殊情况,从而实现了灵活性。
弊端:
有可能会降低程序的执行速度
9什么是接口编程.com,他带来了什么好处?
适用于什么地方?
COM(ComponetObjectModel,组件对象模型),是一种说
明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。
通过这种标准将可
以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否
相同、使用的开发语言是否一致以及是否运行于同一台计算机
COM的好处:
首先:
用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需要的某个组件来替换原来的那个。
其次,由于组件是相对应用程序独立的部件,我们可以在不同的
程序中使用同一个组件而不会产生任何问题,软件的可重用性将大大的得到增强。
这类应用程序的过程得以简化
10什么是设计模式?
使用设计模式有什么好处?
列举你使用过的设计模式
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。
一些基本的设计模式:
AbstractFactory:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
Adapter:
将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Bridge:
将抽象部分与它的实现部分分离,使它们都可以独立地
变化
Builder:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
ChainofResponsibility:
为解除请求的发送者和接收者之间耦
合,而使多个对象都有机会处理这个请求。
将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
Command:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
Composite:
将对象组合成树形结构以表示“部分-整体”的层次结构。
它使得客户对单个对象和复合对象的使用具有一致性。
Decorator:
动态地给一个对象添加一些额外的职责。
就扩展功能而言,它比生成子类方式更为灵活。
Facade:
为子系统中的一组接口提供一个一致的界面,Facade
模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
FactoryMethod:
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
FactoryMethod使一个类的实例化延迟到其子类。
Flyweight:
运用共享技术有效地支持大量细粒度的对象。
Interpreter:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
Iterator:
提供一种方法顺序访问一个聚合对象中各个元素,而
又不需暴露该对象的内部表示
Mediator:
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Memento:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
这样以后就可将该对象恢复到保存的状态。
Observer:
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
Prototype:
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
Proxy:
为其他对象提供一个代理以控制对这个对象的访问。
Singleton:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
State:
允许一个对象在其内部状态改变时改变它的行为。
对象看起来似乎修改了它所属的类。
Strategy:
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
本模式使得算法的变化可独立于使用它的客户。
TemplateMethod:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Visitor:
表示一个作用于某对象结构中的各元素的操作。
它使你
可以在不改变各元素的类的前提下定义作用于这些元素的新操作
后面还有一道文学诗歌,一道历史常识题以及三道逻辑推理题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中青宝网 笔试 答案