2010百度面经,一个同学贴的

本文涵盖了一系列技术面试题目,包括项目介绍、JVM原理、C++特性、排序算法、数据结构及多线程编程等内容,并提供了部分题目的解答思路。

面试题目:

1、介绍自己的项目
2、介绍jvm
3、c++题目:重载和重用的区别,多态如何实现(虚函数非虚函数的实现),c++编译的过程,宏和内联的区别,内联能不能做虚函数。
4、介绍你所有知道的排序算法,介绍nlogn的排序算法,介绍n的排序算法。
5、两个排序数组,找两个数组合并后的中间大的数。比如数组1是1、2、3、4、5,数组二是4.5、5.5、6.5、7,中间大的数字为5.5
6、一颗二叉树,每个节点有一个value,求所有子节点对称的节点。对称是说所有子节点的形状,对应value都相同。
7、给排序数组1和排序数组2,数组2是数组1的子集。求数组2中各个元素在数组1中位置。比如输入数组1为1、3、5、6、7,数组2为3、7,输出为2、5。
8、解释java里final,finally和finallize的分别用法,final要介绍在class,method,varable上分别地作用。
9、给一个java多线程程序,给出所有可能的结果。
10、用java实现linux的信号量,当然不能用synchronized和lock。
11、java写一个singleton
12、描述hashset和hastmap的实现方式
13、描述java.util.current这个包里的一些工具类。
14、中国象棋棋盘,指定起点和终点,打印所有马能从起点跳到终点的路径。
15、给一个小文件,里面有若干单词,给出该文件的字典(即删除重复单词)
16、给一个1t文件,内存10M,给出该文件的字典。
17、不做数据统计,估算世博会一天的人流量。

 

答案,同学贴的,还没仔细考虑,记录先:

1、没啥说的,吹吧。
2、介绍mark and sweep,拷贝回收,向下整理三种回收方式,介绍jvm四中内存区域:静态区,年老区,中间区,年轻区。
3、重用重载老生长谈,不说了。多态的实现也就是重载函数指针,虚函数指针表的东西。编译的过程无非是先预处理,展开宏和头文件,然后编译成.o,最后再link成可执行文件。宏和内敛的区别,宏无非是文本替换,内联是编译时按照语义展开代码。内联当然不能做虚函数。虚函数是基于函数指针实现的,内敛都展开了,哪来的指针。
4、排序不说了,nlogn的我介绍了快速,希尔和堆,不过希尔被chanllege了一下,据说不是nlogn的,面试官也不完全确定。n的无非就是hash排序。
5、不接受merge sort的方法,据说效率不如参考答案高。想了半天终于想到:先分别找到两个数组的中间数,如果相等就找到了,不相等去掉小的那个数组的前面部分,大的那个数组的后面部分,再反复递归即可。
6、递归打印数的两种遍历即可。中序加先序和后序中的一种。从遍历顺序很容易看出是否对称。只有左右儿子的遍历顺序一样,才是堆成。两种遍历的原因是一种遍历无法唯一确定一棵树。
7、举个例子好说:比如数组1是1、2、3、4、5、6、7、8、9,数组2是4、5、6。然后找数组1的中间,是5,然后在数组2中二分查找5,那么5的位置就确定了。然后递归查1、2、3、4中4的位置,6、7、8、9中6的位置加5。反复递归即可。
8、finally和finalize不说了,用过java的人都不会搞错。final在class上是不可继承,在method上是不可重载,在变量上是不可修改。
9、仔细一点,没啥问题的。
10、我的想法是做一个安全的trylock()函数,然后while(!trylock()) wait();退出临界区使用releaseLock()在notify()。被认可了。trylock()怎么做查查书吧,我临时折腾了一下,其实说不定有漏洞的,反正就是要确保只能有一个线程trylock成功,千万不能出现两个线程同时成功或者一个线程在临界区另一个trylock()成功的可能。
11、建议查书。我用了volatile+double check的方式,被勉强接受。因为这种方式也是有问题的。这个我看书时看到过,但是始终没看明白会有啥问题,以及完全安全的方式。
12、建议查书,现场yy风险大。我yy的虽然被接受了,但是还是书本靠谱,我就不说了。
13、就是利用了很高深的算法可以在一定的线程范围内提供unblock的多线程操作。
14、典型的搜索题,搞个队列广度搜索或者搞个堆栈深度搜索,瞬间搞定,不过记得剔除回环。
15、简单,扔hashset
16、不接受hash的方式。理由是你再怎么hash,哪怕10级hash,总有那么小概率事件时你1t中有990G的单词hash到同一个数值,那你就傻眼了。(很操蛋的理由,要这么考虑的话设计hash函数的人就该去死)这道题目我悲剧了。正确方式是分割小文件,然后merge。这个我想到了,但是怎么merge一直没想明白。答案很简单,分割小文件,然后sort。merge sort后的小文件那是很容易的,文件merge大了,但是保持sort状态,继续合并也很容易。
17、很操蛋的题目,我和他有沟通障碍。我最直接的想法就是抽样,然后把抽样扩散到全局。但是他不准抽样,也就是不允许我接触实际数字,不能跑去数人,哪怕是一个点数10分钟都不行。然后沟通障碍,扯到估算东方明珠的重量。我同样是程序员思维,找到塔的高度,找到实际照片,按照比例尺算出各部分体积,球体算面积,然后球体查外墙面材料的单位面积重量,柱子查浇注材料的单位体积重量,估算总体重量。
但是很悲剧,这不是他想要的结果。我不希望我通过计算得到答案。我一直不明白他到底想怎样。彻底的沟通障碍。期间换了好多题目,比如不准出去数人,不准查数据,你就坐在这个面试教室里,用你的脑子,现在给我估今天去西湖有多少人。很扯淡,完全不能理解。然后又换成你现在坐在这里估今天中国网民发了多少篇博客。靠,没数据估屁呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值