php学习计划

本摸底的众多PHP/LNMP程序员的迈入轨迹,结合个人经历认知,抽象出过多程序员对未来底蔓延,特别对技术上之盲目和不知所措,简单梳理了是每个阶段PHP程序员的艺要求,来扶持广大PHP程序召开对比设定上成才目标。

图片 1

 

本文按照目前主流技术做了一个主干的梳理,整个是要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性能的配备选也晓得这些选择配置成为小值合适;另外也询问部分破例的部署选,比如  知道
如何搭建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交互(存储后端、逻辑后端、反作弊
后端、外部服务) -> 更多后端 酱紫的错综复杂工作;能够支持每天数千万暨数亿流量网站的例行开支保护工作。

相关文章