日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将这五个原则变成习惯,你的开发经验更值钱!

發布時間:2025/3/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将这五个原则变成习惯,你的开发经验更值钱! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

馬超

每年的三月到六月,都是招聘高峰,除了大量的應屆畢業生涌入社會之外,還有一些工作了一兩年尚未找到穩定歸屬感的人,也會開始投遞簡歷,是的,基本都是在拿了年終獎之后。


作為前端技術主管,有幸,或者說是不幸,我需要在這些投遞過來簡歷的人中,耗費大量精力來篩選符合公司要求、團隊發展、技術基礎三方面條件的人選來,這不是一個容易的活兒。

我不是一個擅長技巧的面試官,盡管公司HR也給我們培訓過招聘的原則、技巧,但是真正的體驗和感受,卻是在做了大量面試之后自然而然悟出來的。常見的招聘要求中,基本都有“工作經驗”的要求,而且都是以年作為單位,HR似乎比較迷戀這個數字,但是實際情況卻告訴我,工作經驗往往不是以年衡量的,甚至有些時候,跟時間沒有關系。

今天想要分享的一點是關于“為什么你的工作經驗不值錢”,或者“怎么樣才能讓工作經驗值錢”,庸俗,卻能讓每個人提起精神。

以下經驗分享,僅僅適用于碼農相關職位,其他職位可借鑒其思想,不可照搬。

開始

從一個小小的面試題目入手:

編寫一個javscript函數 fn,該函數有一個參數 n(數字類型),其返回值是一個數組,該數組內是 n 個隨機且不重復的整數,且整數取值范圍是 [2, 32]。

如果愿意,請先暫停閱讀文章,自己動手寫一下這個函數,是的,老簡單了。我可以等你五分鐘。

~~~ 華麗的5分鐘過去了 ~~~

現在假設你的工作時間為 y 年,經驗系數默認為 1,即工作經驗是:Y = 1 * y。從現在開始,以下的錯誤,你要是遇到了,請自行調整經驗系數。

1. 可用

作為一段需要滿足需求的代碼來說,它最核心的、最低的要求就是:可用。


如果你沒有產出一個函數( fn ),或者產生了語法錯誤,那就請設置 經驗系數為 0,然后去面壁思過;

請將代碼在控制臺運行,并執行 fn(3),看看是否輸出一個數組,數組中包含了三個隨機且不同且在[2,32]的整數,如果不是,請將 經驗系數 * 0;

一個參考的半偽代碼是:

function fn(n){

? ? //準備一個容器保存結果

? ? var arr = [];

? ? //循環

? ? for(var i=0; i<n; i++){

? ? ? ? //創建一個隨機數

? ? ? ? var rnd = getRand(2, 32);

     //檢查是否重復

? ? ? ? if( checkInArr(arr, rnd) ){

? ? ? ? ? ? i--;

? ? ? ? }else{

? ? ? ? ? ? arr.push(rnd);

? ? ? ? }

? ? }

? ? return arr;

}

其中 getRand 、checkInArr 還另有講究,后面會提到。當然思路和方法不止一個,后面也會提到。

有相當多的面試者,包括不少工作時間為2年以內的同學,都會在這一步犯錯,非常遺憾。

2. 健壯

代碼是否老道,過了“可用”這一關后,就開始見分曉了。所謂“健壯”,即最基本的兼容性處理、邊界處理,異常處理、用戶輸入校驗。很多時候,需求方不會明確告訴你這些邏輯怎么處理(在實際開發中,似乎也比較常見),但并不意味著你不需要處理。健壯的程序,一定會將這些兼容性、邊界、異常、輸入做處理,以保證核心功能的正確輸出。當然,如果你的代碼沒有任何輸入并不考慮兼容性(可能嗎?)或者僅僅是內部函數,那這一步要求可以降低,并不意味著你可以完全不做。

好,回過頭看代碼:

  • 如果你沒有對 n 的取值范圍做校驗(n必須是 1 到 31 之間的整數),請將 經驗系數 * 0.3;

  • 如果你沒有對 n 是否為數字做校驗,請將 經驗系數 * 0.5;

  • 如果你沒有對 n 是否存在做校驗,請將 經驗系數 * 0.7;

  • 如果上述校驗都做了,但是沒有校驗對,請將 經驗系數 * 0.9;你需要多練習,仔細認真的。

一個參考的半偽代碼是:

function fn(n){

? ? //健壯性校驗

? ? if(!isThere(n)) return;

? ? if(!typeOK(n)) return;

? ? if(!rangeOK(n, 2, 32)) return;

? ? //核心功能同上,此略

  ...

}

有了這些健壯性校驗后,媽媽就不用擔心 fn 函數死循環、語法錯誤以及錯誤的API調用了。偽代碼中,校驗是分為三步的,但實際代碼中,完全可以合并處理,但是邏輯不能少。

3. 可靠

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

function fn(n){

? ? //健壯性校驗

? ? if(!isThere(n)) return [];

? ? if(!typeOK(n)) return [];

? ? if(!rangeOK(n, 2, 32)) return [];

? ? //核心功能同上,此略

  ...

}

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

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

4. 寬容

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


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

回到代碼:

  • 如果 n 是一個字符串數字,是否可以允許進入處理流程? 如果是,請將經驗系數 * 1.1;

  • 如果 n 是一個含有小數的數字,比如 3.000001,是否允許進入處理流程?如果是,請將經驗系數 * 1.1;

  • 你的代碼中,是否有足夠多且清晰的注釋? 如果是,請將經驗系數 * 1.2;

  • 如果需求調整了 [2, 32] 的范圍,你的代碼是否可以快速調整,甚至不用調整? 如果是,請將經驗系數 * 1.2;

一個參考的半偽代碼是:

/**

?* 獲取指定個數的隨機整數,整數范圍[2,32]

?* @param ?{number} ? n 需要的整數個數

?* @return {array} ?返回包含n個整數的數組,如果n非法,則返回空數組

?*/

function fn(n){

? ? //將整數取值范圍作為變量提取出來

? ? var min = 2, max = 32;

? ? //參數校驗

? ? if(!isThere(n)) return [];

? ? if(!typeOK(n) && !isOKStr(n)) return [];

? ? n = formatInitNum(n);

? ? if(!rangeOK(n, min, max)) return [];

? ? //準備一個容器保存結果

? ? var arr = [];

? ? //循環

? ? for(var i=0; i<n; i++){

? ? ? ? //創建一個隨機數

? ? ? ? var rnd = getRand(min, max);

     //檢查是否重復

? ? ? ? if( checkInArr(arr, rnd) ){

? ? ? ? ? ? i--;

? ? ? ? }else{

? ? ? ? ? ? arr.push(rnd);

? ? ? ? }

? ? }

? ? return arr;

}

5. 精益求精

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

寬容是寬以待人,精益求精是嚴以律己。內外兼修才是高手。

上文做了一點伏筆,現在討論 getRand 、 checkInArr 到底有哪些講究:

getRand

  • 如果你不知道 Math.random() 返回 [0, 1) 的小數,請自行翻閱js手冊;

  • 如果你不知道怎么將 [0, 1) 等比放大到任意區間 [min, max),請慎重考慮是否合適做一個碼農;

代碼是類似這樣的: Math.random() * ( max - min + 1 ) + min。 現在的問題是:如果要取整數,是向上取整,還是向下取整?

  • 如果你不假思索,就回答:“都行”,那你需要去面壁思過;

  • 如果你略作停頓,回答: “取整方法會影響邊界設置”,那恭喜你有一些進步;

  • 如果你認真思考后,回答:“只能向下取整”,那你已經走在了高手的路上。

是的,只能向下取整,這涉及“隨機”概率的分布問題,請為邊界值仔細考慮一下。這里不再細述。

checkInArr

Array.prototype.indexOf 是優先方案,除非你考慮IE6(當然也可以用墊片函數給IE6加上這個indexOf);

用 map 來作為key查詢代理,這個方法簡單高效,兼容性也非常好;

最不濟,自己for循環。

好了,

這些方案有性能差異嗎?

差異的分水嶺在循環多少次的情況下出現?

不同瀏覽器表現如何?

能否寫一個性能測試腳本,把不同方案跑上 10000 次看看?創建一個包含 2... 32的數組,然后亂序排序( Array.prototype.sort )后,直接取前 n 個整數,是不是更高效?

還有,

返回的數組要不要控制一下排序?

當 n 大于 31 時,是要返回空數組,還是全部31個數字?當 n 為 30 的時候,遍歷30次(或更多),是不是不如直接隨機去掉一個更簡單、更高效?

這些,就交給你了。

當你將這五個原則(可用、健壯、可靠、寬容、精益求精)變成你自己的開發習慣,你的工作經驗就跟你的工作時間沒有關系了。

6. one more thing

樂于分享,也是一個好同學的必要素質。覺得本文還不錯的,點贊、轉載,讓更多人受益吧。

?

· EDN ·

網易云信|無IM開發經驗也能開發IM

ID:neteaseim ?長按識別,關注精彩

總結

以上是生活随笔為你收集整理的将这五个原则变成习惯,你的开发经验更值钱!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。