中高級PHP開發者應該掌握哪些技術?

中級PHP程序員


1.Linux

可以流暢的使用Shell腳原本完成不少自動化的工做;awk/sed/perl 也操做的不錯,可以完成不少文本處理和數據統計等工做;基本可以安裝大 部分非特殊的Linux程序(包括各類庫、包、第三方依賴等等,好比MongoDB/Redis/Sphinx/Luncene/SVN之類的);瞭解基 本的Linux服務,知道如何查看Linux的性能指標數據,知道基本的Linux下面的問題跟蹤等php


2. Nginx: 

在第一階段的基礎上面,瞭解複雜一些的Nginx配置;包括多核配置、events、proxy_pass,sendfile/tcp_*配置,知道超 時等相關配置和性能影響;知道nginx除了web server,還可以承擔代理服務器、反向靜態服務器等配置;知道基本的nginx配置調優;知道如 何配置權限、編譯一個nginx擴展到nginx;知道基本的nginx運行原理(master/worker機制,epoll),知道爲何nginx 性能比apache性能好等知識;

3. MySQL/MongoDB:

在第一階段的基礎上面,在MySQL開發方面,掌握不少小技巧,包括常規SQL優化(group by/order by/rand優化等);除了可以搭 建MySQL,還可以冷熱備份MySQL數據,還知道影響innodb/myisam性能的配置選項(好比key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit等),也知 道這些選項配置成爲多少值合適;另外也瞭解一些特殊的配置選項,好比 知道如何搭建mysql主從同步的環境,知道各個binlog_format的區 別;知道MySQL的性能追查,包括slow_log/explain等,還可以知道基本的索引創建處理等知識;原理方面瞭解基本的MySQL的架構 (Server+存儲引擎),知道基本的InnoDB/MyISAM索引存儲結構和不一樣(聚簇索引,B樹);知道基本的InnoDB事務處理機制;瞭解大 部分MySQL異常狀況的處理方案(或者知道哪兒找處處理方案)。條件容許的狀況,建議瞭解一下NoSQL的表明MongoDB數據庫,順便對比跟 MySQL的差異,同事可以在合適的應用場景安全謹慎的使用MongoDB,知道基本的PHP與MongoDB的結合開發。

4. Redis/Memcached:

在大部分中型系統裏面必定會涉及到緩存處理,因此必定要了解基本的緩存;知道Memcached和Redis的異同和應用場景,可以獨立安 裝 Redis/Memcached,瞭解Memcahed的一些基本特性和限制,好比最大的value值,知道PHP跟他們的使用結合;Redis瞭解 基本工做原理和使用,瞭解常規的數據類型,知道什麼場景應用什麼類型,瞭解Redis的事務等等。原理部分,可以大概瞭解Memcached的內存結構 (slab機制),redis就瞭解經常使用數據類型底層實現存儲結構(SDS/鏈表/SkipList/HashTable)等等,順便了解一下Redis 的事務、RDB、AOF等機制更好

5. PHP:

除了第一階段的能力,安裝配置方面可以隨意安裝PHP和各類第三方擴展的編譯安裝配置;瞭解php-fpm的大部分配置選項和含義(如 max_requests/max_children/request_terminate_timeout之類的影響性能的配置),知道mod_php /fastcgi的區別;在PHP方面已經可以熟練各類基礎技術,還包括各類深刻些的PHP,包括對PHP面向對象的深刻理解/SPL/語法層面的特殊特 性好比反射之類的;在框架方面已經閱讀過最少一個以上常規PHP MVC框架的代碼了,知道基本PHP框架內部實現機制和設計思想;在PHP開發中已經能 夠熟練使用常規的設計模式來應用開發(抽象工廠/單例/觀察者/命令鏈/策略/適配器 等模式);建議開發本身的PHP MVC框架來充分讓開發自由化, 讓本身深刻理解MVC模式,也讓本身可以在業務項目開發裏快速升級;熟悉PHP的各類代碼優化方法,熟悉大部分PHP安全方面問題的解決處理;熟悉基本的 PHP執行的機制原理(Zend引擎/擴展基本工做機制);

6. 系統設計:

可以設計大部分中型系統的網站架構、數據庫、基本PHP框架選型;性能測試排查處理等;可以完成相似:瀏覽 器 -> CDN(Squid) -> Nginx+PHP -> 緩存 -> 數據庫 結構網站的基本設計開發維護;可以支撐 天天數百萬到千萬流量基本網站的開發維護工做;前端

 

高級PHP程序員

重點:除了基本的LNMP程序,還可以在某個方向或領域有深刻學習。(縱深維度發展)

目標:除了可以完成基本的PHP業務開發,還可以解決大部分深刻複雜的技術問題,而且能夠獨立設計完成中大型的系統設計和開發工做;本身可以獨立hold深刻某個技術方向,在這塊比較專業。(好比在MySQL、Nginx、PHP、Redis等等任一方向深刻研究)

1. Linux:

除了第二階段的能力,在Linux下面除了常規的操做和性能監控跟蹤,還可以使用不少高級複雜的命令完成工做(watch/tcpdump/starce /ldd/ar等);在shell腳本方面,已經可以編寫比較複雜的shell腳本(超過500行)來協助完成不少包括備份、自動化處理、監控等工做的 shell;對awk/sed/perl 等應用已經如火純青,可以隨意操做控制處理文本統計分析各類複雜格式的數據;對Linux內部機制有一些瞭解, 對內核模塊加載,啓動錯誤處理等等有個基本的處理;同時對一些其餘相關的東西也瞭解,好比NFS、磁盤管理等等;

2. Nginx: 

在第二階段的基礎上面,已經可以把Nginx操做的很熟練,可以對Nginx進行更深刻的運維工做,好比監控、性能優化,複雜問題處理等等;看我的興趣, 更多方面能夠考慮側重在關於Nginx工做原理部分的深刻學習,主要表如今閱讀源碼開始,好比具體的master/worker工做機制,Nginx內部 的事件處理,內存管理等等;同時能夠學習Nginx擴展的開發,能夠定製一些本身私有的擴展;同時能夠對Nginx+Lua有必定程度的瞭解,看看是否可 以結合應用出更好模式;這個階段的要求是對Nginx原理的深刻理解,能夠考慮成爲Nginx方向的深刻專業者。

3. MySQL/MongoDB:

在第二階段的基礎上面,在MySQL應用方面,除了以前的基本SQL優化,還可以在完成一些複雜操做,好比大批量數據的導入導出,線上大批量數據的更改表 結構或者增刪索引字段等等高危操做;除了安裝配置,已經可以處理更多複雜的MySQL的問題,好比各類問題的追查,主從同步延遲問題的解決、跨機房同步數 據方案、MySQL高可用架構等都有涉及瞭解;對MySQL應用層面,對MySQL的核心關鍵技術比較熟悉,好比事務機制(隔離級別、鎖等)、對觸發器、 分區等技術有必定了解和應用;對MySQL性能方面,有包括磁盤優化(SAS遷移到SSD)、服務器優化(內存、服務器自己配置)、除了二階段的其餘核心 性能優化選項(innodb_log_buffer_size/back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout等)、鏈接池軟件選擇應用,對show * (show status/show profile)類的操做語句有深刻了解,可以完成大部分的性能問題追查;MySQL備份技術的深刻熟悉,包括災備 還原、對Binlog的深刻理解,冷熱備份,多IDC備份等;在MySQL原理方面,有更多瞭解,好比對MySQL的工做機制開始閱讀部分源碼,好比對主 從同步(複製)技術的源碼學習,或者對某個存儲引擎(MyISAM/Innodb/TokuDB)等等的源碼學習理解,若是條件容許,能夠參考CSV引擎 開發本身簡單的存儲引擎來保存一些數據,加強對MySQL的理解;在這個過程,若是本身有興趣,也能夠考慮往DBA方向發展。MongoDB層面,能夠考 慮好比說在寫少讀多的狀況開始在線上應用MongoDB,或者是作一些線上的數據分析處理的操做,具體場景能夠按照工做來,不過核心是要更好的深刻理解 RMDBS和NoSQL的不一樣場景下面的應用,若是條件或者興趣容許,能夠開始深刻學習一下MongoDB的工做機制。mysql


4. Redis/Memcached:

在第二階段的基礎上面,可以更深刻的應用和學習。由於Memcached不是特別複雜,建議能夠把源碼進行閱讀,特別是內存管理部分,方便深刻理 解;Redis部分,能夠多作一些複雜的數據結構的應用(zset來作排行榜排序操做/事務處理用來保證原子性在秒殺類場景應用之類的使用操做);多涉及 aof等同步機制的學習應用,設計一個高可用的Redis應用架構和集羣;建議能夠深刻的學習一下Redis的源碼,把在第二階段積累的知識均可以應用 上,特別能夠閱讀一下包括核心事件管理、內存管理、內部核心數據結構等充分學習瞭解一下。若是興趣容許,能夠成爲一個Redis方面很是專業的使用者。

5. PHP:

做爲基礎核心技能,咱們在第二階段的基礎上面,須要有更深刻的學習和應用。從基本代碼應用上面來講,可以解決在PHP開發中遇到95%的問題,瞭解大部分 PHP的技巧;對大部分的PHP框架可以迅速在一天內上手使用,而且瞭解各個主流PHP框架的優缺點,可以迅速方便項目開發中作技術選型;在配置方面,除 了常規第二階段會的知識,會了解一些比較偏門的配置選項(php auto_prepend_file/auto_append_file),包括擴展中 的一些複雜高級配置和原理(好比memcached擴展配置中的memcache.hash_strategy、apc擴展配置中的 apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之類的);對php的 工做機制比較瞭解,包括php-fpm工做機制(好比php-fpm在不一樣配置機器下面開啓進程數量計算以及原理),對zend引擎有基本熟悉 (vm/gc/stream處理),閱讀過基本的PHP內核源碼(或者閱讀過相關文章),對PHP內部機制的大部分核心數據結構(基礎類型/Array /Object)實現有了解,對於核心基礎結構(zval/hashtable/gc)有深刻學習瞭解;可以進行基本的PHP擴展開發,瞭解一些擴展開發 的中高級知識(minit/rinit等),熟悉php跟apache/nginx不一樣的通訊交互方式細節(mod_php/fastcgi);除了開發 PHP擴展,能夠考慮學習開發Zend擴展,從更底層去了解PHP。

6. C/C++:

在第二階段基礎上面,可以在C/C++語言方面有更深刻的學習瞭解,可以完成中小型C/C++系統的開發工做;除了基本第二階段的基礎C/C++語法和數 據結構,也可以學習一些特殊數據結構(b-tree/rb-tree/skiplist/lsm-tree/trie-tree等)方便在特殊工做中需 求;在系統編程方面,熟悉多進程、多線程編程;多進程狀況下面瞭解大部分多進程之間的通訊方式,可以靈活選擇通訊方式(共享內存/信號量/管道等);多線 程編程可以良好的解決鎖衝突問題,而且可以進行多線程程序的開發調試工做;同時對網絡編程比較熟悉,瞭解多進程模型/多線程模型/異步網絡IO模型的差異 和選型,熟悉不一樣異步網絡IO模型的原理和差別(select/poll/epoll/iocp等),而且熟悉常見的異步框架(ACE/ICE /libev/libevent/libuv/Boost.ASIO等)和使用,若是閒暇也能夠看看一些國產本身開發的庫(好比muduo);同時可以設 計好的高併發程序架構(leader-follow/master-worker等);瞭解大部分C/C++後端Server開發中的問題(內存管理、日 志打印、高併發、先後端通訊協議、服務監控),知道各個後端服務RPC通訊問題(struct/http/thirft/protobuf等);可以更熟 絡的使用GCC和GDB來開發編譯調試程序,在線上程序core掉後可以迅速追查跟蹤解決問題;通用模塊開發方面,能夠積累或者開發一些通用的工具或庫 (好比異步網絡框架、日誌庫、內存池、線程池等),不過開發後是否應用要謹慎,省的埋坑去追bug;

7. 前端:

深刻了解HTTP協議(包括各個細緻協議特殊協議代碼和背後緣由,好比302靜態文件緩存了,502是nginx後面php掛了之類的);除了以前的前端 方面的各類框架應用整合能力,前端方面的學習若是有興趣能夠更深刻,表現形式是,能夠本身開發一些相似jQuery的前端框架,或者開發一個富文本編輯器 之類的比較瑣碎考驗JavaScript功力;

8. 其餘領域語言學習:

在基礎的PHP/C/C++語言方面有基本積累,建議在當前階段能夠嘗試學習不一樣的編程語言,看我的興趣愛好,腳本類語言能夠學學 Python /Ruby 之類的,函數式編程語言能夠試試 Lisp/Haskell/Scala/Erlang 之類的,靜態語言能夠試試 Java /Golang,數據統計分析能夠了解了解R語言,若是想換個視角作後端業務,能夠試試 Node.js還有前面提到的跟Nginx結合的 Nginx_Lua等。學習不一樣的語言主要是提高本身的視野和解決問題手段的差別,好比會了解除了進程/線程,還有輕量級協程;好比在跨機器通訊場景下 面,Erlang的解決方案簡單的驚人;好比在不想選擇C/C++的狀況下,還有相似高效的Erlang/Golang可用等等;主要是提高視野。

9. 其餘專業方向學習:

在本階段裏面,會除了基本的LNMP技能以外,會考慮一些其餘領域知識的學習,這些都是能夠的,看我的興趣和長期的目標方向。目前狀況可以選擇的領域比較 多,好比、雲計算(分佈式存儲、分佈式計算、虛擬機等),機器學習(數據挖掘、模式識別等,應用到統計、個性化推薦),天然語言處理(中文分詞等),搜索 引擎技術、圖形圖像、語音識別等等。除了這些高大上的,也有不少偏工程方面能夠學習的地方,好比高性能系統、移動開發(Android/IOS)、計算機 安全、嵌入式系統、硬件等方向。

10. 系統設計:

系統設計在第二階段的基礎之上,可以應用掌握的經驗技能,設計出比較複雜的中大型系統,可以解決大部分線上的各類複雜系統的問題,完成相似 瀏覽 器 -> CDN -> 負載均衡 ->接入層 -> Nginx+PHP -> 業務緩存 -> 數據 庫 -> 各路複雜後端RPC交互(存儲後端、邏輯後端、反做弊後端、外部服務) -> 更多後端 醬紫的複雜業務;可以支撐天天數千萬到數 億流量網站的正常開發維護工做。nginx

相關文章
相關標籤/搜索