---
# System prepended metadata

title: 面試準備

---

# 面試準備

## **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/
