# Leetcode刷題學習筆記--心得統整
## 面試reference
### 面試準備
1. [軟體工程師求職 (1)履歷撰寫](https://www.ptt.cc/bbs/Tech_Job/M.1485621882.A.714.html)
2. [軟體工程師求職 (2)公告於市](https://www.ptt.cc/bbs/Tech_Job/M.1485622180.A.C4B.html)
3. [軟體工程師求職 (3)面試準備](https://www.ptt.cc/bbs/Tech_Job/M.1485622697.A.337.html)
4. [軟體工程師求職 (4)面試工具篇](https://www.ptt.cc/bbs/Tech_Job/M.1506226845.A.685.html)
5. [分享技術部落格: 酷殼](https://www.ptt.cc/bbs/Tech_Job/M.1485709329.A.A46.html)
6. [中年找工作心得](https://www.ptt.cc/bbs/Tech_Job/M.1524879194.A.7AA.html)
7. [軟體職缺準備心得](https://www.ptt.cc/bbs/Soft_Job/M.1657873542.A.6AB.html)
8. [ptt salary 轉職面試心得 - 歐美、中國、台灣工作](https://www.ptt.cc/bbs/Salary/M.1501726432.A.4C3.html)
### 刷code心得
1. [LeetCode高效刷題心得分享](https://www.ptt.cc/bbs/Soft_Job/M.1602732913.A.BD9.html)
2. [COVID期間拿到Google FB 微軟 Offer Part3](https://www.ptt.cc/bbs/Soft_Job/M.1605589986.A.CBA.html)
3. [面試分享 Google/MS/Amazon/Roku](https://www.ptt.cc/bbs/Soft_Job/M.1628870944.A.C3B.html)
4. [Google TW SWE 面試心得(上)](https://www.ptt.cc/bbs/Soft_Job/M.1625756279.A.914.html)
5. [Google TW SWE 面試心得(下)](https://www.ptt.cc/bbs/Soft_Job/M.1625903945.A.52F.html)
6. [0到100的軟體工程師面試之路](https://ithelp.ithome.com.tw/users/20152262/ironman/5615)
7. [程式語言面試考題集錦](https://softnshare.wordpress.com/2016/02/21/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80%E9%9D%A2%E8%A9%A6%E8%80%83%E9%A1%8C%E9%9B%86%E9%8C%A6/)
### 薪資比較
1. [薪資透明化](https://www.ptt.cc/bbs/Soft_Job/M.1628006709.A.6E5.html)
2. [levels.fyi](https://www.levels.fyi/Salaries/Software-Engineer/Taiwan/)
### 推薦題庫
1. [Blind Curated 75](https://leetcode.com/list/xoqag3yj/), [(我的整理)](/B5OJc3twTAOJg6yEysmOoA)
2. [Leetcode 题解](http://www.cyc2018.xyz/%E7%AE%97%E6%B3%95/Leetcode%20%E9%A2%98%E8%A7%A3/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E7%9B%AE%E5%BD%95.html#%E5%89%8D%E8%A8%80)
3. [花花酱 LeetCode Problem List 题目列表](https://zxi.mytechroad.com/blog/leetcode-problem-categories/)
4. [Leetcode 101](https://github.com/changgyhub/leetcode_101/)
5. [NeetCode 150](https://neetcode.io/)
6. [Grind 75 questions](https://www.techinterviewhandbook.org/grind75)
### 解題網站
1. [Grandyang](https://www.cnblogs.com/grandyang/)
2. [花花酱](https://zxi.mytechroad.com/blog/)
3. [wisdompeak](https://github.com/wisdompeak/LeetCode)
### 教學網站
1. [LABULADONG 的算法网站](https://labuladong.github.io/algo/)
2. [LEARN C++](https://www.learncpp.com/)
### 面試時的反問
1. [面試時的反問](https://github.com/NeroCube/reverse-interview-zh-tw)
### 資訊科技產業專案設計(2021年秋季)
1. [課程進度表和公告](https://hackmd.io/@sysprog/info2021/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FSJ3QpJJNY)
2. [作業1](https://hackmd.io/@sysprog/info2021-homework1)
+ Repeat: 重複提問,確認自己理解原本的要求
+ Examples: 針對題目條件,舉出符合的案例,不限於特例
+ Approach: 說明自己打算採用的方案
+ Code: 撰寫程式
+ Test: 若不能實際測試,那說明驗證程式的方案
### [Google Tech Dev Guide](https://techdevguide.withgoogle.com/)
### 超牢記憶法Make It Stick
1. 努力回想才是記憶的關鍵(retrieve檢索)
+ 奮力回想(從題目到解答自己做一次)
+ 不要重複翻閱(不要只看code不動手做,試著回想解答的流程)
2. 穿插式練習(同時練習好幾種類型的題目)
+ 將練習當成比賽,才能把比賽當成是練習。
3. 每天回想學習過的東西,不能拿出筆記來參考
5. 費曼學習法(把學過的東西給12歲小孩聽得懂,看見事物的原始結構)
6. 找一個好的教練(簡答題考試)
+ 當一個在某個領域越不擅長時,就越容易高估自己的能力。
+ 花幾分鐘為幾天後自己出一張考卷(周末把一個禮拜的每日精選做一次)
+ 考試的時機點,在大腦開始遺忘,但還沒完全遺忘之前。(隔天)(每天選一題隔天再做一次)
{%youtube k-MOeKIkvfs %}
---
+ 演算法
+ [Recursive](/231S57V1QcmoVFfMr2c5_A)
把問題切成相同的小題目。
+ [Tree Traversal](/k_fIImRKQlSvwXp-OUMS9A)
分為pre-order, in-order,post-order和level-order,可以使用DFS或BFS.
+ [Depth-First-Search/Breadth-First-Search](/Rs3M7lf1TzOR0Lx_RhgpNg)
依深度或是廣度瀏覽所有的資料
+ [Dynamic Programming](/474VEENxSVSGMRRRtfvetQ)
通常是求maximal或是minimal或是幾種方法的時候會用到。
+ [Divide and Conquer](/KRNZe1ZKRIu79PJDR1KPLg)
將題目分成一樣的小題目,最後將結果合併起來。
+ [Binary Search](/u7dufNJ-SAq7z0WmS-Semw)
在排序過的資料中,尋找目標值。用二分法找效率為O(logN)。
+ [Two Pointers](/gg-708HfRomJ66P7XX_QKQ)
通常為array中,使用前後兩個pointer來比較資料。
+ [Fast Slow Pointers](/jO2mrGfpSiyZ_WlZIG7Aeg)
在linked-list中使用快慢pointer來解決問題。
+ [Combination](/BRtCz4qGR-y4XevyNbchzg)
在所有的組合中,找出最佳的答案。
+ [Sliding Window](/6lto0AbFTjCDxw7ohUkd3Q)
需要找出連續資料的關聯性。ex. substring, subarray.
+ [Backtracking](/h4ghhABcT9yyDC0JcSPRPw)
+ Sort algorithm
+ [Selection/Bubble/Insertion/Heap sort](/qxzTY7A4Sha_jFHpGJx5Wg)
+ [Bucket Sort](/K5s3M6TkS0q2HrRpCBpnnQ)
把數字分成一個一個的區段,ex: [0] : 0~9, [1] : 10~19, [2] : 20~29
+ [Counting/Radix Sort](/I-kxuqAqSsiB6wlIddQpGA)
+ [Greedy + heap](/dqDTmv4jQMeuOOQYdzEG_Q)
如果問題是詢問max或是min,最直覺的解法就是依序把最大或是最小的數值相加,但是有時候必須刪減就是用heap提供的數值。
+ [Greedy](/p9hSX0fpSQGwCUL3QF7cLA)
每次都把目前的狀態update到最有利的狀態。
+ 資料結構
+ [Set](/zoTq--X9Ri6RruOyCRcP1A)
只能儲存value,必把value當成key。
+ [Map](/XfUiK191STCsppXWkgjbXQ)
把資料做成key-value的對應,可以快速找到key對應的value。</br>或是使用==客製的key==來對資料做統計。
+ [stack](/7JBTdRgkQnmDaTlUacYuTA) [後進先出]
利用後進先出的特性,可以解決pair的問題或是反轉的效果。兩個stack也可以組成不同的特性。
+ [Queue](/TNlZeQk_T-qqsLS7caigZQ)
先進先出,可以用在BFS。使用BFS通常可以解決最小數量的問題。
+ [monotonic stack](/zEgS9fqBSzScisni9JNm_A)
一樣是stack,但是stack的內容有照一定的順序排列。遞增或遞減。找出前後比自己大或小的element。
+ [Binary Search Tree(BST)](/neNmzsZsRrmYQ-RtPWbYxA)
他是一個binary tree,但是準守著左邊的node小於root, 右邊的node大於root。
+ [Graph](/dIurYyg1T5ue-KlCoj9reA)
有向圖和無向圖。
+ [Disjoint set/Union Find](/wU2PrLOpSZmcgiu64UYnRQ)
使用root array來紀錄每個vertex的root或是parent node
+ Minimal spinning tree
最小weight和,可以把全部的node連起來的tree,通常使用greedy演算法,==每次都從最小的weight開始選,如果沒在graph裡面就加進來。==
+ Single Source Shortest Path Algorithm
+ [Dijkstra](/3IcoorPnRX66_oBNZd6Inw)
類似BFS,但是使用priority_queue來取最小weight路徑。
+ [Shortest Path Faster Algorithm(SPFA)](/Uy6iSrZSTHa32c_tO6Zx_w)
使用vector和queue來記錄從source到每個node的最短路徑。可用在negative weight。
+ [Topological sorting]()
走訪有相依性的圖。
+ [Trie](/QDEA_oTZTwOqDc35dWwOHw)
統計字串或是數字的bit
+ [Priority_queue](/m_6sQq4DS9u3TXsGYEcUTw)
統計最大最小值的出現。
+ [Binary Index Tree(BIT)](/ogxY5ToqTT-RAZUqRhxbgw)
計算range sum可以達到 update是O(logN),getSum也是O(logN)
使用prefix sum只能達到 update是O(N), getSum是O(1)
使用array sum 只能達到 update是O(1), getSum是O(N)
+ 其他
+ [Math數學解法](/ncPyegzYSdGq1G6xCP4gPQ)
有些時候分析完題目,發現用數學解反而更精簡。
+ [Randomized](/zOR7woWNRwyVGtir5Lj_4A)
選取element並且每個的機率都一樣。
+ [Bit Manipulation](/3VK0v_k7TpiJwtArT1otxg)
對bit做處理。
+ [加法器設計](/fxpMUrR7Sd6bt_mrzUMkYg)
+ [prefix sum](/Io-i2knhQvaqqXSOKn2BcA)
prefix_sum[i] = sum(nums[0:i - 1]); 前i個的和,適合用來解區段sum的題目。
+ [subset sum](/FbvqYdi1SsCc-R96j0jVAA)
把一個數列分成若2個subset,求出兩個subset的特殊 關係。例如sum(s1) = sum(s2) 或是 sum(s1) - sum(s2) = target等等。
+ [Interval](/fiSdDPowTOywK9g9Rl_jLg)
使用[start, end)來表示一個區間。
+ [Line Sweep](/kAUQzqmBQKSfB8Kw7QSk1Q)
依序掃描x或是y,來得到答案。
+ [解題技巧](/4qhm9YxKSZSs76s9qi0Low)
+ [小技巧/code snippet](/3I17t2spT6GDLFRftfEOZA)
+ [關鍵字/keyword](/jrO24dggStyloQy6nO3OZw)
+ [C++API/STL整理](/_LIBYTzATYWdOTpEu3dV0Q)
+ [C++ Operator Precedence]([/gxs9HkI_QmyHpl9mq8bbJA](https://en.cppreference.com/w/cpp/language/operator_precedence))
+ [Learn C++](https://www.learncpp.com/)
+ [名詞解釋](/WXlO8tuoS1yyD_RGmyPGyQ)
+ [Time/Space Complexity](/nPCWaocaSEedyO0-07plZg)
## 面試題目整理
### 公司_職稱
- 面試題目:
- 1
```
```
- 2
```
```
- 流程:
1.
2.
- 出處:[面試](https://hackmd.io/PN-X3NwWQkOunpXIHrhC9w?both)
---
### 聯發科_軟韌體職缺
- 面試題目:
- 選擇與填充題
```
1. Global 直接宣告參數不給值
跟function 裡面宣告參數不給值
直接印會印出什麼XDDDDD
2. 兩個 String還是Char陣列
分別丟同樣的字串
問如果直接 = =會有什麼樣的結果
true,false或不能編譯
3. SWAP( int*a, int*b){
temp=a;
b=a;
b=temp;}
問:丟10和20進去求output
覺得有點怪怪的應該都是10吧(x
4.
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int);
/* A pointer to a function a that takes an integer
argument and returns an integer*/
h) int (*a[10])(int);
/* An array of 10 pointers to functions that take an integer
argument and return an integer*/
這題型感覺算重要,有舉出一個考
5. 有考extern用法
印象有點模糊
但記得有全域跟區域還有加上extern宣告的x問會輸出哪個值
a丟20之類求output
int x= 10; //global
void func(int a)
{
int x = 15;
if (a>10)
extern int x;
cout<< x ;
}
6. C裡面的memory
程式段(.text)主要存放程式的機器碼,
資料段(.data)則是存放全域變數的資料,
BSS 段(.bss)存放的是未初始化的全域變數,
堆積段(.heap)程式使用 malloc 進行記憶體分配時,可以分配的動態記憶空間
堆疊段(.stack)則存放「參數、函數返回點、區域變數、框架指標」等資料
有出多選題問Stack裡面放什麼資料
感覺算常考建議詳細再上網多查QQ
7. Macro的陷阱題
這題真的太精彩了看到的時候笑了出來XDDD
跟我之前去聯發科參加活動時的題目完全一樣
#define INC(x) x*=2; x+=1
for(i=0,j=1;i<5;i++)
INC(j);
求j =?
答案是33
據說答對率3% XDDD
```
- 上機考
```
有提供Library可以查
上機考得我覺得算簡單
第一題就SWAP不過要用bitwise
void swap(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
第二題稍微難了一點點
系統會給一個陣列大小n
跟一串陣列
你要找出連續加起來最大值跟其數字
比方說給
6
[1, 2, -1 ,3, 0, 1]
那你就要output連續最大值是3+0+1=4
跟[3,0,1]
```
An integer array is given. The system gives you a series of integers,
and please find it as a correct position in the sequence then print
the corresponding value.
```
For example:
arr = [5, 8, 4, 9, 1] is given
Please find the position 2 , 1, 3 , 4, 0in this array
Print: 5, 4, 8 , 9 , 1
```
簡單來說就是sort之後query 就ok了
- 流程:
1. 筆試14題(C/C++),包含填充題跟選擇題 & 兩題上機考, 共50分鐘C語言考蠻多東西,例如 function pointer, static, global, volitile, macro, C++ template
2. 個人自我介紹(使用精美ppt做簡報),在過程中盡量把你自己負責過的專案做個簡單扼要的說明,尤其是你負責的部分,這很能提起面試官的興趣,這邊我有跟面試官討論一下平行化該怎麼做比較好,他給了我一個沒想過的答案
3. 面試官提問攻擊,你負責接下攻擊並反擊,可能包含了你剛剛報告的內容,資料結構,作業系統,計算機概論… etc.我個人被問到 dead lock, synchronization, critical section
4. 白 板 題!!!面試官看我有記錄一些LeetCode題目在github上,他就挑了兩題(1) Are two trees equal (2) Reverse LinkedList ~~(面試官: 我知道你比較熟Python,但現在你當然要用C寫)~~~
5. 面試官說明工作內容 & 你的提問時間
- 出處:[聯發科 面試心得分享](https://jaime-lin.medium.com/%E8%81%AF%E7%99%BC%E7%A7%91-c%E8%AA%9E%E8%A8%80%E6%B8%AC%E8%A9%A6%E9%A1%8C%E7%9B%AE-7097f09add02)、[新竹聯發科軟韌一面](http://arc2453.blog.fc2.com/blog-entry-31.html)
---
### 聯發科_4G工具軟體工程師
- 面試題目:
- 1
```
1. ask: the value of v?
unsigned long v1 = 0x 00001111;
unsigned long v2 = 0x 00001202;
unsigned long v;
v = v1&(~v2);
v = v | v2;
2. ask: the value of *(a+1), (*p-1)?
int a[5] ={1,2,3,4,5};
int *p = (int *)(&a+1);
3. Re-write void(*(*papf)[3])(char *);
typedef__________;
pf(*papf)[3];
4. Explain lvalue and rvalue.
```
- 流程:N/A
- 出處:[wubui MTK 面試心得分享](https://wubui.pixnet.net/blog/post/41242054-%5B面試%5D-聯發科技-mtk-(內含考題))
---
### 群暉科技_軟體工程師
- 面試題目:
- 1
```
1. 講解一下 Process 及 Thread 的差別跟比較:
2. Stack 跟 Heap 的差別:
3. 請解釋一下 Virtual Function:
4. 請解釋一下 Synchronous call 跟 Asynchronous call 的差別:
5. 比較 Stack 跟 Queue 的差別 => 實作一下 Stack。
```
- 2
```
1. pointer操作、pointer/reference的差別與實作
2. 最短路徑演算法等等圖論的東西
3. 找出array中重複的數字
4. 動態擴充的stack和queue實作
5. Multi-Process / Multi-Thread之間的同步與溝通問題
6. Virtual Memory的觀念、Page Fault、LRU演算法
7. 算樹的高度、節點數量、BFS/DFS
8. Linked-List相關的題目(排序、插入等)
```
- 3
```
1.實做f(n) = 1-2+3-4...+/-n
2.實做矩陣相乘,如[3*4] * [4*2] = [3*2]的矩陣
3.給你一binary tree,求樹高、節點數
4.解釋const、static、volatile、程式在記憶體中的配置->stack與heap
```
- 4
```
1.什麼是OS
2.講解一下 Process 及 Thread 的差別跟比較
3.講解一下如何避免 Race Condition
4.講解一下什麼是 Hazard
```
- 5
```
1. 在嵌入式平台上面使用過哪些Linux tool、Debug tool、Profiling tool
2. 你說你使用過perf 效能分析工具,那它的原理是什麼,為什麼可以作到。
3. 請講一下你用過GDB的什麼功能,用來解決什麼問題。
4. 在嵌入式平台上開發跟在一般PC上開發有什麼不一樣和要注意的地方。
5. TCP/UDP差別在哪,用途?Socket程式大概怎麼寫?(三向交握那些)
6. Client和Server在做網路通訊時,recv buffer包含了什麼資訊。
7. Critical section是什麼?(之後我提到了Mutex)
8. Mutex程式大概怎麼寫?撰寫時有什麼要注意的地方?
9. Process 和 thread 差別?如果是不同process,如何保護Critical section?
10. 有沒有寫過shared memory,大概怎麼寫,寫的時候要注意什麼。
11. 原本好像要問我fork(),不過之後不知道為什麼就沒問了
12. 講講虛擬記憶體和分頁機制。
13. 現在有兩個整數集合要進行差集,怎麼寫?為什麼用這種資料結構?有沒有更快的方法?時間和空間複雜度各是多少?(我舉了array、linked list、binary search tree、hash table的實作方式)
14. 解釋對稱式和非對稱式加密,為什麼他們可以運作,如何運作。
15. 公鑰跟私鑰的差別跟用途?數位簽署的原理?
16. Linux 系統如何儲存使用者密碼。
17. 為什麼能確保加密資料不會被字典攻擊。
18. 講講SQL injection 跟XSS 攻擊。
19. 為什麼宣告並初始一個超大陣列會crash,而宣告成static就不會,他們的儲存方式有什麼差別。(之後我有講到stack、heap、global)
20 .stack 和 heap差別是什麼。
21. function在進行呼叫的時候OS會作什麼事情,組合語言大概怎麼寫。
22. 白板題:給定一個數列和一個數字,請寫出partition的程式,左邊小於此數字,右邊大於等於此數字,要確保所有特殊數列都能通過測試。
23. 白板題:順時鐘旋轉一張 NxN 的灰階圖片,不可以使用額外的二維陣列。
```
- 流程:N/A
- 出處:[面試](https://hackmd.io/@86E3gZKuToKwjVavw4Wdpw/BJoOqyo6?type=view#1)
---
### 群暉科技_研替
- 面試題目:
- 1
```
OS相關的問題:
1.process, thread的差異
2.shared memory
3.mutex, semophore
4.paging
5.dll如何運作
data structure/algorithm相關的問題:
1.(不用寫code)
給兩個set A,B. 想輸出A - B要怎麼做?複雜度呢?
2.(不用寫code)
描述一下經典算法LCS怎麼做的
3.
講一下array, linked list, tree的優缺點, 以及使用時機
Coding 題:
1.給你一個BST的struct 結構,寫出insert操作
2.給你一個N bit的數字,輸出他有幾的bit是1
3.給你一張圖,寫一個function參數是起點跟終點,找出最短路的長度
4.追加問題:那如果我想印出這條path有辦法嗎?
"你要不要描述一下你印象最深刻的project是什麼?"
"為什麼是這個?"
"那你們怎麼分工的?"
"這個project裡最有印象的是哪一份code?是做什麼的?"
"你寫過的code以來,最難debug的code是怎樣的?"
```
- 流程:
1. 進來一位RD, 看起來很活潑可愛XD
首先請我簡單自我介紹一下
聊聊我的論文寫了些什麼
2. 進來一位主管,笑容滿面XDD
問了我最近有沒有什麼興趣,我說我最近喜歡在coursera上看ML的課程
然後就開始跟我聊ML了! <-- 自爆的下場XD
聊到paper的部分也是讓我介紹一下,為什麼會找這個題目,
跟別人有什麼不一樣,複雜度部分好了多少之類的
3. (第二天的面試)
進來的是人資姊姊
這是我覺得面試到現在最煎熬的一關XD
人資姊姊的問題都是偏向個性,人格特質相關的問題
4. 進來的是一位RD
跟我聊聊履歷上project的內容
做的過程是如何分工的
有沒有遇到什麼樣的困難
5. (之前跟別人聊過,這一關通常是講一下你有沒有offer
薪水,公司狀況,給你問問題之類的)
進來的人遞了張名片給我,是位經理
然後,他就開始問我問題了XDDDDD
最後面試結束後閒聊及介紹公司
- 出處:[[心得] 群暉面試 研替](https://www.ptt.cc/bbs/Tech_Job/M.1444375205.A.EB3.html)
---
### 趨勢科技_研替
- 面試題目:
- C/C++ 考題
```
1. 搜尋 List 的時間複雜度 (10%)
搜尋 Binary Tree 的時間複雜度
搜尋 Hash Table 的時間複雜度
2. 一段程式要你判斷 output value。 (15%)
Class A {
A(){print();}
virtual print(){cout << “in A”<<endl;}
};
Class B: public A{
B(){print();}
virtual print(){cout << “in B”<<endl;}
};
void main(void)
{
B b ;
}
請問輸出為何 (選擇題)
3. 給一段程式碼裡面包含一個 function(string *path) 此 function 的目的為
將 Path 字串最尾端的”\\”刪除,然後問此段程式碼有何問題。(25%)
4. Link List 反轉, 不能使用任何額外記憶體 (25%)
5. 寫一個函數, int findPosition (Node *root, int value),root 為一個
二元搜尋樹, value 為 Node 的鍵值,這函數要回傳 value 在二元搜尋樹的中序追
蹤為第幾個。
```
- QA 考題
```
1. 有個人每年牙齒檢查時,都會發現自己有長蛀牙的牙洞,有一年檢查卻發現突然
沒有任何牙洞了,但下一年卻發現一個超大的牙洞請問可能的原因為何 (選擇題)
2. 網路 10.xxx.xxx.xxx/23, Gateway IP address 為 10.xxx.xxx.254,
問你以下哪些IP的封包會經過Gateway?
3. 如果要你測試捷運的驗票機, 你會如何測試?
4. 利用 Remote Desktop 或 SSH 連接到遠端主機A, 結果遠端主機A卻連不上另
一台 Server B 的網頁, 請問你如何找到連不上那一台Server B網頁的原因?
```
- 流程:
1. Codility測驗個人覺得三題Medium,沒有像LeetCode上Easy可以10行以內完成,但是三題有2個小時,個人覺得時間算是很充裕,做完時還有30分鐘提早交卷。一面完有問考官成績,結果只拿66分,著實是有點慘,不過他覺得Qualified,更重要的是一些經驗。
2. 一面考官十分和善,應該是部門主管,開始先做一些簡單的自我介紹,之後便開始問一些簡單的問題,類似BFS.DFS是什麼,如何實做,有沒有用過Multi-thread等等。
3. 二面也是Peer Interview由一名工程師加上一面的考官旁聽,二面考的偏Python & Design Pattern,剛好這兩個我都沒準備,所以個人覺得回答慘兮兮,Python主要是他會給幾段code,負責回答哪裡有問題,以及一些東西的實作會怎麼去做,Design Pattern考的滿簡單像是Factory, singleton不過個人完全沒涉略,所以完全答不出來,但是OOP的問題都有回答。
- 出處:[趨勢科技筆試和考題](https://www.ptt.cc/bbs/NCTU_CS_EDA/M.1290765031.A.4B8.html)、[趨勢面試心得分享
](https://www.dcard.tw/f/tech_job/p/239808017)
---
### Google_Software Engineer in Test
- 面試題目:
- 1
```
1.Efficiently implement 3 stacks in a single array.
2.Given an array of integers which is circularly sorted, how do you find a given integer.
3.Write a program to find depth of binary search tree without using recursion.
4.Find the maximum rectangle (in terms of area) under a histogram in linear time.
5.Describe recursive mergesort and its runtime. Write an iterative version in C++/Java/Python.
6.How would you determine if someone has won a game of tic-tac-toe on a board of any size?
7.Given an array of numbers, replace each number with the product of all the numbers in the array except the number itself *without* using division.
8.Create a cache with fast look up that only stores the N most recently accessed items.
9.How to design a search engine? If each document contains a set of keywords, and is associated with a numeric attribute, how to build indices?
10.Given two files that has list of words (one per line), write a program to show the intersection.
11.What kind of data structure would you use to index annagrams of words? e.g. if there exists the word “top” in the database, the query for “pot” should list that.
```
- 流程:N/A
- 出處:[140 Google Interview Questions](https://www.impactinterview.com/2020/04/140-google-interview-questions/)
---
### 瑞昱
- 面試題目:
- 1
```
Q1: 不能用if 和 switch case , 請用你認為最快的方法實作main
extern void func1(void);
extern void func2(void);
extern void func3(void);
extern void func4(void);
extern void func5(void);
void main(int n)
{
if n==1 execute func1;
if n==2 execute func2;
if n==3 execute func3;
if n==4 execute func4;
if n==5 execute func5;
}
Q2: 不使用if, 請用你認為最快的方法實作main
extern void func1(void);
extern void func2(void);
extern void func3(void);
extern void func4(void);
extern void func5(void);
void main(int n)
{
if n==33 execute func1;
if n==67 execute func2;
if n==324 execute func3;
if n==231 execute func4;
if n==687 execute func5;
}
Q3: Explain "#error"
Q4: Explain "struct" and "union"
Q5: Explain "volatile".
Q6: the value of v?
unsigned long v1 = 0x00001111;
unsigned long v2 = 0x00001212;
unsigned long v;
v = v1 & (~v2);
v = v | v2;
Q7: the value of *(a+1), (*p-1)?
int a[5] = {1, 2, 3, 4, 5};
int *p = (int*)(&a+1);
Q8: write a code
a) set the specific bit
b) clear the specific bit
c) inverse the specific bit (0->1; 1->0);
Q9: Re-write typedef _____;
void(*(*papf)[3](char *);
pf(*papf)[3];
Q10: write a code that check the input is a multiple of 3 or not without using division or mod
Q11: Explain lvalue and rvalue
Q12: 寫一個 function 可傳入正整數參數 N,回傳 1 + 2 + 3 +…+N 的和
Q13: reverse a string
Q14: reverse a linked list
Q15: 下面是一個 union ,請問要參考 ival 的值語法為何 ?
Q16: 寫一個“標準”巨集MIN ,這個巨集輸入兩個參數並返回較小的一個。
Q17: Write a code to swap integer a, b, without temporary variable.
Q18: Write a MARCO to calculate the square of integer a.
```
- 流程:N/A
- 出處:[學長留下的考古題](https://chun-ikuo.hackpad.com/-Prepare-RsOrTLMnkXQ)
---
### 普安科技_軟韌體工程師研替
- 面試題目:
- 1
```
1.data size
2.struct and union
3.利用c語言,將字串*str2接序在*str1後
4.解釋deadlock、Race conidtion
5.write a program :copy 4,5,6,7bits of 0x1234567 to 0x145678f 1,2,3,4 bits
6.stack point跳轉到function需要哪些暫存器
```
- 流程:N/A
- 出處:[2017Homework1-整理面試題目](https://hackmd.io/oDOttJ0rTYmROnLayzehFA?both)
---