admin管理员组

文章数量:1531702

2024年7月19日发(作者:)

曾庆伟,您好!

这是金山办公软件有限公司(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 shapes;

... // 从文件中读入 Shape 数据,并写入 shapes

for (shapes::const_iterator it = ();

it != (); ++it)

it->Draw();

}

3、STL应用

请参考下面程序,说明当使用vector容器时,需要注意哪些类似的问题

std::vector array;

...

for(std::vector::size_type i=()-1; i>=0;

--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人力资源部

联系人:孙小姐

本文标签: 代码给出指针笔试