NoSQLPHP 程序员的技术成长安排(转发)

[导读] 按照摸底的浩大PHP
LNMP程序员的上扬轨迹,结合个人经历认知,抽象出无数程序员对前景的蔓延,更加对技术学习的盲目和慌张,不难梳理了那个每个阶段PHP程序员的技能必要,来帮忙众多PHP程序做比较设定学习成长目标。

 原文自:http://www.php100.com/html/it/chengxuyuan/2016/0602/9014.html

 

听从摸底的过多PHP/LNMP程序员的迈入轨道,结合个人经历认知,抽象出不可胜计程序员对前途的蔓延,越发对技术学习的盲目和不知所厝,简单梳理了那些每个阶段PHP程序员的技艺要求,来辅助广大PHP程序做比较设定学习成才目的。

正文根据近期主流技术做了一个中央的梳理,整个是只要PHP程序员不是基础万分踏实的动静展开的设定,并且具有设定都卓殊实际明确清晰,可能会令人觉得不适,请领会仅表示一家之辞。(以后技能生成不在钻探范围)

第一阶段:基础阶段(基础PHP程序员)

重大:把LNMP搞驾驭(大旨是设置配置基本操作)

对象:可以形成中央的LNMP系统安装,简单安插维护;可以做基本的简单系统的PHP开发;可以在PHP中型系统中援救某个PHP成效模块的支付。

光阴:完费用阶段的年华玉石俱焚,有的成长快3个月一年就过了,成长慢的两三年也有。

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