根据很多PHP程序员知道 / LNMP开发,结合个人的经验,提炼出了许多程序员对朦胧的未来,技术学习和盲目恐慌,简单分析了每个阶段的PHP技术帮助许多程序员的要求,PHP过程控制设定学习目标。

本文根据目前做主流技术的基本分类,全是假设PHP程序员是设置了一个非常坚实的基础,所有的设置都非常具体和明确,可能会使人感到不舒服,请理解,只代表一家之言。(未来技术的变化不讨论的范围)

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

关键:让精通LNMP(核心是安装和配置的基本操作)

我们的目标是完成基本的LNMP系统安装,简单的配置和维护,使基本的简单系统的PHP开发,并支持在PHP中尺度系统的PHP功能模块的开发。

时间:这个阶段的完成时间因人而异,有的长到半年和一年,二年或三年的缓慢增长也有。

1、Linux:

基本的命令,运行,启动,基本服务配置(包括RPM安装文件,各种服务配置等);会写简单的shell脚本和awk和sed脚本命令。

nginx的2:

所以,我们可以安装和配置Nginx + PHP,知道基本的Nginx的核心配置选项,知道服务器 / / fastcgi_pass access_log等基本配置,其目的就是使Nginx + php_fpm工作顺利。

3.mysql:

他们将建立自己的MySQL,了解基本的MySQL的配置选项,知道InnoDB和MyISAM的区别,并知道InnoDB和MyISAM两机不同的配置选项。

我们知道两种基本发动机的区别和它们之间的区别。我们可以手动构建MySQL数据库,并配置代码以正常稳定地运行。核心思想是构建一个运行的MySQL数据库。

4.php:

数组,字符串的基本语法,数据库,XML,插座,GD / imagemgk图像处理等;熟悉各种与MySQL操作API链接(mysql mysqli / / PDO),知道解决各种编码问题;知道定期熟练使用PHP框架(ThinkPHP,ZendFramework,Yii、运动等);

了解MVC的基本运行机制和为什么要做,不同的PHP框架之间的差异的一点知识;学习MVC框架的能力可以知道文件目录组织开发项目具有良好的基本代码结构和风格,并能完成小型系统的开发中系统的一个模块的开发。

5。前端:

如果时间允许,你可以学习HTML / CSS、JS等相关知识,了解什么是Web标准,DIV+CSS的网站/网页模式,了解HTML5和HTML4之间的差异,并了解一些基本的前端就像是JS框架(jQuery)。

了解一些基本的Javascript编程知识。

6。系统的设计:

能独立完成小型系统的基本设计,包括数据库设计简单,能够完成基本的设计和开发:浏览器-> nginx+php ->数据库架构来支持日常工作;成千上万的发展对网站维护工作流程百万;

第二阶段:改进阶段(中级PHP程序员)

重点:提高LNMP的技能,能够有一个更全面的应用LNMP。

目的:在任何时间和任何地方建立一个良好的LNMP环境,快速完成的常规配置,并跟踪和解决所遇到的问题的发展和网络环境。

它能独立承担媒体系统的结构和开发,并能在大系统中进行中小型模块的开发。

1。Linux:

在第一阶段的基础上,我们可以顺利地使用shell脚本来完成许多自动化工作。awk和sed或Perl也工作得很好,可以做许多文字处理和数据统计。

基本上,你可以安装大部分非特殊的linux程序,包括各种库,封装,第三方的依赖等,如MongoDB / / /狮身人面像Redis luncene / SVN。

了解linux的基本服务,知道如何查看linux的性能数据,了解linux下的问题跟踪等。

2。Nginx:

在第一阶段的基础上,我们将了解复杂的nginx的配置,包括多核配置,事件,proxy_pass,sendfile / tcp_配置,知道超时和其他相关的配置和性能的影响。

知道Nginx可以采取代理服务器的配置和反静态服务器除了Web服务器,知道基本的nginx配置优化,知道如何配置权限,编译Nginx Nginx。

了解基本的nginx的工作原理(主/工人机制,epoll),知道为什么Nginx的性能优于Apache。

三.MySQL和MongoDB:

在第一阶段的基础上,在mysql的开发中,掌握了很多小技巧,包括常规的SQL优化(按组按顺序排序/优化等);

除了设置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 /解释等,还可以了解索引和处理的基本知识。

原则上,我们了解基本的MySQL架构(服务器+存储引擎),了解基本的InnoDB和MyISAM索引的存储结构和不同(聚集索引B树),并知道基本的InnoDB事务机制。

了解如何处理大多数MySQL异常(或知道在何处找到解决方案)。

如果条件允许,建议了解NoSQL MongoDB数据库,MySQL和MySQL的比较之间的差异,并能在合适的应用场景安全、谨慎使用MongoDB,了解基本的PHP和MongoDB的结合发展。

4。Redis和Memcached:

在大多数中型系统中,必须涉及缓存,所以我们必须了解基本的缓存。

知道之间的相似之处和Memcached和Redis和应用场景的不同,它可以安装memcached redis /独立和了解一些基本的特点和局限性memcahed,如最大的价值,知道PHP是结合使用。

Redis understands basic work principles and uses, understand the conventional data types, know what types of scenarios are applied, understand the transactions of Redis, and so on.The principle part is able to understand the memory structure of Memcached (slab mechanism). redis了解常见的数据类型,并实现了存储结构底部(SDS / / / skiplist链表,哈希表)。顺便说一句,我们可以理解Redis的事务,关系数据库,多种机制和其他机制更好。

5。PHP:

除了第一阶段的能力外,安装配置可以随意安装,以安装PHP和各种第三方扩展编译和安装配置;

最懂的配置选项和php-fpm的含义,如max_requests / / request_terminate_timeout max_children,知道mod_php / FastCGI的区别。

在PHP中,它已经掌握了各种基本技术,包括各种深入的PHP,包括深入了解PHP面向对象,以及诸如反射等语法特征。

在这个框架中,代码至少已经阅读了一个传统的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 500,基本HTTP交互);

如果条件允许,你可以写一个稍微优雅的HTML + CSS + Javascript的深度,或者你可以简单地使用一些前端框架(jQuery / / / requirejs YUI ExtJS /引导)。

如果条件允许,您可以深入学习Javascript编程,如闭包机制、DOM处理,并进一步阅读jQuery源代码进行深入研究。

8。系统的设计:

能够设计大中型网站系统架构、数据库、PHP选择的基本框架;性能测试的调查与处理;能够完成类似的浏览器:CDN ->(SQUID)-> nginx+php - > >基本设计的网站维护和开发缓存数据库结构;支持每天数以百万计的对交通网站维护工作的上百万;

第三阶段:高级阶段(高级PHP程序员)

关键:除了基本的LNMP的程序,它也可以在某个方向或领域的研究。(深度开发)

目标:除了能够完成基本的PHP业务开发外,它还可以解决大多数深层次和复杂的技术问题,并独立设计和开发大中型系统。

Self hold can be independent in a certain technical direction, in this comparative specialty.(for example, in MySQL, Nginx, PHP, Redis, and so on in any direction)

1。Linux:

除了对第二阶段的能力,在Linux除了日常的操作和性能监控和跟踪,也可以使用许多先进复杂的指挥工作(看 / / / starce tcpdump LDD / AR);在shell脚本,已经能够编写shell脚本(超过500行)协助许多包括备份、自动处理和监控shell的工作;

awk和sed或Perl等应用已经为纯绿色一样纯净,可以操纵和控制内容的统计和各种复杂格式数据分析会。

我们对linux的内部机制有了一定的了解,对内核模块加载、启动错误处理等有了基本的处理。同时,我们还了解了一些相关的东西,如NFS、磁盘管理等。

2。Nginx:

在第二阶段的基础上,它已经能够nginx,开展Nginx更深入的操作和维护,如监控、性能优化、复杂问题处理,等等。

看个人的兴趣,更可以考虑在nginx的组成部分的工作原理进行了深入的研究,主要集中在阅读源代码,如主/工人的工作机理,Nginx内部事件处理、内存管理等;同时,学习nginx的发展可以扩大,可以自定义自己的一些私人的延伸;

同时,我们可以有一定程度的理解和Nginx + lua看到如果我们能将更好的模型。这个阶段的要求是进一步了解nginx的原则和考虑它在Nginx深入专业方向。

三.MySQL和MongoDB:

基于以上第二阶段,在MySQL应用程序中,除了基本的SQL优化之前,还能够完成一些复杂的操作,如大量的数据导入和导出、在线质量变化、数据表结构或索引字段等高危操作的添加;

除了安装配置,已经能够处理更复杂的MySQL的问题,如问题追踪,主从同步延迟的问题,同步方案,穿过房间,MySQL的高可用架构的数据涉及到理解;MySQL的关键技术的应用水平,熟悉MySQL的核心,如事务隔离级别(锁等),有一定的了解和触发,应用分区技术;对MySQL的性能,包括磁盘优化(SAS迁移到SSD)、服务器(服务器本身,内存优化,配置)等核心性能优化选项在两级之间(innodb_log_buffer_size / / TA back_logble_open_cache / / thread_cache_size innodb_lock_wait_timeout),应用软件的连接池的选择。表演*(显示状态 /显示轮廓)操作的句类是deepbe能够完成大部分的性能问题。

MySQL备份技术的深入了解,包括binlog减少灾难恢复,深入了解冷备份和热备份,数据备份;

在MySQL的原则,有了更多的了解,如MySQL的工作机制开始阅读源代码的一部分,如主从同步(复制)学习的来源,或者某些存储引擎(MyISAM和InnoDB / TokuDB)和学习和理解的来源,如果条件允许,可以可参考CSV引擎自己简单的存储引擎的发展来保存一些数据,提高MySQL的理解;在这个过程中,如果你有兴趣,也可以考虑DBA方向。

MongoDB的水平可以作为写作到MongoDB应用在线阅读,或做一些操作的在线数据分析和处理,可以根据具体的工作场景,但核心是不同的场景来更好的理解rmdbs和NoSQL的应用,如果条件允许或兴趣,怎么开始MongoDB的工作机制进行了深入的研究。

4。Redis和Memcached:

在基础阶段,可以更深入的学习与应用。因为memcached是不是特别复杂,建议源代码可以读取,尤其是内存管理部分,便于深入理解。

在Redis的一部分,你可以做更复杂的数据结构的应用程序(zset是用来做排名操作/事务处理保证秒杀类的应用场景原子等)。

它涉及到学习和同步机制等多种应用,并设计了一个高可用的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.file_update_protection APC。slam_defense配置等);

更好地了解PHP的机制,包括php-fpm的工作机制(如php-fpm的机器的不同配置下开始量计算过程和Zend的原理),该引擎已经基本熟悉(VM /气相色谱/流),阅读PHP内核源码代码基本(或读关文章),大多数PHP的核心数据结构(内部机制 / /对象数组的基本类型)实现的理解,对核心基础设施(zval / /哈希表GC)有深入的研究和认识;开展基本的PHP开发,了解一些发展高水平的知识(MINIT /即),熟悉不同pH的通信和交互方法的细节P Apache / Nginx(mod_php / FastCGI);

除了开发PHP扩展,你可以考虑学习开发Zend扩展从底层了解PHP。

6。C / C++:

在第二阶段的基础上,我们可以有一个更好的理解C和C++语言,并能完成发展中小C / C++系统。

除了基本的二阶段基本的C / C++语法和数据结构,它可以学习一些特殊的数据结构(树 / / / RB树skiplist LSM树,Trie树,等)方便需要在特殊的工作。在系统编程方面,熟悉多进程和多线程编程。

多进程通信模式之间最了解的过程中,灵活地选择通信方式(共享内存/信号/管道);多线程编程可锁冲突的一个很好的解决方案,开发和调试,可以多线程程序;同时网络编程与多进程/多模型的线程模型/异步网络IO模型的区别和选择的理解更熟悉,熟悉和异步网络IO模型差异原则(选择 / / /调查epoll IOCP),熟悉常见的异步框架(ACE / / /冰测试程序libuv libevent / /提升。ASIO)和休闲用的,如果还可以在国内的一些发展看他们的图书馆的发展(如Muduo);同时高并发程序架构设计好(领导者追随/师傅);

最懂C / C++后端服务器的发展问题(内存管理、日志打印、高并发,之前和通信协议,结束后服务监控),知道所有的后端服务的RPC通信(结构 / / / HTTP thirft protobuf);可以使用GCC、GDB的发达的编译调试程序,在线程序可以快速跟踪核心去解决跟踪问题;通用模块的开发,可以积累或开发一些通用的工具和库(如异步网络框架、日志数据库,内存池、线程池),但在应用程序是否应该谨慎发展,埋在坑省抓虫;

7。前端:

HTTP协议的一个更深入的了解(包括详细的协议专用协议代码和背后的原因,如302的静态文件缓存,Nginx PHP 502后面挂像);除了以往的各种前端框架的应用集成能力,前端方面的学习,如果有兴趣进一步的形式,你可以在前架类似jQuery的发展,或一个富文本编辑器一样平凡的技能测试Javascript的开发;

8。语言学习的其他领域:

有基本的积累,在基本的PHP / C / C++语言,建议你可以试着在目前的阶段,学习不同的编程语言的个人兴趣,脚本语言可以学习像Python或Ruby,你可以尝试函数式编程语言如Lisp / / /二郎Scala Haskell,静态的语言可以试试java / Golang,统计数据的分析可以如果你想学习R语言的理解。从另一个角度去做生意,你可以试试Node.js和上述nginx_lua结合nginx的,学习不同的语言是提高视力的主要差异和解决问题的手段,例如,在进程/线程的理解,轻过程;例如在跨机器通信的情况下,Erlang的解决方案惊人的;如不想使用C / C++的情况下,也有类似的高效二郎 / Golang可用主要是提高视力。

9。其他专业方向:

在这个阶段,除了基本的LNMP的技能,我们将考虑一些其他领域知识的学习,都能看到个人的利益和长远的目标。目前的情况可以选择越来越多的领域,例如云计算(分布式存储、分布式计算、虚拟机),机器学习(数据挖掘,模式识别,统计,应用到个性化推荐),自然语言处理(中文分词)、搜索引擎技术、语音识别、图像等等。除了这些高大的建筑,还有许多工作可以学习工程,如高性能的系统,移动开发(Android / iOS),计算机安全,嵌入式系统,硬件等。

10。系统的设计:

本系统的设计是基于第二阶段,掌握技巧的应用,设计一个复杂的大系统,可以解决各种复杂的问题,大多数的在线系统,类似于浏览器-> -> -> CDN负载均衡访问层-> nginx+php - > > >服务缓存数据库后台存储后端(复杂的RPC交互逻辑,后端,反作弊,外部后端服务)->复杂的业务,可以支持更多的后端;每天都有对网站的维护工作流程正常发展数亿。

第四阶段:架构阶段(架构师)

第五阶段:专家阶段(方向域专家)

第六阶段:科学家的舞台

根据夜间路人博客改编。