牛人面试intel

来源:互联网 发布:常用网络用语 日语 编辑:程序博客网 时间:2024/05/02 04:42
坐375到了清华西门,还步行了20分钟才到了融科资讯中心,很气派的building,吓死我了。中途遇到很多卖盘片的妇女之类,令人很不舒服。
    由于衣服很破,进楼的时候,保安问了我一些问题,我回答的很流利,他允许我进了楼,坐电梯到8层,看见了intel这几个字母,才知道找到地方了。一个很pp的小美
女把我引进了一个屋子里,里面坐着2个人,一个美国人,一个中国人,用很友好的目光看着我。于是,我的很烂的英语开始滔滔不绝的开始了。我先做自我介绍,随后开始了
严峻的考验!”你对linux熟悉吗?”美国人问道。我回答“非常熟悉”。"那好,给我解释一下进程的内核态和用户态的切换",我开始了演讲“内核使用一个固定的全局页目录表swapper_pg_dir,他的3G以上的高端都被映射好了。。。”。美国人微笑了,感觉我的回答很专业。“这样吧,阅读过linux源代码吗?版本多少?”美国人又问了。我回答“阅读过,但是对tcp/ip协议栈的代码阅读的更仔细”,美国人不停的问,“那你说说内核是如何load协议栈代码,是如何响应网卡数据的?”,我想,这太easy了,我讲起了初始化函数net_dev_init,讲起了open_softirq,讲起了使用hash表注册不同的协议,使用dev_add_pack注册ip协议,当网卡有数据,进行校验,检测缓冲是否溢出,随后,挂接在cpu的处理队列上,然后就调_cpu_raise_softirq(),随后就是bottom_half的处理了,这个时候那个美国人已经开始不停的点头了。我补充到,我看到的source code版本是2.4.18,旁边的中国人有点妒忌我了,他开炮了,他说“这样吧,给我写个函数吧,你自己实现malloc”,我说,太简单了,这个函数我已经写过很多遍了,我5分钟写了出来。他看了之后,说我大体上是对的,但是没有使用assert检测,操,事情真多。中国人微微一笑,问我,加入在linux下一个程序退出,如何能够执行一点自己的代码,我说使用atexit加一个exit handler处理函数,他笑着没有回答。因为,我知道,这个东西说多了就是一个病毒代码了。美国人看起来,对我很满意,他找了一个话题,问我对开源通信有什么感觉我说,我对开源通信非常make sense,我说,现在一些烂教授把很简单的问题复杂化了,实际上,本来都是工程化的问题,通信软件如果开源的话,会让很多人脱颖而出,随后我赞赏了intel对中国开源社区的支持,他笑得已经合不上嘴巴了。随后还问了一些,诸如posix,ipc,共享内存之类的东西,都是很简单。这里就不说了。最后,美国人和中国人把我送出了屋子。

    屋外的漂亮美女正在准备调度面试人员呢,随后,她让我等了5分钟,我顺便去了一下厕所,就进入了一个更大的屋子。里面有2个人,一个美国女人,一个中国男人。美国女人很和蔼,中国男人很内向,但是我知道这个男人一定是个linux高手,因为一般不善言词的人能够当面试官,都是绝对的靠实力而不是口才获得别人的尊重的。美国女人让我自我介绍,我介绍了一下,随后问起我的爱好,兴趣,对linux看法之类,我很轻松的搞定了。突然,中国男人发飚了,“哦,小伙,不错啊,你对多线程安全是如何看待的给我编写一个线程安全的链表吧”,我想,真简单,我用mutex来控制链表插入,删除的关键代码区域,很快就搞定了。他说“可以啊,小伙,北邮的研究生,为什么不用信号量呢”,我说“信号量在linux的实现不是很好,里面有一些bug”,他眼睛挣的很大,随后,我举出了一个信号量在linux实现中的一个bug,他没有说什么。他随后,问我,“如何把linux改造为rtos呢?”,这个问题比较难,因为linux是分时系统,同一优先级的会时间片轮转,而且调度仅仅发生在从内核切换为用户态时,我说,首先要改进调度算法,其次,把很复杂的vfs文件系统改造,最后,把内核设计的很小,通过一些库来提供内核的功能。我也是乱讲的,他点了点头。“小伙,你回答的不错,你设计过商业软件吗?”,我回答,当然了,随后告诉他一个url,他看了之后,露出了一对虎牙。美国女孩用好奇的眼神看着我和他对话,她最后问了我一个问题,“你什么时候毕业?”,我告诉她,明年4月,随后,我们3个开始了两两握手,感觉真的很无厘头。

   终于面试完了,在屋外的美女引导下,我离开了intel。








第一个问题: 堆和栈的区别?
这个很熟,balabala,不过感觉总结的时候,条理不太清晰,期间说到new和malloc,面试GG等我说完,叫我说一下new和malloc之间的区别。我答:new 是运算符,malloc是函数,balabala……然后他又接着问,什么时候用栈,什么时候用堆,晕,没想过这个问题,我说知道要分配多大空间的时候用栈,不知的情况用堆,感觉心跳加快,出冷汗,太细了,再问下去我不知道他还会问什么。不过还好,他说这个问题就到这。
第二个问题:两个排序的数组,怎么求交集。
这个会,我说两个数组同时遍历,相等的时候输出,小的下标++,他说恩,那你说说这个时间复杂度多少,这个我知道O(M+N),他接着问,现在这两个数组大小相差很大,应该怎么去改进算法,我想了一下,说用二分。他说恩这个可以,他又问,这样的时间复杂度是多少, 我答:O(Mlog2N), 他接着问,在什么情况下,这种优化才有明显效果,现在假如我第一个数组的大小为10万个int ,那第二个多大才会有效果。晕,他给我一支笔,说你想想,我晕,那就算吧,第一种O(M+N), 第二种是O(Mlog2N)算了一下,当N>16M的时候才有效果,Mlog2(100K) = M*(10+log2(100))=17M,17M<M+N,N>16M,期间还犯了个低级错误,把log2(100K) = log2 (1000)*log2(100),算了大概是60多,那哥们很差异,我才想到就改成上面的,他又问了,在实际中,我们这种算法在N》90M的时候才会有效果,问我为什么?我又晕,我说是不是因为第一种方法有可能在很早就结束了,他说我们做很多测试,这个是平均时间复杂度,我无语了,接着想,我说是不是因为二分查找出现太多找不到情况,说出口我就知道错了,二分查找最坏的情况就是log2N+1,他说不是,沉默了一会,我估计我一时半会想不出来,我就说:这个问题我估计短时间想不出来,那哥们给提示了,问我二维数组的二种遍历方式,按行和按列怎么实现,我说这个数据结构书上有讲,二维数组有两种存储方式,一种是按行,一种是按列,他说有按列存储的吗?怎么个存储方法,当时我没敢说,我说数据结构书上是这样说的。他没接着问这个,就问我按行遍历快,还是按列遍历快,我说按行,他说为什么,我说数组是顺序存储的,按列要计算地址,CPU寻址是需要时间的,这时我想到我上面题目的原因了。原来二分查找寻址的时候有开销。他又接着问,第一个数组和第二数组倍娄相差不是很大的时候怎么优化,假如说N=10M,我晕,真绝,我说应该给大的分块,他又问怎么个分块法,我先给我知道的东西说了一下,在数据结构中,分块查找一般是按照数组大小的开平方来决定的,不过对于我们这个问题,应该考虑到实际情况,想了一会,我说应该按它们之间倍数来分块,他说恩,那我们这个问题就到这。我晕,
第三个问题:智力题:100个球,我和你来拿,每人只能拿1-5之间的数目的球,你先拿,谁最后先拿完,谁就赢。歇菜了,当时头一大,没有思路,我还是说我想想,想了30秒,我说出自己的方案,我说最后让他给我剩5个以内的球,我就能赢,所以在95球让他最后拿完,于是说,我先拿5个,剩下的,他拿1个我就拿他的对5的补,结果应该有可能会赢,面试GG分析了一下不行,叫我再想,受不了,想了2-3分钟,期间也说了一二个想法,都给他否决了,然后我说,能不能给点提示,他说,你想赢,最后一个回合,你要给他留几个球,我想,说6个,我顿时感觉自己智障,只想自己一下给最后拿完,没想到给人下套,于是我告诉他我的答案,第一次我拿4个,然后你拿多少,我就拿你的个数对6的补,(每次都给你下套,赵大叔应该来拐他几回)。他说:恩OK,这个问题就到这。
第四个问题:一个int数组,问怎么找到这个数组中重复超过一半的数?
这个暑假在崇新通信做过,我说可以用STL吗,他说可以,我说那很简单,给出一个map<int,int>对里面的数组遍历一次,然后遍历一次map,只要map的second大于数组的一半,输出他的first域。他说你这个复杂度多少,我晕又是这个,我说O(2N),他说你这样的话,要用2M的空间开销,你能不能降低开销,我晕了,我想我能不能对数组排序,他说可以,我说那也很好做,我先排序,然后来统计一下里面重复的个数,这样就能做到,他说这是可行的,你要知道当N很大的时候,你的排序要多少时间复杂度,我说最少也是O(Nlog2N),他说,所以这方法不可行,还有没有其它方法,我晕,左思右想,找不到合适的,又用期待眼光看着他,说能不能给点提示(实在脸皮厚),不过可惜的是,他没看我一眼,对着电脑说你想这样的数在数组里面是个什么数,我说是众数,他说这是肯定的,他说应该也是中位数,我说当N很大M也不小,你这样假设不太对,那哥们没说什么,我猛然想到,一次不行,多几次应该差不多,我说了我的想法,我用几次二分,多找几回,如果,出现的数多,就拿这个数来做,哥们笑笑说,这个问题就到这。
下面就对着我简历问我的项目,第一个项目,这个我在行,我就和他balabala,吹,这个昨天在联发科技吹过一次,今天特熟,思路也还好,然后和google street, city8比较了一下,说我们这个怎么怎么好,哥们听得很认真,然后又发难了:
你在这个项目中做了哪些工作?
这个我昨天也吹了,今天吹得更卖力。期间还问了不少小问题,我是吹得天花乱坠……呵呵,吹6B看来还是很重要的,哥们最后说,我没有什么要问的了,你有什么想问我的,
我问了几个问题:
1、baidu和google在搜索英文文献的时候,baidu的搜索不如google。这方面的原因是什么?
2、baidu有没有想做一个类似于google street的东西,(因为我项目就是在google street上有改进,想套近乎的)。
3、在交通查询方面,百度可不可以做一个,像火车时刻查询系统,这样比较方便,当然除了火车的,还有汽车的,飞机都可以做。
4、老一套,问如果我幸能进贵公司,我应该做什么方面的工作?
5、你们写程序用什么IDE(这个回答,说我们不用IDE,然后他balabala.晕,太强……)
面试GG都做了回答,最后说那今天就到这,起身,问了最后一个问题,有点唐突:我能知道您贵姓吗,他说姓*。握手,告别,
开门的时候,我想问问我有没有二面机会当然不能直说,婉转的表达意思,结果他打了一套太极拳,等于白问,就再握手,走人。
下楼感觉今天发挥还好,题目有点难,现在还没有二面的消息,估计黄了。唉,大公司就是不一样。