# 資訊科技產業專案設計課程作業3 ## 職缺探索 ### 1. [Software Engineer, University Graduate, 2025](https://www.google.com/about/careers/applications/jobs/results/137721392706527942-software-engineer-university-graduate-2025) ::: spoiler Company GOOGLE ::: :::spoiler Job Description --- 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. As a key member of a small and versatile team, you design, test, deploy and maintain software solutions. Due to business needs, we are prioritizing candidates that are available to start this position before the end of 2025. This role is eligible for visa sponsorship. Google is an engineering company at heart. We hire people with a broad set of technical skills who are ready to take on some of technology's greatest challenges and make an impact on users around the world. At Google, engineers not only revolutionize search, they routinely work on scalability and storage solutions, large-scale applications and entirely new platforms for developers around the world. From Google Ads to Chrome, Android to YouTube, social to local, Google engineers are changing the world one technological achievement after another. ::: :::spoiler Responsibilities --- * Build our platforms, systems, and networking infrastructure using experience with distributed systems, OS/kernel, network system design, and large-scale storage systems. * Build internal systems used by Googlers globally. * Mitigate reliability failures in a component or system. * Create and support a productive and innovative team, including working with peers, managers, and teams. ::: :::spoiler Qualification --- ### Minimum qualifications: * Bachelor's degree in Computer Science, related technical field, or equivalent practical experience. * Experience in computer science, data structures, algorithms, and software design. * Experience in Software Development and coding in a general purpose programming language. ### Preferred qualifications: * Master's degree or PhD in Computer Science or a related technical field. * Experience programming in C, C++, Java, or Python. * Experience with Unix/Linux or Windows environments, distributed systems, machine learning, information retrieval, and TCP/IP. ::: :::spoiler Match Degree --- ### Advantage 1. 有電資相關碩士學歷 2. 有修習過資料結構、演算法等課程 3. 有多年寫C、C++、Java經驗, 對python有所了解但還不熟練 4. 有機器/深度學習相關經驗 ### Disadvantage 1. 對TCP/IP、分散式系統不太熟悉 2. 還沒接觸過作業系統 Kernel 相關程式設計的經驗 ::: ### 2. [Linux Kernel Engineer - Ubuntu](https://www.104.com.tw/job/7mh5j?jobsource=joblist_search) :::spoiler Company LINUX ::: :::spoiler Job Description --- Are you fascinated by the chance to make a real impact on millions of Ubuntu users? We are looking for a passionate Linux kernel engineer to join our team and help us bring Ubuntu to the next generation of hardware. In this role, you will be responsible for developing and maintaining high-quality kernel support for a wide range of hardware devices. You will also work with upstream developers and driver vendors to integrate the latest hardware support into Ubuntu. This role presents an exciting opportunity for an engineer to leverage their software engineering skills on cutting-edge hardware. We collaborate with world-leading OEM partners to deliver Ubuntu on their next generation of laptops, desktops, and workstations. You will tackle complex issues spanning a wide range of consumer components, from Wi-Fi and Thunderbolt docks to BIOS and UEFI. Additionally, you will face challenges in achieving optimal power efficiency and performance. You will have the chance to explore the latest architecture and platform technologies from Intel, AMD and other silicon vendors, enabling them in Ubuntu and ultimately delivering them to the world. As part of this position, you will be expected to closely collaborate with upstream kernel maintainers and hardware vendors in analysing root causes, developing fixes, and submitting patches for review. ::: :::spoiler Responsibilities --- * Collaborate regularly and proactively with a globally distributed team * Work closely with external silicon and hardware manufacturer delivery teams on bleeding edge Desktop, Laptop, and Server platforms * Diagnose and resolve issues in the kernel reported by QA, customers and the community * Enable new Linux kernel features as requested by customers * Submit, review, and apply kernel patches, working with both internal and external upstream maintainers ::: :::spoiler Qualification --- * Well-organised, self-starting and able to deliver to fixed schedules * Demonstrated ability to present oneself in a professional manner when interacting with colleagues, business partners, and the open source community * Ability to communicate effectively in English, both written and oral * Significant programming experience in C, with Python and Bash scripting also highly regarded * Solid background with git * Knowledge of the Linux kernel and kernel subsystems * Demonstrated experience with kernel patching and debugging * Knowledge/experience with Linux kernel upstream processes and release cycle * Strong grasp of device drivers, BSP’s, and other low level system engineering * Prior experience with Ubuntu/Debian/Snap packaging would be highly regarded * Knowledge of ACPI and UEFI is desirable * Willing to travel globally up to 4 times a year for internal and external engineering events. ::: :::spoiler Match Degree ___ ### Advantage 1. 有多年寫C的經驗,對python有所了解但還不熟練 2. 有英文寫作及口說能力 3. 有使用過Ubuntu ### Disadvantage 1. 不熟悉Linux Kenerl 2. 不了解ACPI及UEFI ::: ### 3. [Research Scientist, Deep Learning and Computer Vision](https://www.linkedin.com/jobs/view/3839139072) ::: spoiler Company NVIDIA ::: ::: spoiler Job Description --- NVIDIA is searching for several outstanding computer vision and deep learning researchers to join our new research team in Taipei/Hsinchu. We are passionate about research that pushes boundaries but also has an impact in the real world. Specific areas we are excited by include but are not limited to computer vision for 3D vision, generative and multimodal AI (e.g., vision and language, audio-visual learning, etc.), as well as explainable and trustworthy AI. You will work within an amazing and collaborative research organization that consistently publishes at the top venues across computer science. You have the opportunity to join and shape a new research team, where your contributions can create a real impact on our products. ::: ::: spoiler Responsibilities --- * Research, design and implement novel computer vision and deep learning methods. * Publish original research. * Collaborate with other team members and teams. * Mentor interns. * Speak at conferences and events. * Transfer technology to product groups. * Collaborate with external researchers. ::: ::: spoiler Qualification --- * Must hold a Ph.D. in Computer Science/Engineering, Electrical Engineering, or a related field (or equivalent experience). * 3+ years of relevant research experience in the field of deep learning and artificial intelligence. NCG also welcome. * Excellent knowledge of theory and practice of computer vision and deep learning methods. * A track record of research excellence with your work published in top conferences and journals such as NeurIPS, ICML, ICLR, CVPR, PAMI, etc., and other research artifacts such as software projects. * Knowledge of common machine learning frameworks, such as PyTorch. * Excellent programming skills in some rapid prototyping environments such as Python; C++ and parallel programming (e.g., CUDA) is a plus. * Excellent communication skills. ::: :::spoiler Match Degree ### Advantage 1. 有電資相關碩士學歷 2. 有3年以上深度學習相關研究經驗 3. 有多年寫C的經驗,對python有所了解但還不熟練 4. 善於溝通表達 ### Disadvantage 1. 沒有在相關頂刊上投稿過相關論文 ::: <br><br> ## 個人簡歷 ### [Résumé](https://docs.google.com/document/d/1U2C_b-hJ5ECN8sCcH1y0fSA-aRMBxw0_HreORixuyFo/edit?usp=sharing) ### 學歷 1. 國立臺南大學 資訊工程學系 學士 2. 國立成功大學 電機工程學系 碩士(目前就讀) <br><br> ## 自我分析 ### 優勢 :::success * 電資相關學歷 * 寫程式的長期經驗 * 深度學習相關經驗 * 善於溝通表達 ::: ### 劣勢 :::danger * 非頂大電資純血 * 對於Linux Kernel不熟悉 * Leetcode刷題數不足(目前仍在100內) * 沒有C/C++相關的project * 使用Git不夠熟練 * 沒有太多與他人合作的經驗 ::: <br><br> ## 模擬面試 👨🏻‍ - interviewer 🤓 - interviewee <br> 👨🏻‍) 同學您好,歡迎來到今天的面試,這邊會需要你回答幾個問體 🤓) 好的沒有問題 👨🏻‍) 那首先請你簡單解釋一下 `call by value`、`call by address` 以及 `call by reference` 的差別 --- 🤓) 這三種不同的呼叫方式通常使用於函式呼叫 `call by value` 將數值複製一份到函式內做計算,函式內的計算不會影響到主程式 `call by reference` 函式接收到傳入變數的記憶體地址,函式內的計算會影響到主程式 `call by reference` 函數接收到傳入變數的參照(類似原變數的別稱),函式內的計算會影響到主程式 --- 👨🏻‍) 請考慮以下程式碼 ```c= int a[5] = {1, 2, 3, 4, 5}; int *p = (int*)(&a+1); ``` 請問 `*(a+1)` and `*(p-1)` =? 🤓) `a` 指向的是陣列的起始位置(第一個位址,即 `&a[0]` ),所以 `a+1` 指向的是陣列的第二個位址 `&a` 指向的是<font color="red">**整個**</font>陣列的起始位置 `*(a+1)` 是將 `(a+1)` 內的數值取出,所以 `*(a+1)=2` `(&a+1)` 等同於 `(&a+sizeof(a))`,就等同於存取 `a+5` (無效存取) `*(p-1)` 等同於 `(a+5)-1 = a+4`﹐即是將 `(a+4)` 內的數值取出,所以 `*(p-1)=5` --- 👨🏻‍) 請考慮以下程式碼 ```c= int a[] = {6,7,8,9,10}; int *p = a; *(p++)+=123; *(++p)+=123; printf("%d %d %d %d %d",a[0],a[1],a[2],a[3],a[4]); ``` 請問輸出的結果會是什麼? 🤓) 因為 `*p=a`,所以 `p` 也同樣指向 `a` 的起始位址, `p++` 為先取值後加一,所以取出的值仍為 `a`,得 `a[0]+=123, a[0]=129`。 `++p` 為先加一後取值,所以取出的值為 `(a+1)+1`,得 `a[2]+=123, a[2]=131`。 其他的元素(`a[1]`、`a[3]`、`a[4]`)為執行任何運算,所以維持原值 輸出結果為 129 7 131 9 10 --- 👨🏻‍) 今天的面試到此結束,感謝同學來參加今天的面試 <br><br> ## Reference [C考題](https://hackmd.io/@5MuUF36LSkOHlFSsow8mjA/B1FQdZCrv#C%E8%80%83%E9%A1%8C) [聯發科經典面試題](https://mkfsn.blogspot.com/2016/12/blog-post.html) [Stack Overflow - What does it mean in C++? int *p=(int*)(&a+1)](https://stackoverflow.com/questions/76060433/what-does-it-mean-in-c-int-p-inta1) [你所不知道的 C 語言: 未定義/未指定行為篇](https://hackmd.io/@sysprog/c-undefined-behavior)