日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
有效評(píng)估JS開發(fā)者軟實(shí)力的十條面試題

 為了順利的再進(jìn)職場(chǎng),最近一個(gè)月來都在做有目的訓(xùn)練,訓(xùn)練自己的實(shí)操能力(因?yàn)檫@是我的一個(gè)弱項(xiàng)——前端項(xiàng)目經(jīng)驗(yàn)薄弱,加上在特長上,編碼和分析更傾向后者),而不是任意的自由的學(xué)習(xí)。然而,在具體的學(xué)習(xí)主題上,除了參考和對(duì)比常規(guī)面試題,找出一些基礎(chǔ)主題外,對(duì)什么是“最有價(jià)值”的學(xué)習(xí)主題,我沒有指引。

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)潼關(guān),十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

其實(shí)我一真很相信自己的直覺,但是難免有盲區(qū),和價(jià)值沖突,我不清楚明天面對(duì)面的考官他希望我具備什么能力。我的擔(dān)心不是沒有原因的,因?yàn)檐浖_發(fā)技術(shù)崗位向來都是既難招亦難找,企業(yè)不知道怎么考核應(yīng)聘者實(shí)力,求職者不知道學(xué)什么最重要。

這里邊有一個(gè)推理,在面試和通過面試的情景里,假設(shè)把企業(yè),和求職者分兩類:

  • 企業(yè) 分為懂得評(píng)估技術(shù)崗位(C1),和缺乏評(píng)估技術(shù)的企業(yè)(C2)
  • 求職者分為有實(shí)力但不懂求職技巧的(P1),實(shí)力很弱但是刷題是高手(P2)

那么會(huì)出現(xiàn)四種面試情況:C1P1 C1P2 C2P1 C2P2

如果假設(shè)成立,那么通過面試的只有 C1P1 和C2P2,但是真正算成功面試只有C1P1,因?yàn)橹挥羞@種結(jié)合才是良性的。

要?jiǎng)?chuàng)造一次良性的結(jié)合,關(guān)鍵點(diǎn)其實(shí)也很明顯了,就是 企業(yè)掌握了評(píng)估技術(shù)崗位候選者能力的技術(shù),包括考核的目標(biāo)(T),和考核的方法;同時(shí),求職者通過掌握同樣的學(xué)習(xí)目標(biāo)(T)和學(xué)習(xí)方法,更有效提高的水平。

這里 關(guān)于T的認(rèn)識(shí) 是重中之重,它是對(duì)招聘者和求職者都極具意義的一點(diǎn)。最近在研習(xí) 函數(shù)式編程過程中,從Eric Elliott(《Programming JavaScript Applications》一書的作者)的這篇文章《 10 Interview Questions Every JavaScript Developer Should Know 》中,找到了一些相關(guān)有價(jià)值的觀點(diǎn),嘗試轉(zhuǎn)譯出來。

Table of Contents

  • 10 Interview Questions Every JavaScript Developer Should Know
    • 第一,你知道哪兩種 編程范型對(duì) JavaScript開發(fā)者來很有用?
    • 第二,什么是函數(shù)式編程?
    • 第三,傳統(tǒng)類繼承和原型繼承的區(qū)別在哪里?
    • 第四,函數(shù)式編程(FP)和面向?qū)ο缶幊蹋∣O)各自優(yōu)點(diǎn)和不足是什么?
    • 第五,在什么場(chǎng)景下最適合使用 類繼承?
    • 第七,“對(duì)象構(gòu)成優(yōu)于類繼承”是什么意思?
    • 第八,什么是雙向綁定和單向數(shù)據(jù)流,它們有什么不同?
    • 第九,單體架構(gòu)和微構(gòu)架的優(yōu)點(diǎn)和不足是什么?
    • 第十,什么是異步編程,為什么說它對(duì)Web開發(fā)很重要?

10 Interview Questions Every JavaScript Developer Should Know

我寫過一篇文章叫《 Why Hiring is So Hard in Tech 》, 其中給出評(píng)估 技術(shù)崗位候選者 的一些 常規(guī)原則,以什么是應(yīng)該和不應(yīng)該的形式羅列出來,其中有一條:

The best way to evaluate a candidate is a pair programming exercise.

評(píng)估候選者最有效的方法是「和候選者結(jié)伴的完成編程練習(xí)」。

意思是說,與候選人坐一起,讓候選人敲鍵盤,你在旁邊多看多聽,少說。例如演示例如從Twitter API中提取tweet數(shù)據(jù)項(xiàng),并在時(shí)間軸上顯示出來。

雖然結(jié)伴練習(xí)很有價(jià)值,但是不存在一個(gè)單獨(dú)的練習(xí)能決斷一切,面對(duì)面交談(的面試)也是一個(gè)非常有用的工具 [em] 。不過, 不要浪費(fèi)時(shí)間詢問語法或語言怪癖 。你需要看到大局,詢問有關(guān)架構(gòu)設(shè)計(jì)(architecture)和編程范型(paradigms) 等對(duì)整個(gè)項(xiàng)目有重大影響的經(jīng)驗(yàn)知識(shí)。

EM:臨場(chǎng)小練習(xí)能測(cè)試到能力(種類)是有限的,有很多深層經(jīng)驗(yàn)或知識(shí)只能通過 別的手段探測(cè) 到,例如交談,主題試題;而且沒有很具體的答案(檢測(cè)標(biāo)準(zhǔn)),例如怎么檢測(cè)候選人 功能編程 的能力?

語法細(xì)節(jié)和API功能特性的知識(shí) 是很容易搜索的,但對(duì)于像 軟件工程的智慧或 JavaScript開發(fā)人員 從經(jīng)驗(yàn)中獲得的 范型特性和習(xí)慣用法 這些經(jīng)驗(yàn)知識(shí),是很難短時(shí)間通過搜索學(xué)到的。

EM:這里提到了重點(diǎn),作為招聘方,測(cè)試 候選人 的那些 不能在半小時(shí)查資料能習(xí)得的技能,求職者同樣要明白這個(gè)道理。

EM:當(dāng)然,作者提到的工程智慧,和編程經(jīng)驗(yàn)具體指什么,有待研發(fā)

鑒于以上結(jié)論,對(duì)于Web開發(fā)和Javascript方面,我認(rèn)為以下十個(gè)問題用在面試中,能比較有效評(píng)估候選人開發(fā)實(shí)力:

(EM:我不完成同意作者的這十條,并且翻譯上有所增刪,觀點(diǎn)和內(nèi)容都有,根據(jù)個(gè)人的看法,實(shí)則是我自己將這些問題回答了一遍)

第一,你知道哪兩種 編程范型對(duì) JavaScript開發(fā)者來很有用?

JavaScript 是一種多范型( multi-paradigm )編程語言,支持過程式編程,面向?qū)ο缶幊?,和函?shù)式編程,三種(實(shí)質(zhì)兩種)編程范型。JavaScript通過 原型繼承( prototypal inheritance) 支持面向?qū)ο缶幊?,?函數(shù)作值(所謂一等公民)支持函數(shù)式編程。

第二,什么是函數(shù)式編程?

函數(shù)式編程是使用 純函數(shù)(或數(shù)學(xué)函數(shù))構(gòu)造 程序的一種編程范型,純函數(shù)的優(yōu)點(diǎn)是沒有副作用(避免使用共享數(shù)據(jù) shared state),和不使用可變數(shù)據(jù)(mutable data) [em] ;

Lisp(1958年)是最早支持函數(shù)式編程的語言之一,并且受到了lambda演算的極大啟發(fā)。Lisp和很多Lisp家族語言至今仍在流行。

JavaScript 支持函數(shù)式編程,并且越來越流行,例如JavaScript社區(qū)流行的閉包,高階函數(shù),函數(shù)作參數(shù)傳遞都是 重要表現(xiàn)。

EM:純函數(shù)的優(yōu)點(diǎn)有待實(shí)證,純函數(shù)(功能)和類對(duì)象的區(qū)別有待分析

第三,傳統(tǒng)類繼承和原型繼承的區(qū)別在哪里?

傳統(tǒng)類繼承是說,類(class)是「一個(gè)功能」的模板或設(shè)計(jì)樣板(blueprint),它可以用來派生子類(子類繼承父類所有功能,并可以有所擴(kuò)展),和創(chuàng)建多個(gè)對(duì)象實(shí)例(使用new操作); 通過類繼承的設(shè)計(jì)可實(shí)現(xiàn)程序的一種精致的分類層次結(jié)構(gòu)(hierarchical class taxonomies)。

但是,由于子類和父類繼承關(guān)系是一種白箱復(fù)用(父類不是完全封裝,對(duì)子類可見),最終的類層次結(jié)構(gòu)會(huì)高度耦合,這是類繼承最大的問題。

與類繼承不同,原型繼承沒有類概念(類是一個(gè)抽象的功能的“模子”),一切都是對(duì)象實(shí)例?!腹δ艽a繼承復(fù)用」通過 直接連接兩個(gè)對(duì)象實(shí)例 實(shí)現(xiàn),例如通過一個(gè)特殊的對(duì)象工廠函數(shù)( factory functions)生成新復(fù)用的對(duì)象,或復(fù)制(Object.create())。一個(gè)「目標(biāo)新對(duì)象實(shí)例」 [em]可以將需要的功能小對(duì)象直接連入其中來實(shí)現(xiàn)復(fù)用功能,這是一種非常靈活的代碼復(fù)用方法。

EM:無論何種代碼復(fù)用技術(shù)(類繼承,或是原型組合,或是其它),目標(biāo)任務(wù)都是生成新的對(duì)象實(shí)例,實(shí)現(xiàn)軟件功能的開發(fā)。

在 JavaScript中,原型繼承有以下幾種應(yīng)用表現(xiàn):

  • 原型鏈(concatenative inheritance),
  • 原型委托(prototype delegation),
  • 功能繼承/閉包(functional inheritance),
  • 對(duì)象構(gòu)成(object composition);

第四,函數(shù)式編程(FP)和面向?qū)ο缶幊蹋∣O)各自優(yōu)點(diǎn)和不足是什么?

FP和OOP作為完成編程這個(gè)「任務(wù)」的「工具」,有各自的適用和優(yōu)點(diǎn)與不足。

OOP的優(yōu)點(diǎn)

直觀,對(duì)象由數(shù)據(jù)和方法組成的概念很容易理解,也容易解釋方法調(diào)用的意義。OOP傾向于使用命令式風(fēng)格,而不是聲明式風(fēng)格,命令式風(fēng)格讀起來像是一組供計(jì)算機(jī)遵循的直接指令,很形象。

OOP的缺點(diǎn)

OOP通常依賴于共享狀態(tài)。對(duì)象和行為通常被綁定在同一個(gè)實(shí)體上,可以被任意數(shù)量的順序不確定的函數(shù)隨機(jī)訪問,這可能會(huì)導(dǎo)致不希望的行為,比如競(jìng)態(tài)事件(race conditions)。

FP的優(yōu)點(diǎn)

使用 純函數(shù)作為功能單元,程序員可以避免任何共享狀態(tài)或副作用 [em] ,從而消除多個(gè)功能競(jìng)爭相同資源所導(dǎo)致的bug。與OOP相比,F(xiàn)P的大功能的復(fù)合方式,例如所謂的無參數(shù)風(fēng)格(point-free ),大大簡化復(fù)雜功能的組合方式,和改善代碼可重用方式。

EM:使用和不使用共享狀態(tài)都是技術(shù),重點(diǎn)是那個(gè)「功能的實(shí)現(xiàn)」的任務(wù);就是為什么一定要使用中間狀態(tài)?「純函數(shù)」和「類對(duì)象」是兩種編程范式最大「工具」區(qū)別。

另外,F(xiàn)P 傾向于 聲明式和符號(hào)指代(denotational)的功能命名風(fēng)格 [em] ,F(xiàn)P不傾向通過詳細(xì)說明功能操作的步驟,而是關(guān)注「功能要做什么」。這為重構(gòu)和性能優(yōu)化留下了巨大的空間,它甚至允許你用更高效的算法替換整個(gè)舊算法,而代碼更改很少(例如,memoize,或者用惰性求值來代替eager 求值)。

EM:就是更傾向使用名詞, 而不是動(dòng)詞表達(dá)「功能」

EM:兩種工具思想?yún)^(qū)別在于,F(xiàn)P是關(guān)注功能的形式和邏輯關(guān)系,OOP關(guān)于功能實(shí)現(xiàn)的數(shù)據(jù)的處理

使用純函數(shù)實(shí)現(xiàn)的計(jì)算功能也很容易移植到多處理器,或分布式計(jì)算集群環(huán)境上,而不用擔(dān)心線程資源沖突、競(jìng)態(tài)事件(race conditions)等。

FP的缺點(diǎn)

過度使用FP風(fēng)格的代碼(例如大量使用無參數(shù)式風(fēng)格分割和組合 大功能 )可能會(huì)降低代碼可讀性,因?yàn)樯傻拇a通常很抽象,它簡潔且不夠具體。

與函數(shù)式編程相比,習(xí)慣OOP和命令式編程的人會(huì)更多,更深厚,因此,即使是函數(shù)式編程中的常見習(xí)慣用法也會(huì)讓新團(tuán)隊(duì)成員感到困惑。

另外,F(xiàn)P的學(xué)習(xí)曲線要比OOP陡峭得多,因?yàn)镺OP的廣泛流行使得OOP的語言和學(xué)習(xí)材料變得更加對(duì)話化,而FP的語言則更加學(xué)術(shù)化和形式化。

總的來說,OOP使用共享狀態(tài)「 實(shí)現(xiàn)復(fù)合功 」能是有害的,雖然它很直觀;高度使用OOP的codebase比較“頑固”和脆弱,難改又錯(cuò)誤百出;FP除了沒有OOP的這些不足外,程序比較易讀易維護(hù),只是適應(yīng)FP風(fēng)格需要一些時(shí)間。

第五,在什么場(chǎng)景下最適合使用 類繼承?

幾乎沒有適用的場(chǎng)景, 類繼承能免則免,除非只有一層的繼承;

第六,在什么場(chǎng)景下最適合使用 原型繼承?

在JS中,當(dāng)需要復(fù)用代碼時(shí)都幾乎可以使用原型繼承,當(dāng)然包括不適用函數(shù)式復(fù)用(FP也提供了復(fù)用機(jī)制)的時(shí)候。JS中有三類的原型繼承:

  • 第一,委托(Delegation),例如使用原型鏈;
  • 第二,接合(Concatenative),例如mixins, `Object.assign()`;
  • 第三,創(chuàng)建新(Functional),例如閉包;

每一類 原型繼承都有各自適用場(chǎng)景,不過,它們都?xì)w結(jié)為 構(gòu)成(composition)復(fù)用,是一種 has-a or uses-a or can-do 的關(guān)系,與類繼承的 is-a關(guān)系相反。

第七,“對(duì)象構(gòu)成優(yōu)于類繼承”是什么意思?

第八,什么是雙向綁定和單向數(shù)據(jù)流,它們有什么不同?

第九,單體架構(gòu)和微構(gòu)架的優(yōu)點(diǎn)和不足是什么?

第十,什么是異步編程,為什么說它對(duì)Web開發(fā)很重要?


新聞標(biāo)題:有效評(píng)估JS開發(fā)者軟實(shí)力的十條面試題
標(biāo)題URL:http://www.dlmjj.cn/article/djsoosc.html