(譯)一篇非常不錯(cuò)的前端面試文章

轉(zhuǎn)載自:http://www.jackpu.com/-pian-fei-chang-bu-cuo-de-qian-duan-mian-shi-wen-zhang/

原文地址:http://blog.sourcing.io/interview-questions

文章來(lái)自翻譯朵你,其中忽略了一些無(wú)關(guān)緊要的內(nèi)容直入主題例诀。

作者先后在twitter,Stripe工作荔泳,期間會(huì)參加面試工作。實(shí)際上參加面試工作的人都知道要想在一個(gè)較短的時(shí)間內(nèi)(30min-1h)就對(duì)一個(gè)應(yīng)聘者做出判斷其實(shí)是很難的英古,因此我們不得不想盡辦法去更加合理的去判斷面試者。下面是作者理出的一個(gè)思路:

如果對(duì)方有g(shù)ithub賬號(hào)昙读,我們會(huì)盡可能的去了解TA在開(kāi)源項(xiàng)目上的動(dòng)態(tài)和他的開(kāi)源項(xiàng)目召调。我們也會(huì)從中挑出一些切入點(diǎn),通過(guò)交流他做這個(gè)項(xiàng)目的出發(fā)點(diǎn)也能夠更好的了解面試者的設(shè)計(jì)思路蛮浑,也可以初步的去判斷該人是不是適合團(tuán)隊(duì)唠叛。如果雙方交流順暢,接下來(lái)會(huì)直接進(jìn)行到代碼等一些基礎(chǔ)問(wèn)題上來(lái)沮稚。

自己的面試會(huì)很實(shí)際艺沼,幾乎全部都是coding,很少會(huì)提到算法和一些抽象的概念。自己提出的問(wèn)題看似簡(jiǎn)單蕴掏,但是每一點(diǎn)都涉及到j(luò)avascript的一些知識(shí)領(lǐng)域障般。

面試的時(shí)候并不建議使用白板,通常希望面試者自己帶上自己的筆記本盛杰,或者就使用自己的挽荡。我會(huì)將他們的代碼運(yùn)行,并告知結(jié)果即供。

Object prototype

我起初會(huì)提出一個(gè)非常簡(jiǎn)單的問(wèn)題就是定義一個(gè)函數(shù)spacify,將一個(gè)字符串作為參數(shù)傳入定拟,然后返回一個(gè)字符串,不過(guò)該字符串相對(duì)原有傳入?yún)?shù)的變化是字母與字母之間多了一個(gè)空格募狂。

spacify('hello world')// => 'h e l l o? w o r l d'

雖然問(wèn)題很簡(jiǎn)單办素,但這卻是一個(gè)很好的開(kāi)始角雷,我們接下來(lái)的問(wèn)題便可以圍繞此展開(kāi), 尤其對(duì)于那些聲稱自己了解Javascript,但實(shí)際卻連一個(gè)函數(shù)都不會(huì)寫(xiě)的面試者高下立判性穿。

正確的答案如下勺三,不過(guò)一些面試者或許會(huì)選擇for循環(huán),當(dāng)然這并沒(méi)有錯(cuò)

functionspacify(str){returnstr.split('').join(' ');}

接下來(lái)需曾,我會(huì)繼續(xù)問(wèn)如何將這個(gè)函數(shù)直接作用在一個(gè)字符串對(duì)象上.

'hello world'.spacify();

這個(gè)問(wèn)題可以讓我了解面試者對(duì)原型鏈的理解吗坚,這個(gè)問(wèn)題可以讓彼此展開(kāi)一些有討論,諸如直接在原型鏈上定義屬性的危害等等.實(shí)際期待結(jié)果:

String.prototype.spacify =function(){returnthis.split('').join(' ');};

一般到這里我會(huì)讓面試者講講函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別呆万。

Arguments

接下來(lái)商源,我會(huì)去了解面試者對(duì)于 arguments的理解,我們會(huì)要求面試者定一個(gè)log函數(shù)谋减。

log('hello world');

函數(shù)類似實(shí)現(xiàn)一個(gè)簡(jiǎn)單的控制臺(tái)輸出牡彻,在控制臺(tái)輸出傳入的字符串。一邊面試者都會(huì)在定義的函數(shù)里直接寫(xiě)console.log出爹,不過(guò)還是有更優(yōu)秀的面試者會(huì)直接使用apply庄吼。

functionlog(msg){console.log(msg);}

接下來(lái),我會(huì)繼續(xù)問(wèn)如果我傳入多個(gè)參數(shù)依舊輸出一個(gè)字符串 严就,我會(huì)提示面試者傳入的 參數(shù)是不固定的总寻,我會(huì)暗示作者console.log實(shí)際上也接受多個(gè)參數(shù)。

log('hello','world');

不過(guò)我還是希望您的面試者現(xiàn)在已經(jīng)想起apply;面試者可能會(huì)在apply和call上困惑梢为,這個(gè)時(shí)候我會(huì)做點(diǎn)小提示渐行,不過(guò)將console上下文傳入也是非常重要的.

functionlog(){console.log.apply(console,arguments);};

接著我會(huì)繼續(xù)追問(wèn),如果我希望在那個(gè)輸出的字符串前統(tǒng)一加上(app)這樣的字符串铸董,類似于這樣:

'(app) hello world'

這個(gè)問(wèn)題明顯會(huì)復(fù)雜很多祟印,面試者應(yīng)該知道arguments是一個(gè)偽數(shù)組,我們需要先將它轉(zhuǎn)換成正常的數(shù)組袒炉,我們可以使用Array.prototype.slice,代碼如下:

functionlog(){varargs =Array.prototype.slice.call(arguments);? args.unshift('(app)');console.log.apply(console, args);};

Context

接下來(lái)我想了解面試者對(duì)于上下文以及this的理解旁理,我會(huì)給出下邊的代碼,讓面試者去解釋count的值我磁。

varUser = {? ? count:1,? getCount:function(){returnthis.count;? }};

接下來(lái)我會(huì)給出下面的代碼孽文,讓面試者去回答應(yīng)該輸出的正確答案。

console.log(User.getCount());varfunc = User.getCount;console.log(func());

上面的例子中正確輸出1和undefined夺艰。實(shí)際上很多面試者都會(huì)在這里跌倒芋哭。func的上下文是 `window,因此已經(jīng)失去了count屬性郁副。接下來(lái)我回繼續(xù)追問(wèn)面試者如何確保func的上下文始終都和User關(guān)聯(lián)减牺,這樣可以使輸出的答案是1。

正確答案是使用Function.prototype.bind,代碼如下:

varfunc = User.getCount.bind(User);console.log(func());

這個(gè)時(shí)候我會(huì)讓面試者去進(jìn)行完善拔疚,如果老的瀏覽器并不支持該方法肥隆,我們應(yīng)該怎樣去兼容。部分基礎(chǔ)較差的面試者會(huì)比較糾結(jié)稚失,但是個(gè)人認(rèn)為任何一位前端工程師都應(yīng)該對(duì)apply和call有著較為深刻的理解栋艳。

Function.prototype.bind =Function.prototype.bind ||function(context){varself =this;returnfunction(){returnself.apply(context,arguments);? };}

Extra points if the candidate shims bind so that it uses the browser's native version if available. At this point, if the candidate is doing really well, I'll ask them to implement currying arguments.

一個(gè)彈窗庫(kù)

面試的最后y一部分,我會(huì)要求面試者寫(xiě)點(diǎn)實(shí)際的東西句各。這個(gè)非常有用吸占,足以了解前端的技術(shù)棧。如果前面的問(wèn)題回答的較為理想凿宾,這個(gè)問(wèn)題矾屯,我會(huì)非常迅速的展開(kāi)最后一個(gè)問(wèn)題的考察。

雖然最終效果取決于面試者的實(shí)現(xiàn)初厚,但是這里依舊有足夠的考察點(diǎn)件蚕。

最好不使用position:absolute而是position:fixed,這個(gè)時(shí)候即使窗體有滾動(dòng)惧所,也可以很好的遮罩住全局绪杏。我會(huì)提示面試者這樣使用下愈,并且追問(wèn)這兩者的區(qū)別势似。

.overlay{position: fixed;left:0;right:0;bottom:0;top:0;background:rgba(0,0,0,.8);}

如何將里面的內(nèi)容居中也是一個(gè)非常重要的考察點(diǎn)。一些面試者會(huì)使用絕對(duì)定位僧著,而有的面試者則更擅長(zhǎng)使用Js。

.overlayarticle{position: absolute;left:50%;top:50%;margin: -200px00-200px;width:400px;height:400px;}

我會(huì)繼續(xù)問(wèn)盹愚,如何確保點(diǎn)擊遮罩層時(shí)遮罩層是關(guān)閉的栅迄?這個(gè)問(wèn)題可以將我們的討論落腳到 冒泡中來(lái)。很多面試者都會(huì)直接將點(diǎn)擊實(shí)踐綁定到遮罩層上皆怕。

$('.overlay').click(closeOverlay);

這個(gè)接下來(lái)可以工作了毅舆,但是你會(huì)發(fā)現(xiàn)如果點(diǎn)擊了遮罩層中的子元素,遮罩層也會(huì)關(guān)閉愈腾。解決方案是便是判斷event target 憋活,并且保證 這個(gè)時(shí)間不會(huì)冒泡。

$('.overlay').click(function(e){if(e.target == e.currentTarget)? ? closeOverlay();});

尾聲

當(dāng)然前面的知識(shí)點(diǎn)僅僅是前端的一部分虱黄,實(shí)際上你還可以問(wèn):性能悦即,HTML5 APIs, AMD vs CommonJS modules,constructors辜梳,數(shù)據(jù)類型粱甫,以及盒子模型。我經(jīng)常都會(huì)隨著面試者的進(jìn)行去選擇相應(yīng)的問(wèn)題作瞄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末魔种,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粉洼,更是在濱河造成了極大的恐慌节预,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件属韧,死亡現(xiàn)場(chǎng)離奇詭異安拟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宵喂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)糠赦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锅棕,你說(shuō)我怎么就攤上這事拙泽。” “怎么了裸燎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵顾瞻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我德绿,道長(zhǎng)荷荤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任移稳,我火速辦了婚禮蕴纳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘个粱。我一直安慰自己古毛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布都许。 她就那樣靜靜地躺著稻薇,像睡著了一般梭稚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忱屑,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音伴嗡,去河邊找鬼瘪校。 笑死阱扬,一個(gè)胖子當(dāng)著我的面吹牛伸辟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窃蹋,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼警没,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杀迹?” 一聲冷哼從身側(cè)響起佛南,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎及穗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苛白,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡购裙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年躏率,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬抄。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嚷缭,死狀恐怖耍贾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荐开,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站杂伟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏观话。R本人自食惡果不足惜越平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一秦叛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧三圆,春花似錦舟肉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至院领,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丈氓,已是汗流浹背强法。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闰歪,地道東北人蓖墅。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓论矾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贪壳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闰靴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品蚂且,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式章姓。簡(jiǎn)單...
    舟漁行舟閱讀 7,779評(píng)論 2 17
  • 單例模式 適用場(chǎng)景:可能會(huì)在場(chǎng)景中使用到對(duì)象,但只有一個(gè)實(shí)例窒舟,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見(jiàn)的單例模式惠豺,...
    Obeing閱讀 2,076評(píng)論 1 10
  • 相關(guān)知識(shí)點(diǎn) 數(shù)據(jù)類型洁墙、運(yùn)算、對(duì)象捺弦、function孝扛、繼承、閉包寞钥、作用域陌选、原型鏈咨油、事件、RegExp臼勉、JSON、Aj...
    sandisen閱讀 11,381評(píng)論 7 175
  • 如何控制alert中的換行?\n alert(“p\np”); 請(qǐng)編寫(xiě)一個(gè)JavaScript函數(shù) parseQu...
    heyunqiang99閱讀 1,086評(píng)論 0 6
  • HTML HTML5標(biāo)簽 媒體查詢head部分寫(xiě)法 Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分瓢谢?它們有何意義...
    Mayo_閱讀 644評(píng)論 0 8