搜尋
首頁頭條PHP程式設計師進階需要掌握哪些技術

本文把php程式設計師分成中、資深程式設計師兩大類程式設計師,並針對這兩大程式設計師應具備的技能進行分類探索。

中階PHP程式設計師 

1.Linux :

能夠流暢的使用Shell腳本來完成許多自動化的工作;awk/sed/perl 也操作的不錯,能夠完成很多文字處理和資料統計等工作;基本上能夠安裝大部分非特殊的Linux程式(包括各種函式庫、​​套件、第三方依賴等等,例如MongoDB/Redis /Sphinx/Luncene/SVN之類的);了解基本的Linux服務,知道如何查看Linux的性能指標數據,知道基本的Linux下面的問題跟踪等 

#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備份技術的深入熟悉,My,包括災備還原、對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開發中遇到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互動(儲存後端、邏輯後端、反作弊後端、外部服務) -> 更多後端醬紫的複雜業務;能夠支撐每天數千萬到數億流量網站的正常開發維護工作。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中