自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

有效評估JS開發(fā)者軟實力的十條面試題

開發(fā) 前端
為了順利的再進職場,最近一個月來都在做有目的訓練,訓練自己的實操能力(因為這是我的一個弱項——前端項目經驗薄弱,加上在特長上,編碼和分析更傾向后者),而不是任意的自由的學習。

 為了順利的再進職場,最近一個月來都在做有目的訓練,訓練自己的實操能力(因為這是我的一個弱項——前端項目經驗薄弱,加上在特長上,編碼和分析更傾向后者),而不是任意的自由的學習。然而,在具體的學習主題上,除了參考和對比常規(guī)面試題,找出一些基礎主題外,對什么是“最有價值”的學習主題,我沒有指引。

其實我一真很相信自己的直覺,但是難免有盲區(qū),和價值沖突,我不清楚明天面對面的考官他希望我具備什么能力。我的擔心不是沒有原因的,因為軟件開發(fā)技術崗位向來都是既難招亦難找,企業(yè)不知道怎么考核應聘者實力,求職者不知道學什么最重要。

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

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

那么會出現四種面試情況:C1P1 C1P2 C2P1 C2P2

如果假設成立,那么通過面試的只有 C1P1 和C2P2,但是真正算成功面試只有C1P1,因為只有這種結合才是良性的。

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

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

Table of Contents

10 Interview Questions Every JavaScript Developer Should Know

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

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

評估候選者最有效的方法是「和候選者結伴的完成編程練習」。

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

雖然結伴練習很有價值,但是不存在一個單獨的練習能決斷一切,面對面交談(的面試)也是一個非常有用的工具 [em] 。不過, 不要浪費時間詢問語法或語言怪癖 。你需要看到大局,詢問有關架構設計(architecture)和編程范型(paradigms) 等對整個項目有重大影響的經驗知識。

EM:臨場小練習能測試到能力(種類)是有限的,有很多深層經驗或知識只能通過 別的手段探測 到,例如交談,主題試題;而且沒有很具體的答案(檢測標準),例如怎么檢測候選人 功能編程 的能力?

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

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

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

鑒于以上結論,對于Web開發(fā)和Javascript方面,我認為以下十個問題用在面試中,能比較有效評估候選人開發(fā)實力:

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

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

JavaScript 是一種多范型( multi-paradigm )編程語言,支持過程式編程,面向對象編程,和函數式編程,三種(實質兩種)編程范型。JavaScript通過 原型繼承( prototypal inheritance) 支持面向對象編程,和 函數作值(所謂一等公民)支持函數式編程。

第二,什么是函數式編程?

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

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

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

EM:純函數的優(yōu)點有待實證,純函數(功能)和類對象的區(qū)別有待分析

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

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

但是,由于子類和父類繼承關系是一種白箱復用(父類不是完全封裝,對子類可見),最終的類層次結構會高度耦合,這是類繼承最大的問題。

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

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

在 JavaScript中,原型繼承有以下幾種應用表現:

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

第四,函數式編程(FP)和面向對象編程(OO)各自優(yōu)點和不足是什么?

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

OOP的優(yōu)點

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

OOP的缺點

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

FP的優(yōu)點

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

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

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

EM:就是更傾向使用名詞, 而不是動詞表達「功能」

EM:兩種工具思想區(qū)別在于,FP是關注功能的形式和邏輯關系,OOP關于功能實現的數據的處理

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

FP的缺點

過度使用FP風格的代碼(例如大量使用無參數式風格分割和組合 大功能 )可能會降低代碼可讀性,因為生成的代碼通常很抽象,它簡潔且不夠具體。

與函數式編程相比,習慣OOP和命令式編程的人會更多,更深厚,因此,即使是函數式編程中的常見習慣用法也會讓新團隊成員感到困惑。

另外,FP的學習曲線要比OOP陡峭得多,因為OOP的廣泛流行使得OOP的語言和學習材料變得更加對話化,而FP的語言則更加學術化和形式化。

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

第五,在什么場景下最適合使用 類繼承?

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

第六,在什么場景下最適合使用 原型繼承?

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

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

每一類 原型繼承都有各自適用場景,不過,它們都歸結為 構成(composition)復用,是一種 has-a or uses-a or can-do 的關系,與類繼承的 is-a關系相反。

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

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

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

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

 

責任編輯:張燕妮 來源: 推酷
相關推薦

2011-05-16 16:11:21

java

2009-04-07 11:24:16

Java開發(fā)注意事項

2018-02-01 16:00:42

百度Python面試題

2017-03-24 09:37:45

前端開發(fā)者JavaScript面試題

2012-09-28 09:12:39

移動Web

2018-05-01 08:24:40

Python面試題開發(fā)

2023-11-13 07:37:36

JS面試題線程

2022-10-21 16:11:52

數據治理安全IT

2012-05-15 01:38:18

編程編程技巧編程觀點

2022-03-14 23:01:15

網絡安全云安全架構

2022-05-31 17:36:25

技術面試編程

2009-05-19 10:14:44

Innodb字段MySQL

2012-03-06 16:01:04

項目管理

2017-04-11 09:33:12

JS面試題應聘者

2025-03-19 08:21:15

2023-09-18 13:45:52

2022-04-25 21:50:09

前端JS面試題

2012-08-02 09:14:13

編程戒律

2016-12-26 15:27:13

大數據數據分析數據分析工具

2016-04-13 11:18:08

jQuery代碼片段Web開發(fā)
點贊
收藏

51CTO技術棧公眾號