网游公司的笔试题大

时间:2018-12-31 12:00:00 资料大全 我要投稿

网游公司的笔试题大集合

1 上海乐升笔试
冯诺依曼机的体系结构
各种RAM的名词解释
递归求5!
C程序优化
翻译有关windows资源处理的文章
上机:
写api 进行分数的四则运算
写api 针对2个8位的数的四则运算 该平台不支持16位
写api 对一个10个元素的数组排序 并且支持检索
卢老师教过的放10个球到盒子问题
2 扬讯科技(手机)写个MIN(a, b)的宏
函数指针
指针数组等
游戏程序的特点
游戏程序的结构
链表的插入 索引
typedef 和 #define 的优点和缺点
你最熟悉的游戏算法
3 巨人网络
1.class String
{
public:
String(const char *cp = NULL);
String(const String & cp);
~String();
String& operator = (const String & cp);
operator const char *() const;
private:
char *m_data;
}
1) 完成类的方法;
 String::String(const char *str)
  {
  if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
  {
  m_data = new char[1] ;
  m_data[0] = \0 ;
  }
  else
  {
  m_data = new char[strlen(str) + 1];
  strcpy(m_data,
String::String(const String &another)
  {
  m_data = new char[strlen(another.m_data) + 1];
  strcpy(m_data,other.m_data);
  }
  String& String:perator =(const String &rhs)
  {
  if ( this == &rhs)
  return *this ;
  delete []m_data; //删除原来的数据,新开一块内存
  m_data = new char[strlen(rhs.m_data) + 1];
  strcpy(m_data,rhs.m_data);
  return *this ;
  }
  String::~String()
  {
  delete []m_data ;
  }
operator const char *() const
{
return str;
}
2) operator const char *() const 后面的const的作用.
2.new/delete和malloc/free的区别,什么时候需要建立自己的内存分配机制,

网游公司的笔试题大集合


3.static和volatile的用途。
static:
4.什么是深拷贝?什么是浅拷贝?举例说明。
#include <string.h>
#include <stdio.h>
class Base
{
private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)+1];
strcpy(name, className);
}
~Base()
{
delete name;
}
char *copyName()
{
char newname[256];
strcpy(newname, name);
return newname;
}
char *getName()
{
return name;
}
static void print (Base base)
{
printf("name: %s\n",base.name);
}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
}
};
int main()
{
Base *pBase = new Subclass("test");
Base::print(*pBase);//用后会被释放掉,下面的指向将为空指针,应改为引用
printf("name: %s\n", pBase->getName());
printf("new name: %s\n", temp);
return 0;
}
对上面程序进行编译不报错,但是程序不能执行.
下面是改正后的:
#include <string.h>
#include <stdio.h>
class Base
{
private:
char * name;
public:
Base(char * className)
{
name = new char[strlen(className)+1];
strcpy(name, className);
}
~Base()
{
delete name;
}
char *copyName()
{
char *newname = new char[strlen(name)+1];
strcpy(newname, name);
return newname;
}
char *getName()
{
return name;
}
static void print (Base base)
{
base.name = base.copyName(); //深度拷贝
printf("name: %s\n",base.name);
}
};
class Subclass : public Base
{
public:
Subclass(char * className) : Base(className)
{
}
};
int main()
{
Base *pBase = new Subclass("test");
Base::print(*pBase);//用后会被释放掉,下面的指向将为空指针,应改为引用
printf("name: %s\n", pBase->getName());
char *temp = pBase->copyName();
printf("new name: %s\n", temp);
delete temp;
return 0;
}

5.一个自定义类String的改错题,

资料共享平台

网游公司的笔试题大集合》(https://www.unjs.com)。
6.void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}

网游公司的笔试题大集合

请问运行Test函数会有什么样的结果?
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么?
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100); // str 仍然为 NULL
strcpy(str, "hello"); // 运行错误
}
示例7-4-1 试图用指针参数申请动态内存
毛病出在函数GetMemory中。编译器总是要为函数的每个参数制作临时副本,指针参数p的`副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p申请了新的内存,只是把_p所指的内存地址改变了,但是p丝毫未变。所以函数GetMemory并不能输出任何东西。事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。
如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”,见示例7-4-2。
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100); // 注意参数是 &str,而不是str
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
7.int i;
std::list list1;
for(i = 0; i < 8; i++)
list1.push_back(i);
for(std::list::iterator = list1.begin(); iterator != list1.end(); iterator++)
if (*iterator % 2)
list1.erase(iterator);
这段代码在运行时会产生什么错误,怎么改正。
erase之后iterator失效
就加一个 <int>就完了。
#include <list>
int main()
{
std::list<int> list1;
for(int i=0;i < 8;i++)
list1.push_back(i);
for(std::list<int>::iterator it=list1.begin();it!=list1.end();++it)
{
if(*it%2 == 0)
{
it = list1.erase(it);
it --;
}
}
return 0;
}
8.对Gcc编译选项做些介绍。
9.Gdb中如何设置中断点,逐步调试程序。
10.游戏编程中如何对显存进行管理。//这是唯一的一道和游戏直接有关题目。
11.windows中的内存分配方式有哪些,他们的优缺点是什么。

【网游公司的笔试题大集合】相关文章:

1.盛大新网游类笔试题

2.360笔试题目

3.360笔试题目

4.KP公司的笔经

5.马士基公司笔经

6.IBM公司笔经

7.笔美国国家仪器试题目

8.广本09年笔试题目