1.數據結構和算法
二分查找算法php
- 數據有序排列
- 可比較的
- 將數據一分爲二,從中間對比
時間複雜度laravel
2.概念
php的核心數據結構hash table(散列表)特色:web
- 支持k->v查詢
- 可當作數組
- foreach線性遍歷
- 添加和刪除節點的是O(1)複雜度
- key支持關聯和索引數組
- value支持混合類型
php四層體系redis
application算法
SAPIsql
- apache2handler cgi fast-cgi isapi cli
- PHP
- Zend API
- Zend Engine
opcode優化數據庫
PHP 7 新特性apache
- 太空操做符
- 標量類型與返回值類型聲明
- NULL合併運算
- 常量數組
- 匿名類
- Closure::call()
- 過濾 unserialize()
http 三次握手四次揮手設計模式
創建鏈接api
- 客戶端發送帶有syn的tcp報文至服務端
- 服務端接收報名並返回syn和ack的標示
- 客戶端返回ack
斷開鏈接
- 客戶端發送fin報文
- 服務端發送ack表示已接收到
- 服務端發送fin報文,通知斷開
- 客戶端發送ack報文
tcp與udp的區別
tcp
- 面向鏈接、兩端創建鏈接時須要進行確認
- 數據傳輸更加可靠
- 數據傳輸效率低
udp
框架
laravel的設計模式
- 工廠模式 函數封裝、統一入口實例化對象、構建工程降耦
- 單例模式 不重複建立對象,節省資源
- 註冊樹模式 數組結構存儲對象,工廠實例化的對象保存在註冊樹,調用註冊樹的對象使用
- 策略模式 定義接口、不一樣的策略調用不一樣的邏輯
- 適配器模式 多種不一樣的邏輯調用統一的適配器
- 數據對象映射模式 ORM
- 觀察者模式 對象發生改變,監聽它的對象所有會收到通知並更新
laravel 生命週期
index.php 入口
http/console 內核
- errors
- middleware
- session
- log
- config
- environment
- ...
- providers
- route
MySQL
數據結構
- 二叉樹
- 紅黑二叉樹
- B樹 葉子節點存儲的是數據
- B+數 B+樹的每個葉子節點存儲的是索引和下一個節點的指針
優化方案
- 合適的數據類型
- 優化配置合適的長度
- 定長字符串代替變長字符串
- not null省去匹配null值
- join代替 sub query
- union代替臨時表
- 事務
優化sql
- 匹配相同的字符類型
- 避免自動轉換致使索引失效
- 避免sql中使用函數
- 慢查詢日誌
- 索引
- explain分析sql
- profile分析sql耗時記錄
- limit 1
範式
- 字段原子性,不可再拆分
- 主鍵依賴
- 確保每列都和主鍵列直接相關,而不是間接相關
事務
- 原子性 一個事務要麼成功要麼失敗
- 持久性 事務結束的影響時永久性的
- 隔離性 經過事務的隔離級別對應不一樣的併發場景
- 一致性 事務開始的先後數據庫完整性沒有破壞
隔離級別
- Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。
- Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
- Read committed (讀已提交):可避免髒讀的發生。
- Read uncommitted (讀未提交):最低級別,任何狀況都沒法保證。
MyISAM與InnoDB
InnoDB
- 支持外鍵約束
- 彙集索引
- 支持事務
- 行級鎖
- 彙集索引 索引儲存的是行數據,觸發輔助索引返回的是主鍵,再經過主鍵獲取數據
- 索引與數據保存在同一個爲念.idb
MyISAM
- 保存行數,count聚合效率高
- 支持全文索引
- 查詢效率優
- 非彙集索引 索引儲存的是數據行的地址,經過地址獲取行,輔助因此和主鍵索引是分離的
- 索引保存在.myi,數據保存在.myd
NoSQL
redis數據類型、應用場景
- string 單個元素的值最大512MB的數據容量,適合用戶應用的數據緩存,統計計數等功能
- hash 存儲、讀取複雜對象的數據
- list 增刪快,適合消息隊列
- set 數據惟一性、curd操做的時間複雜度爲O(1)
- sorted set 帶權重的消息隊列、與set相比每一個數據多了一個score進行權重排序