金山软件有限公司西山居工作室 程序类笔试试卷





                           文件名:西山居笔试试题    模板号: 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
{
void fun() { printf(“A”); }
} ;
class B : public A
{
  virtual void fun() { printf(“B”); }
};
class C : public B
{
void fun() { printf(“C”); }
};
class D : public C
{
virtual void fun() { printf(“D”); }
virtual void funD() { printf(“D_Test”); }

};
class E : public D
{
virtual void fun() { printf(“E”); }
virtual void funE() { printf(“E_Test”); }
};
class E1 : public D
{
virtual void fun() { printf(“E1”); }
virtual void funE1() { printf(“E1_Test”); }
};
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)
    {
        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 是一种跨平台的数据库。


 简答题

1、  分别阐述析构函数被定义为private的作用及被定义为virtual的作用




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;
}


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];
return NULL;
}
};


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 数组做缓冲即可),至少实现:创建定长缓冲区、类拷贝、扩大缓冲区长度(保留数据)三个主要功能。












2 、实现一个快速排序函数 void qsort(int* numbers, int count) ,对输入的指定数量的整数进行排序,排序后的整数仍保存在原数组中。










六.附加题(可选)
1 、数据表 Item 的字段信息如下:
字段名
类型
Item_ID
number
Item_Name
varchar2(32)
Item_Type
number
1)  请用SQL 实现一个函数或存储过程,要求:
a)  输入参数为Item_Name Item_Type ,输出参数为 Item_ID
b)  如果Item_Name Item_Type 的组合在表中已存在,则返回原有的 Item_ID
c)  如果不存在,则向表中插入新的记录,并返回新插入记录的Item_ID
d) Item_ID 是唯一的序列编号
e)  Item_Name 的判断不区分大小写。
f) 需要考虑函数或存储过程被多个Session同时调用的问题。

2)  请设计合适的索引,并写出创建索引的SQL 语句。

2 、某个对战类游戏,每局游戏由两个队伍参战,同时会有很多支队伍同时进行游戏。该游戏设计有匹配系统,该匹配系统要求尽量把两个水平接近的队伍匹配在一起进行对战。现由你来负责实现这个游戏的匹配系统,写出需求分析,程序实现方案、要点。

Seasungame Studio(c)1995-2011   http://www.seasungame.com

你可能感兴趣的:(笔试题)