PHP 程序员的艺成长计划

遵循摸底之诸多PHP/LNMP程序员的向上轨迹,结合个人经历认知,抽象出广大程序员对前途之蔓延,特别对技术上之盲目跟不知所措,简单梳理了之每个阶段PHP程序员的技能要求,来帮衬众多PHP程序召开比设定上成才目标。

正文按照目前主流技术做了一个为主的梳理,整个是若PHP程序员不是基础大扎实的情展开的设定,并且有所设定都很具体明确清晰,可能会见为人觉得不正好,请晓仅代表一家之言。(未来技术生成不以座谈范围)

首先等:基础阶段(基础PHP程序员)

重要:把LNMP搞纯(核心是装配置基本操作)

对象:能够完成基本的LNMP系统装置,简单布置维护;能够做为主的简系的PHP开发;能够当PHP中型系统被支持有PHP功能模块的开支。

时:完本等的年月因人而异,有的成长快半年同年尽管过了,成长缓慢的两三年啊产生。

1.Linux:

中心命令、操作、启动、基本服务配置(包括rpm安装文件,各种服务配置等);会写简单的shell脚本和awk/sed 脚本命令等。

2.Nginx:

就能设置配置nginx+php,知道基本的nginx核心配置选,知道 server/fastcgi_pass/access_log 等基础配置,目标是能吃nginx+php_fpm顺利工作。

3.MySQL:

见面融洽搭建mysql,知道基本的mysql配置选;知道innodb和myisam的分,知道针对InnoDB和MyISAM两独引擎的两样
配置选;知道基本的星星点点个引擎的差别与甄选面的分别;能够纯手工编译搭建一个MySQL数据库并且配备好编码等正常稳定运行;核心主旨是力所能及多建筑一个可
运行的MySQL数据库。

4.PHP:

基本语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api(mysql
/mysqli/PDO),知道各种编码问题之解决;知道健康熟练应用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf
等);了解基本MVC的运行机制和怎么这样做,稍微懂得不同的PHP框架内的分;能够快学习一个MVC框架。能够理解开工程被之文件目录组织,有中心的脍炙人口的代码结构以及作风,能够完成微网的付出同中等系统被之一模块的开销工作。

5.前端:

万一基准时允许,可以适度学习下 HTML/CSS/JS 等有关文化,知道啊web标准,div+css的web/wap页面模式,知道
HTML5和HTML4底分;了解有中坚的前端只是和JS框架(jQuery之类的);了解部分中心的JavaScript编程知识;(本项不是必
项,如果产生工夫,稍微了解一下凡好的,不过不建议视作主要,除非个人来众所周知兴趣)

6.系统设计:

可知不辱使命小型系的主干计划,包括简单的数据库设计,能够一气呵成中心的:浏览器 -> Nginx+PHP -> 数据库 架构的规划出工作;能够支持每天几十万届数百万流量网站的开销保护工作;

仲阶段:提高等级 (中级PHP程序员)

要害:提高对LNMP的技巧,能够还完善的针对LNMP有懂行的行使。

靶:能够随时随地搭建筑好LNMP环境,快速完成正常配置;能够追查解决大部分相见的出同线及环境之题材;能够单独承担中型系统的构架和开支工作;能够以巨型系统面临背某个中型模块的付出工作;

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. C/C++: 

初步看一定之C/C++语言,能够写基本的C/C++代码,对骨干的C/C++语法熟悉(指针、数组操作、字符串、常规专业API)和数据结构
(链表、树、哈希、队列)有得之熟稔下;对Linux下面的C语言开发出基本的打听概念,会简单的makefile文件编制,能够用简易的
GCC/GDB的先后编译简单调试工作;对核心的纱编程有大约了解。(本项是为了为更胜层次打下基础)

7. 前端:

于率先等的底蕴方面,熟悉基本的HTTP协议(协议代码200/300/400/500,基本的HTTP交互头);条件允许,可以于深切写起小
优雅的HTML+CSS+JavaScript,或者会大体简单利用一些前端框架(jQuery/YUI/ExtJS/RequireJS/Bootstrap等等);如果条件允许,可以深深学习JavaScript编程,比如闭包机制、DOM处理;再深入些可以读读jQuery源码做深刻学。(本项不做要学习,除非对前者有趣味)

8. 系统规划:

克统筹大部分不大不小系统的网站架构、数据库、基本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开发中遇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交互(存储后端、逻辑后端、反作弊
后端、外部服务) -> 更多晚端平 酱紫的扑朔迷离工作;能够支持每天数千万及数亿流量网站的正规开支保护工作。

网站地图xml地图