本文把php程式設計師劃分為中、高階程式設計師兩大類程式設計師,並針對這兩大程式設計師應具備的技能進行分類探索。
中級php程式設計師
1.linux
能夠流暢的使用shell指令碼來完成很多自動化的工作;awk/sed/perl 也操作的不錯,能夠完成很多文字處理和資料統計等工作;基本能夠安裝大 部分非特殊的linux程式(包括各種庫、包、第三方依賴等等,比如mongodb/redis/sphinx/luncene/svn之類的);了解基 本的linux服務,知道如何檢視linux的效能指標資料,知道基本的lwww.cppcns.cominux下面的問題跟蹤等
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異常情況的處理方案(或者知道哪兒找到處理方案)。條件允許的情況ewwueiqzda,建議了解一下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的工作機制。
4. redis/memcached:
在第二階段的基礎上面,能夠更深入的應用和學習。因為memcached不是特別複雜,建議可以把原始碼進行閱讀,特別是記憶體管理部分,方便深入理 解;redis部分,可以多做一些複雜的資料結構的應用(zset來做排行榜排序操作/事務處理用來保證原子性在秒殺類場景應用之類的使用操作);多涉及 aof等同步機制的學習應用,設計乙個高可用的redis應用架構和集群;建議可以深入的學習一下redis的原始碼,把在第二階段積累的知識都可以應用 上,特別可以閱讀一下包括核心事件管理、記憶體管理、內部核心資料結構等充分學習了解一下。如果興趣允許,可以成為乙個redis方面非常專業的使用者。
5. php:
高階PHP程式設計師應該掌握哪些技術?
作業系統 熟悉作業系統的作用,以及其如何管理軟硬體的熟悉程序和執行緒,以及相互之間的區別和聯絡熟悉linux中程序執行緒切換和排程,熟悉程序間通訊方式熟悉socket基本操作計算機網路 熟悉osi七層網路模型,以及資料傳遞的過程熟悉各種網路協議原理熟悉http tcp udp等協議熟悉nginx等軟...
高階PHP程式設計師應該掌握哪些技術?
作業系統 熟悉作業系統的作用,以及其如何管理軟硬體的熟悉程序和執行緒,以及相互之間的區別和聯絡熟悉linux中程序執行緒切換和排程,熟悉程序間通訊方式熟悉socket基本操作計算機網路 熟悉osi七層網路模型,以及資料傳遞的過程熟悉各種網路協議原理熟悉http tcp udp等協議熟悉nginx等軟...
程式設計師還應該掌握哪些技能
最近公司在討論如何通過培訓來提高開發人員技能,我覺得除了程式設計工具的熟悉運用,以及對演算法和系統的掌握外,下列的一些技能也是現代開發人員應該要提公升的技能 1.設計模式 熟悉常用的設計模式,並了解你所用的軟體包中提供了哪些設計模式。2.物件導向的程式設計 熟悉物件導向的程式設計思想,掌握物件導向的...