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。或是使用==客製的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)
## 面試題目整理
### 公司_職稱
- 面試題目:
- 流程:
- 出處:[面試](https://hackmd.io/PN-X3NwWQkOunpXIHrhC9w?both)
### 聯發科_軟韌體職缺
- 面試題目:
- 選擇與填充題
1. Global 直接宣告參數不給值
跟function 裡面宣告參數不給值
直接印會印出什麼XDDDDD
2. 兩個 String還是Char陣列
分別丟同樣的字串
問如果直接 = =會有什麼樣的結果
true,false或不能編譯
3. SWAP( int*a, int*b){
temp=a;
b=temp;}
問:丟10和20進去求output
覺得有點怪怪的應該都是10吧(x
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
跟一串陣列
你要找出連續加起來最大值跟其數字
[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. 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. 講解一下 Process 及 Thread 的差別跟比較:
2. Stack 跟 Heap 的差別:
3. 請解釋一下 Virtual Function:
4. 請解釋一下 Synchronous call 跟 Asynchronous call 的差別:
5. 比較 Stack 跟 Queue 的差別 => 實作一下 Stack。
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相關的題目(排序、插入等)
1.實做f(n) = 1-2+3-4...+/-n
2.實做矩陣相乘,如[3*4] * [4*2] = [3*2]的矩陣
3.給你一binary tree,求樹高、節點數
4.解釋const、static、volatile、程式在記憶體中的配置->stack與heap
1.什麼是OS
2.講解一下 Process 及 Thread 的差別跟比較
3.講解一下如何避免 Race Condition
4.講解一下什麼是 Hazard
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)
### 群暉科技_研替
- 面試題目:
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怎麼做的
講一下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”<
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.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)