# 面試準備 ## **SQL** - Leetcode Easy練習 - [練習easy部分就好](https://leetcode.com/problemset/database/?difficulty=Easy) - 資料庫觀念 - RDBMS 與 NoSQL 差異 - RDBMS: - 統一使用SQL語法操作資料庫 - 須符合ACID確保事務的一致性 - 可使用Join Table操作資料表 - 在需求增加時,使用Vertical Scaling擴充 - NoSQL: - 沒有統一的語法,依照各家自己提供的API或SDK操作資料庫 - 須符合CAP原來確保資料的最終一致性 - 不需事先定義Schema,因此適合在使用者需求不確定,ERD不確定的情況使用。 - 在需求增加時,使用Horizontal Scaling擴充 - RDBMS Vs NoSQL: - 從RDBMS到NoSQL最主要的原因除了不用事先定義schema外,另一個主要的因素是NoSQL處理的速度大於RDBMS,但這樣的速度優勢是基於犧牲資料的正確性 - 當資料不需要確保ACID Transaction時可以使用 - 當資料為高流量和高附載時,如session Data和log Data - 當使用者需求不明確,ERD無法確定時 - Left Join && Right Join && Inner Join 差異: User Table | ID | User | Rank | | -------- | -------- | -------- | | 1 | UserA | Salary 1 | | 2 | UserB | Salary 2 | | 3 | UserC | Salary 3 | Salary Table | ID | Rank | Reward | | -------- | -------- | -------- | | 1 | Salary 1 | 10k | | 2 | Salary 2 | 20k | | 3 | Salary 3 | 30k | - Inner Join: - 欄位關聯查尋後,需要兩張 Table 都有對應的資料列 (不是 Null),才會顯示出來。以上面的表來說User和 Salary 資料表,Salary 紀錄每月發多少薪水給員工,現在想要計算公司對每一位員工總共發多少錢。這個時候會使用User Left Join Salary,因為不一定每位員工都有薪水紀錄,比如說新進員工,如果使用 Inner Join 這些員工就不會被列出,但應該列出來並計算成 0。 - Left Join: - A Left Join B 時,沒有符合連接條件時,會返回 左側 (A Table) 中所有資料列。 | ID | Salary | Reward | User | -------- | -------- | -------- | -------- | | 1 | Salary 1 | 10k |UserA | | 2 | Salary 2 | 20k |UserB | | 3 | Salary 3 | 30k |UserC | - Right Join: - A Right Join B 時,沒有符合連接條件時,會返回 右側 (B Table) 中所有資料列。 | ID | User | Rank | Reward | | -------- | -------- | -------- | -------- | | 1 | UserA | Salary 1 | 10k | | 2 | UserB | Salary 2 | 20k | | 3 | UserC | Salary 3 | 30k | - SQL Query優化 (這個我覺得不太會考) ## **Python** - Leetcode Easy練習 - [Stack](https://leetcode.com/problems/min-stack/) - [Queue](https://leetcode.com/problems/implement-queue-using-stacks/) ***寫到這邊我跟你講解一個小小的系統基礎觀念*** - [Linked-List](https://leetcode.com/problems/design-linked-list/) ***寫到這邊我跟你講解為什麼要用linkedlist*** - Project考古題練習 - [爬星座網站](https://drive.google.com/file/d/162DFLlyOSnoFZC--P9TmmX_5M4R4G1XA/view?usp=sharing) -> **不限定語言** - [工具](https://blog.v123582.tw/2018/09/03/%E5%AD%B8%E7%BF%92-Python-%E7%88%AC%E8%9F%B2%E7%9A%84%E6%9C%80%E4%BD%B3%E8%B7%AF%E5%BE%91/) ## **Version Control** - git練習,可以在練習寫爬重的時候熟悉 ## **面試可以參考的文章** - https://blog.v123582.tw/categories/Data-Science/