Skip to content

Commit

Permalink
update note
Browse files Browse the repository at this point in the history
  • Loading branch information
nicehorse06 committed Aug 1, 2024
1 parent 10ef37b commit c6238e0
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 10 deletions.
7 changes: 2 additions & 5 deletions interview/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
# 面試筆記

* 紀錄軟體開發面試常問問題
* 寫下簡易筆記供面試複習
* 範圍是前端/後端網頁工程師的面試
* 真的要認真學習還是要去找對應資源 !
* 很多內容也是參考GPT,可以直接拿題目跟GPT討論
* 這裡紀錄面試常問問題供快速複習
* 更多細節可以拿關鍵字Google或是問GPT !

## TODO
* 測試
Expand Down
88 changes: 88 additions & 0 deletions interview/db/normalization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 資料庫正規化

## 功能
* 一個將資料庫分解,經由無數關聯合併且訊息無損的過程

## 目的
* 減少資料庫中資料冗餘,增進資料的一致性
* 避免資料更新異常


## 第一正規化
* 目的為排除重複群,要求每一欄的值只能有單一值
* 好處為可以確定每一欄固定的資料大小
* 資料表中有主鍵,其他所有欄位相依於主鍵
* 以下不符合第一正規化

ID|顧客|日期| 數量
-|-|-|-
1|Pete|Monday|19.00 <br />-28.20
2|Pete|Wednesday|-84.00
* 以下符合第一正規化

ID|顧客|日期| 數量
-|-|-|-
1|Pete|Monday|19.00
2|Pete|Monday|-28.20
3|Pete|Wednesday|-84.00


## 第二正規化
* 滿足第一正規化
* 去除資料部分相依
* 每一個屬性必須完全相依於主鍵
* 去除屬性對非鍵欄位的相依
* 減少重複資料的需要,增進維護功能
* 以下不符合第二正規化

零件ID(主鍵)|價格|供應商ID(外鍵)|供應商名稱|供應商住址
-|-|-|-|-
65|59.99|1|Stylized Parts|VA
73|20.00|1|Stylized Parts|VA
65|69.99|2|ACME Industries|CA

* 以下符合第二正規化

供應商ID(主鍵)|供應商名稱|供應商住址
-|-|-
1|Stylized Parts|VA
2|ACME Industries|CA

零件ID(主鍵)|價格|供應商ID(外鍵)
-|-|-
65|59.99|1
73|20.00|1
65|69.99|2

## 第三正規化
* 滿足第二正規化
* 要求非主鍵術性之間應獨立無關
* 以下不符合第三正規化

訂單編號(主鍵)|客戶名稱|單價|數量|小計
-|-|-|-|-
1000|David|$35.00|3|$105.00
1001|Jim|$25.00|2|$50.00
1002|Bob|$25.00|3|$75.00

* 以下符合第三正規化
* 小計的值依賴於單價和數量,不符合正規化

訂單編號(主鍵)|客戶名稱|單價|數量
-|-|-|-
1000|David|$35.00|3
1001|Jim|$25.00|2
1002|Bob|$25.00|3

```python
class Order(models.Model):
id = models.AutoField(primary_key=True, verbose_name=u'訂單編號')
quantity = models.PositiveIntegerField(verbose_name=u'數量')
unit_price = models.PositiveIntegerField(verbose_name=u'單價')
customer_name = models.CharField(max_length=5, verbose_name=u'客戶名稱')

@property
def totle(self):
# 小計
return self.quantity * self.unit_price
```
10 changes: 5 additions & 5 deletions interview/db/rdb_optimization.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@
* 來檢查是否有未授予的鎖,這可能導致查詢延遲。
* 執行VACUUM(清理死條目、回收空間)和ANALYZE(更新統計信息以幫助查詢優化器制定更好的查詢計劃)。

* 負載均衡和讀寫分離:
* 實施負載均衡,將讀取操作分配到一個或多個從屬資料庫(replica)。
* 設置專用的資料庫伺服器處理報表或分析型查詢。


### 找出慢查詢

1. **啟用慢查詢日誌**
Expand Down Expand Up @@ -72,6 +67,11 @@
2. **第三方監控工具**
- 使用 pgBadger、pgAdmin、PostgreSQL Enterprise Manager 等。


### 讀寫分離和負載均衡
* 實施負載均衡,將讀取操作分配到一個或多個從屬資料庫(replica)。
* 設置專用的資料庫伺服器處理報表或分析型查詢。

## MySQL

### 找出慢查詢
Expand Down
9 changes: 9 additions & 0 deletions interview/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,14 @@
- 真除法 (/),不論數字類型如何都會返回float,4/2返回2.0
- 整除 (//),整除會忽略除法結果的小數部分,只返回結果的整數部分
- 取模 (%),取模運算符返回除法操作的餘數。


## Python 編譯/直譯
* .py file被執行時會被編譯成Bytecode,存在.pyc file中
* Bytecode 是一種中間表示形式,它比高級語言的源碼更接近機器碼,但無法直接在平台上跑
* .pyc file 存在 __pycache__中,如果下次又執行一樣的.py,可直接使用編譯好的 .pyc
* Python虛擬機(PVM,Python Virtual Machine)負責解釋Bytecode並將其執行
* 讓python可以在不同平台上執行,不用再次編譯
* PVM 有運行時優化(Runtime Optimization),提高執行效率
## ref
* [码农高天](https://www.youtube.com/@minkoder)

0 comments on commit c6238e0

Please sign in to comment.