Junior 軟體工程師面試心得
最近面了各種 Jr. SE 的缺,有 Frontend、Backend 相關,所以想分享一下最近面試初期、中後期遇到的各種問題、面試流程,以及面試前到底應該準備什麼。
面試初期
這次我是鎖定了 Web 開發相關,不限前後端,但希望主要是前端
工作地點一開始是想說台北、新竹都可以,我本身住在新竹,但不排斥北漂,主要因為台北的薪水都很敢開。
面試初期,其實我不太確定哪些是可以投的,因為職缺上雖然是寫無工作經驗可,但內容基本上都是需要工作經驗或大型專案開發經驗, 再來就是需要一年或兩年以上的我也不敢投,所以找的職缺就很限縮。
第一次面試是跑去南港軟體面一家做 E 化的公司,職位是 React Frontend,因為第一次面試所以十分緊張,雖然問題不難,但一緊張就容易說錯話,最後當然就無聲卡。
不過好再有這次的面試經驗,我後續更知道我面試前應該做什麼準備
面試中後期
繼上次面試經驗後,我回去整頓一下我的作品跟履歷,嘗試碰一些目前業界比較需要掌握的技能後,再開始投履歷
不過這次我就放棄台北了,看到那驚世駭俗的房租讓我卻步了,有點難想像北漂後一個月能存多少錢…
所以這次範圍鎖定在新竹,然後只要是 Web 開發相關我都投
先說結論,我覺得無經驗到工作經驗一年以上的都是可以嘗試的,兩年以上就比較有挑戰了
接著陸陸續續總共面了 5 家,其實面試的經驗不多,我總共投 20 家左右,有 5 家發面試邀約,其他是沒有投但撈到 CV 有發邀約婉拒的
面試過程很辛苦,雖然關卡重重,但最後也順利拿到了我想要的 offer ~
面試流程
我目前面試下來,大多都是兩關到三關,不過面試流程因公司而異,並非絕對,參考就好
-
第一關:邏輯、語言、性向測驗,通常是跟 HR 紙筆或上機測,可能也有包含跟技術主管面談,這個階段的面談通常是讓雙方有一個初步的認識
-
第二關:技術面,有可能是直接跟技術主管或技術長,透過紙筆或白板題
-
第三關:會有第三關的通常是第一關測驗完,第二關跟技術主管面談後,到第三關技術面
如果有收到口頭 offer 通常會在口頭 offer 後的兩到三天收到消息,有的大公司跑任用流程可能需要一週
不過有看過網路上一些人分享口頭 offer 被放鳥的案例,建議收到口頭 offer 後還是繼續面試投履歷比較保險,在還沒有收到 offer letter 之前都有變數
不排除還是有可能碰到因面試其他人,所以任用人選還在考慮,或是碰到更好的人選,順位被往後移等等
如果因為收到口頭 offer 後直接放棄其他公司的機會,然後結果被放鳥的話那會後悔至極…
面試時的常見問題,以及應該問的重要問題
這邊舉一些比較常見的問題,我覺得這些都是可以事前準備的,其他問題比較偏向這些問題的延伸
一般類:
-
可以請你簡單自我介紹嗎?
-
為何想來我們公司?
-
你的期望薪資待遇?
-
方便透漏目前的薪資待遇嗎?
-
可以接受加班嗎?
-
最快能報到的日期是?
-
未來短期 1年,以及長期 3~5 年的規劃或目標是什麼?
開發相關:
-
有帶電腦嗎?可以展示並介紹一下你的作品嗎?
-
有前端/後端開發經驗嗎?主要開發什麼項目?
-
過去有多人協作開發的經驗嗎?通常在團隊中擔任什麼樣的角色?
-
有 CI/CD 的經驗嗎?你或團隊的開發流程是什麼?
-
過去開發經驗中遇過最困難的需求是什麼?後來怎麼解決?
-
做過最深入的技術應用是什麼?
最後可能面試官會問有沒有什麼問題想問,下面也整理一些我個人覺得很重要,可以詢問的問題
個人建議應該問的重要問題:
-
請問今天面試下來有沒有什麼是我可以去精進的部分?
-
開發上如何做版控?團隊的開發流程採哪一種模式?
-
團隊規模有多大?Junior 及 Senior 的比例?
-
這個職位負責的工作內容是什麼?
-
該團隊中工程師的一天有哪些行程?通常一週開幾次會議?
技術面
技術面算是應徵軟體工程師非常重要的一環
因為我後來主要面的是 React 前端開發為主,所以針對這部分我分成三塊,這些算是你在面試前應該掌握的知識點
我覺得這些都掌握之後,加上有累積一些作品,在這個階段就已經十拿九穩了
Language
-
JavaScript
- Closure
- Hoisting
- Prototype Chain
- Promise 和 asnyc/await
- Shallow copy & Deep copy
- Event Loop
-
TypeScript
- TypeScript 的優勢
- Generics
Framework
- React
- React 的 Virtual DOM 是什麼?如何運作?
- 如何避免 re-render?
- 解釋 React Component 的生命週期
- 解釋 Redux 用途?如何運作?
- 解釋 React Reconciliation
- Diff 演算法原理
Performance
- 瀏覽器的算繪過程
- DOM Tree、CSSDOM Tree、Render Tree、Layout(Reflow)、Paint(Layer和Rasterized)、Compositing
- Reflow 和 Repaint 如何優化?
- 什麼是 Lazy Loading?如何在專案中實現?
- SEO 優化該怎麼做?
- Throttle & Debounce 用途及差異
另外,關於 Leetcode 刷題的部分,我個人覺得可以刷,但沒必要硬是去刷 hard 級別,除非你是找那些知名外商公司 Google、Amazon、Nvidia…
因為大多會考筆試或白板題的,除了鑑別你的實力之外,並不是要考倒你
我覺得大多面試官更偏向喜歡考一個問題有多種解的題型
技術長或技術主管想看的是你面對一個問題能怎麼分析並一步步推敲出結果,以及在這個結果之上,你要怎麼最佳化
以我個人經驗筆試跟白板題的,有考到 Palindrome、Hash Table、Sort、Tree,還有一些比較例外的有考 OOP 跟 SQL Comment
如果要準備這個方向的話我個人覺得這些要知道
- 資料結構:Time Complexity、Sort、Tree/Binary Tree/BST、Hashing、Graph、DFS/BFS、Linked List
- 演算法:Divide and Conquer、D.P.、Graph Algo
- 作業系統:Scheduler、scheduling algo、Starvation/Deadlock、Race Condition
最後
想分享的內容大致上就到這邊,我覺得不管面試結果如何,每次的面試經驗都會讓你的下一次更好,這也是在培養你的自信心。所以心態應該保持平衡,得失心不要放太重。
有時候即使你面試表現得很好,但最後公司覺得你的個人特質不符合企業文化而收到感謝卡,也是有可能,不過那不是對你的否定
面試其實有點像是在找適合的伴侶,不僅是公司在挑選合適的人,也是你在尋找符合自己價值觀、目標一致的職場環境。
總之保持積極樂觀的心態,並將每次面試經驗當作成長的養分,這樣才能在未來的職場中更加從容與自信。