笔试
1. 死锁产生的原因及其必要条件
2. 面向对象的三个基本特征和五个设计原则
3. windows内存管理方式有些,并讲解每种方式的优缺点
4. 有1001个运动员,现在要找出其中的冠军,最少需要多少次比赛,并写程序模拟比赛过程
5. 有100个灯,初始化全部熄灭,现在一次做如下操作:先将所有灯打开,在间隔一个将灯关闭(即2的倍数被关闭),在间隔3个如果灯是打开的就关闭,如果是关闭的就打开,这样以此类推,知道做到低100次,请问还有几个灯是打开的
6. 写一个字符串左旋转算法,要求时间复杂度O(n),空间复杂度O(1)。 例如: "ABCDEF"左旋转3得到DEFABC
7. 有10万条记录需要提供查询,记录由两部分组成:键值key为16字节(键值是唯一的),对应的value是1M字节的,现在给你6台64G的计算机,请你设计如何能够提供查询服务,注意:这些计算机随时可能down掉
一面
1. 自我介绍和项目面
2. 写一个函数将链表翻转
3. 证明一个数n能被3整除即是n的各个位的和能被3整除。 即123能被3整除即1+2+3=6能被3整除
4. c和c++中long占几个字节,指针占几个字节
5. 指针和引用的区别
6. 一个空类,编译器为其实现了那些函数
7. 链表和线性表的插入的区别
8. 堆栈和队列的区别
9. 一个有3个节点的二叉树,有几种形态
10. 给定树的后序和中序遍历写出先序遍历
11. 在一个大小为n的数组中,冒泡排序要做多少次比较。
12. 在基本有序的数组中那种排序算法最快
13. 什么是虚拟的内存,虚拟内存放在计算机的哪个硬件上。
二面
1. 项目面
2.
class A
{
A() {fa();}
~A() {fb();}
void fa() {cout << "A:fa" << endl;}
virtual void fb(){cout << "A:fb" << endl;}
};
class B : pulic A
{
B() {fa();}
~B() {fb();}
void fa() {cout << "B:fb" << endl;}
virtual void fb(){cout << "B:fb" << endl;}
};
A* p = new B;
delete p;
问输出什么?
如果将A中fb的virtual去掉又输出什么
如果将A中~A前面加virtual输出又是什么
如果~A前面加virtual,但是将A中fb的virtual去掉又输出什么
3.
char* p = "ABCD";
char q[] = "ABCD";
问p和q的区别
char* p1 = "ABCD";
char q1[] = "ABCD";
问:p == p1 ?
q == q1 ?
4.
class A
{
int a;
int b;
A() : b(100),a(b) {}
}
问:A.a,A.b
5. 问如何让一个类A只能在堆上定义,不能在栈上定义,即A a 错误, new A正确。
6. 一个数组中所有数都出现两次,现在数组中有两个数,各自都只出现了一次,请你设计一个算法在O(n)时间复杂度,O(1)空间复杂度找出这两个数
7. 一个有序字符串数组,现在将其循环左移n位,得到一个新的数组。请你设计一个二分算法来查询其中的字符。不能通过遍历找出移动的位数。