avatar
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; ioutput *= 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轮面试最终就是这两轮挂掉。我感觉前端真是个坑,答题很无所适从。跟大家分享一
下,希望一起琢磨琢磨到底怎么样才能答好题目。
avatar
w*r
2
本人递交140EB1B后没pp,在国内工作的老公来美后一起递交485。现在有一可能,老公
没来得及打指玟就回国,就必须等他下次用有效的H4来美再,问题1:能不能在国内做
指纹?在这期间如果我的绿卡应该是等待期间,万一绿卡被批准,老公的H4就作废来不
了美。问题2:是不是当初交485时应该要求在国内等绿卡,现在能不能改?
假如打完指纹回国,期间回美证批了,用H4来美,拿回美证回国,下次来美就不存在问
题了,这是我的理解,比较理想的结果,对不对?
真是抱歉
,有点乱。
avatar
h*n
3
我现在知道了为什么linkedin越来越慢,原来Linkedin的developers觉得users注册自
己的地址后,能够在delay 10秒后看到注册的东西显示出来,已是Linkedin的服务器能
达到的最好结果了!
avatar
s*a
4
你这种情况建议还是让你老公在国内走领事馆程序吧.
485是给已经在美国的人调整身份用的.强烈建议你好好读一下485的填表指南
http://www.uscis.gov/sites/default/files/files/form/i-485instr.
看一下effect of departure from United States while your application is
pending
你的问题不光是打指纹的问题,我的理解是如果你出去的时候没有AP,回来一定要用H入
境,不然你的485就作废了.理想的情况是像你第二种情况所假设的.但是万一期间你的绿
卡批了,他就不能用H4来美了.
avatar
s*3
5
JIATANG?
avatar
f*k
6
说下自己观点楼主别生气,要求不要每秒call 服务器的需求很合理。前端只是要显示
一个activity的图,让user感受每秒都有世界各地的人注册,如果每一个页面每秒都要
call服务器,cost会不会太高了?
user完全不care你的每个点是否精确
其实每三十秒call一次完全可行。你只需要保存好过去一次或两次call的结果(如每一
次都是一个postal code集合),弄一个Queue,然后每次拿到新结果了
,入queue,把最老的那一次弹出。然后把你queue中所有的点放在一个大set里。
每秒钟从这个set随机选sub set绘制即可。
avatar
e*s
7
前端面试是真难啊

code
个1

【在 d***o 的大作中提到】
: 上周面试linkedin的前端,杯具了。反馈说是desgin和coding没做好。我百思不得其解
: ,想问问大家我的回答到底出了什么问题。
: design是倒数第二轮,一个刚刚入职不到一年的小女生主试。
: 题目是设计一个registration real time map for linkedin. 每当有人注册linked,地
: 图上就会有一个点闪一下。
: 我首先问她的第一个问题是期望的效果是什么样的,多久刷屏一下,resolution到多少
: ,闪的点是不是越大代表注册人数越多。她说1秒钟刷屏一次,resolution到post code
: ,点的大小代表什么你自己说了算。我就说因为很可能同一地区有可能一秒钟内有多人
: 注册,所以我就用点的大写代表人数。然后我就开始设计api,我说我期待api返回一个
: 数组,数组里每个元素是一个json object,包含latitude,longitude和人数,我每个1

avatar
d*o
8
你的想法跟我当时给的差不多,我也是每30秒取回的数据放进queue
有一点点不一样,放进queue以后,我不是随机取,随机取不能保证清空
我是拿回来以后随机分配一个delay,一直delay--直到0就pop并且绘制
30秒的限制很奇葩的,现在的服务器随便都能支持几百几千的qps,为啥1qps就不行,0
.033就行?

【在 f***k 的大作中提到】
: 说下自己观点楼主别生气,要求不要每秒call 服务器的需求很合理。前端只是要显示
: 一个activity的图,让user感受每秒都有世界各地的人注册,如果每一个页面每秒都要
: call服务器,cost会不会太高了?
: user完全不care你的每个点是否精确
: 其实每三十秒call一次完全可行。你只需要保存好过去一次或两次call的结果(如每一
: 次都是一个postal code集合),弄一个Queue,然后每次拿到新结果了
: ,入queue,把最老的那一次弹出。然后把你queue中所有的点放在一个大set里。
: 每秒钟从这个set随机选sub set绘制即可。

avatar
f*k
9
这样的问题在于,你pop以后,内存里的点原来越少,导致必须常常call服务器拿新点
。其实你不用用delay来pop的,既加重了服务器负担,又要CPU跟进每个点,每个点都
要计时。这又是何苦。
你只需要按batch pop就行,每次新batch来了,把老的set一次移除。

:你的想法跟我当时给的差不多,我也是每30秒取回的数据放进queue
:有一点点不一样,放进queue以后,我不是随机取,随机取不能保证清空
avatar
f*k
10
说句不好听的,如果这样仅仅显示闪烁效果的功能都要高频call服务器,那么太不合理
了。其实我甚至可以不call服务器,就一个静态的大set,每秒随机去取subset,显示
即可。甚至可以做一个gif。
LOL

:你的想法跟我当时给的差不多,我也是每30秒取回的数据放进queue
:有一点点不一样,放进queue以后,我不是随机取,随机取不能保证清空
avatar
z*o
11
把桌子一掀,
‘我就要一秒call一次,你们他妈的什么服务器?凭什么限制老子,信不信老子把你家
服务器砸了?!’
avatar
H*5
12
前端就是个坑,隔段时间出新库新框架,又要重新学。比刷题难多了

【在 e*******s 的大作中提到】
: 前端面试是真难啊
:
: code
: 个1

avatar
d*o
13
她的要求是取回是30秒的间隔,但闪烁是每秒都要有,所以每秒都要做一下处理
你的方案里每秒都要生成一次rnd,也不见得很efficiency
我也觉得我当时给的方案未必是最好的,但至少是working solution
我后来想到最effective的方法应该是维护一个有10个数组的数组,每次取回数据就把
数据就随机这10数组个里面撒,然后一个每一秒钟顺序取一个数组里的东西绘制,绘制
完清空,index = (index+1)%10
主要她也没深究任何的performance问题。如果performance是她关心的,问一问我怎么
improve我就能想到更efficient的方案。她当时没问就转到别的问题去了。

【在 f***k 的大作中提到】
: 这样的问题在于,你pop以后,内存里的点原来越少,导致必须常常call服务器拿新点
: 。其实你不用用delay来pop的,既加重了服务器负担,又要CPU跟进每个点,每个点都
: 要计时。这又是何苦。
: 你只需要按batch pop就行,每次新batch来了,把老的set一次移除。
:
: :你的想法跟我当时给的差不多,我也是每30秒取回的数据放进queue
: :有一点点不一样,放进queue以后,我不是随机取,随机取不能保证清空

avatar
d*o
14
大哥,人家设计要求是real time real data,你做个static set或者gif怎么满足要求?

【在 f***k 的大作中提到】
: 说句不好听的,如果这样仅仅显示闪烁效果的功能都要高频call服务器,那么太不合理
: 了。其实我甚至可以不call服务器,就一个静态的大set,每秒随机去取subset,显示
: 即可。甚至可以做一个gif。
: LOL
:
: :你的想法跟我当时给的差不多,我也是每30秒取回的数据放进queue
: :有一点点不一样,放进queue以后,我不是随机取,随机取不能保证清空

avatar
d*o
16
你的意思我应该一开始就做websocket?似乎比looping开销更大
而且websocket这么新,应该不会吧。面试官说这是几年前linkedin放在大厅的一个
demo app,那时候websocket诞生了没还不知道。她描述那个demo app运行的时候的效
果是漫天星星闪烁的样子。
如果真考websocket我就真心跪了,还没碰过这东西

【在 h***n 的大作中提到】
: Linkedin每分钟新注册人数2人!!!!
: http://expandedramblings.com/index.php/by-the-numbers-a-few-important-linkedin-stats/
: 看样子应该是有人注册时,前端才更新,把新注册的点加入到原来的图中,而不是频繁
: call后端.

avatar
R*4
18
其实,你可以把地图想象成一个大数组。
地图是分等级的
1 Level 1
2x2 Level 2
2x2x2x2 Level 4
.... ...
2..x2.. Level 16
比如 level4, 有16个格子,只要得出每个格子注册的人数就行了。一定时间内格子里
注册的人越
多,那么那个亮点的直径或者大小越大。
x=1,y=2, z=1
x 从纬度转换过来,y从精度转换过来,z表示level
post code, 也可以理解为n个格子.
她提到resolution太高,我感觉是她认为你不懂地图
你有机会可以看看 openstreetmap,或者其他开源地图,你会发现,其实图片地址是这
样的
其实就是
b.tile.openstreetmap.org/z/x/y.png
一般postcode 是 8-10级,也就是说,给你的可能就是基于 256X256 - 1024x1024的数
组的数据,
其实我觉得,面试你的人,还是一个蛮厉害的前端。
avatar
d*o
19
好像没那么复杂吧,她只是说api返回country code, post code和这个范围里注册人数
地图长期是处于zoom level 1的状态,把返回的点在地图上画出来
resolution太高是我转述成这样,原文是说用post code定位的话那些点太细碎了,你
能不能做到每个洲只显示一个大点的点

【在 R*********4 的大作中提到】
: 其实,你可以把地图想象成一个大数组。
: 地图是分等级的
: 1 Level 1
: 2x2 Level 2
: 2x2x2x2 Level 4
: .... ...
: 2..x2.. Level 16
: 比如 level4, 有16个格子,只要得出每个格子注册的人数就行了。一定时间内格子里
: 注册的人越
: 多,那么那个亮点的直径或者大小越大。

avatar
R*4
20
我不知道他们使用什么画图,
我做过一个软件是显示人体肌肉,锻炼越多颜色越深,
因为整个人体是由几十个svg path肌肉组成,每个肌肉有个id,通过class, css,可以
很容易
得到各
种效果,你给的信息太少, 希望我提供信息多你有用
avatar
d*o
21
我倒没问,默认她说的是地图的API,一般也是svg

【在 R*********4 的大作中提到】
: 我不知道他们使用什么画图,
: 我做过一个软件是显示人体肌肉,锻炼越多颜色越深,
: 因为整个人体是由几十个svg path肌肉组成,每个肌肉有个id,通过class, css,可以
: 很容易
: 得到各
: 种效果,你给的信息太少, 希望我提供信息多你有用

avatar
R*4
22
我给你一个现成得例子把。 这东西我也觉得,只有实践过的人才知道。 给刚毕业的人
考是有点过了。
我想他们是想考你 Websocket,地图, 矢量图,还是一些UI的小技巧, 这里面所有亮
点都是根据PostCode.
https://realtimemapapi.com/Map/CnVhcwyq
https://realtimemapapi.com/static/js/realtimemap.js 这里你可以看源程序
https://realtimemapapi.com/static/js/topojson/topojson.js
https://realtimemapapi.com/static/js/topojson/us.json
这里有全美所有州,County的边界适量信息。。
其实PostCode意思就是County.
Websocket 2011年底就有了,开始用Html5时就用了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。