24 October 2013

IMG-THUMBNAIL

好像是做手游的公司。一个创业公司。

###一、概念题

#####1. 引用和指针的区别? int a = 1; int& b = a; cout « &a « endl; cout « &b « endl; // same address

  • 引用访问一个变量是直接访问,而指针是间接访问。
  • 引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。 + 不存在空引用,引用必须初始化。
  • 引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值。

#####2. new delete与malloc free的联系与区别?

  • malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
  • maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。
  • new 内置了sizeof、类型转换和类型安全检查功能。
  • 在用delete 释放对象数组时,留意不要丢了符号‘[]’。

#####3. struct和class的联系和区别? struct Shape { int id;

    Shape() {
        cout << "Constructor of Shape" << endl;
    }

    ~Shape() {
        cout << "Destructor of Shape" << endl;
    }
};

struct Circle : Shape {

    Circle() {
        cout << "Constructor of Circle" << endl;
    }

    ~Circle() {
        cout << "Destructor of Circle" << endl;
    }
};
  • 访问权限不同。struct 的默认访问权限是public,class 的默认访问权限是private。如果一个类中只有get/set函数,而没有其他处理数据的函数,使用struct就可以了。
  • struct默认是public继承,class默认是private继承。

#####4. 什么是面向对象,描述它的基本特征。 封装、继承、多态。

#####5. 重载(overload)和重写(override)的区别?

#####6. “线程安全”的含义。

  • 程序中的每一条语句都是原子操作,则是线程安全的。
  • 实例变量是在堆中分配的,并不被属于该实例的所有线程共享,只有一个线程独享,是线程安全的。
  • 局部变量在堆栈中分配,因为每个线程都有它自己的堆栈空间,所以是线程安全的.
  • 静态类不用被实例化,就可直接使用,也不是线程安全的.
  • 单线程方式是线程安全的。

#####7. 用c socket函数描述C/S架构的程序,两端网络连接建立过程。

###二、程序编写题

#####1. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数(不能用strlen)。

  • 请描述你解决这个问题的思路;
  • 请给出函数代码,以及算法的复杂度。

解析

#####2. 链表题:一个链表的节点结构 struct Node { int data; Node* next; };

  • a. 已知链表的头结点head,写一个函数把这个链表逆序。
  • b. 已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序(保留所有结点,即便大小相同)。
  • c. 已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序,这次要用递归的方法。

#####3. 用数组来实现一个栈,并用面向对象的方法进行封装。

###三、附加题

#####1. 两个数相乘,位数没有限制,请写一个程序接受键盘输入并输出结果。

解析《大数乘法》。本题目难度就在于先开始不做进位处理,然后还能找出竖式乘法的左移规律。否则写起来会很麻烦。

原文链接:趣游2014校园招聘笔试,转载请注明来源!

EOF