你的購物車目前是空的!

職缺說明(Job Description, JD),是準備面試最重要的文件,好的職缺說明會將所有你可能會被問到的問題寫在上面,我們要做的事情就是根據職缺說明準備相對應的素材。這篇將用具體職缺案例帶著大家看我是如何考前猜題以及準備面試的。
職缺說明-基本要求分析
8-10 Years of software development & programming experience in enterprise cloud-based data applications OR master’s degree in computer science and related technical field, or equivalent work experience.
一般在徵求軟體工程師時都會在第一段看到這樣的條件,內容不外乎就是一些開發經驗、相關學歷等等。而這邊有一點比較特別,是「enterprise cloud-based data applications」,就要想一下過去有哪個經驗符合這個需求。
如果是我的話,就可以回答:
- 過去曾經在廣告業運用 AWS 架設資料管線、資料倉儲
- 也在娛樂產業運用 AWS 架設資料導入、資料處理、MLOps、以及推薦模型服務
3+ years of experience in data related engineering projects along with data analytics.
這個需求算是對於一般資料工程師的基本問題,但後面有加了一句「along with data analytics」。表示這個職缺要的不是單純的工程師,還必須要有資料分析能力和經驗。
因為我上一題已經回答過有資料工程的經驗了,所以這裡只要補充:
- 我第一份工作是在外商市調業做資料分析師,負責設計問卷、分析結果、製作報表建議,也需要和客戶簡報與溝通需求。
- 在某某公司期間,也負責做廣告優化的案件,需要透過設計 A/B 測試來實驗廣告策略,優化廣告的效果。
2+ years of experience in architecting, building, and maintaining end-to-end, high-throughput data systems.
除了有基本軟體工程能力之外,這一條需求是希望候選人還具備設計、開發、維護整個架構的能力,同時還必須是「high-throughput data systems」(表示一般小專案或沒上線就不太適合)。抓到重點之後就知道怎麼講故事了:
因為這一題算是前半部的重點,也是一個很好的加分項目,所以我可以花比較多時間來描述這個專案,在說明專案的時候,當然也不能忘記 STAR 原則:
STAR 範例
情境(Situation)
我在 OOO 服務的時候,公司想要設計一套可以根據使用者瀏覽紀錄的個人化推薦系統,
任務(Task)
我在這個專案中,負責規劃、設計和實作整套資料相關的架構,從資料蒐集、處理,並與資料科學家合作,協助自動化的訓練模型並將模型轉成服務上線。
行動(Action)
- 我們一開始先設計了要蒐集的使用者事件請前端實作,當使用者在 App 上點擊後,便會有相對應的事件傳送到後端 API
- 我們透過 Kinesis 來蒐集後端傳送來的事件資料,並透過 serverless 的架構讓資料自動儲存在 s3,每天的事件大約有 OOOO 多少筆。(為了強調這是一個大流量的系統)
- 資料管線的部分我們是用 Airflow 來管理,並搭配 EMR 和 Athena 來做計算(這些都是處理大數據相關的應用)。
- …
- …
結果(Result)
- 第一季完成了什麼,讓資料科學家可以開始根據使用者資料建立模型
- 第二季又做了什麼,讓模型可以開始服務使用者
2+ years hands on experience with Object-Oriented programming in languages like Java, C#, etc
來到基本需求的最後一點,這邊我覺得蠻有趣的,因為前面說要八年開發經驗,但這邊特別強調要有兩年 OOP 經驗,還只放 Java 和 C# XD
但反正需求就是這樣,所以也要特別強調一下用 Java 的經驗,也順便講一下自己其他語言的使用狀況
- Data Engineer 通常會需要使用多種語言:
- 很多排程管理工具像是 Airflow,或是資料分析工具 Pandas,都是使用 Python
- 會使用 Scala 來開發 Spark 相關應用
- 並且使用 Java 的 Spring boot 來開發相關的 API,讓其他團隊可以方便使用 Data Team 整理好的資料
職缺說明-進階要求分析
進階要求就是讓你展現個人化以及差異化的地方了。在準備這些問題的時候有三個步驟:
- 分析問題:了解這個問題在問什麼,什麼是這個問題的關鍵字?
- 回答的重點:根據上述分析,這個問題在回答上有哪些重點一定要提到?
- 加入個人化經驗:所有的回答都不能空泛的回答概念,而是要搭配過去經驗回答
接下來就讓我們來看看這個職缺還有哪些要求:
Outstanding technical problem solving and debugging skills.
問題解決和 Debugging 算是老工程師的基本技能了,難是難在怎麼在面試中表現出來,所以這裡一定要先想好對應的案例拿出來講。然後要注意的是,回答時要強調的是「技術」困難,很多人會在這裡講了太多專案上或溝通上的困難(這也是常遇到的困難,但不是在這裡講)。
因為這個職缺有資料 + 微服務的部分,所以需要準備兩種類型的困難。
- 資料品質控管:以前如果有分析師來跟我說今天資料怪怪的,我們就需要沿著資料管線往前去找到底哪裡發生異常,每次找問題都要花很多時間。所以後來我們在每個段落都多做一段統計監控,特別是資料剛進來和剛處理完這兩個地方。
- 微服務 request 的追蹤:我們現在服務架構分成很多段,開發者也不一樣。所以後來使用了統一的REQUEST-ID,讓微服務互相呼叫的時候能知道是彼此的關係,log 追蹤起來也更知道是哪個呼叫造成了問題。
Designed and Implemented Micro Services/API based solutions.
這邊不是單純寫 backend,而是 Mirco Services,回答的時候一定要針對微服務的重點來說,而微服務的重點包括:
- 高內聚、低耦合
- 分散式系統設計
- API 設計的標準化
- 微服務的監控
- Scaling 的問題
- …等等
所以在說的時候,也需要帶到這些議題,表示自己真的是有這些開發經驗
- 開發了OOO系統,主要框架是 Spring Boot,主要的服務有 Data Ingestion, Data Storage, Query API, 核心 API, 應用 API 等
- 資料大概有上億筆,主要的核心是用 Object Storage 作為儲存系統來降低除存成本,並透過 Internal Cache 來快效率。
- 這些服務會架設在 AWS Fargate 上,會根據使用需求做 Auto Scaling
- 服務之間使用 RESTful API 溝通,Log 會統一送到 Data Dog
Experience with Big Data approaches and technologies including Spark, Python Notebooks etc.
講到 Big Data 就會想到 Spark!通常在問到 Big Data 相關議題時,也是跟上面微幅的作法一樣,要先釐清一般 Big Data 重視什麼,再根據符合的條件回答。
- 過去在 OOO,一天有超過 1 T 的資料需要處理,那個時候是使用 in house 的 Hadoop 和 Impala, Spark 來處理
- 過去在 OOO,透過 Kineiss/Kafka 來處理即時資料,並切將資料轉換成 Micro Batch 的方式來做每天/每小時的處理。
- 我通常習慣使用 SQL(Athena/Big Query) + Spark 來處理資料。Spark 會用在比較複雜的需求(例如規則比較複雜的 Parser)和做前處理。SQL Engine 用來處理報表相關的需求。
- Notebook 太基本了可以不用花時間篇幅講。
Strong Experience with Scala and/or Python along with DAX & SQL Queries
上面提過了,說到 Data 基本上就要會 Python 和 SQL,碰 Spark 不碰到 Scala 也很怪。
如果遇到沒碰過的東西怎麼辦?
Hands on Experience in OOO technologies
一堆需求中,總是會遇到沒碰過的東西。這時候也不用硬凹說自己碰過,看能不能拿替代品出來。因為工作的重點在於「解決問題」,只要知道如何運用技術解決問題,並且掌握技術的基本,就能很快學習新的技術。如果是我就會說:
- 我有多年使用 XXX 的經驗,曾經使用 XXX 來解決什麼樣的問題,當時我花了三個月自行研究文件來幫公司怎樣怎樣。我相信 OOO 和 XXX 有很多相似的地方,我也能很快上手新技術並應用在工作上。
職缺說明-軟技能要求
每個工作都會需要軟技能,但每個職位加減不太一樣,通常可以透過職缺略猜一二。
Knowledge of various design patterns and technologies that enable business problem-solving at scale.
這一題的重點就在於如何「有系統」的幫企業解決大規模的問題,所以在回答的時候必須兼顧系統化和實際經驗。
- 任何關於大數據的問題我都會根據這個 Metrics 來做規劃:
- 一個是資料的特性,包括資料量、速度以及多樣性
- 再來是並根據資料供應鏈(可以參考:震驚!資料工程竟然更像供應鏈管理而非軟體工程)的階段來做元件的挑選和規劃流程。例如:(這邊就可以舉一個實際規劃的例子)
Good interpersonal and communications skills, including the ability to effectively communicate with both business and technical teams.
任何進階職缺,溝通都是必考題了。而且這一題的重點也幫你畫好了,就是要同時跟商務端和技術端的人溝通!在回答問題的時候千萬別漏掉這兩端。我就會先強調過去有這樣的經驗,以及自己為什麼可以比別人做得更好的原因。
- 過去在 OOO 的時候,一方面要跟客戶討論需求,一方面要帶著團隊理解需求、設計解決方案。為了拉近客戶跟工程團隊的距離,我們導入了敏捷相關實踐,每天和客戶同步目前的狀況,以及運用每週的demo 頻繁跟客戶確認解決方案是否符合預期。
- 我第一份在顧問業的工作,當時同時服務超過十個客戶,每一季都要跟客戶開會討論需求、分析資料、提供分析報告和解決方案。這樣的經歷為我的客戶溝通打下良好的基礎。
小結
軟體工程師面試不是刷題就好,也要顧到其他面向。今天用實際案例帶著大家走一次透過職缺需求準備面試的過程。希望各位求職順利!
參考資料
- How to Read a Job Description – Indeed
- How to Interpret a Job Description – Monster
- How to Read and Understand a Job Description – The Balance Careers
- How to Analyze a Job Description – Glassdoor
- Job Description Analysis Tips – CareerBuilder
最新活動
-
特價商品軟體工程師跨國遠端攻略-從履歷到面試一步到位!$239.00 – $639.00
發佈留言