本文旨在給要學習 PHP 的新手一個大概的認知輪廓,在心里有個學習的結構,有的放矢,避免走太多彎路。大神請忽略。
入門階段
預備知識
1、掌握基本HTML、JS、CSS語法;熟悉 Bootstrap。
參考:
https://www.runoob.com/html/html-tutorial.html
https://www.liaoxuefeng.com/wiki/1022910821149312
https://www.runoob.com/css/css-tutorial.html
驗收最低標准:模仿寫出jd.com或者vip.com首頁第一屏內容。
2、熟悉Linux命令行
熟悉常用發行版系統(CentOS、Ubuntu)安裝
熟悉常用命令行操作,包括文件管理、用戶管理、權限管理、防火牆管理等
熟悉VIM使用
驗收最低標准:掌握lnmp環境搭建。
PHP基礎
掌握PHP基礎語法、文件上傳、cookie、Session、JSON。
掌握MySQL數據庫連接:pdo使用。
掌握redis連接及簡單應用。
掌握命名空間。
掌握面向對象編程思想。
參考:
https://www.runoob.com/php/php-tutorial.html
學習框架
學會使用ThinkPHP框架。主要是該框架在國內使用普及率太高了。不建議使用Laravel入門,因為該框架使用了較多的語法糖、第三方庫,對新手可能有難度。
驗收最低標准:可以使用ThinkPHP最新版作為入手框架,寫出一個簡單的博客。頁面簡單寫就行。數據之間使用TP的 display 渲染到頁面。
學習寫接口
學會 Charles 抓包,看豆瓣的接口返回的數據。
學會寫接口(GET、POST)的就行。
學會使用 POSTMAN。
驗收標最低准:把上面的博客項目改成前后端分離的,先寫完接口(最好有文檔),再在頁面里使用ajax調用接口數據。
至此,你已經入門了。如果需要繼續往下,還要學習。
第二階段
PHP
使用 composer 安裝PHP第三方庫
對於PHP斷點調試非常熟悉
學習常用PHP擴展
使用 SPL
掌握 PSR 規范
掌握反射的使用
掌握設計模式
熟練使用常用框架。
了解php和php-fpm的大部分配置選項和含義。
熟悉HTTP協議。
熟悉正則表達式。
MYSQL
熟悉MYSQL優化的一些技巧,例如MySQL的性能追查,包括slow_log/explain等;對於order by、limit、like等一些坑能避開;能夠熟練使用常用的索引;對於表結構創建選用哪種數據類型做到胸有成竹等等。
熟悉常用的配置,知道如何調優。
熟練配置主從。
NOSQL
掌握Redis使用:對於常用數據結構的經典使用場景非常熟悉;了解Redis的事務、RDB、AOF等機制。
掌握memcache的使用,知道與redis的區別。
了解一下MongoDB。
Linux
熟悉常用文本命令:例如wc、awk、split、diff、grep、sed等。
熟悉sort、uniq的使用。
熟練掌握ps、netstat、top等命令使用。
熟練使用Supervisor。
熟悉如何編寫shell腳本。
能夠理解Nginx的配置的含義。
第三階段
PHP
該階段PHP已經非常熟悉了,擁有快速開發項目、快速解決BUG的能力。代碼遵循psr規范、穩定性很高。
熟悉消息隊列使用,在很多場景合適的選擇消息隊列進行異步解耦。
熟悉如何使用 Elasticsearch 代替MYSQL的全文搜索功能。
熟悉多進程編程。
熟悉socket編程,對於網絡IO模型有一定的認知,熟悉多路復用(select/poll/epoll)技術。
熟悉swoole框架,能應用於項目上。
不限制於框架本身,任何框架一天內快速入手。
對php的工作機制熟悉,熟悉php-fpm生命周期。
能夠知道PHP相對於c等強類型語言性能為什么會慢。
對於PHP內部的實現原理有一定的認知,例如變量的實現、zend引擎的了解。
對於PHP的擴展有一定的認知,可以編寫簡單的擴展。
MYSQL
熟悉大批量的數據導入導出。對於線上大表操作可能帶來的風險有預知。
熟悉分庫分表。
對主從延遲能有效解決。
對於MySQL內置的一些函數能夠熟練使用,熟悉觸發器、存儲過程的使用。
熟悉服務器核心性能優化選項 innodb_log_buffer_size、back_log、table_open_cache、thread_cache_size、innodb_lock_wait_timeout等。
對於MySQL內部索引的實現、事務隔離機制有一定的認知。
NoSQL
redis常用5中數據類型之外的數據結構也要能掌握一些。如bitmap、GEO、HyperLogLog、pub/sub等。
redis里的事務、管道、分布式鎖能熟練使用。
對於redis的服務端結構能有一定認知。
熟悉redis里如何使用Lua。
嘗試閱讀redis源碼。
Linux
對於nginx非常熟悉,能夠熟練配置https、負載均衡、反向代理;能夠使用 lua-nginx-module。
對awk/sed 等應用已經如火純青,能夠隨意操作控制處理文本統計分析各種復雜格式的數據。
對於tcpdump、gdb、ltrace、strace、lsof等熟練使用。
其它
熟悉Linux應用編程:熟悉makefile使用;熟悉進程、信號、I/O知識;對於C語言有一定的了解。
熟練elk。
對於其它語言(例如java、c、golang)、其它領域(大數據)有一定的認知。
熟悉RPC、微服務架構。
能夠支持對於千萬級流量網站的正常開發維護工作。
結束語
技術無止境,未來有更多可能。
本文首發於公眾號"飛鴻影的博客(fhyblog)",歡迎關注。