终于等到腾讯

从24号开始忙活,今天终于敲定。

24号的笔试,我答得还好。基本上是数据结构的知识,也不是很难,有一道UML的题我不知道,瞎猜的。还有一道是关键路径的,还有一道是银行家算法避免死锁的,我忘了怎么做,也是猜的。最后那道题挺有意思,应该是宣讲的那个人出的,因为他说他现在正在做手机输入法。我觉得我答得还比较好,我把数字键和字母间建立了一个映射,然后两个键之间用笛卡尔积。其实我觉得这是最直接的做法了,只是我觉得这样说会显得比较专业……

笔试其实是很松的,很多人都过了笔试,接到了一面的通知。一面菲菲陪我去的,这应该是我第二次面试,第一次是在IR实验室,当时他们拒绝了我。在门口等的时候菲菲一个劲地叫我不要紧张,其实我也不是很紧张,被她这么说得,倒有了几分紧张的感觉。不过进去之后就不紧张了,是一面一,感觉面试官还比较随和,我也挺放松的。一面问的都是一些很泛的问题。一开始他就问道说C/S结构有什么缺点和优点。我就说C/S可以把数据和计算都放到服务器,为用户提供方便;但是C/S比较依赖网络,如果网络状况不好就会影响到用户体验,还有安全问题。没想到他紧接着就开始问安全问题。其实我完全不懂网络安全,但我还是说了一个SQL注入。他就让我具体地说一下什么是SQL注入。我说了之后他问我怎么取得管理员权限,我说这个我不知道。他就问别的问题了,大多是操作系统的知识,像什么进程调度和磁盘调度,我都答得比较好,要感谢我们的操作系统课和治军老师。后来他问到一个问题,说有10000个进程,他们的优先级都在1到150,问我怎么能在O(1)时间找出优先级最大的进程。我之前刚好看到过一个叫位图的方法,我借鉴过来,说可以用一个150大小的数组,然后把优先级为i的进程都存在数组的第i个位置,可以用一个链表。他听完之后说实现O(1)吗?我一想,其实没实现。于是说没有实现O(1)。他说了句O(1)也不是要一次就查出来,只要是常数就可以了,我说,哦,那我的方法也实现O(1)了。他后来就没再说这个问题。 我想他的意思应该是说查找的时候是O(1)吧。后来的问题也都答得挺好的,我感觉。他还问了我的成绩,我说大概是第10。快结束时他说,我现在就可以告诉你你这次面试还是比较好的。出来之后菲菲说你的那两个同学都可羡慕你了,面试了这么长时间。我面了40多分钟,一般的人都面20分钟左右吧。

回来等二面的通知,当天晚上,join.qq.com上贴出二面的名单时,没有我。而同学已经有人说收到二面通知的短信了。我一阵悲伤,但是想不通为什么面试官说得好好的我却被拒了。是不是因为我有出国意向?郁闷到10点多,突然接到电话,是今天的面试官打来的,他说让我明天去参加二面。原来他们没有拒绝我。他们都是短信通知,却给我打了电话……

二面是我自己去的,到了酒店就给菲菲打了个电话,菲菲又是一顿安慰我说不要紧张。这回真有一点紧张了,因为二面的人少了,面试一个都得1个小时左右。有个吉大的研究生先到了,在那儿等着,他是12点的,在我后面,我是10:45的。二面据说是“总监”来面,轮到我时,看到的是一个身形很瘦的人,不像总监,但很技术。坐下来之后,确认一下我的名字,然后就没有别的话了,直接说“在内核中,有这样一段代码……”。面试开始,他一道题一道题地问,每道题都写在白纸上,包括我的回答,记录得很认真,总监果然不一样。

一共问了大概有12道题,我记得有:
1. 在内核中有这样一段代码:
有一个全局变量:int flag = 1;
if( flag == 1) schedule();
while( flag == 1) sleep();
问这段代码会不会有什么问题,我说不会发生死循环,因为flag可能被别的进程改变。但他又问说编译器会不会做什么优化,编译器的优化我并不了解,但我说了一句很“巧妙”的话:你是说编译器会做优化导致这里会产生死循环?他随即说:对,会不会优化?假设会的话,该怎么做?听完他的话我一下就想起了volatile,于是说如果要使它不优化,可以在int前加上volatile修饰字。这终于答对所问了,他于是就说了些volatile的东西。我说我只是看到过volatile,并没有用过,现在正在学编译原理,所以编译的知识不是很了解。
2. 有这样一段代码:
int a;
int b = 0;
for(a = 0; a < 2000000; a ++) ++b;
问我这样编译器会做哪些优化?我看了一会儿,想起了register,就说我想到了,会把a存放在寄存器里。他说:嗯,还有什么优化吗?我又想了一会儿,说会把b也优化成register,他笑了笑。说会不会直接把a, b赋成2000000?我说应该不会吧,因为我觉得编译器的优化不能太过。他说了句你觉得编译器越权了是吧。我说是。
3. 我们经常会定义一些结构体,假设有下面的结构体:
typedef struct{
    int aa;
    char bb;
    int cc;
} A;

A a, b;
if(a == b) { ... }
他说gcc做了一个扩展,使得结构体之间可以直接比较是否相等,用的是内存比较memcmp。但是,这样做有什么隐患?我一开始以为他要考字节对齐,但发现不是。他说你想一会儿,不着急。说完他去倒水了,我想了一会儿,突然说我想到了。其实这还是字节对齐,bb字节对齐后变成4个字节,但后三个字节的内容并没有指定,如果比较两个结构体的那段内存是否一样的话,这三个字节可能会不同,所以这是隐患。他嗯了一声,我应该是答对了。

4. unsigned short a = 0x1234;
    unsigned int b;
    b = a;
    b = *((unsigned int *)&a);
结果分别是什么,这个比较简单,一个是0x1234,一个是0x12340000,他又说了后面一定是0吗?我说不一定。

5. 正则表达式
这个比较简单,说C语言的标识符是:字母或下划线打头,后跟0到7个字母或数字

6. 你们学过计算机组成原理吧?知道存储的层次结构吗?
这个也很简单,CPU和内存之间有Cache,Cache和外存之间有内存。出现层次结构的原因是速度和造价。
他又问了Cache为什么比内存快。DRAM和SRAM(动态RAM和静态RAM)。为什么SRAM比DRAM快?SRAM是触发器的,DRAM是电容的。为什么电容的慢?这个……我不知道怎么回答。他就说是不是电容充放电就慢,我说对,就是电容充放电慢。

7. 编码题一:写一个洗牌函数xi_pai(int *array, int n),就是把数组array中的元素打乱。要求O(1)的空间,O(n)的时间。这个比较简单,算法导论里面有讲permute()的。我当时害怕他要我证明一下我的程序得到的结果是随机的,还好没有……

8. 编码题二:有一个集合S = {a , b, ..., z},编程打印出S的所有子集。
这个就有点技巧了,我当时可能比较兴奋,一会儿就想出来了。
S的所有子集的个数是2^26,包括空集。从0到2^26 - 1之间的每一个数都对应着一个子集,所以应该是这样的:for(i = 0; i < 2^26; i ++){}。括号里面应该写什么呢?其实到了这里已经很简单了,只要把i和其中的一个子集对应起来就可以,如果i的第j位为1,则表示子集里有'a'+j这个字母。这样就做完了。我做完之后给他看,他也挺满意的。还有几个题忘了... ...

二面的整体感觉相当好,因为他问的所有问题我都答出来了,没有完全不会的,虽然有些是经过他的提醒才答出来的。快结束时,他问我有没有什么问题要问,我说,如果这面我不过,能不能也通知我一下?他听了之后说了一句让我很是高兴的话:初步决定是过了。然后我回去等通知。

中午我回到寝室,还没坐多久,就接到二面面试官的电话,他说麻烦你下午再跑一趟,来参加HR面试。HR面试应该是很轻松的,于是我也很轻松地去。见到HR经理,也就那天宣讲会上的那个。我想终于见到BOSS了,他看起来挺年轻。坐下之后他说你的自我评价挺有意思的(我自己写的一句话:形式地理解和创造地思考,并通过动手达到精湛,是我最大的特点。)。我说听别人说自我评价最好写一句话。他问之前的面试官有没有跟你探讨过这句话,我说没有。他说那你就解释一下吧。于是我跟他说我的理解。他听完之后指着房间里的一盏灯问:这个灯泡多少瓦?……我说我不知道,我猜40W吧。他说你不是形式地理解和创造地思考吗?那你告诉我这盏灯多少瓦。我一时无语,说一般的灯都是40W的,我看这盏灯也不是特别的亮,所以也应该就40W吧。我不知道,猜的。他听了之后不太满意。之后又说那你自己举一个例子,来表现你的自我评价所说的吧。我想了想,就举了个C语言里的指针的用法,我的意思是,如果想要写出好的代码,就要去了解这个语言的编译器。而文法都是形式的。大概是这么个意思。终于他不再跟我纠结这个问题,因为他不是做技术的,估计我一顿指针地说他也不太懂。后来就谈到我考GRE,他对我有出国的意向也是耿耿于怀,以致于后来我在等通知的时候老在怀疑他会不会因为这个而拒我。最后就没有了,时间很短,不到20分钟。

回去之后我满怀希望地等着通知,但等了两天还是没有消息。开始着急了,一直在想是不是因为什么而被拒了。其实这三天才是最难熬的,我一直害怕这件事情也悲剧了……明明一二面我都做得那么好,但我还是没有信心,因为这学期我失败得太多了,都有阴影了……

不过现在好了,今天下午终于收到腾讯的短信。说我通过了面试环节,具体安排在五一后再联系。一颗心终于放下了……还好还好,这回没有悲剧……

转载于:https://www.cnblogs.com/rockuw/archive/2010/04/29/1724524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值