--- title: 資訊科技產業專案設計課程作業 4 tags: 資訊科技產業專案設計 --- # **2021 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2021)」作業四** > contributed by <`Dubdoo`> > 貢獻者 <`大波肚`> ## [Waymo,Embedded Software Engineer, Infrastructure](https://waymo.com/joinus/3273970/?gh_src=1s2va2sx1) ### 職務描述 Job Description - Develop C++ for safety-critical embedded automotive systems - Bring up new MCUs, peripherals, chips, compilers, and development tools - Develop libraries and tools for embedded software development - Develop unit tests, integration tests, and test functionality on simulators and in-vehicle - Interact with System Engineers, Electrical Engineers, and Operations Team on design, reliability and safety goals >此工作會使用C++來開發車用嵌入式系統,其中包含開發微處理器、外圍設備、晶片 、編譯器等等;此外,撰寫函式庫和嵌入式系統的軟體工具也是工作內容之一。 >開發元件的功能測試會在模擬器和實車上做測試,因此會和其他系統工程師和測試團隊有密集的討論與接觸。 ### 職務分析 Job analysis At the minimum, we'd like you to have: - Degree in Computer Science, Computer Engineering, or equivalent practical experience - 2+ years of C++ programming experience - Hands-on experience with embedded systems, including resource-constrained microcontrollers - An understanding of how digital systems work sufficient for developing bare-metal microcontroller code It's preferred if you have: - Experience working with communication busses, sensors, chips, and peripherals commonly used in automotive or robotic systems - Experience with safety critical systems and functional safety - OS-level development experience, including details of RTOSes or Linux kernel - Automotive industry experience > 此工作會需要使用到C++做為開發的程式語言,求職者除了需要有2年以上的C++編寫經驗外,還要對於運算資源有限的微處理器實作經驗,此外,對於微處理器的底層程式有一定的理解。 >如果有使用不同通訊匯流排、感測器的經驗、處理系統安全的經驗、作業系統開發經驗或汽車產業相關經驗者為佳。 ### 自我檢視 self-examination - 對於C++的編寫算熟悉 - 有修過使用8051微處理器的相關課程,使用過assembly code和C編寫程式控制8051 - 實驗室是在做自駕車的相關題目,有實車測試演算法和感測器的相關經驗 - 沒有真正的使用C++開發微處理器的實務經驗 ### 面試題目 Interview questions 1. const int* a 和 int* const b 兩者之差別: Ans: a指標指向不能改變的int,b是不能改變的指標 2. 指標運算 ```cpp=0 char s[] = "0113256"; char *p = s; printf("%c",*p++);//顯示0 s[0]=0 p指向s[1] printf("%c",*(p++);//顯示1 s[1]=1 p指向s[2] printf("%c",(*p)++);//顯示1 s[2]=2 p指向s[2] printf("%c",*++p);//顯示3 s[3]=3 p指向s[3] printf("%c",*(++p);//顯示2 s[4]=2 p指向s[4] printf("%c",++*p);//顯示3 s[4]=3 p指向s[4] printf("%c",++(*p);//顯示4 s[4]=4 p指向s[4] printf("\n"); printf(s); ``` Ans: 第一行 0113234 第二行 0123456 ## [Mediatek,System software engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120210601002?langKey=en-US) ### 職務描述 Job Description Responsible for mobile SoC kernel to support MediaTek Smart Phone. Major responsibilities will be: 1. Android system integration 2. Linux system software development 3. Linux kernel driver development > 此工作負責開發支援智慧型手機的晶片核心,需要對安卓系統和Linux系統的核心區動和軟體開發有一定的認識。 ### 職務分析 Job analysis 1) Strong programming skills in C/C++, Python or JavaScript 2) Knowledge and experience with Linux kernel and embedded system 3) Experience with Android is a plus 4) Good communication skill and can collaborate with many people > 此工作會使用C/C++, Python和JavaScript作為主要的程式語言,此外,求職者對於Linux核心和嵌入式系統要有相關知識和經驗,如果對安卓有相關開發經驗為佳。 ### 自我檢視 self-examination - 對於C++和Python的編寫算熟悉,沒有使用過JavaScript - 實驗室是在做自駕車的相關題目,使用的是Ubuntu作業系統來控制自駕車,但對於Linux核心和嵌入式系統缺乏深入的了解。 - 沒有開發過使用安卓作業系統的設備的經驗 ### 面試題目 Interview questions 1. What's the differences between "process" and "thread" ? Ans: process是系統進行排程的基本單位 thread是CPU進行資源分配的基本單位 一個process可以有多個thread但一個thread只能屬於一個process。 Process內部的thread可以共享記憶體,但不同process的thread要透過process間的溝通來實現同步。 2. What's deadlock ? Ans: 當2個thread或process在獲取資源時(讀取記憶體),互相等待對方停止執行以釋放資源,此時若其中一方沒有釋放資源,就會產生”死結”的情況。 產生死結的4個條件: 1. No preemption : 系統資源不能從一個process中被強制釋放 2. Hold and wait : 一個process或thread可以在等待時佔有系統資源 3. Mutual exclusion : 系統資源只能同時分配給一個process或thread 4. Circular waiting : 多個行process或thread互相佔有其所需的系統資源 3. Why deadlock happened ? 4.