PHP程序员的技艺成长安插(转发)

安份守己摸底的多多PHP/LNMP程序员的前行轨道,结合个人经验认知,抽象出成千成万程序员对前途的蔓延,越发对技术学习的盲目和心中无数,不难梳理了那些每一个阶段PHP程序员的技术须要,来增援众多PHP程序做比较设定学习成才目的。

 

正文依照近日主流技术做了一个着力的梳理,整个是要是PHP程序员不是基础至极扎实的场馆展开的设定,并且存有设定都尤其实际明确清晰,大概会令人觉着不适,请了然仅表示一家之辞。(将来技术生成不在研讨范围)

 

 

 

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

 

重点:把LNMP搞娴熟(宗旨是安装配置基本操作)

目标:可见不辱职分基本的LNMP系统安装,简单安排维护;可以做为主的概括系统的PHP开发;可以在PHP中型系统中匡助某个PHP效用模块的付出。

岁月:落成本阶段的日子不分畛域,有的成长快5个月一年就过了,成长慢的两三年也有。

 

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地图