文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
金山软件有限公司西山居工作室
程序类笔试试卷
(考试时间:120分钟)
个人信息(必填)
基本信息 姓
名:______________ 性
别:______________ 年
龄:______________
学校名称:______________ 学院名称:______________ 专
业:______________
学
历:______________ 毕业日期:201___年
联系方式 手
机:________ Q
Q:________ 电子邮箱:______________
紧急联系人:____________ 手
机:______________
获知此次招聘会的渠道: 海报宣传
校园网站
官网网站
老师同学
其他:_________
应聘岗位: 后台开发
测试开发
答题说明
客户端开发
我还不是很清楚我在哪一方面擅长,服从公司安排
逻辑开发
3D 开发
移动开发
数据开发
A)您开始答题时间:
结束时间:
B)交卷时简历和试卷一起交,试卷在上,简历在下
C) 本试卷为非计分制,并非以答题数量作为评判标准
D) 考试中如对题目内容有任何疑问,请不要询问监考人员
正式答题
一 填空题
1、 32 位 x86 平台下,char memory[] = { 1,2,3,4,5,6,7,8,9, };int* p = (int*) memory;则*p 的值用
16 进制表示为_____,*(p+1)的值用 16 进制表示为______。
2、 32 位 MSC 编译环境下,struct K1{ char a; short b; int c;}; struct K2{ char a; int b; char c; };
sizeof(K1) = _____, sizeof(K2) = _____.
3、 32 位编译环境下定义 int a[5][10],则 a[2][4]相对于 a[0][0]的内存地址偏移是___________。
4、 数据的插入,查找,删除操作都比较频繁时,采用________数据结构可以得到较好的效率平衡,stl
的_________容器采用了这种数据结构。
5、 下面一段程序:
#include
class A
{
Seasungame Studio(c)1995-2011
http://www.seasungame.com
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
void fun() { printf(“A”); }
virtual void fun() { printf(“B”); }
void fun() { printf(“C”); }
virtual void fun() { printf(“D”); }
virtual void funD() { printf(“D_Test”); }
virtual void fun() { printf(“E”); }
virtual void funE() { printf(“E_Test”); }
virtual void fun() { printf(“E1”); }
virtual void funE1() { printf(“E1_Test”); }
} ;
class B : public A
{
};
class C : public B
{
};
class D : public C
{
};
class E : public D
{
};
class E1 : public D
{
};
int main()
{
}
A* p1 = (A*)new B; p1->fun();printf(“,”);
B* p2 = (B*)new C; p2->fun();printf(“,”);
B* p3 = (B*)new D; p3->fun();printf(“,”);
B* p4 = (E*)new D; p4->fun();printf(“,”);
D* p5 = (D*)new E; p5->funD();printf(“,”);
E1* p6 = (E1*) new E; p6->funE1();printf(“,”);
p6->funD();printf(“,”);
printf(“ %d, %d”, sizeof(B) – sizeof(A), sizeof(D) – sizeof(A));
以上程序在 32 位环境下执行结果是(按输出结果的逗号分隔填空):_______,_______,_______,
_______,_______,_______,_______,_______,________。
6、 防止头文件被重复包含的方法是_______。
7、 8086 体系中指向栈顶的寄存器为_______,指向代码段偏移地址的寄存器为______,整型函数返回值
一般放在______寄存器。
8、 完成以下二分查找算法函数的代码:
template
int BinarySearch(Type a[], const Type& x, int n)
Seasungame Studio(c)1995-2011
http://www.seasungame.com
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
{
}
int left=0;
int right=n-1;
while(__________)
{
int middle=(left + right) / 2;
if (x == a[middle])
return middle;
if (x > a[middle])
___________;
___________;
else
}
return -1;
二
诊
断
题
:
(以下说法如果正确直接回答“正确”即可,如果错误请指出并说明原因。)
1、 如果源字符串长度已知,用 memcpy 拷贝字符串比 strcpy 效率要高。
2、 可以使用 memcpy 拷贝一个对象。
3、 在调用有 overload, override 或者 overwrite 的函数时均要进行运行期绑定。
4、 stl 的 sort 排序算法可以应用于 vector,list,map,set 等容器。
5、 指针 p 指向一个对象,则 sizeof(p)的值是 4,sizeof(*p)的值是 p 指向对象的实际大小。
6、 每个运行中的程序至少包含一个主线程,也称为进程。
7、 内存泄漏是指程序申请的内存在程序退出前也没有得到释放,直到操作系统重启。
8、 SQL 是一种跨平台的数据库。
Seasungame Studio(c)1995-2011
http://www.seasungame.com
三 简答题
1、 分别阐述析构函数被定义为 private 的作用及被定义为 virtual 的作用
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
2、 类增加成员函数是否会增加使用该类定义的对象占用内存的大小,增加虚函数呢?
3、 void fun(T a, T b); void fun(const T& a, const T& b); 以上两种函数定义有何区别?实际编程时该
如何选择?
4、 按照你的猜测,一个含客户端程序的网络游戏,从玩家开启客户端主程序到进入游戏世界,客户端与
服 务 端 需 要 进 行 哪 些 必 须 的 网 络 协 议 交 互 ?
5、 驱动 Windows 窗口的消息系统的运行机制是怎样的,有哪些关键 API
6、 程序运行时出现间程序无响应,CPU 占用 100%。此时可能是出现了什么问题?该如何确认问题所在?
四 指出以下几个代码片段分别都存在什么问题
{
}
1、 char* ToStr(int a)
char buf[16];
itoa(buf, a, 10);
return buf;
Seasungame Studio(c)1995-2011
http://www.seasungame.com
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
2、 int Player::CalcExp(int nRadix, int nNpcId)
Npc* pNpc = ::GetNpc(nNpcId);
int nExpBase = this->GetCurExpBase();
return nExpBase + nRadix / (pNpc->GetLevel() - this->GetLevel());
3、 bool Player::ChangePsw(const char* pswOld, const char* pswNew)
{
}
{
}
{
if (strcmp(m_szPsw, pswOld) != 0)
return flase;
strcpy(m_szPsw, pswNew);
retrun true ;
4、 void OuputTxtFile(const char* szFileName)
if (!szFileName) return;
fstream fs;
fs.open(szFileName, ios_base::in);
while(fs.good() && !fs.eof())
{
char readbuf[1024];
fs.getline(readbuf, sizeof(readbuf));
printf(readbuf);
printf(“\n”);
}
}
5、 template
class ObjectMgr
{
std::vector m_vecObject;
public:
size_t Add(T obj)
{
m_vecObject.push_back(obj);
return m_vecObject.size();
}
T* GetByIndex(size_t index)
{
if (index < m_vecObject.size())
return &m_vecObject[index];
Seasungame Studio(c)1995-2011
http://www.seasungame.com
return NULL;
}
};
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
6、 typedef LPCSTR const char*;
class KString
{
public:
char *m_Str;
KString()
{
m_Str = "";
}
KString(KString& str)
{
m_Str = new char[str.len()];
memcpy(m_Str, (LPCSTR)str, str.len());
}
~KString()
{
delete m_Str;
}
unsigned int len()
{
return sizeof(m_Str);
}
operator LPCSTR()
{
return m_Str;
}
operator = (char szSrc[])
{
m_Str = new char[sizeof(szSrc)];
memcpy(m_Str, szSrc, sizeof(szSrc));
}
}
五. 编程题
1、实现一个内存缓冲区类(用 char 数组做缓冲即可),至少实现:创建定长缓冲区、类拷贝、扩大缓冲
区
。
保 留
功 能
度
(
据
)
三
个
主
要
长
数
Seasungame Studio(c)1995-2011
http://www.seasungame.com
文件名:西山居笔试试题
模板号:XSJ-HR-DOC-2012-03
2、实现一个快速排序函数 void qsort(int* numbers, int count),对输入的指定数量的整数进行排序,排序后
的整数仍保存在原数组中。
六.附加题(可选)
1、数据表 Item 的字段信息如下:
字段名
Item_ID
Item_Name
Item_Type
类型
number
varchar2(32)
number
1) 请用 SQL 实现一个函数或存储过程,要求:
a) 输入参数为 Item_Name,Item_Type,输出参数为 Item_ID。
b) 如果 Item_Name 和 Item_Type 的组合在表中已存在,则返回原有的 Item_ID。
c) 如果不存在,则向表中插入新的记录,并返回新插入记录的 Item_ID。
d)
e) 对 Item_Name 的判断不区分大小写。
f) 需要考虑函数或存储过程被多个 Session 同时调用的问题。
Item_ID 是唯一的序列编号
2) 请设计合适的索引,并写出创建索引的 SQL 语句。
2、某个对战类游戏,每局游戏由两个队伍参战,同时会有很多支队伍同时进行游戏。该游戏设计有匹配
系统,该匹配系统要求尽量把两个水平接近的队伍匹配在一起进行对战。现由你来负责实现这个游戏的匹
配系统,写出需求分析,程序实现方案、要点。
Seasungame Studio(c)1995-2011
http://www.seasungame.com