php自學提升進階路線
為了自己對php的系統全面深入的掌握,我通過個人經驗,以及搜尋網上高手經驗,匯總了一份php自我學習路線規劃,包括實戰演練、學習建議、高手進階、常見問題和測試總結五塊。算是一個系統的學習計劃和目標吧。
避免盲目學習,對提高有所指引。希望自我加壓,通過努力修鍊達到高手水平。天道酬勤,自我勉勵!此路線僅適合我本人。
部分摘自部落格,參看:【原創】PHP程式員的技術成長規劃 http://blog.csdn.net/heiyeshuwu/article/details/40098043
這個php成長規劃清晰明確,非常專業。
-------------------------------------------------------------
一、實戰演練
熟悉文法&api -> 閱讀zend、ci、wordpress源碼 -> 用PHP獨立開發項目 -> 深入瞭解PHP引擎實現細節、擴充編寫、效能最佳化等
(1周)HTML+CSS HTML5+CSS3
(2-3天)留言板或記事本,(增刪改查,數組函數資料庫函數)
(7天)bbs或企業網站,(模板、分頁、許可權)phpchina的高手PHP高手帶路--問題匯總解答以及PHP手冊
(1個月)學習discuz學習外國的開來源程式(zencert Joomla drupal).學習phpchina上的精華知識。
(1個月)深入學習zf架構(增刪改查,許可權控制,前端模板頁面等)
(長期總結)對自己做過的小項目進行總結,用物件導向思想,對結構最佳化。
看開源的架構源碼(這步請注意找一些比較小巧的開源架構如 CI,Slim ),增強對 MVC 的理解
更加深入的系統的學習(MySQL Linux C 語言 javascript html css redis 等)
最緊要實戰:
(2周)3個站(至少20個美工頁面)psd to html 切制練習。
(1周)jquery實戰演習
(1月)用zf架構,開發模組,達到靈活掌握
必須掌握的知識點:
資料庫必須熟練掌握 mysql & sqlserver,同時必須熟練zendstdio的操作。
熟練進行phpmyadmin的操作。
adodb(資料庫介面)+javascript+xml+ajax(非同步JavaScript和XML)+jquery(JS架構),
熟悉OOP編程,學習thinkphp,zf架構,學習smarty模板引擎,pear (PHP擴充與應用庫),prototype(設計模式)。
對apache也應該買本管理員手冊好好看看。
同時大致瞭解一下linux等等。以及伺服器管理等操作。
-------------------------------------------------------------
二、學習建議
"函數參考"那部分不必全看,但是 日期與時間、檔案系統、其它基本擴充、Session、變數與類型 這幾部分建議一定要翻一下,裡面介紹了很多常用的函數和類。
這些函數不必都記住,只要有個印象就行,以後用到時再回來翻,用的多了自然就記住了。
先從留言本做起,再做個個人部落格,然後再做個複雜點兒的CMS,或者小OA,所謂經驗,其實就是解決問題的方法,從項目中不斷思考,就能不斷收穫!
想學好PHP OOP, 直接上Zend Framework 2,半年後你會覺得自己進步許多
總結:自學非常重要,實際項目經驗也很重要。不要以為電腦基礎不重要,學習電腦基礎對學習程式設計語言非常有用。只要對自己狠一點,多下功夫,沒有攻不破的東西。
1基礎PHP程式員
重點:把LNMP搞熟練(核心是安裝配置基本操作)
目標:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的PHP開發;能夠在PHP中型系統中支援某個PHP功能模組的開發。
基本文法數組、字串、資料庫、XML、Socket、GD/ImageMgk圖片處理等等;熟悉各種跟MySQL操作鏈結接的api(mysql/mysqli/PDO),知道各種編碼問題的解決;知道常規熟練使用的PHP架構(ThinkPHP、Zendframework、Yii、Yaf等);瞭解基本MVC的運行機制和為什麼這麼做,稍微知道不同的PHP架構之間的區別;能夠快速學習一個MVC架構。能夠知道開發工程中的檔案目錄組織,有基本的良好的代碼結構和風格,能夠完成小系統的開發和中型系統中某個模組的開發工作。
2中級PHP程式員
重點:提高針對LNMP的技能,能夠更全面的對LNMP有熟練的應用。
目標:能夠隨時隨地搭建好LNMP環境,快速完成常規配置;能夠追查解決大部分遇到的開發和線上環境的問題;能夠獨立承擔中型系統的構架和開發工作;能夠在大型系統中承擔某個中型模組的開發工作;
除了第一階段的能力,安裝配置方面能夠隨意安裝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引擎/擴充基本工作機制);
3進階PHP程式員
重點:除了基本的LNMP程式,還能夠在某個方向或領域有深入學習。(縱深維度發展)
目標:除了能夠完成基本的PHP業務開發,還能夠解決大部分深入複雜的技術問題,並且可以獨立設計完成中大型的系統設計和開發工作;自己能夠獨立hold深入某個技術方向,在這塊比較專業。(比如在MySQL、Nginx、PHP、Redis等等任一方向深入研究)
作為基礎核心技能,我們在第二階段的基礎上面,需要有更深入的學習和應用。從基本代碼應用上面來說,能夠解決在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。
-------------------------------------------------------------
三、高手進階
英文好的話推薦看 https://tutsplus.com/ (免費版本http://code.tutsplus.com/),雖然要付費(年付15美金/月),但是你得到的將更多。
我已經持續付費兩年了,最早學php,然後跟進CI、Laravel等架構,後來學jquery、angularjs等,都在項目中實際應用了,ror、nodejs也跟著學了學,但是沒有機會使用。
老外高手做的教學不但教程安排合理,節奏比較快,不浪費你的時間而且讓你能夠保持高度注意力集中,並且可以看看高手的編程習慣和工具,學習到的都是業界最新的東西,如各種編輯器的workflow,秒殺國phper的視頻。
研究php核心
php技術架構
最好能參與php開源項目
-------------------------------------------------------------
四、常見問題
技術線(偏深度):
1. 基礎知識,比如資料結構,多線程,I/O,Http協議等
2. 語言深度,比如PHP的運行機制,效能最佳化,APC(以及其原理等)
3. 源碼閱讀,比如看過哪些架構,其中的機制是怎麼樣的,往細了問
4. 知識寬度,靜態語言,比如C、Java等,我始終覺得只會一門語言不是什麼好事情
php常見問題列表:
1.看看簡曆,會問一些過去做的項目的使用者量、pv、輸送量、相關痛點和解決方案等
2.資料庫設計經驗,為什麼進行分表? 分庫?
一般多少資料量開始分表? 分庫? 分庫分表的目的? 什麼是資料庫垂直分割? 水平分割? 分區等等?可以舉例說明
3.資料庫最佳化有哪些? 分別需要注意什麼?
4.web開發方面會遇到哪些緩衝? 分別如何最佳化?
5.給你256M的記憶體,對10G的檔案進行排序(檔案每行1個數字),如何??
對10G的檔案進行尋找如何??
統計10G檔案每個關鍵字出現的次數如何??
6.假如你現在是12306火車訂票的設計師,你該如何設計滿足全國人民訂票?
7.假如有1億使用者的訪問量,你的伺服器架構是怎樣的? 使用者資訊的儲存方案如何設計?
8.如果你是技術組長,所帶團隊任務進度無法完成你該如何解決?
如果在進度排滿的前提下插入任務,你該如何保證總進度不延期?
如果有的工程師今天預定任務沒有完成,你該如何解決?
9.從你的經驗方面談一下如何構建高效能web網站? 需要哪些環節? 步驟? 每個步驟需要注意什麼如何最佳化等?
10. 為什麼要對資料庫進行主從分離?
11. 如何處理多伺服器共用session?
12. 一個10G的表,你用php程式統計某個欄位出現的次數,思路是?
13. 會告訴你一個nginx日誌例子,用你認為最佳的程式設計語言統計一下http回應時間超過1秒的前10個url?
14. 給你一個mysql設定檔,用你認為最佳的程式設計語言解析該檔案?
15. 給你兩個路徑a和b,寫一個演算法或思路計算a和b差距幾層並顯示a和b的交集?
16. 給你一個url,在nginx配置一下rewrite指定到某個具體路徑?
17. 一個php檔案的解釋過程是? 一般加速php有哪些? 提高php整體效能會用到哪些技術?
18. session和cookie生存周期區別? 儲存位置區別?
19. require、include、require_once、include_once區別? 載入區別? 如果程式按需載入某個php檔案你如何??
20. chrome號稱為多線程的,所以多線程和多進程的區別為?
21. php在2011年底出現hash碰撞,hash碰撞原理為? 如何進行修複?
22. web不安全因素有哪些? 分別如何防範?
23. 假如兩個單鏈表相交,寫一個最優演算法計算交點位置,說思路也可以?
24. 假如你是技術組長? 如何提高團隊效率?
25. nginx負載平衡有哪些? 如果其中一台伺服器掛掉,警示機制如何??
26. 不最佳化前提下,apache一般最大串連數為? nginx一般最大串連數為? mysql 每秒insert ? select ? update ? delete?
27. mysql 資料類型有哪些 ? 分別佔用多少儲存空間 ?
28. nginx設定緩衝js、css、圖片等資訊,緩衝的實現原理是?
29. 如何提高快取命中率? 如何對緩衝進行顆粒化?
30. php的記憶體回收機制是?
31. 我的所有問題都問完了,你有什麼問題問我沒有?
-------------------------------------------------------------
五、調試總結
我目前常用的調試方法:
echo 和echo "
"; print_r(method); 指令碼js就是alert方式。 css調試就是弄成色塊加上邊框等
日誌方式用於無法列印時。logToFile("my.log", "out page:".$_POST ['cpage']);
function logToFile($filename,$msg){
$fd=fopen($filename, "a");
$str="[".date("Y/m/d h:i:s",mktime())."]".$msg;
fwrite($fd, $str."\n");
fclose($fd);
}
有個調試技術的部落格總結的挺全面。參看下面。
部落格地址:http://blog.csdn.net/heiyeshuwu/article/details/5684307
線上查看:http://down.51cto.com/data/155822PHP調試技術手冊發布(1.0.0 pdf)目錄
1 內建API輸出調試
1.1 基本調試API
1.1.1 echo (print):
1.1.2 printf
1.1.3 print_r、var_dump(var_export)、debug_zval_dump
1.2 錯誤控制和日誌記錄調試
1.2.1 錯誤選項控制
1.2.2 錯誤拋出和處理
1.2.3 使用錯誤抑制符
1.2.4 日誌記錄
2 瀏覽器調試
2.1 頁面輸出調試
2.2 FirePHP 調試
2.2.1 普通變數監測
2.2.2 調用棧監測
2.2.3 監測拋出異常
2.2.4 組顯示資訊
3 IDE 調試
3.1 基本常用IDE介紹
3.1.1 Vim
3.1.2 Zend Studio
3.1.3 Eclipse
3.1.4 NetBeans
3.2 IDE調試
3.2.1 Zend Studio + Zend Debugger
3.2.2 Eclipse (PDT) + Xdebug
3.2.3 Vim + Xdebug + DBGp
4 PHP 效能調試技術
4.1 基本時間佔用監測
4.2 使用 Xdebug 進行效能分析
4.2.1 安裝配置:
4.3 APD(Advanced PHP Debugger)
4.3.1 安裝配置
4.3.2 使用APD
4.4 使用Xhprof 進行效能分析
4.4.1 Xhprof 的優點:
5 PHP單元測試技術
5.1 PHPUnit