整個面試大約花費一個小時,包含填寫資料跟團隊主管及顧問面試。公司在南京三民捷運站附近,交通方便,沒有遠距必須要到公司上班
。主要的工作內容是將舊的網站翻新,技術主管正在建立新的開發團隊,預計招募到十位工程師。
面試問答
過去的開發經驗
有開發過 B2B 網站的經驗,並將過去開發時遇到的狀況分享給他。
解釋 primitive values 與 Object Types
基本型別(Primitive Types):
基本型別是不可變的且直接存儲在變量中的數值。它們不依賴於其他數據結構,當你對基本型別進行賦值或比較時,都是比較它們的值。
JavaScript中的基本型別有:
String(字串)
Number(數字)
Boolean(布林值)
Undefined(未定義)
Null(空值)
Symbol(符號,ES6引入)
BigInt(大整數,ES11引入)
特點:
基本型別的值是不可變的,這意味著當你改變一個基本型別的變量時,實際上是創建了一個新的值,而不是修改原來的值。
基本型別是儲存在 stack 中,它們的大小是固定的。
物件型別(Object Types):
物件型別是可變的且存儲的是引用,而不是實際的值。物件型別可以包含多個值(屬性或方法),並且當你對物件進行賦值或比較時,實際上是比較它們的引用地址,而不是它們的內容。
JavaScript中的物件型別有:
Object(物件)
Array(陣列)
Function(函數)
Date(日期)
RegExp(正則表達式)
其他所有非基本型別的數據結構,如Map、Set等
特點:
物件型別是可變的,當你修改物件的內容時,會影響所有引用該物件的變量。
物件型別儲存在 heap 中,它們的大小不固定。
比較兩個物件時,JavaScript比較的是它們的引用地址,而不是它們的內容。
順著上一題問淺拷貝 (shallow copy) 和深拷貝 (deep copy)
淺拷貝 (Shallow Copy)
淺拷貝只複製對象的最外層屬性,如果屬性是基本類型(如數字、字符串),它會直接複製值。如果屬性是引用類型(如對象、陣列),淺拷貝只會複製它們的引用地址,而不會複製引用對象本身。這樣,如果拷貝後的對象改變內層的引用對象,原來的對象也會受到影響,因為它們指向的是同一個引用地址。
1. 使用 Object.assign()
2. 使用 Spread operator
3. 修改內層對象,會影響原對象
例如:
shallowCopy.b.c = 3;
console.log(obj1.b.c); // 輸出 3
2. 深拷貝 (Deep Copy)
深拷貝會完整地拷貝對象的所有層級,無論是基本類型還是引用類型。也就是說,對象的所有子對象都會被遞迴複製,拷貝後的對象與原對象完全獨立,修改任一對象都不會影響到另一個。
實踐深拷貝的方式:
使用 JSON.parse(JSON.stringify()),但它有局限性,無法處理函數、undefined 和其他特殊的 JavaScript 結構。
使用 liberary,例如 Lodash 的 _.cloneDeep()。
有使用過 BigInt 嗎?
沒有使用過,但是知道定義。
BigInt 是 JavaScript 中用來表示任意精度整數(比普通 Number 類型大的整數)的一種數據類型。一般的 Number 類型在 JavaScript 中使用 64 位的雙精度浮點數表示,因此它能夠精確表示的整數範圍是 -2^53 到 2^53 之間的數字。
面試建議
主管溝通能力很好,對於產品很有想法,也很願意分享技術跟帶人。整體開發流程應該會蠻緊湊的,目前正在積極擴編中,喜歡從頭開始開發以及快速開發節奏的人應該會很適合,可以考慮應徵這個團隊。