視頻格式就是通常所說的.mp4,.flv,.ogv,.webm等。簡單來說,它其實就是一個盒子,用來將實際的視頻流以一定的順序放入,確保播放的有序和完整性。 ...
1. 策略模式
1.1. 在運行時從一組演算法中選擇某個演算法
1.1.1. 封裝一組演算法
1.1.2. 在運行時使用其中一個演算法
1.2. 把演算法與使用演算法的組件解耦
1.3. 面向對象實現
1.3.1. 慣例實現
1.3.2. IStrategy介面
1.3.3. ConcreteStrategy1類
1.3.4. ConcreteStrategy2類
1.3.5. 通過IStrategy介面使用演算法的Context類
1.3.6. 常見原因
1.3.6.1. 依賴介面的方法
1.3.6.2. 設計模式在20世紀90年代流行起來
1.3.6.3. 當時並不是所有主流編程語言都支持一等函數
1.4. 函數式實現
1.4.1. Context類
1.4.2. concreteStrategy1()函數
1.4.3. concreteStrategy2()函數
1.4.4. 更簡潔的實現
2. 函數的類型
2.1. 函數的簽名
2.2. 函數的實參類型和返回類型決定了函數的類型
2.3. 兩個函數接受相同的實參,並返回相同的類型
2.3.1. 函數具有相同的類型
3. 一等函數
3.1. 將函數賦值給變數,並像處理類型系統中的其他值一樣處理它們
3.2. 一等公民
3.2.1. 賦予它們與其他值相同的權利
3.2.2. 有類型
3.2.3. 可被賦值給變數
3.2.4. 可作為實參傳遞
3.2.5. 可被檢查是否有效
3.2.6. 在相容的情況下可被轉換為其他類型
4. 狀態機
4.1. 有一組狀態,以及狀態之間的轉移
4.2. 以給定狀態(也叫作開始狀態)開始;如果滿足特定條件,就能轉移到另外一個狀態
4.3. 經典的狀態機
4.3.1. 將狀態集合定義為一個枚舉
4.3.2. 跟蹤當前的狀態
4.3.3. 使用覆蓋所有可能狀態的switch語句來獲得所希望的行為
4.3.4. 使用switch語句的狀態機
4.3.4.1. 缺點
4.3.4.1.1. 狀態沒有與想要在每種狀態下運行的邏輯聯繫在一起
4.3.4.1.2. 狀態和轉移作為一個單獨的枚舉進行維護,有不同步的風險
4.4. 使用函數的狀態機
4.4.1. 狀態完全是由一個函數來表示
4.4.2. 不需要單獨跟蹤狀態
4.4.2.1. 狀態與處理邏輯保持同步
4.4.2.2. 去掉了枚舉
4.4.2.3. 去掉狀態屬性
4.4.2.4. 去掉處理轉交給合適方法的switch語句
4.4.3. 更簡潔的實現
4.4.3.1. 缺點:每種狀態關聯更多信息要顯式聲明可能的狀態和轉移
4.5. 使用和類型的狀態機
4.5.1. 把每種狀態表示為一個單獨的類型
4.5.2. 整個狀態機表示為可能狀態的一個和類型
4.5.3. 把狀態機分解到類型安全的組件中
4.5.4. 比依賴函數的實現更長
4.5.4.1. 優點:允許我們在每種狀態中添加屬性和成員,把它們組合在一起
4.6. 不使用switch語句的狀態機
5. 延遲計算
5.1. 可以傳遞函數而不是傳遞實際的值,併在需要值的時候調用這些函數
5.2. 純粹的面向對象結構可以實現,但是代碼比函數式多得多
5.3. 許多函數式編程語言共有的特征
5.3.1. 所有內容都是儘可能晚計算的
5.4. lambda
5.4.1. 匿名函數
5.4.2. 一次性函數
5.4.2.1. 只會引用這種函數一次,所以為其命名就成了多餘的工作
6. 立即計算
6.1. 立即得到並傳遞值,即使我們在以後決定丟棄該值
6.2. 命令式編程語言(如TypeScript、Java、C#和C++)
7. 一階函數
7.1. 普通函數
7.2. 接受一個或多個非函數實參並返回一個非函數類型的“標準”函數
8. 高階函數
8.1. 定義:把所有接受或返回其他函數的函數
8.1.1. 二階函數
8.1.1.1. 接受一個一階函數作為實參或者返回一個一階函數的函數
8.1.2. 三階函數
8.1.2.1. 接受二階函數作為實參或者返回二階函數的函數
8.2. 基礎演算法
8.2.1. map()
8.2.1.1. 給定某個類型的值的一個集合
8.2.1.2. 對其中每個值調用一個函數
8.2.1.3. 返回結果集合
8.2.1.4. 自製map
8.2.1.4.1. 一個T數組和一個函數作為實參
8.2.1.4.2. 該實參函數接受項目T作為實參,並返回U類型的一個值
8.2.1.4.3. 函數把結果添加到一個U數組中
8.2.1.5. C# System.Linq Select()
8.2.1.6. Java java.util.stream map()
8.2.2. filter()
8.2.2.1. 給定一個數據項集合和一個條件
8.2.2.2. 過濾掉不滿足該條件的數據項
8.2.2.3. 返回滿足該條件的數據項集合
8.2.2.4. 自製filter
8.2.2.4.1. 輸入數組的類型為T
8.2.2.4.2. 過濾函數接受T作為實參,並返回boolean結果
8.2.2.4.2.1. 謂詞
8.2.2.4.2.1.1. 接受一個實參並返回一個boolean的函數
8.2.2.4.3. 返回過濾後的輸出
8.2.2.5. C# System.Linq Where()
8.2.2.6. Java java.util.stream filter()
8.2.3. reduce()
8.2.3.1. 將所有集合項合併為一個值
8.2.3.1.1. 創建一個初始值
8.2.3.1.2. 遍歷集合併把每個數據項與累積項合併,不斷累積結果
8.2.3.1.3. 遍歷完集合後返回累積結果
8.2.3.2. 自製reduce
8.2.3.2.1. 泛型函數
8.2.3.2.1.1. 實參為T數組
8.2.3.2.1.2. 實參T類型的一個初始值
8.2.3.2.1.2.1. 需要處理輸入數組為空的情況