Dropbox面经
作者:互联网
sounce: https://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=745881
题目两年不变。具体的题目描述可以看之前的帖子。但考很多multi-threading和distributed system的基础知识以及不断深挖。单看面经没用,要真的对这方面掌握很好才行。
1. 100g的文件里面找出报错的line。问你用什么方法(工具)。
2. 利口要就要 里面容易踩的坑可以看利口讨论区的答案,比如用哪种shift比如loop里面的条件,总之就是要考虑负数的处理,注意Java里面所有int都是signed的。
3. 给你了一个class,里面有两个方程,一个是对网页进行处理的方程(input和output都已经给好了),一个是统计网页访问多少次。你需要完善第二个方程,让每次网页处理的方程被call时,你这个counter function都要计数。这个先不用考虑多线程,先考虑instance level。这个很简单,就是维护一个count,然后每次进第一个方程的时候就更新计数就行。然后楼主被考了static关键词。面试官问如果是两个instance,比如阿大和阿二。阿大对网页进行处理了,这时候计数器返回1。这时候阿二来了,计数器应该返回的是2。其实就是之前定义的variable记得要加这个关键词。然后进入多线程,怎么处理。那就是加锁呗。然后面试官说那你在代码上加锁。(期间还要求解释了多个概念例如race condition并且要结合这个例子来说是怎么产生的。)在代码上加了锁以后面试官继续challenge,说你现在两个方程都加锁了performance很差,因为对网页进行处理的时候一次只能进一个线程了。怎么改。然后他其实是想考不要在方程上加锁而是加在count++那里。这样对网页操作还是能多线程,但计数那里就要排队了。说白了这题就是要考static和synchronized。但楼主基础短板。卒。
4. 给你一个文件路径头,下面一堆文件夹和文件,文件里面有数字,找top k的数字。要写码,文件夹结构本身就是树结构嘛,但一开始又不给那些interface。你还要自己假设。就是自己假设有一些调用的api可以返回子文件夹或者判断是不是文件夹。我说遍历树把数字都找出来存起来,然后最小堆找top k。写完了后又被challenge了。说文件太多太大爆内存了怎么办。你可以怎么改代码来优化。我说分成很多份每份找自己的最后总的答案再比一次。他又改了一下条件反正就是说会爆那你要找很多很多机器来处理。其实他想要的就是不要单独把数字都存起来再来找top k,而是一边读数字一边就判断能不能丢到最小堆里面。这样只用维护一个k大小的堆。
5. 设计打牌游戏(楼主没缘开始这题)
看了面经以后题目看起来都很基础,但面试官都是那种级别好高的有很丰富知识的。他们心中有一个所谓的标准答案,他们要确保你真的明白你说的是什么的时候会反复各个角度来问你(比如当我说加锁的时候,会反复问确保你知道什么叫加锁怎么加有哪些好处坏处不能乱加然后加给我看看)。所以做好被反复challenge的准备吧。但如果你这方面基础好能明白面试官想要考查的点,你会很顺利的。
标签:面试官,加锁,网页,面经,方程,文件夹,Dropbox,多线程 来源: https://www.cnblogs.com/wangby511/p/14640648.html