Eb1b 等待期间回国# Immigration - 落地生根
d*o
1 楼
上周面试linkedin的前端,杯具了。反馈说是desgin和coding没做好。我百思不得其解
,想问问大家我的回答到底出了什么问题。
design是倒数第二轮,一个刚刚入职不到一年的小女生主试。
题目是设计一个registration real time map for linkedin. 每当有人注册linked,地
图上就会有一个点闪一下。
我首先问她的第一个问题是期望的效果是什么样的,多久刷屏一下,resolution到多少
,闪的点是不是越大代表注册人数越多。她说1秒钟刷屏一次,resolution到post code
,点的大小代表什么你自己说了算。我就说因为很可能同一地区有可能一秒钟内有多人
注册,所以我就用点的大写代表人数。然后我就开始设计api,我说我期待api返回一个
数组,数组里每个元素是一个json object,包含latitude,longitude和人数,我每个1
秒钟call一次这个api。然后她就说这不行,服务器只返回country code和post code,
并且不能够1秒钟call一次,服务器受不了,最多30秒call一次。于是我就改了一下,
前端加一个转换函数,把country code+post code转换成latitude,longitude,中间有
一个cache,采用lfu淘汰算法。至于服务器端,我用30台服务器,有一个load balance
,这样就可以1秒call一次。她还是说不行,最多10秒call一次,不能再多了。我就说
那好吧,setInterval为10秒一次,然后把拿到的点画到地图上,另外有一个
setInterval,隔3秒,把所有的点清理。她又说不行,我们虽然最多只能10秒call一次
,但要模拟每一秒都有点闪和灭。我说那就给每个拿回来的点随机放一个0~10之间的
delay值,setInterval为1秒,每次把delay--,直到为0就开始在地图画点。然后她又
说现在感觉resolution太高了,地图上都是点,怎么办。我说那api返回的时候能不能
先aggregate一下,她说还是不行,api返回的东西不变。我说那好吧,那个country
code+post code转换成latitude,longitude的函数里,我把多个country code+post
code转到同一个latitude,longitude,这样就可以在前端aggregate。然后她就没有再
提问了。
回来以后我一直很纳闷,这题提的要求很不合理。api不直接返回我需要的内容,无端
增加前端的工作量。然后最多10秒call一次,这什么破服务器?同时非要模拟每一秒都
有活动,简直是自找麻烦。然而这样的设计面试官也还是很不满意,最后还是fail了。
coding是最后一轮,当时我已经非常疲倦,结果遇到一个非常不友好,乌克兰女的面试
官。
题目是给出一个string输入,表示一系列tuple: "(1,2,3),(4,5,6),(7,8,9)",然后实
现一个multiply(n)函数,返回每个tuple里第n个数的积。比如这里multiply(2)的话,
就返回2*5*8=80. 要求写成一个class
我首先确认是写一个constructor function,然后用new关键字来call这个function来
生成class。她说可以,我就开始写。最终代码如下:
Tuple = function(str) {
this.tuple = [];
this.parse(str);
}
Tuple.prototype.parse = function(str) {
var str2 = str.substring(1, str.length-1);
var t = str2.split('),(');
var tps = t.map(function(item) {
return item.split(',').map(function(i) {return +i})
})
this.tuple = tps;
}
Tuple.prototype.multiply = function(n) {
if(n<=0 || n>this.tuple[0].length) {return null;}
var output = 1;
for(var i=0; i output *= this.tuple[i][n-1];
}
return output;
}
fiddle在这里:https://jsfiddle.net/dongogogo776/rem5gus4/
题目应该很简单,但互动效果极其的差。我刚开始写了几个字,她就说我写错了,一会
儿说我没有注意输入的validation,一会儿又说我不应该把parse函数分开。str.
substring那里我本来写的是.slice的,她说不行一定要让我用.substring。我问有啥
不一样吗,她说差不多但还是一定要问用.substring。parse函数里tps.map那一行我本
来是想用for循环,同时进行validation的,她又说for循环不对,容易出错,要用high
order function才安全。我说我改把,刚写下this.tuple = 这几个字她又说我错了,
不可以直接等于。我差点没骂出来说你都不知道我准备怎么写怎么就知道我错了?最后
完了又说我没有validation,我说我本来想parse时候用for循环同时做validation的,
是你不让用for循环的。她又问我那你现在怎么做validation,我说我再写个
validation function吧,把string拆开了一个个点valid一下看有没有violated的地方
。她说检查violated太复杂的,有没有更简单的方法。我说那就写个regular
expression吧,但这比较复杂,我现在写不出来。然后她就无话了。
7轮面试最终就是这两轮挂掉。我感觉前端真是个坑,答题很无所适从。跟大家分享一
下,希望一起琢磨琢磨到底怎么样才能答好题目。
,想问问大家我的回答到底出了什么问题。
design是倒数第二轮,一个刚刚入职不到一年的小女生主试。
题目是设计一个registration real time map for linkedin. 每当有人注册linked,地
图上就会有一个点闪一下。
我首先问她的第一个问题是期望的效果是什么样的,多久刷屏一下,resolution到多少
,闪的点是不是越大代表注册人数越多。她说1秒钟刷屏一次,resolution到post code
,点的大小代表什么你自己说了算。我就说因为很可能同一地区有可能一秒钟内有多人
注册,所以我就用点的大写代表人数。然后我就开始设计api,我说我期待api返回一个
数组,数组里每个元素是一个json object,包含latitude,longitude和人数,我每个1
秒钟call一次这个api。然后她就说这不行,服务器只返回country code和post code,
并且不能够1秒钟call一次,服务器受不了,最多30秒call一次。于是我就改了一下,
前端加一个转换函数,把country code+post code转换成latitude,longitude,中间有
一个cache,采用lfu淘汰算法。至于服务器端,我用30台服务器,有一个load balance
,这样就可以1秒call一次。她还是说不行,最多10秒call一次,不能再多了。我就说
那好吧,setInterval为10秒一次,然后把拿到的点画到地图上,另外有一个
setInterval,隔3秒,把所有的点清理。她又说不行,我们虽然最多只能10秒call一次
,但要模拟每一秒都有点闪和灭。我说那就给每个拿回来的点随机放一个0~10之间的
delay值,setInterval为1秒,每次把delay--,直到为0就开始在地图画点。然后她又
说现在感觉resolution太高了,地图上都是点,怎么办。我说那api返回的时候能不能
先aggregate一下,她说还是不行,api返回的东西不变。我说那好吧,那个country
code+post code转换成latitude,longitude的函数里,我把多个country code+post
code转到同一个latitude,longitude,这样就可以在前端aggregate。然后她就没有再
提问了。
回来以后我一直很纳闷,这题提的要求很不合理。api不直接返回我需要的内容,无端
增加前端的工作量。然后最多10秒call一次,这什么破服务器?同时非要模拟每一秒都
有活动,简直是自找麻烦。然而这样的设计面试官也还是很不满意,最后还是fail了。
coding是最后一轮,当时我已经非常疲倦,结果遇到一个非常不友好,乌克兰女的面试
官。
题目是给出一个string输入,表示一系列tuple: "(1,2,3),(4,5,6),(7,8,9)",然后实
现一个multiply(n)函数,返回每个tuple里第n个数的积。比如这里multiply(2)的话,
就返回2*5*8=80. 要求写成一个class
我首先确认是写一个constructor function,然后用new关键字来call这个function来
生成class。她说可以,我就开始写。最终代码如下:
Tuple = function(str) {
this.tuple = [];
this.parse(str);
}
Tuple.prototype.parse = function(str) {
var str2 = str.substring(1, str.length-1);
var t = str2.split('),(');
var tps = t.map(function(item) {
return item.split(',').map(function(i) {return +i})
})
this.tuple = tps;
}
Tuple.prototype.multiply = function(n) {
if(n<=0 || n>this.tuple[0].length) {return null;}
var output = 1;
for(var i=0; i
}
return output;
}
fiddle在这里:https://jsfiddle.net/dongogogo776/rem5gus4/
题目应该很简单,但互动效果极其的差。我刚开始写了几个字,她就说我写错了,一会
儿说我没有注意输入的validation,一会儿又说我不应该把parse函数分开。str.
substring那里我本来写的是.slice的,她说不行一定要让我用.substring。我问有啥
不一样吗,她说差不多但还是一定要问用.substring。parse函数里tps.map那一行我本
来是想用for循环,同时进行validation的,她又说for循环不对,容易出错,要用high
order function才安全。我说我改把,刚写下this.tuple = 这几个字她又说我错了,
不可以直接等于。我差点没骂出来说你都不知道我准备怎么写怎么就知道我错了?最后
完了又说我没有validation,我说我本来想parse时候用for循环同时做validation的,
是你不让用for循环的。她又问我那你现在怎么做validation,我说我再写个
validation function吧,把string拆开了一个个点valid一下看有没有violated的地方
。她说检查violated太复杂的,有没有更简单的方法。我说那就写个regular
expression吧,但这比较复杂,我现在写不出来。然后她就无话了。
7轮面试最终就是这两轮挂掉。我感觉前端真是个坑,答题很无所适从。跟大家分享一
下,希望一起琢磨琢磨到底怎么样才能答好题目。