周末梳理了下這段時間看書的一些知識點,進步的過程不僅要實踐,還要安排多看書、思考、總結。
只針對知識點進行了羅列和簡單說明,很多細節還未整理好,待后面再專門詳細寫。
基礎易忽略概念
類型檢查函數:
is_bool() is_integer() is_double() is_string() is_object() is_array() is_resource() is_null()
PHP魔術方法:
__call() __callStatic() (必須是static屬性) __set() __get() __isset() __clone() __toString()
復制對象(設計模式中的原型模式):
$first = new ClassName();$second = $first;//在php5以后的版本中,$second 和 $fitst指向同一個對象 $third = clone $first; //使用clone進行"值復制"http://在php5以后的版本中,$third和$first是兩個不同的對象/*控制復制什么: 可以實現一個__clone()方法 比如待復制的對象中有個$id=1,可我們希望此id唯一,不希望clone此id,可以在類中自己實現clone方法*/
回調、匿名函數:
is_callable(); call_user_func($funcName,$param); //單個參數 call_user_func_array($funcName,$arrParam); //參數是數組的形式
命名空間是一個容器,在命名空間之外,必須導入或引用命名空間才能訪問它所包含的項。
namespace com\name\test1; class Debug{ static function test(); }
namespace test2;//調用test1命名空間中的test方法\com\name\test1\Debug::test(); //最前面必須加上 / 否則會在test2下尋找此命名空間 use com\name\test1;test1\Debug::test();
解決類命名沖突:
use com\name\test1\Debug as uDebug;class Debug{...}uDebug::test(); __NAMESPACE__ //輸出當前的命名空間
命名空間加大括號形式:
namespace com\name\test1{ class Debug1{...} class Debug2{...}}
require()調用文件發生錯誤時,將會停止整個程序,
例如:
function __autoload($className){ //將$className中的下劃線轉換為目錄分割 $path = str_replace('_',DIRECTORY_SEPARATOR,$className); require_once("$path.php"); }
__autoload方法是一種根據類和文件的結構,管理類庫文件包含的有效方法。
class_exists(); get_declared_classes(); //獲得腳本進程中定義的所有類的數組 get_class($obj); //檢查對象的類,檢查對象所屬的類 $obj instalceof className; //檢查對象 get_class_methods(); //獲取一個類中所有的方法列表 is_callable()、method_exists() //檢查類方法是否存在且可被調用 #一個方法存在并不以為著可調用,對private、protected、public方法,method_exists()都返回true get_class_vars($className); //獲取類中定義的屬性 get_parent_class($classNa,e); //獲取一個類的父類 is_subclass_of($className , 'classStrName'); //檢查類是否是另一個類的派生類 class_implements($className); //返回一個由接口名組成的數組
- 單一職責原則
- 接口隔離原則
- 開放-封閉原則
- 替換原則
- 依賴-倒置原則
- 不要在列上進行函數運算,導致索引失敗
- 使用JOIN時,應用小結果集驅動大結果集。把復雜的JOIN查詢拆分為多條sql
- 使用like模糊查詢時,避免%%,可替換為<= 、 >=
- select后僅列出需要的字段,對速度不會有明顯影響,主要考慮節省內存
- 使用批量插入語句,比依次執行單個插入節省交互
- limit的技術比較大時考慮使用between
- 不要使用rand函數獲取多條隨機記錄
- 避免使用NULL
- 不要使用count(id),而是count(*)
- 盡可能在索引中完成排序
- 命中率
- 緩存更新策略
- 緩存最大數據量
- FIFO(先進先出)
- LRU(最近最少淘汰策略)
- LFU(最少使用淘汰策略)
- 停止緩存服務器,清空所有緩存數據
- 拒絕寫入,不再對緩存數據進行更新
- 根據緩存更新策略清除舊數據
- 基于3的方式,對淘汰的數據進行備份
- 對數據庫的高并發讀寫
- 對海量數據處理
- 協議簡單
- 基于libevent的事件處理
- 內置內存存儲方式
- 采用不互相通信的分布式
- 以守護進程方式運行與一個或多個服務器中
- Memcached使用LRU算法淘汰數據緩存
- 不支持數據持久化
- Memcache::connect(string $host [, int $port [ , int $timeout]]); //連接mem服務器
- Memcache::addServer(string $host [ , $port [ , $bool $persistent [ , $weight [, int $timeout [, int $retry_interval [ , bool $status [ , callback $failure_callback]]]]]]]); //向對象添加一個服務器
-
Memcache::add(string $key,$mixed $var [, int $flag[ , int $expire]]); //添加緩存數據
- key長度不能超過250字節,
- var 值最大為1MB
- $flag 是否使用ZLib壓縮,設置為MEMACHE_COMPRESSED使用壓縮
- $expire緩存過期時間,0表示不過期。設置不能大于2592000(30天)
- Memcache::replace(string $key, mixed $var [ , int $flag [, int $expire]]); //替換一個已存在的key
- Memcache::set(string $key ,mixed $vsar [ , $flag [ , $expire]]) //add和replace的集合體
-
Memcache::get(string $key [ , int &flags]); //獲取key的緩存內容
- $flags 如果給定此參數(引用方式傳遞),該參數會被寫入一些與key對應的信息
- Memcache::delete(string $key [ , $timeout]); //刪除key的緩存
-
Memcache::flush(void); //立即使所有已經存在的緩存失效
- 不真正釋放任何資源,僅標記為失效
- Memcache::getServerStatus(string $host [ , $port]); //獲取一個服務器的在線/離線狀態
- Memcache::getStats([ string $type [ , $slabid [ , int $limit = 100]]]); //獲取服務器的統計信息
- Memcache::close(void); //關閉與Memcache服務器的連接
- 主線程:接受客戶端連接,并把連接分配給工作線程處理
- 工作線程:處理客戶端連接的請求
- 普通Hash分布
- 一致性Hash分布
- 支持豐富的數據類型:String、List、Sort、Sorted Set、Hash
- 支持數據持久化方式:內存快照、日志追加
- 支持主從復制
轉自 http://www.cnblogs.com/fanchangfa/p/4325451.html
原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/807