--- title: 資訊科技產業專案設計課程作業 4 tags: INFO2021 --- >貢獻者: 歐帝 Odd # MediaTek: [4G/5G 系統軟體工程師](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120210915001?langKey=zh-TW) ## 職缺說明 :::info 1) 訂定4G/5G 通訊系統使用的CPU及系統架構 2) 開發RTOS、記憶體管理等系統相關服務 3) 開發CPU及平台模擬器 4) 分析軟體行為並增進系統效能 5) 開發CPU及系統相關的驅動及開機流程 6) 開發自動診斷系統問題的工具 ::: ## 職缺需求 :::info 1) 熟悉 C, 具 C++/Python 尤佳。 2) 具有 Driver 或 Kernel (任何 RTOS) 或 embedded system 相關開發經驗尤佳 ::: ## 分析 JD 和探討自身的匹配狀況 >該職位需要對電腦 CPU 架構或作業系統非常熟悉,最好有碰過 kernel 裡面的 source code,不巧的,即便作業系統有修過,本人對 kernel 不是很熟悉。我願意再修 linux kernel 相關的課程,或修習相關教材,以增進自己不足的部分。 ## 面試題目 1) 講解一下如何避免 Race Condition? 2) Write a code that check the input is a multiple of 3 or not without using division or mod. ## 面試過程 👨🦰:interviewer 🤴:interviewee 👨🦰:你好,歡迎來到本公司的面試。 🤴:你好。 👨🦰:根據履歷上寫的,你大學念的是資管系,研究所為資工所,想問你在這六年內有寫過哪些程式語言? 🤴:好的,我目前寫過C、C++、C#、Java 以及 Python。 👨🦰:OK,了解,相信看過職位上的說明,你應該知道這個工作和作業系統有很大的關係,可以請你講解一下如何避免 Race Condition? 🤴:是的,解決此問題的基本概念,便是讓共享的資源在不同執行緒內可以受到控制,但有時因為設計不良,便會出現競爭危害(race hazard),又稱為競爭條件(race condition)。 OS本身有提供 Semaphore 跟 Monitor 來避免這樣的問題。 👨🦰:好,想請問你之前是否有寫過或碰過類似的問題? 🤴:在研究所的時候,有上過物件導向程式設計的課,其中作業要求用 OOP 的方式實作課程加選系統,程式語言為 Java,主要寫出兩個判斷,一個判斷學生的前置課程是否滿足,另一個判斷課程的人數是否超過規定的人數,這兩個判斷被要求為同步進行的,在實作的過程中,有遇到 Race Condition,解決方法為使用 Java 裡內建的 Semaphore,以保證兩個判斷有確實執行完,並且不影響結果的正確性。 👨🦰:OK,大致上了解了,這裡有個問題想請你回答,請你判斷一個數是否為 3 的倍數,其中不能用運算子 / 和 % 。 🤴:...嗯,這裡我能想到用迴圈一直去扣 3,最後看是否可以減至 0,即為 3 的倍數。 👨🦰:這也是個辦法,但是太沒效率了,還有沒有更快的解法?這裡給你一點提示,你怎麼去判斷 11 的倍數? 🤴:...要檢查一個數是否為 11 的倍數,我會看它的偶數位數的和及奇數位數的和之差,能否被 11 整除。同樣道理,若要檢查一個數是否為 (n+1) 的倍數,可以先把數字轉為 n 進制,再看它的偶數位數的和及奇數位數的和之差,能否被 (n+1) 整除。因此,一個數是否為 3 的倍數,可以先把數字轉為 2 進制,再看它的偶數位數的和及奇數位數的和之差,能否被 3 整除,這裡我會用遞迴去實作。 👨🦰:OK,那這邊面試到此為止,謝謝你的參與。 🤴:謝謝。 --- # Realtek: [Embedded System Linux 系統軟體設計工程師](https://recruit.realtek.com/zh/index.php?option=com_content&view=article&id=10250) ## 職缺說明 :::info 系統軟體開發 ::: ## 職缺需求 :::info 1.碩士以上;電機工程、電子工程、資訊工程、資訊科學相關科系畢業為主 2.熟悉以下任一經驗者 . Bootcode . Linux Kernel . 任一Linux Media Framework(ffmpeg, gstreamer, kodi...)開發經驗 3.精熟 C/C++, Compute Architecture 4.有TrustZone相關經驗者尤佳。 ::: ## 分析 JD 和探討自身的匹配狀況 >該職位需要精通計算機架構,而且是有寫過 linux kernel,因此,需要再從頭複習一下計算機組織和作業系統,除此之外,本人對 linux kernel 沒碰過多少次,需要再修習 linux kernel 相關的課程,或在 youtube 找相關教材的影片,手把手實作 kernel 裡的 source code,最好是能夠寫個像樣的專案,來證明自己的能力。 ## 面試題目 1) the value of v? unsigned long v1 = 0x00001111; unsigned long v2 = 0x00001212; unsigned long v; v = v1 & (~v2); v = v | v2; 2) write a code a) set the specific bit b) clear the specific bit c) inverse the specific bit (0->1; 1->0); ## 面試過程 👨🦰:interviewer 🤴:interviewee 👨🦰:你好,歡迎來到本公司的面試。 🤴:你好。 👨🦰:這裡有幾道問題要問你,請你盡可能地回答吧! 🤴:OK,我準備好了。 👨🦰:那第一題,宣告 3 個變數,分別為 unsigned long v1 = 0x00001111、unsigned long v2 = 0x00001212 和 unsigned long v,先指派 v = v1 & (~v2) ,接著指派 v = v | v2,請問最後 v 的值為多少? 🤴:先將 v = v1 & (~v2) 代入 v = v | v2,因此 v = (v1 & (~v2)) | v2,根據笛摩根定理,(v1 & (~v2)) | v2 = (v1 | v2) & ((~v2) | v2),因為(~v2) | v2 = 1,可得 (v1 | v2) & ((~v2) | v2) = (v1 | v2) & 1 = v1 | v2 = 0x00001111 | 0x00001212 = 0x00001313,最後 v = 0x00001313。 👨🦰:好的,那下一題為程式題,這裡有三小題,第一小題請你對數值 x 去 set 第 n 個 bit;第二小題請你對數值 x 去 clear 第 n 個 bit;第三小題請你對數值 x 去 inverse 第 n 個 bit。 🤴:第一小題,若要設 x 第 n 個 bit 為 1,可以將 1 左移 n 個 bit 後,對 x 做 or 運算,這樣可使第 n 個 bit 為 1,其他 bit 維持原樣,程式碼如下: ```python= def setBit(x, n): x |= (1 << n) ``` 第二小題,若要設 x 第 n 個 bit 為 0,可以將 1 左移 n 個 bit 後,再將其反轉,對 x 做 and 運算,這樣可使第 n 個 bit 為 0,其他 bit 維持原樣,程式碼如下: ```python= def clearBit(x, n): x &= ~(1 << n) ``` 第三小題,若要反轉 x 第 n 個 bit,可以將 1 左移 n 個 bit 後,對 x 做 xor 運算,這樣可反轉第 n 個 bit,其他 bit 維持原樣,程式碼如下: ```python= def inverseBit(x, n): x ^= (1 << n) ``` 👨🦰:好的,那這邊面試到此為止,謝謝你的參與。 🤴:謝謝。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up