###### tags: `Leetcode` # 2024 年「資訊科技產業專案設計」課程第 3 次作業 > 貢獻者: [gnkuan0712](https://github.com/kuanyu0712) :deer: 筆記中應當包含 JD (務必列出對應公司 JD 的超連結)、分析 JD 和探討自身的匹配狀況、相關的面試題目,和文字導向的自問自答 ## 簡歷 >[resume](https://drive.google.com/file/d/11LBaNio2maNdAvHGbkyT6yAGN7vzaYw8/view?usp=sharing) ## 符合自身興趣/規劃的職務 ### [Software Engineer, University Graduate, 2025](https://www.google.com/about/careers/applications/jobs/results/137721392706527942-software-engineer-university-graduate-2025?q=%22Software%20Engineer%22&location=Taiwan&src=Online%2FHouse%20Ads%2FBKWS_LOC5&gad_source=1&gclid=Cj0KCQiAi_G5BhDXARIsAN5SX7rfoTdkwDSluXIyEAxWq34XEYe5Dk4L0y-_WQ7aoEH2bZOiaZiTCVUaAv3wEALw_wcB&target_level=EARLY&degree=MASTERS&degree=BACHELORS&employment_type=INTERN&employment_type=FULL_TIME) ::: spoiler 職缺需求 * 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 Qualification * 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. ::: #### 自我評估 * 符合條件: * 有符合preferred的碩士學歷 * 有資料結構、演算法、機器學習相關能力 * 有軟體開發的經驗 * 待改善: * 無實際TCP/IP專案經驗 * 只有在修課期間寫過Linux kernal的經驗 * 僅有少數information retrieval經驗 #### 面試題目 >Reference: >1. [2023 台灣 Google 軟體工程師面試心得 — 刷題要刷到什麼程度才有機會通過面試](https://medium.com/yuanchiehcheng/yet-another-google-swe-%E9%9D%A2%E8%A9%A6%E5%BF%83%E5%BE%97-2023-05-18eb13a73b75) >2. [【學長姊帶路】Google 軟體工程師 面試分享](https://www.technice.com.tw/occupation/mentor/92421/) >3. [Google Software Engineer interview questions](https://www.glassdoor.com/Interview/Google-Software-Engineer-Interview-Questions-EI_IE9079.0,6_KO7,24.htm) >4. [first google interview? here are some tips.](https://leetcode.com/discuss/study-guide/5315953/first-google-interview-here-are-some-tips./) :::success **Google** * Timeline * 05/12 請朋友內推 * 06/05 Phone Screen * 06/14 onsite coding 兩關 (台灣人一英一中) * 06/15 Google onsite coding 一關 (美國人英文面) * 06/19 Google onsite behavior question 一關 * 06/29 收到 HR 通知說面試過程不錯,但沒有 headcount OYZ,建議轉面 L5 * 07/14 峰迴路轉有 headcount 了,最後確定 offer * 過往面試leetcode題目 * Dynamic Programming * Graphs: BFS/DFS * Arrays/Lists to circular queues, BSTs, Hash tables, B-Trees, and Red-Black trees * Linked Lists: Reverse a linked list, detect a cycle, or merge sorted lists. * dsa questions , trees ,graphs,dp * transactions, hashing, graphs * Implement linked list in hashmaps * (LeetCode 121. Best Time to Buy and Sell Stock) You are given a list of stock prices throughout the day. Write a function to find the maximum profit you can make by buying and selling the stock once. You must buy before selling. For example: Input: prices = [7,1,5,3,6,4] Output: 5 Explanation: Buy at price = 1 and sell at price = 6, profit = 6-1 = 5. * Behavior questions * How do you deal with conflicts between your teammate? * what is your strength ? * How do you cope in urgent requests * What are your career aspirations, where do you see yourself in 5 years. * Describe how google makes money. * What is the challenging thing you faced during your previous job? * Tell me about yourself ::: > 額外資訊: [Google薪資](https://www.levels.fyi/companies/google/salaries/software-engineer/levels/l3/locations/taiwan) --- ### [Yahoo! - Software Dev Engineer](https://ouryahoo.wd5.myworkdayjobs.com/careers/job/Ireland---Remote/Software-Dev-Engineer-I_JR0025064) ::: spoiler 職缺需求 * An Ideal Candidate Should Have... * Bachelor’s degree or Master’s degree. * A passion for software development and a desire to constantly learn and improve * Demonstrated Experience with Java * Deep understanding of Java/J2EE and other supporting back-end technologies * Experience with unit and integration testing and writing clean code * Understanding of REST APIs, OOP, and related best practices * Knowledge of architecture and design patterns and anti-patterns * Good knowledge of SQL or NOSQL databases techniques * The ability to deliver results in a fast-paced, deadline-driven environment that requires ability to handle multiple tasks simultaneously without compromising quality * Strong interpersonal skills and the ability to work independently as well as in a team environment * What Would Be Nice... * An eye for constant improvement of development processes and developer productivity * Understanding of OS fundamentals, command line tools, and basic shell scripting * Good knowledge and experience with big data technologies * Experience with building robust, scalable, distributed services; * Experience of GIT and of general configuration management methodologies * Understanding of Test Driven Development * Knowledge and experience of agile methodologies * Experience with Cloud Technologies (AWS or Kubernetes desirable) * Knowledge of continuous integration and continuous deployment to a cloud based service such as AWS * Good knowledge of event-driven and asynchronous coding in at least ES6 JavaScript * Experience with frontend frameworks such as Ember.js, React, Next.js, Angular * Experience with CSS preprocessors such as SASS, LESS, etc. * Experience with Acceptance and E2E browser testing ::: #### 自我評估 * 符合條件: * 學歷 * 理解並實作過 OS fundamentals, command line tools, and basic shell scripting * 有 Java 經驗 * 了解APIs, OOP * 有寫過frontend frameworks,但我是用Vue.js * 待改善: * 無寫過SQL or NOSQL databases經驗 * 無building robust, scalable, distributed services經驗 * 無Cloud Technologies經驗 #### 面試題目 >Reference: >[2023 Yahoo! Software Engineer 軟體工程師面試心得](https://medium.com/@hogan.tech/2023-yahoo-software-engineer-%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E5%B8%AB%E9%9D%A2%E8%A9%A6%E5%BF%83%E5%BE%97-a8df9ef0b360) :::success **Yahoo!** * 工作地點: 愛爾蘭 Ireland - Remote * 需on-call * 面試流程: * 第 0 關 HR Phone Call * 第 1 關 Online Interview (2 hr) * 第2關 Onsite Interview (4.5 hr) * HR 通知通過面試 * 台灣口頭Offer * 美國總部實體 Offer 第一部分: 針對履歷的經歷去做詳細的詢問 1. 為什麼選擇技術 Flutter 而不是選擇 React Native? 2. 為什麼選擇使用 Tailwind 有哪些好處與壞處? 3. 為什麼要使用MonoRepo,有遇到哪些困難點? 第二部分: 對前後端知識去做問答 * JavaScript Async Await * JavaScript Higher Order Function 第三部分:HTML、CSS 切版 第四部分:資料結構與演算法 * 我有刷題的習慣,通常刷題是使用 Python ,不過比較簡單可以直覺寫出來的題目,我則是使用 JavaScript。 * 總共有三個題目,個人體感是一題 Easy 兩題 Medium,第一題的熱身題是經典題,這邊直接快速的使用JavaScript 給兩個解法,包含Brute Force 以及 Map Set。 * 第二題與第三題我都有點忘了,但是都有使用到遞迴函式,第三題也是看到題目的當下就有印象是 Backtracking 的題目,也因為刷題的時候比較熟悉 Python 的語法,也有詢問面試官可不可以使用 Python,最後也有提前把第二題以及第三題都寫完。 第五部分:JavaScript Dom 操作 第六部分:Behavior Question ::: --- ### [2025 Software Engineer Campus Hire of Engineering Rotation Program](https://jobs.dell.com/en/job/taipei/2025-software-engineer-campus-hire-of-engineering-rotation-program/375/68811475216) :::spoiler 職缺需求 * Essential Requirements * Master’s degree in Computer Science, Engineering or related fields with a graduation date between February 2024 and July 2025 * Good knowledge of programming languages; operating systems; firmware; BIOS; device drivers; databases; system, network, operating system, and application administration; embedded software/firmware; tools and utilities, as applicable * Knowledge of server, storage, networking and client technologies * Ability to code/debug moderately sophisticated programs using design specifications * Knowledge of software architectures and applications * Desirable Requirements * First-hand experience gathered during an internship, student job or related professional role ::: #### 自我評估 * 符合條件 * 學歷 * 有 programming languages C/C++、Python經驗 * 對 OS、network 有基本瞭解 * 待改善: * 無大型軟體的開發與 debug 經驗 * 無firmware; BIOS經驗 #### 面試題目 >Reference: [Dell Technologies Software Engineer interview questions](https://www.glassdoor.com/Interview/Dell-Technologies-Software-Engineer-Interview-Questions-EI_IE1327.0,17_KO18,35.htm) >[新鮮人面試心得 (MTK/A10/Dell/Synology)](https://www.ptt.cc/bbs/Tech_Job/M.1555603463.A.F2A.html) :::success **Dell** * 該職缺特色: 三年rotation換組的計畫 * 優點: 能夠每一年都換到不同組,執行不同的專案 * 缺點: 主管可能不會放太多資源在你身上 * 第一關都是主管面試,氣氛很好,沒有問技術問題,都是行為面試: 經歷,修過哪些課,做過的 project ... * 第二關是工程師,兩位面試官都很年輕,問了幾個簡單的白板題,因為不難,所以很快就解出來 a. 給定 n, 給出 n*(n-1)*…*1 的乘積, 分別用 loop / recursive 去作 b. Leetcode 1 - Two sum c. 給第一個 array 和一個數字 n, 找出所有比 n 大的數字和他的 index * 其他分享的leetcode題目 * What are the OOP concepts? * OS Domain question. C Domain question. * Print from 1 to 100 without loop * What projects have you worked on? ::: ## 模擬面試 😎:interviewer 🙂:interviewee ### 第一題 >題目描述 有一座大型博物館,其地圖是一個𝑚×𝑛的二維陣列 grid,由 '1' 和 '0' 組成,其中: '1' 代表展覽區域、'0' 代表走道 展覽區域可以水平或垂直連接形成一個連續的展覽區。假設所有四邊都是走道,請計算地圖中有多少個獨立的展覽區域。 😎:博物館中設置展覽區域的管理系統如何區分彼此獨立的展覽區? 🙂:這可以建模成一個圖的遍歷問題,博物館地圖可以看作是一個二維網格,其中每個展覽區域都是圖中的節點,節點之間的邊代表展覽區域的連接。 😎:具體怎麼實現? 🙂:可以使用DFS或BFS。掃過整個網格,遇到展覽區域,值為 '1'時進行搜尋,將該展覽區域以及所有連接的展覽區域標記為已訪問。每次啟動新的搜尋,計數加 1,代表發現了一個新的展覽區。 😎:DFS 和 BFS 的時間複雜度如何? 🙂:假設地圖大小為𝑚×𝑛時間複雜度都是𝑂(𝑚×𝑛),因為每個節點最多會被訪問一次。 😎:這裡要考慮什麼邊界條件? 🙂:例如: * 地圖為空的情況。 * 整個地圖都是走道(全為 '0')。 * 單列或單行地圖。 * 當地圖的邊界有展覽區域時,確認搜尋不會越界。 😎:如果我們改用動態規劃來解決這個問題,可以怎麼設計? 🙂:可以用一個額外的矩陣來記錄每個點屬於哪個展覽區,並用迴圈逐步標記連通區域。不過這樣的空間複雜度會更高,實際上這裡用 DFS 或 BFS 更直觀且高效。 😎:你能實現嗎? 🙂:以下是我實作的code ``` void dfs(vector<vector<char>>& grid, int i, int j){ if( i<0 || i>=grid.size() || j<0 || j>=grid[0].size()||grid[i][j]=='0'){ return; } grid[i][j] = '0'; dfs(grid, i-1, j); //left dfs(grid, i+1, j); //right dfs(grid, i, j+1); //up dfs(grid, i, j-1); //down } int numIslands(vector<vector<char>>& grid) { int row = grid.size(); int column = grid[0].size(); int islands = 0; for(int i = 0; i < row; i++){ for(int j = 0; j < column; j++){ if(grid[i][j] == '1'){ islands++; dfs(grid, i, j); } } } return islands; } ``` 😎:好的,謝謝 ### 第二題 >題目描述 你是一位歷史學家,正在研究古代城市的建築高度記錄,這些建築高度被記錄成一個整數序列 heights。 你的目標是從這些建築中找到一個子序列,使其高度從低到高嚴格遞增,並且這個子序列的長度盡可能長。請返回這個子序列的最大長度。 😎:你認為要如何找出歷史記錄中最長的遞增建築高度序列? 🙂:我們可以將這個問題看作是一個經典的動態規劃問題,或者使用一個更優化的二分搜索解法來求解。目標是找到序列中每個建築可以擴展的最大子序列。 😎:你會怎麼實現這個過程? 🙂:我們可以使用一個動態構建的 dp 陣列來記錄目前找到的最長遞增子序列: 1. 遍歷高度記錄 heights 中的每一個值。 2. 使用二分搜索找到 dp 中第一個大於等於該值的位置,更新該位置的值以維持遞增。 3. 如果該值比 dp 中所有值都大,則將其添加到 dp 的末尾。 4. 最後,dp 的長度就是最長遞增子序列的長度。 😎:為什麼要使用二分搜索? 🙂:二分搜索可以將查找位置的時間複雜度從 𝑂(𝑛)優化到 𝑂(log 𝑛),整體時間複雜度為 𝑂(𝑛 log𝑛)。 😎:那邊界條件和輸入可能有什麼特別情況需要考慮? 🙂:需要考慮以下情況: 1. 如果 heights 是空陣列,直接返回 0。 2. 如果所有建築高度都相同,則最長遞增子序列的長度為 1。 3. 如果輸入只有一個建築高度,則結果為 1。 😎:能簡單解釋一下實現細節嗎? 🙂:以下是 C++ 的實現: ``` int lengthOfLIS(vector<int>& heights) { vector<int> dp; for (auto& height : heights) { auto it = lower_bound(dp.begin(), dp.end(), height); // 找到第一個大於等於 height 的位置 if (it == dp.end()) { dp.push_back(height); // 沒有比 height 更大的,擴展子序列 } else { *it = height; // 更新該位置以縮小後續擴展的可能性 } } return dp.size(); // dp 的長度即為最長遞增子序列的長度 } ``` 😎:這裡的 lower_bound 有什麼作用? 🙂:lower_bound 是 C++ STL 提供的一個函數,用於在已排序的序列中找到第一個不小於目標值的位置。它的時間複雜度是 𝑂(log𝑛) 。 😎:好的,你能舉一個例子,說明是如何執行的嗎? 🙂:例如,對於輸入 heights = [3, 10, 2, 1, 20],執行步驟如下: 1. 初始 dp = [] 2. 插入 3,dp = [3] 3. 插入 10,dp = [3, 10] 4. 插入 2,更新 dp = [2, 10] 5. 插入 1,更新 dp = [1, 10] 6. 插入 20,dp = [1, 10, 20] 最後 dp.size() 為 3,代表最長遞增子序列的長度為 3。 😎:好的,謝謝 ### 第三題 >題目描述 有一座大型城市,它的路燈分佈圖可以用一棵二元樹表示,其中每個節點代表一盞路燈,節點的值表示該路燈的亮度(整數)。 你的任務是模擬城市燈光檢測系統,按照路燈的高度層級(從上到下),逐層收集每層的路燈亮度數據,並返回這些數據。每層的路燈亮度需要從左到右排列。 😎:城市燈光檢測系統是怎麼逐層收集路燈亮度的? 🙂:這可以看作一個典型的二元樹的層序遍歷問題。我們需要用廣度優先搜尋(BFS),從根節點開始,逐層訪問二元樹的節點並記錄每層的亮度值。 😎:具體的實現方法是什麼? 🙂:我們可以使用一個queue來輔助實現 BFS: 1. 首先將根節點加入queue。 2. 每次處理queue中的所有節點(即當前層的節點),記錄這些節點的值,並將它們的子節點加入queue。 3. 重複直到queue為空。 😎:如何處理空樹的情況? 🙂:如果根節點為空,直接返回空的結果列表。 😎:好的可以開始寫code了! 🙂:以下是 C++ 的實現: ``` vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> result; if (!root) return result; // 如果樹是空的,直接返回空的結果 queue<TreeNode*> q; q.push(root); // 將根節點放入隊列 while (!q.empty()) { int size = q.size(); // 當前層的節點數量 vector<int> level; // 存放當前層的節點值 for (int i = 0; i < size; ++i) { TreeNode* node = q.front(); // 取得隊列中的第一個節點 q.pop(); // 移除該節點 level.push_back(node->val); // 將節點值加入當前層結果 // 將左右子節點加入隊列 if (node->left) q.push(node->left); if (node->right) q.push(node->right); } result.push_back(level); // 將當前層結果加入最終結果 } return result; } ``` 😎:好的,謝謝