【新提醒】Uber Intern Onsite四轮附求职感想【一亩三分地论坛面经版】 - Powered by Discuz!
1,Uber家美女真多啊。。。好吧不开玩笑,他们家的女码农是挺多的,内推我的大妞多谢啊。2,不愧是Uber,问的题不能算难,但是真的挺全面,不只是单纯算法,还会考验一些基础工程能力。
3,Why Uber这个问题一定要能准备好多种多样的答案,可以肯定Hiring Manager是会问类似问题的。
4,面试官之间会简单交流之前问了什么问题,所以不用担心问题重复,如果真的重复了也肯定是说好的。
5,一般会让你打开笔记本写代码跑测试,投射到大屏幕上,分辨率会因此被自动调高,可以先调低分辨率,不然字太小了。
Onsite:
一轮:ABC小哥,看起来很有肌肉的感觉,天了噜比我聪明还比我肌肉多。
1,Run-Length Encoding,就是把aaabbcccaaaa变成3a2b3c4a这样,要求encode后的信息要比原来的短。
首先暴力扫描之。然后问有什么问题,答曰decode的时候111aaa会encode成313a然后decode成313个a。提出每encode一个就插入一个特殊符号标记,他说可以。然后追加问是否可以不用特殊符号,答曰创建新的计数单位,比如用A代表1B代表2,然后aaa就变成Ca(you get the idea),这样就不需要插入额外符号了。
2,Anagrams,原题,给一堆string,分析有多少组anagrams和各自对应的anagram。
其实没写过原题,只是知道思路。先说用HashMap存计数,然后map的key用任意的anagram。然后说如何比较anagram,先说排序然后比较,然后提出用类似counting sort的线性扫描,然后再提出可以用上面这题的encode方法,用一个额外常数大小的辅助map存储string里不同字符的counter,然后格式化打印该map(比如aacb,经过map扫描然后稍微格式化一下就是2a1b1c),然后对比主map即可。最后打印主map。
3,上面两个都是聊天,选一个出来写代码并且跑一些测试结果。
. From 1point 3acres bbs
二轮:英伦小哥,看起来相当瘦弱,和上面的是同一个组的,天了噜比我聪明还比我帅。
1,全程其实就一题,设计spotify的当前TOP10榜单,显示的是当前正在被播放最多的10首歌。
见仁见智的题,小哥会一直问细节问设计。我能记得的考点:
-用min-heap存TOP10的话,存哪里(缓存),如何维护。播放次数肯定需要一个大的table来存,用什么类型的存储(Redis很万能)。
-用户点击播放或者暂停或者下一首后,这个更新POST到服务器之后服务器应该做什么,这里可以用到消息队列,把更新TOP10和数据库的功能交给worker去做,服务器只负责传递信息。
-worker处理完信息发现需要更新TOP10之后,如何通知服务器并且在客户端那边更新。这里就是一个pub/sub的概念(Kafka万能啦),同时需要有socket池来通知客户端去更新(Python的话就Socket.IO咯)。
-如何减少操作量,比如把一些server的操作移到worker,增加一些条件检查不用每次把整个流程跑一遍(可以提前结束或者跳过某些部分)。
-线程安全和原子操作性(Redis里的INCR和SET的区别还记得嘛),如何保证多个worker接到同一个歌的update能正确操作。(RCU锁之类的)。
-worker挂了怎么办,server挂了怎么办,存heap和table的服务器挂了怎么办,整体的瓶颈可能是哪里(大量人听同一首歌,会导致一个歌不停被update+1,这个其实可以aggregate起来),如何优化(就增加一个aggregator),这个优化的服务器挂了怎么办。大致来说都是用备份服务器,然后备份里放一段时间内的起始备份和一个追加操作的log,类似GFS那样。. 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
-假如我们不追求performance,只追求用户体验,上面提出来的方案应该如何优化。这里就是让备份服务器牺牲空间和效率来定期完整备份主服务器,主服务器挂了直接换备份的上。所以要增加一台Master服务器来管理这些,然后Master服务器本身又要备份。。。就看你愿意说多细了
-有哪些现存技术可以直接实现这些东西,改进的可能性,这里就是show你的buzz word储量了。 鏉ユ簮涓€浜�.涓夊垎鍦拌鍧�.
三轮:技术大佬,看起来就很睿智,天了噜比我聪明还比我睿智。
1,我个人觉得最有意思的一轮,可能其他人觉得不这样吧。让我实现word count。
先让我别写程序本身,问我一般怎么review和debug一个word count代码。先说了general的peer review,style guide还有yellow duck debugging之类的。最后那个我瞎扯调节气氛的XD。
然后问我知道不知道如何验证程序的正确性,我说test吧,然后他问如何test。我说好像工业化一点的是unit test,然后对方来劲了说你开始写代码吧,顺便写个unit test。
先把代码简单写了下,main里手动输入了input看了下结果,感觉OK。然后承认没写过unit test,被告知可以google,果断打开google抄例子,改写,测试,debug,通过。
然后要我输出word count结果并且按照word排序,依稀记得TreeMap有这个效果,又是直接开google验证想法,确认了直接改写代码,再次改写unit test测试输出顺序。
然后要我输出word count结果并且按照count排序,直接google了一个根据value排序hash map的方法,并且改写unit test测试输出顺序,结果发现结果不正确。debug时间不太够,转去让我问问题。问问题的时候想到因为复制来的方法里会新建一个内容相同的字符串但是内存地址不同,导致查找key的时候会无法找到,对方表示这个分析很好。结束面试。
四轮:Engineering Manager,就是Hiring Manager了。天了噜比我厉害还比我美。
1,各种聊天聊项目聊他们做什么,问你想做什么在追求什么挑战。
这里就是show你的激情的时候了。如果这个HM感觉你不适合他们组但是适合别的组,会追加面其他的Manager。我个人是很想做product还有见识下工业界的工作方式和设计哲学,所以就按照这个方向说下去了。
2,超简单的piglatin函数。
. visit 1point3acres.com for more.
要求详细描述思路,不要一步到位,就慢慢和她从暴力操作string聊到stringbuilder再聊到corner case处理。期间她也不断追加新的input类型,最后皆大欢喜。
3,Why Uber?
因为将来全职有机会去中国出差!是的,我遵从自己的本能,直接这么说!当然了,还说了别的七七八八的,我本来对他们家就很有兴趣(可惜面试安排太晚而且没法提早,只能从了别人),所以这样一个问题作为我求职的finale,实在不能再合适了。. more info on 1point3acres.com
4,因为之前和recruiter提到自己很急(其实已经签了),所以当场让我等了下就口头offer了,唉真是一种说不出的感觉。
Read full article from 【新提醒】Uber Intern Onsite四轮附求职感想【一亩三分地论坛面经版】 - Powered by Discuz!