# 資訊產業專案設計Homework3 ## Google ### [Technical Lead, Networking, Pixel Connectivity](https://www.google.com/about/careers/applications/jobs/results/84295451433411270-technical-lead-networking-pixel-connectivity/) **職缺需求** 1. Electrical Engineering、Computer Engineering學士學位或同等實務經驗 2. 有5年使用一種或多種語言(Python、Java或C++等)進行軟體開發的經驗 3. 具有networking protocol相關經驗 **上述職缺所需要的能力與自己專業上的匹配程度** 專題有使用NGINX來架設網頁,於碩士班有修過網路管理(network management)與網路安全(network security)等相關課程。對於UDP/TCP、DNS、TLS等有一定了解。 :::spoiler #### Minimum qualifications: * Bachelor's degree in Computer Science, a related technical field, or equivalent practical experience. * 5 years of experience with software development in one or more programming languages (e.g., C, C++, Java, Rust). * Experience in networking protocol. #### Preferred qualifications: * Experience programming in Java and Rust. * Experience designing, implementing, or using networking protocols (IPv6, IPv4, UDP/TCP, DNS, HTTP, QUIC, TLS). * Experience writing or using networking code (e.g., HTTP, RPC client libraries). * Experience with OpenWrt or NGINX. * Knowledge of Linux, kernel networking stack and drivers. #### About the job Google's software engineers develop the next-generation technologies that change how billions of users connect, explore, and interact with information and one another. Our products need to handle information at massive scale, and extend well beyond web search. We're looking for engineers who bring fresh ideas from all areas, including information retrieval, distributed computing, large-scale system design, networking and data storage, security, artificial intelligence, natural language processing, UI design and mobile; the list goes on and is growing every day. As a software engineer, you will work on a specific project critical to Google’s needs with opportunities to switch teams and projects as you and our fast-paced business grow and evolve. We need our engineers to be versatile, display leadership qualities and be enthusiastic to take on new problems across the full-stack as we continue to push technology forward. Making the world's information universally accessible and useful doesn't stop at the desktop. The Mobile team builds tools to get you the information you need no matter where you are. Android has become the world's most popular mobile ecosystem, powering billions of devices, from smartphones to tablets, watches to TVs and everything in between. Whether adding to the core Android experience, forging new markets for digital content, creating immersive and portable versions of our products or managing relationships with a global community of developers, the Mobile team is giving you Google on the go. #### Responsibilities * Lead a project to design/implement/fine-tune/land the Pixel networking functionality/features, and data performance features. * Drive technical projects and provide networking mentorship to inspire teams to innovate, design, and implement advanced connectivity features. * Improve network testing capabilities with test engineers, develop automation tests and metrics. ::: ## MEDIATEK ### [AI&Computing Platform](https://reurl.cc/5OZj9y) **職缺需求** 1. 資工/資管/電子/電機/電信/通訊/電控相關研究所背景 2. 具有AI或機器學習課程實作經驗 3. 具有資料探勘/資料科學/資料分析/課程實作經驗 4. 熟悉Python/JavaScript/Java語言 5. 具備解決問題的能力,及良好團隊合作與溝通能力 **上述職缺所需要的能力與自己專業上的匹配程度** 本身有修過AI、deep learning、資料探勘等相關課程且有做出相關專題,對於所要求的程式語言也都有一定的了解,在解決問題與團隊合作這種能力是研究所必備的技能。 ## Silicon Motion ### [SSD Firmware Engineer](https://www.siliconmotion.com/cht/company/careers/s/detail) **職缺需求** 1. computer science跟electrical engineering碩士或博士學位 2. 熟悉PATA/IDE interface或SATA/PCIe interface 3. SSD contoller韌體設計、客製化和客戶支援 4. SATA/PCIe/NVMe protocol韌體設計 5. 設計NAND FTL/CTL演算法 **上述職缺所需要的能力與自己專業上的匹配程度** 目前自己所具備的能力與所修過的課程跟這個職缺的需求其實沒有太大關聯,所以如果想要投這個職缺,還要再多補充相關的背景知識。 ## 面試問題整理 [mediatek 1](https://www.ptt.cc/bbs/Tech_Job/M.1501843612.A.732.html) [mediatek 2](https://wubui.pixnet.net/blog/post/41242054) [mediatek 3](https://hackmd.io/@Rance/SkSJL_5gX) [operation system](https://hackmd.io/@SupremeEJ/SkcsCUGh8) [deep learning](https://zhuanlan.zhihu.com/p/231171098) [network 1](https://www.cnblogs.com/88223100/p/Network-Interview-Questions.html) [network 2](https://reurl.cc/K3ROgj) [software and firmware考題](https://www.raind.blog/c&cpp-zh/c&cpp_interviewexam.html) ## 模擬面試 👨‍💼 : interviewer 👨‍🎓 : interviewee --- 👨‍💼 : 你好,歡迎參加我們公司的面試。 👨‍🎓 : 你好。 👨‍💼 : 接下來我會問你一些關於operation system、network、c語言相關的問題。 👨‍💼 : 可以解釋一下**multi-threading**與**multi-processing**之間的差異嗎? 👨‍🎓 : multi-threading : >一個process內會有多個threads,這些threads共享相同的memory space。 >當multi-threads可能會發生race condition跟synchronize問題。 👨‍🎓 : multi-processing : >在operation syste中,開啟多個program,每個process都會具有獨立的memory space 。 >每個process之間不會直接共享data。 👨‍💼 : 可以簡單說明**TCP three way handshake**的過程嗎? 👨‍🎓 : three way handshake主要分為3步驟 >1. client端向server端傳送一個SYN packet >2. server端收到SYN packet之後,回傳一個SYN/ACK packet給client端 >3. client端收到SYN/ACK packet之後,再回傳一個ACK packet。 👨‍💼 : 可以解釋一下c語言中**volatile**這個關鍵字的用意嗎? 👨‍🎓 : compiler通常會對變數進行優化,例如將變數值存入register裡面,提高執行效率,但是在multi-threads的情況下,其他threads也要對存取這個變數。如果先把結果放在register裡面,沒有直接寫到memory,會造成其他threads存取到錯誤的值。volatile這個關鍵字的用意就是不對變數進行過度優化,每次存取都直接寫入memory。