# 2023 資訊科技產業專案設計 作業三
## 作業要求
* 尋找並瞭解知名外商公司職缺與其需求(至少三份)
* 依據職缺所述能力需求, 探討自身能力匹配程度
* 羅列職缺相關面試題目
* 對面試題目進行自問自答, 需搭配過去開發經驗
* 撰寫履歷
## 自身背景分析
為了對各個職缺和自己進行優劣勢分析, 我認為首先我應該先簡單整理自身背景和相關經歷, 以下是我的resume
[Resume](https://drive.google.com/file/d/1Aoz7uKr-v95DRb9y1BvmXJo3YdEZWzL1/view?usp=sharing)
簡單闡述自身優劣勢
* 對於網路, 作業系統有興趣並且持續鑽研, 但缺少有巨大impact的作品
* 過去從事的開發經驗多數以網路服務後端為主
* 對於AI技術的知識很薄弱可能只有皮毛的等級
* 對於底層computer architecture只有教科書知識, 缺乏實作例如RISC-V等
* 整體來說, 應該能顯現出是個可用之才, 但缺少一個非常有力的經歷來達到"非我莫屬"的程度
:::info
針對以下每項職缺需求, 我會以5分為滿分, 自評在該項目的符合分數
並在最後補上詳細的解說分析自身和這些需求的吻合程度
:::
## Nvidia - Display Driver Software Engineer (RDSS Intern)
[JD](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/details/Display-Driver-Software-Engineer--RDSS-Intern-_JR1974479?q=Intern)
### 職缺說明與需求
- 電機資工領域學士或碩士 (5/5)
- 充分了解程式語言與processor architecture (4/5)
- 充分了解作業系統基礎知識 (4.5/5)
- 強大的C/C++程式撰寫能力 (3.5/5)
- 應該對於作業系統, 演算法開發有扎實的背景 (4.5/5)
- 了解windows kernel是加分項 (1/5)
總符合分數 : (4/5)
自我評語:
我在作業系統, 演算法除了有學校課程學習的扎實基礎以外, 也經由過去幾次實習, 兼職甚至比賽的經驗, 有實務經驗而能對理論有更深理解甚至將理論應用到實務。以下舉數個實際例子
* 實習學習到的容器技術, 運用linux cgroups, network namespace等概念, container orchestration更是實現水平擴展的重要技術
* 實習當中以go的goroutine, 實現multi-thread來成功處理高流量(high concurrency)問題
* 過往後端工作經驗曾嘗試應用資料庫讀寫分離來處理學校網站高流量
* 在jserv老師暑期linux課程曾改進Job queue之間work stealing演算法達到更好runtime, 對於multi-thread programming和linux CMWQ有更深認識
除了以上幾點, 我目前所屬的實驗室就是在研究演算法優化相關議題, C/C++ 除了大學課程奠定的基礎, 還有各樣side project搭配leetcode練習
不過對於windows kernel一竅不通, 只能在面試前臨時抱佛腳
整體上給自己 4/5的分數
### 面試題目自問自答
🤖 : Interviewer
👻 : Interviewee
1. 🤖 : 在C語言當中, struct和union的不同是什麼?
👻 : struct和union最大的不同在於, struct會為所有member分配足夠的空間, 實際的分配的量要看有沒有做padding, 不然struct多數情況會自動做alignment, 詳見[你所不知道的 C 語言:記憶體管理、對齊及硬體特性](https://hackmd.io/@sysprog/c-memory#data-alignment)
而union只會配置最大成員資料大小的空間, 並且union一次只能存取當中其中一個member
2. 🤖 : 解釋一下Interrupt是什麼
👻 : Interrupt可以當成作業系統不同component之間傳遞訊號的一種方式, 當某個事件發生的時候, 系統會透過interrupt通知其他device事件的發生, 處理的方式可能會發生context switch發生控制權轉移, 或者是終止某項process等等
3. 🤖 : 什麼是virtual memory?
👻 : virtual memory顧名思義是虛擬化的記憶體, userspace process執行的時候實際上使用的記憶體位址是virtual memory address, 透過memory map將虛擬記憶體位址轉為實體記憶體位址
🤖 : 這麼做有什麼好處?實務上你知道什麼案例因為virtual memory而獲得解決或改進嗎?
👻 : 虛擬化最大的好處在於**欺騙**, 假設我們實際上只有50GB的physical memory space, 透過virtual memory, 我們可以讓電腦誤以為我們有200GB甚至更多的空間。
另外在安全性上也獲得改善, 對於每個process來說, virtual memory都可以從0開始, 所以從process的角度來看, 每個人都可以寫入0~1023這段memory空間, 但其實都映射到不同physical memory address上, 這使得駭客想要將惡意程式寫入特定區段記憶體變得困難
[Display Driver Interviews](https://www.glassdoor.co.in/Interview/display-driver-interview-questions-SRCH_KO0,14.htm)
[Nvidia Interview Questions and Answers for 2023](https://www.simplilearn.com/nvidia-interview-questions-article)
[Top 25 Nvidia Interview Questions & Answers](https://interviewprep.org/nvidia-interview-questions/)
[Big companies Interview Questions](https://github.com/realabbas/big-companies-interview-questions/blob/master/companies/nvidia/nvidia.md)
## AWS - WiFi Software Development Engineer - eero, WiFi Team
[JD](https://amazon.jobs/en/jobs/2374329/wifi-software-development-engineer-eero-wifi-team)
### 職缺說明與需求
- 4年以上嵌入式韌體開發經驗 (0/5)
- 2年以上C語言開發經驗 (3/5)
- 2年以上python或Go開發經驗 (3/5)
- 對於無線嵌入式系統或消費式電子產品的知識 (1/5)
- 有和無線網路裝置相關的經驗例如routers, switches, wireless access points (2/5)
- 關於802.11, 802.3, HDCP, IPV4, IPV6, Linux bridge和network stack相關知識 (3.5/5)
- 具備linux kernel and driver的開發經驗 (3/5)
- 資訊相關科系學士或以上 (5/5)
總符合分數 : (2.5/5)
自我評語:
C語言因為僅限學校課程和side project進行, 缺乏專業工作經驗, 認為自己只有3/5的符合程度, python和go也是
無線網路相關裝置僅有教科書等級的知識缺乏實務開發經驗
近期剛好開始鑽研802.11相關知識, 並且過去實習和工作內容和網路知識大量相關, 對於IPV4, IPV6, Linux bridge和network stack甚至網路封包處理, 解析等都有一定程度的掌握, 因此給予較高的分數
linux kernel and driver在大學時期曾經線上參與過jserv老師的linux核心課程, 並且完成fibdrv, 一個能在kernel space進行fibonacci number計算與各項優化測量的linux driver
整體來說因為缺乏硬體, 韌體相關開發經驗, 頂多就是side project, 我認為就我當前的能力與技能樹而言符合度並不高, 不過這個職缺的工作內容是一個我十分有興趣的領域, 依舊想嘗試爭取
### 面試題目自問自答
🤖 : Interviewer
👻 : Interviewee
1. 🤖 : 請解釋IEEE 802.11a, 802.11b, 802.11g, 802.11n, and 802.11ac 的差別
👻 : (沒有概念)
2. 🤖 : 請設計一個支援聲音影音應用程式無線網路, 同時維持Quality of Service
👻 : 請問這個影音平台需要達到的確切QoS標準是什麼?
🤖 :
3. 🤖 : 請解釋classic load balancer和application load balancer的差異
👻 : classic load balaner主要是在不同vm instances, 在aws裡可以想成是ec2之間做load balance, 而application load balancer主要是將traffic導進不同container當中
🤖 : 你有曾經使用或實作兩者的經驗嗎?
👻 : 在過去專題當中曾經使用nginx作為proxy server同時也能做到classic load balancer的功能, application load balancer則是使用k8s的水平擴展能力HPA來達成
[Wireless Network Engineer Interview Question](https://resumeworded.com/interview-questions/wireless-network-engineer)
[12 AWS Interview Questions](https://manoj777.medium.com/12-aws-interview-questions-asked-during-my-interview-bb9c8c6dfab)
[Top 70+ AWS Interview Questions](https://intellipaat.com/blog/interview-question/amazon-aws-interview-questions/)
[Top 100+ AWS interview Questions and answers](https://www.simplilearn.com/tutorials/aws-tutorial/aws-interview-questions)
## Canonical - Containerization & Virtualisation Engineer
[JD](https://canonical.com/careers/5172247)
### 職缺說明與需求
* 電腦科學相關學士, 或者闡述你的相關經歷 (5/5)
* 對於超越原本期待值有熱忱並且舉出實例 (5/5)
* 具備使用container或virt等技術的 (5/5)
* 具備開發kernel或low level system的經驗 (3/5)
* 具備專業英語能力 (4/5)
* 具備Linux相關經驗 (5/5)
* 具備高度軟實力, 人際溝通能力 (4/5)
* 願意一年至少出國出差兩次, 每次至少兩週以上 (5/5)
總符合分數: (4.5/5)
自我評語:
此職位是fully-remote, 並且工作內容我很有興趣
除了有符合的學歷以外, 我在學士期間並非就讀資訊工程本科, 但憑藉個人努力與對資訊領域的熱忱有以下經歷與表現
* 科技部大專生專題計畫
* 學校電算中心系統後端開發人員
* Trend Micro Intern
在進行以上工作的同時我也不荒廢本系課業, 多次獲取書卷獎足以展現我有能力與熱忱將本身的工作盡力做到最好
同時我的開發經歷大量使用到docker container, k8s, linux等技術, 多益900也能展現我足夠的英語能力
線上跟過jserv老師的linux核心課程, 具備基本kernel開發經驗並且對virt稍有接觸, 整理來說我認為我和此職缺的需求高度吻合, 因此給自己4.5/5的分數
### 面試題目自問自答
🤖 : Interviewer
👻 : Interviewee
1. 🤖 : 你最喜歡的open source project是哪個?
👻 : etcd, 這是k8s底層用來儲存log的一個分散式儲存系統, 這個專案利用Go實作raft algorithm實現大型分散式(key, value)儲存系統我覺得非常酷, 尤其是在大型container orchestra當中要能夠處理member不斷新增或離開的情況
2. 🤖 : 將應用程式部署在container中跟部署在host中的差別是什麼?
👻 : 較為廣泛的觀點是部署在container中可以減少開發者對於建立環境的麻煩, 傳統部署在host vm上許多套件等等都需要自己重新建立, 但可能因為vm的os不同而造成各種版本dependency問題, 而container因為可以模擬作業系統, 所以只要能將container跑起來基本上後續的開發就沒有問題
🤖 : 你的履歷上看起來, 你之前大量使用過container, 也有使用k8s這樣管理大量容器orchestration的經驗, 可以就你個人經驗描述container的特性還有優劣處嗎?
👻 : 除了前面提到增加開發方便與彈性之外, container實現micro service的概念讓我們可以把各個服務application code, database, web server等等拆成不同container, 能提供更好的安全性不過也需要對一些網路架構有基本的認知才能架起一個服務
k8s這樣的工具則是讓大型企業更好的管理他們成千上萬數量的container, 不過必須配合底下的infra, 所以同樣也需要學習更多的知識才有辦法理解並使用這樣的工具
[20 Canonical Interview Questions and Answers](https://climbtheladder.com/canonical-interview-questions/)
[40 Top Kubernetes Interview Questions and Answers for 2024](https://www.simplilearn.com/tutorials/kubernetes-tutorial/kubernetes-interview-questions)