9月11日傍晚宣讲会在北邮教二举行。感觉本次土豆优酷网宣讲会 +笔试似乎是准备不足,一切行程都拖拉散漫,先是通知的6点半笔试(本来没有告知要带打印版简历),六点10分左右才通知带简历,匆忙下去打印,连饭都没吃上。6点40的时候,大家都准备开始笔试的时候,又通知说产品的不用笔试,一下又走了一大批人,当然,唏嘘声是少不了的。7点10分,终于开始了笔试(粗估4个教室约有1K人吧)。
废话少说,笔试题一份奉上(全凭个人记忆,有些题目不记得了,答题时间90分钟)
A.9 B.10 C.11 D:12
解析:题目要求,至少有一个是B型血,那么我们可以求:一个B型血也没有,假设选择x个人,则有1-0.8^x >=0.9 即求0.8^x <= 0.1 。解之得x至少为11
A: 17 B:18 C:19 D:20
解析:二分查找,最坏情况下,是在最后一个区间才能查找到记录数(或失败),需要的查找次数最多为ceil(logn),即取上限,
A: A B: B C: C D: D
解析:一个一个进行假设,推出悖论即可。例如,假设只有B是对的,那么B只偷了樱桃,那么推出D也是对的,与只有一个是对的矛盾,故不对。A是对的。
A:O(n) ,O(n) B:O(n^2),O(n^2) C:O(nlogn),O(nlogn) D:O(nlogn),O(n^2)
解析:快排的性能:平均时间复杂度O(nlogn),最坏情况下的时间复杂度 O(n^2),最坏情况产生的条件:每次划分的结果都是1个元素和n-1个元素。则快速排序退化,需要的时间复杂度为O(n^2)
A.一个实体转换为一个关系模型
B.一个关联转换为一个关系模型
C.实体转换为关系模型时,实体的主键就是关系模型的主键
D.关联转换为关系模型时,关系模型的主键是所有关联实体的属性及联系本身的属性。
解析:E-R图转换为关系模型的原则有:
(1)一个实体型转换为一个关系模式。
关系的属性:实体型的属性。
关系的码:实体型的码。
(2)一个m:n联系转换为一个关系模式。
关系的属性:与该联系相连的各实体的码以及联系本身的属性。
关系的码:各实体码的组合。
(3) 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
(4) 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
A. 2^h B.2h C.2^(h-1) D.2^h - 1
解析:满二叉树的节点数最多,最多为2^h -1个节点
A.6 B.7 C.8 D.9
解析:观察规律:6*7 = 42 ,4*2 = 8 , 2*8=16 则下一个数字应该为6
unsigned char k = 20;
while(k>=0){
k--;
}
A. 20次 B.一次也不执行 C.无限循环 D.21次
解析:注意k是unsigned char类型,也就是无符号字节型的,故k>=0始终是成立的,因而会无限循环
A.有两个子节点的节点数一定比没有子节点的节点数少1。
B.深度为h的二叉树节点最底层最多含有2^h个节点(根的深度度为0)
C.根据二叉树的前序和中序遍历结果,一定可以求出后序遍历结果。
D.堆一定是一个完全二叉树。
解析:堆不一定按照完全二叉树组织。完全二叉树是堆的一种实现形式。
A.冒泡排序 B.快速排序 C.堆排序 D.希尔排序
解析:冒泡排序和堆排序需要一个额外的元素来实现交换,希尔排序需要记录增量的一个变量。 快速排序的递归实现则需要一个栈空间来实现递归,平均情况下,需要O(nlgn)的额外空间
A. 1/4 B.1/2 C.1/6 D.1/8
解析:独立事件的概率 1/2
A.插入方便 B.删除方便 C.插入删除时不需要移动元素 D.更加节省存储空间。
解析:由于链表需要额外的空间记录指针等,因而实际上比数组更加浪费空间(不够紧凑)
A.插入方便
B.删除方便
C.可以直接访问链表的第i个元素。
D.插入和删除时不需要移动元素。
解析:单链表不支持随机访问,访问节点需要从头指针遍历。
void test(){
class B{
public:
B(){
cout<<"B\t"<<endl;
}
~B(){
cout<<"~B\t"<<endl;
}
};
struct C{
C(){
cout<<"C\t"<<endl;
};
~C(){
cout<<"~c\t"<<endl;
};
};
struct D:B{
D(){
cout<<"D\t"<<endl;
};
~D(){
cout<<"~D\t"<<endl;
};
C c;
};
D d;
}
A. D C B ~B ~C ~D
B. B C D ~D ~C ~B
C. C B D ~D ~B ~C
D. C D B ~B ~D ~C
解析:实例化时,父类比子类先实例化。析构时,顺序相反
A. 75%
B. 66.7%
C. 60%
D. 33.3%
解析:相当于花费200元买到价值300元的东西,则折扣为(300-200)/300 = 33.3%
A. p++
B.(*p)++;
C.*p = null;
D.以上都不对
解析:指针和指针所指的空间都被修饰为const,是不允许修改的
19.
20.
1.冒泡排序的时间复杂度是__O(n^2)__
2.中奖概率:3个箱子,有一个有奖,抽取一个,然后主持人打开一个空的(无奖),然后问是否更换,问下不更换抽中的一个中奖的概率是 1/2 ?,更换为另外一个箱子中奖的概率是_1/2_?
3.高度为h的二叉树,最底层最多有__2^h__个节点,?
4.四个节点的二叉树共有__14__种形态?
解析:含有n个节点的二叉树的形态的数字为卡特兰数 C(2n,n)/(n+1)
5.下面程序的输出是?_1,3,2_
void test(int *a,int *b){
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
int a = 1,b =2,c = 3;
test(&a,&b);
test(&b,&c);
test(&a,&c);
printf("%d,%d,%d",a,b,c);
解析:test()实现两个数交换。
6.数组a[60][70],按照列优先存储,每个元素占据2个单元。假设a[0][0]的地址是1024.则a[32][58]的地址是: 8048__
注意是列优先存储。
7.对于无序数组20,18,22,19,16,21,32.将数组按照升序排列,以元素20为枢轴元素,则快速排序一趟的结果是_18,16,19,20,22,21,32__
8.c语言中的参数传递方式有_ 值__传递和_引用__传递
9.忘记
10.忘记
解析:约瑟夫环的形式。head为二级指针,是重新组织后的循环单链表的表头。
解析:海量数据的处理。无法一次性装入内存,可先hash之分为多个文件处理,堆或者Trie树统计次数,求出每个文件中的Top 100。归并之求出总的top 100
对于第二问:还可以hadoop mapReduce处理之。
解析:异或。原理:相同的数异或为0,0与其他数异或结果为该数。
#include <stdio.h> int getTheNum(int *a,int n){ int result = a[0]; for(int i = 1;i<=n-2;i++){ result ^= a[i]^i; } result ^= (n-1)^n; return result; } int main(){ int a[] = {1,3,4,6,5,7}; printf("%d",getTheNum(a,7)); }