金山软件笔试题目
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
曾庆伟,您好!
这是金山办公软件有限公司(WPS)的网上招聘邮件,您应聘的岗位是“开发工程师(C++)”。
以下是试题,请将内容复制到本地进行答题:
第一部分
1、请描述C++ 的如下语法特性和常用场景,并给出代码实例:
●带参数的构造函数
●关键字mutable
●操作符重载
2、改错
请阅读以下代码,并指出以下代码中存在的问题或隐患。提示:程序可能有编译错误。
class Shape
{
public:
virtual void Draw() = 0;
};
class Circle: public Shape
{
int m_x, m_y, m_r;
public:
Circle() { memset(this, 0, sizeof(*this)); }
void SetCenter(int x, int y) { m_x = x; m_y = y; }
void SetRadius(int r) { m_r = r; }
void Draw(bool bFill = false) { ... /* 代码略 */ } };
... // 其他的一些 Shape 派生类
void wmain()
{
vector
... // 从文件中读入 Shape 数据,并写入 shapes
for (shapes::const_iterator it = shapes.begin();
it != shapes.end(); ++it)
it->Draw();
}
3、STL应用
请参考下面程序,说明当使用vector容器时,需要注意哪些类似的问题
std::vector
...
for(std::vector
--i)
{
printf("Hello, %s!\n", array[i]);
}
4、智能指针
在COM规范中,接口采用引用计数(Reference counter)来维护对象的生命周期。在书写代码时,要小心维护引用计数,例如:
IMy* pMy = NULL;
hr = pUnk->QueryInterface(IID_IMy, (void**)&pMy);
<< 实际的功能代码 >>
pUnk->Release();
pMy->Release();
问题1:请讲述这样的代码在书写时,比较容易带来什么问题。
问题2:智能指针可以简化维护此类代码的工作量,请给出一个智能指针实现和使用的例子。
第二部分
1、二进制数模式
考虑n位二进制数,有多少个数中不存在两个相邻的1。例如,3位数中有5个数符合这一要求:000、001、010、100、101。
1、试找出其中的规律
2、请给出完整代码实现(参数输入代码可略)
3、试证明你找到的规律是正确的
2、对象速查表
假设需要实现一个对象速查表,具体的要求如下:
1.该表中将保存大量(几千万个)对象地址(指针),以下称为记录
2.支持频繁查询一个指针是否记录在表中
3.支持频繁添加和删除记录
请尝试给出几种可能的实现方式,并对其运行效率作出比较。对你认为最优的方案给出主要部分伪代码。
3、迷宫
给定一个迷宫,它除了墙之外,还有门和钥匙。其中,钥匙和门放在不同的地方,并为双射关系(一扇门只对应一把钥匙,反之亦同)。
1、给定一个没有门的迷宫,以及起点和终点,请给出最短路径;
2、给定有门和钥匙的迷宫、起点和终点,请给出一条路径;
3、给定有门和钥匙的迷宫、起点和终点,请给出最短路径;
请给出上述算法思路,和主要部分伪代码。
第三部分
1、软件设计
请从以下几个命题中任选一个,以自己熟悉的方式给出该软件的尽可能详细的设计:
●类似Winzip的压缩软件(压缩算法不需要设计)
●一个简单的绘图程序(类似Windows画笔)
●一个多线程下载客户端(协议可以使用HTTP/FTP或自拟)
●即时通信软件(类似Live Messenger、QQ)
●一个在线图片分享服务(支持评论,要说明表结构)
●一个分布式大批量文件压缩服务(将大量文件分布到多台服务器上计算以提高整体吞吐
率)
答卷时间为3小时,以服务器时间为准;答题完毕之后,请直接回复此邮件。
注意:回复邮件时,请在邮件标题上加上您的姓名、邮箱地址及应聘岗位名称。
有关笔试考试结果:笔试考试结果会在国庆前统一邮件通知。笔试通过的学生将约现场面试,面试时间及地点以短信或电话通知为准。
加盟金山,成就梦想。预祝您考出好成绩!
金山WPS人力资源部
联系人:孙小姐