灵音前端合集

前天去的领英sunnyvale office onsite,为了面试请了两天假。面完后连夜飞回美东接着上班,因为基本上在飞机上就没睡,昨天一天上班都处于懵逼状态。。。今天终于恢复过来了,趁着周五上班比较清闲,来写写面经,攒攒人品~
onsite前一天HR把每一轮的具体时间,内容,以及面试官的linkedin Profile链接发给了我。我数了一下,算上中午带着吃饭的lunch大使,一共11位面试官。除了其中某一轮有位华人MM,剩下的全是老美。onsite从早晨9点45开始,一直到下午4点15结束,加上吃饭一共七轮。之前看地里的领英前端面经,貌似只有在职跳槽的前端candidate要面七轮,new grad好像只要五轮。。。
9:45-10:00, HR带着参观下办公室,然后带到一个小会议室,桌子上摆着老三样,一张写着candidate名字的欢迎卡片,一张LinkedIn connection map, 显示你LinkedIn账号的所有联系人,还有一些零食和水。然后见了一下之前联系我的Recruiter,寒暄了几句,之后面试正式开始。
10:00-11:00, 两位面试官,让写一个类似tooltip的widget,当用户把鼠标放在LinkedIn页面上某个联系人的名字上时,会出现一个类似tooltip的预览框,里面有该用户的头像,姓名,degree以及title。要求先用HTML以及CSS mock up下大致的layout,然后用AJAX得到所需要显示的用户信息。
11:00-11:45,两位面试官。题目是写一个function实现计算器里的undo以及redo功能。其实就是考数据结构里的stack。最后的拓展题感觉在问system design,问我如果这种undo以及redo操作是用在占据很大存储空间以及用户量很大的data上该怎么办,我说那就给每个数据加上index,undo以及redo只用在index上,最后再用index去取数据。。。
11:45-12:45,吃饭。可能是我之前对LinkedIn的食堂期待过高,结果事实却让我有点失望。。。饭完全没有想象中的那么好吃。。。不过带我吃饭的小哥说食堂每周都换菜单的,估计我正好轮到了不太好吃的那一周。。。
12:45-13:30。还是两位面试官。出了两道题。第一道是之前地里面经里出现过的,Insert links for each of the members into the content div. The link would be like:

<a href="profile.jsp?id=<memeber.id>"><member.name></a> 

考点就是DOM Manipulation,怎么向DOM Tree里添加新的节点。Follow up是如果有很多member的链接需要一个一个添加到DOM里,会造成reflow影响页面性能,如何解决。第二题是写一个memoization function,思路就是利用hashTable存之前计算出的结果。
13:30-14:15,product and culture fit。这轮主要就是扯淡。。。问到好多UI以及设计方面的问题,比如谈谈你对client side rendering以及server side rendering的理解,说一个你最喜欢的应用并列举下优缺点,LinkedIn还有哪些需要改进的地方等等等等。。。
14:15-15:15,一位面试官。我本来以为这轮是考system design的,之前猎头也特意跟我说过会有一轮system design,所以我之前花了挺多时间刷system design的,结果这一轮还是考JS。。。问题就是之前领英前端面经里一直出现的leetcode 273,把数字转换成英文,要考虑小数。我本来以为这题是最有把握的,因为之前做过。。。可没想到最后代码居然没写对,有挺多bug的,这可能就叫做大意失荆州吧。。。这一轮估计是跪了。
15:15-16:15,这一轮和manager接着扯淡,全程聊天穿插一些behavior question。最后由manager送客,onsite结束。
总体来说,LinkedIn家的面试体验是很棒的,流程清晰明了,绝对算是一次难得的经历了。至于最后有没有offer那就只能听天命了。。。


两个工程师面,其中一个是senior UI engineer

一上来面了一些js基础,像callback 还有promise的区别,什么是prototype,javascript event bubble怎么work,之后开始码代码

第一题是给你个array,array里每一个object,有 skill 和 name,让你生成一个新的array,每一个 element 都代表一个skill,跟 skill 一起的还有user,user是一个 array of user name,这道题基本就是group user by scale

第二题是给你一堆代码问call 某个 method 会输出什么结果,其实就是考js里的prototype inheritance。

第三题是给你一个array, array里面的每一个object,都有一个id 和name,让你用browser API生成一个 list of <a>, 然后要求是accessible。 Follow up是要求track link的点击,回答的时候讲了一下event delegation,和怎么样保证页面跳转的时候能够成功的把数据送到后台。


刚面了linkedin 前端 onsite, 虽然面的不好,还是来写写面经,攒攒人品吧。

onsite从早晨10点开始,一直到下午4点15结束,加上吃饭一共七轮

10:00-11:00, 两位面试官,让写一个 infinite scroll handler.

给了一个 <ul id="posts"></ul>

每次到了页面底部就用ajax load更多的内容。用throttle优化。

11:00-12:00,一位面试官。题目是给了个地图,上面有很多点, 每个点是个object, x, y 坐标都给了, 比如{x: 5, y: 5}

已知 包含所有点的 array, 某一个点,和半径d, 写一个function 返回到这个点的距离小于或等于d 的所有点。

怎么优化。我当时答得是把整个地图分成小的区域,每一小块2d的正方形。然后找这个点所在的方块和周围的几个方块。这样就不用遍历地图里所有的点了。

12:00-1:00,吃饭. LinkedIn的食堂的饭还是很好吃的。

1:00-2:00。还是两位面试官。 系统设计。linkedin新加的功能, 页面的右下角可以发messenger.

对于messenger这个feature, 先列一下有哪些功能要实现。然后对每个功能讲讲怎么实现。

2:00-2:45,这一轮和manager聊,学习经历和工作经历,全程聊天穿插一些behavior question。你想给LinkedIn增加哪些新功能。

2:45-3:30。product and cultule fit。 说一个你最喜欢的应用, 为什么喜欢,还有哪些需要改进的地方。你想给LinkedIn增加哪些新功能(这一轮又问到了)。

3:30 - 4:15。 写个function 来 parse query string. 先让你写个带query string的url.

http://example.com/over/there?name=ferret&id=1 parse完后生成一个object {name: “ferret”, id: “1”}

followup 1: http://example.com/over/there?name=ferret&name=tom&id=1 parse完后生成一个object {name: [", id: “1”}

followup 2: 如果url是encode,要先decode

面的不好,攒攒人品。希望可以帮到大家。

补充内容 (2017-3-28 12:26):

follow up 1 生成的object 没有写全。应该是 {name: [“ferret”, “tom”], id: “1”}

LinkedIn前端面经.pdf (908.4 KB)

考纲

UI Intern Technical Phone Screen 1 (60 minutes)

This interview will be broken down into the following two sections:

Knowledge of Front-End Technologies: This will probe several areas of front-end software development with questions probing events, promises, accessibility, prototypical inheritance, floats in CSS and other key concepts. You may be asked to implement a small practical solution to demonstrate knowledge.
Programming Ability: You will be asked to implement code in JavaScript and possibly also HTML+CSS for a small pragmatic problem. Additionally, you will be asked to implement a solution to a small algorithmic problem. The problem will be solvable using JavaScript, but you may use any language of your choice. You should ask clarifying questions and also be able to optimize when prompted by your interviewer. You should also be able to speak to testing strategies and ways to cover edge cases.

UI Intern Technical Phone Screen 2 (60 minutes)

This interview will focus exclusively on coding and algorithms. You’ll likely cover two, maybe even three questions. Please refer to the “Programming Ability” section of the above TPS1 prep in order to prepare for the TPS2. Again, these interviews are language agnostic but, since this is a UI Engineering interview, it’s likely in your best interest to write your code in Javascript.

Overall Reminders:

Ask clarifying questions; make sure you understand all the requirements of the problem and what the interviewer is looking for
Walk the interviewer through your thought process, we want to see how you think problems through
Call it out if you think you’re stuck, your interviewer can help you get back on track
Be able to optimize when prompted by your interviewer
Think about testing, edge cases, runtime and scalability
Do your research on LinkedIn and be able to speak intelligently about one or two things that we’re doing

Question2 Implement Fibonacci 记忆化
高频题: js 记忆函数 用js拿第n个斐波拉契数1,1,2,3,5,8,13。。。第7个就是13,可以用top down的递归方法写,但是时间复杂度很高,用hash存子结果可以防止重复计算,但是会有格外空间消耗。用bottom up 迭代是最优解。
V3: 写一个memorize function。就是可以根据arguments来缓存return值,第二次输入同样的args不会再计算整个function,而是直接从缓存获取return value。基本就是考Closure和hash的用法。我先写了个single argument function,然后拓展成多个复杂args的function。
function memoize(fn) {
// todo
}
function fib(n) {
// fibonacci
return n;
}
fib(n);
let memoizedFib = memoize(fib);
memoizedFib(n);
follow up: 函数的parameter可以是object, 这种情况下如何hash(JSON.stringfy会忽略掉regex和 function, 所以需要改写)? 用户想查cache怎么办?

参考

这个不错 https://leetcode.com/discuss/interview-question/349527/LinkedIn-or-Phone-Screen-or-Infinite-Scroll-and-Fibonacci

LinkedIn 前端.pdf (1.1 MB)