# 2023 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2023-homework3)」作業 3
## 作業要求
> - [x] 自 IC 產業結構和軟體工程師的機會和《0 到 100 的軟體工程師面試之路》所及的公司對應的官方網站中,找出較符合自身興趣/規劃的職務 (至少 3 份)
> - [x] 依據職缺所述能力需求, 探討自身能力匹配程度
> - [x] 列出職缺相關面試題目
> - [x] 對面試題目進行自問自答, 可搭配過去開發經驗
> - [x] 撰寫履歷
---
## 個人簡歷
- 成大資工碩
- 研究領域: Packet Classification, Network Traffic Classification
- 相關修課: Network Programming, Cryptography and Security Protocols, Database Design, Machine Learning, Image Processing
- 專題: MVC Web System
* IDE : Eclipse
* Server : Tomcat 7
* Version Control : SourceTree (Git)
* Model : MySQL
* View : html、CSS、JavaScript、JSP、JQuery、bootstrap
* Controller : Java
- Skills: C/C++, Python, Git
---
## [Yahoo! - Software Engineer (Global Search, Backend)](https://ouryahoo.wd5.myworkdayjobs.com/careers/job/Taiwan---Remote/Software-Engineer--Global-Search--Backend--C---focus-_JR0022926)
### 職缺需求
* Minimum Qualifications
* Bachelor's degree in computer science or equivalent and should have already graduated from the highest degree program.
* 3+ years of non-internship professional software development experience in C++, Java, Python, or other OOP on Linux platforms.
* Good understanding of algorithms, data structures, performance optimization techniques, and object-oriented programming.
* Excellent communication skills and good team player.
* Preferred Qualification
* Advanced degree in Computer Science or related discipline
* Knowledge in Machine learning, Information Retrieval or NLP is an advantage.
* Familiar to data processing with distributed computing (Hadoop, Hive, Spark, etc.).
* Experience in using or developing open source software is a plus.
* Industry experience with Agile product development methodology.
* Design and Implement the large-scale runtime system experience.
### 自我評估
* 符合條件:
* 學歷
* 有資料結構、演算法、ML 相關能力
* 待改善:
* 開發 C/C++、Python 經驗不足
* 對 OOP、distributed computing (Hadoop, Hive, Spark, etc.)不熟悉
* 無 Agile product development 經驗
* 英文能力
### 面試題目
:::success
Reference: [2022 新鮮人軟體工程師面試心得(Yahoo/Foodpanda/Shopee/DELL)](https://www.technice.com.tw/experience/22953/)
:::
:::warning
**Yahoo**
* Title — Software Engineer (Search Backend)
* Timeline
* 01/19 官網投遞履歷
* 01/26 Quick Phone Screen
* 02/09 Tech Interview
* 02/24 Final Panel Interview
* 03/04 HR Interview
* Quick Phone Screen (30 mins)
一位面試官,過程全中文。會先簡單自我介紹,面試官會根據履歷內容問一些個人經歷(做過的專案、碩論題目、個人特色等等),最後會詳細介紹職缺內容。
* Tech Interview (60 mins)
這場有兩位面試官,過程全中文。沒有考白板題,內容大致如下:
1. 自我介紹
2. 根據履歷內容問問題(實習經驗、專案怎麼分工、碩論介紹…等)
3. C++ concept
> inheritance (private、protected、public)
> pointer and reference
> static、const
4. Data Structure
> 給你 10 萬筆 data,你要怎麼找出前 100 個小的
> 給你兩本書,你要怎麼找到一樣的文章
* Final Panel Interview (3 hours)
這場有三位面試官,一人出一題白板(使用 codepad)。第一題 stack 相關。第二題 linked list 相關,一題 follow-up。第三題 COVID-19 時事題,這題不用寫 code,提出解法概念就好。最後半小時會跟 hiring manager 聊。
* HR Interview (60 mins)
這部分 HR 會跟你說面試結果,另外會簡單介紹薪資和公司福利。
:::
### 模擬面試
😎:interviewer
🙂:interviewee
> 😎:請解釋 C++ 中 private、protected、public inheritance 的區別,並分別適用於什麼情況下?
> 🙂:public - members (attributes and methods) 可以從 class 外 access
> 🙂:private - members 不可以從 class 外 access
> 🙂:protected - members 不可以從 class 外 access,但在繼承的 class 可以 access
>
> 🙂:public inheritance - 在 derived class 中,public 和 protected 保持不變
> 🙂:private inheritance - 在 derived class 中,public 和 protected 變成 private
> 🙂:protected inheritance - 在 derived class 中,public 和 protected 變成 protected
>
> 🙂:在 encapsulation 中,可以依照 member 的重要程度設定 access specifiers
> 😎:C++ 中的 pointer 和 reference 差異?
> 🙂: pointer - 可以為 nullptr、可重新指向其他對象、需要用 dereference 的方式 (運算符 * ) access
🙂: reference - 必須在初始化時賦值(不能為空)、不能改變引用的目標、不需要 dereference 運算符,可直接 access。reference 可以當作是原來對象的 alias
> 😎:C++ 中的 static、const 差異?
> 🙂:static 代表 object 和 program 的 lifetime 相同,並只在程式開始前被 initialized 一次。
> 🙂:當 static 用在 variables、functions、class members 會有 lifetime extension 和 shared state 的特性,例如: 在 class 中,static member variable 在程式開始前就 initialized,且被該 class 所有的 instances shared,可以節省記憶體空間,class 之間也可利用 static member variable 溝通
> 🙂:const 代表 read-only, 當 const 用在 variables、functions、class members,則這些 object 不能被修改
> 😎:給你 10 萬筆 data,你要怎麼找出前 100 個小的?
> 🙂:可以用像是 min-heap 的方式,min-heap 保留前 100 的 data,若 insert 時超過上限,就 pop data 出去。
---
## [Shopee - Backend Software Engineer (Campus Hire 2023)](https://startup.jobs/backend-software-engineer-campus-hire-2023-shopee-1704528)
### 職缺需求
* Requirements:
* Bachelor's or higher degree in Computer Science or related fields graduating in 2023
* Less than 1 year of working experience and penultimate year students welcomed
* Passionate about coding and programming, innovation, and solving challenging problems
* In-depth understanding of computer science fundamentals (data structures and algorithms, operating systems, networks, databases, etc)
* Strong and hands-on experience with at least one of the programming languages: Go, Python, C++, Java
* Hands-on experiences and knowledge on relational databases such as MySQL
* Strong logical thinking abilities
* Skills below are optional but preferable:
* Familiar with Linux development environments and multi-threaded programming
* Familiar with common network protocols (TCP, UDP, HTTP) and network programming
* Experience in server/ web security
* Experience in design and development of large-scale distributed systems
* Hands-on experiences in Web Service frameworks and technologies such as Django, Ruby On Rails, or Node.js
* Familiar with performance tuning of Web Server, massive concurrency handling, and caching mechanisms
### 自我評估
* 符合條件:
* 學歷
* 有資料結構、演算法、作業系統、網路、databases 經驗
* 有 C++、Python、Java 經驗
* 在作業系統有基礎的 multi-threaded programming 經驗
* 修過網路概論、網路程式設計
* 待改善:
* 無管理 server、large-scale distributed systems 的經驗
* 對 Web Service frameworks 不熟悉
### 面試題目
:::success
Reference: [2022 新鮮人軟體工程師面試心得(Yahoo/Foodpanda/Shopee/DELL)](https://www.technice.com.tw/experience/22953/)
:::
:::warning
**Shopee**
* Title — 2021 SG Campus Backend
* Timeline
* 01/04 官網投遞履歷
* 01/06 Online Assessment
* 01/17 Technical Interview
* 01/20 Reject
10 題多選+ 2 題 coding
多選大多考作業系統或計網概,例如 Thread & Process、UDP/TCP 等。蠻多題目都是「下列哪些敘述正確」這種類型。兩題 coding 都不難,皆是 array 類型的題目,介於 easy-medium 之間。
* Technical Interview (90 mins)
一位女面試官,過程全英文。內容大致如下:
1. 自我介紹
2. 白板題(使用 codebunk)。題目:Merge k-sort lists。會先請你提出想法,並分析時間複雜度。這部分一開始我提用 Priority Queue 解,但面試官堅持叫我用 O(1) space 的 merge 做法,寫完程式碼後,再自己生一些 testcase 去測。
3. Networking
> 輸入 www.google.com 之後網路是怎麼運作的
> DNS 的架構、怎麼運作
> http 怎麼運作、TCP 怎麼運作
> 對稱和非對稱加密差異
4. DB
> 給你一個情境,要你設計一個 database
> primary key 怎麼設計
:::
### 模擬面試
😎:interviewer
🙂:interviewee
> 😎:輸入 www.google.com 之後網路是怎麼運作的
> 🙂:OS 會檢查 local DNS cache,查詢 www.google.com 對應的 IP address
> 🙂:接著 OS 會向 DNS resolver (通常是 ISP) 發送 request。
> 🙂:如果 resolver 沒有記錄,它會向 DNS root server 發出 request,詢問 ".com" 的 TLD server 的 IP address
> 🙂:root server 回傳 IP address 後,resolver 向該 TLD server 發送 request。
> 🙂:TLD server 回傳 ".google.com" 的 authoritative name server 的 IP address。resolver 再向這個 authoritative name server 發出 request
> 🙂:authoritative name server 回傳 "www.google.com" 的 IP address 給 resolver。
> 🙂:resolver 將得到的 IP address 存入 cache 並回傳給 OS,OS 會將 IP 存入 local DNS cache。
> 😎:HTTP 是怎麼運作的
> 🙂:browser 用 GET、POST等方法向 server 發送 HTTP request。
> 🙂:server 收到 HTTP request 後,根據請求的內容和目標資源,會回傳像是 HTML、CSS、JavaScript 等等靜態內容,或是 PHP、Python、Node.js 等動態內容,以及 HTTP 狀態碼 (如 404...)
> 🙂:client 接收到 server 回傳的 response,就可以根據 response 的內容加載頁面
> 😎:TCP 是怎麼運作的
> 🙂:在通訊開始之前,client 和server 會建立三次 handshake 的 TCP connect。即 client 發送SYN,server 回應 SYN-ACK,最後client 再發送一次 ACK。
> 😎:TCP 如何保持可靠性?
> 🙂:例如 sequence number,TCP packet 會有 sequence number,可以重組完整的資訊。如果 client 端收不到某些 sequence number 的封包,就可以讓 server 端重新發送封包,並調整傳輸設定
> 🙂:或是 checksum,首先做 data segmentation,以 16 bits 為單位,接著將所有 segmentation 加總,若加總超過 16 bits,則超過的部分再和原本的 16 bis 加總,接著將結果做 1's complement,就得到 checksum
> 🙂:client 收到封包後,就可以計算 checksum 來驗證封包完整性
> 😎:對稱和非對稱加密差異
> 🙂:對稱加密使用相同的密鑰進行加解密,只需一個密鑰,密鑰的分發相對容易,只需確保發送方和接收方都知道相同的密鑰。
> 🙂:非對稱加密使用一對密鑰,公鑰用於加密,私鑰用於解密,公鑰可以公布,但私鑰必須保密。
> 🙂:在加解密速度方面,對稱加密通常比非對稱加密快
> 🙂:對稱加密有像是 DES、AES 等等,非對稱加密則有 RSA、ECC 等等。
---
## [DELL - 2024 Software Engineer Campus Hire](https://jobs.dell.com/job/taipei/2024-software-engineer-campus-hire/375/53351889680)
### 職缺需求
* Essential Requirements
* Bachelor’s or Master's degree in Computer Science and Information Engineering or related fields and expect to graduate between 2023 February to 2024 December
* Good knowledge of programming languages C/C++ or Python as well as systems engineering software tools
* Knowledge or relevant deployment experience of AI or Large Language Model.
* Familiar with OS (Windows and Linux) environment, software architectures, applications, and interactions between hardware and software.
* Ability to code/debug moderately complex programs using either written or verbal design specifications
* Desirable Requirements
* Good communication and presentation skills and fluency in English
### 自我評估
* 符合條件
* 學歷
* 有 C/C++、Python、AI deployment 經驗
* 對 OS 有基本瞭解。
* 待改善:
* 無大型軟體的開發與 debug 經驗
* 英文能力
### 面試題目
:::success
Reference: [2022 新鮮人軟體工程師面試心得(Yahoo/Foodpanda/Shopee/DELL)](https://www.technice.com.tw/experience/22953/)
:::
:::warning
**Dell**
* Title — 2022 Software Engineer Campus Hire
* Timeline
* 02/19 官網投遞履歷
* 03/16 Video Interview Video Interview (60 mins)
六位面試官(三位 manager,三位 engineer),前半小時全英,後半小時中文 free talk。前半小時會需要先準備 15 分鐘的自我介紹+投影片(這部分 HR 會在信件內容告知需要準備哪些內容),面試官會依據你講的內容問問題。後半小時比較像是聊天,會多介紹 team 和工作內容。
:::
---