前端經驗

本文轉載自網易實踐者社區
作者:馬超(網易高級前端技術經理
從一個小小面試題入手
編寫一個javscript函數 fn,該函數有一個參數 n(數字類型),其返回值是一個數組,該數組內是 n 個隨機且不重復的整數,且整數取值范圍是 [2, 32]。

1、可用
作為一段需要滿足需求的代碼來說,它最核心的、最低的要求:可用。
如果你沒有產出一個函數( fn ),或者產生了語法錯誤,那就請設置 經驗系數為 0,然后去面壁思過;

2、健壯
所謂“健壯”,即最基本的兼容性處理、邊界處理,異常處理、用戶輸入校驗。很多時候,需求方不會明確告訴你這些邏輯怎么處理,但并不意味著你不需要處理。

健壯的程序,一定會將這些兼容性、邊界、異常、輸入做處理,以保證核心功能的正確輸出。當然,如果你的代碼沒有任何輸入并不考慮兼容性(可能嗎?)或者僅僅是內部函數,那這一步要求可以降低,并不意味著你可以完全不做。

好,回過頭看代碼:

——如果你沒有對 n 的取值范圍做校驗(n必須是 1 到 31 之間的整數),請將 經驗系數 * 0.3;
——如果你沒有對 n 是否為數字做校驗,請將 經驗系數 * 0.5;
——如果你沒有對 n 是否存在做校驗,請將 經驗系數 * 0.7;
——如果上述校驗都做了,但是沒有校驗對,請將 經驗系數 * 0.9;你需要多練習,仔細認真的。

3、可靠
大多數面試者都止步于前兩關,鮮有進入第三關的:可靠。

javascript沒有強數據類型,函數的返回值也無法強制返回的數據格式。但是作為“可靠”的要求,盡可能在任何情況下,都返回一個可靠的結果,哪怕是異常情況下。是的,這一步很簡單,幾乎不耗費幾個字節的代碼,但是會讓 fn 的返回值變得可靠:

如果你留意到并處理可靠返回值的問題,那請將經驗系數 * 1.2;

另外,一個牽涉的話題就是:異常情況下,是否要拋出 Error,或 console.error ?

關于這個話題,似乎沒有定論,需要自己衡量。我的觀點是:如果異常情況下不會造成太大影響的話(包括定位錯誤),就不用拋錯或提示。但同樣的,這個衡量仍然是經驗性的。此處不再展開討論。

4、寬容
如果在你的日常開發中注意“可用”、“健壯”、“可靠”原則的話,你的工作經驗就會大于你的工作時間,也就會更容易受到重視,自己所挖的坑就會少。而我近期面試的人中,甚至包括5、6年工作時間的,幾乎都止步于此。

如果你要想成為一個受歡迎的技術人員,“寬容”是第一步: 對需求寬容、對用戶寬容、對調用者寬容、對維護者寬容。

回到代碼:
——如果 n 是一個字符串數字,是否可以允許進入處理流程? 如果是,請將經驗系數 * 1.1;
——如果 n 是一個含有小數的數字,比如 3.000001,是否允許進入處理流程?如果是,請將經驗系數 * 1.1;
——你的代碼中,是否有足夠多且清晰的注釋? 如果是,請將經驗系數 * 1.2;
——如果需求調整了 [2, 32] 的范圍,你的代碼是否可以快速調整,甚至不用調整? 如果是,請將經驗系數 * 1.2;

一個參考的半偽代碼是:

圖片.png

6、精益求精
恭喜你完成了前四關!

如果你在實際開發中,時時刻刻留意這些原則,這足夠讓你的工作經驗擴大化,并給你帶來更多的認可,這些認可來自于需求方(或許是那個曾經非常蠻橫的產品狗)、用戶以及你的同事。但不應該包括你自己,你還需要更進一步。

寬容是寬以待人,精益求精是嚴以律己。內外兼修才是高手。當你將這五個原則(可用、健壯、可靠、寬容、精益求精)變成你自己的開發習慣,你的工作經驗就跟你的工作時間沒有關系了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 之前看了一篇文章,感覺其中的幾句話很有思考意義。 可用 作為一段需要滿足需求的代碼來說,它最核心的、最低的要求:可...
    kangdh閱讀 269評論 0 0
  • 每年的三月到六月,都是招聘高峰,除了大量的應屆畢業生涌入社會之外,還有一些工作了一兩年尚未找到穩定歸屬感的人,也會...
    王鈺峰閱讀 434評論 0 0
  • 每年的三月到六月,都是招聘高峰,除了大量的應屆畢業生涌入社會之外,還有一些工作了一兩年尚未找到穩定歸屬感的人,也會...
    京程一燈閱讀 813評論 0 3
  • “仰天長嘯出門,我輩豈是蓬蒿人”一人獨自在異鄉,面對著各種困難坎坷和不公平待遇就要忍著受著嗎? 我想說...
    信飛揚_f9b3閱讀 449評論 0 1
  • 小蘑菇, 你真傻! 太陽, 沒曬; 大雨, 沒下。 你老撐著小傘, 干啥?
    踏雪聽香閱讀 324評論 6 7