# 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 和工作內容。 ::: ---