《PHP等级水平评定标准》,又看到了前进的方向。


分享下,这样和我曾经一样迷茫的phper不用迷茫了。


 0级:(没有计算机编程基础,在培训学校里培训了三个月会php或者以前搭建过网站,又有很长一段时间没写过代码的社会人员)。特点:懂一大堆东西都说学过,实际测试的时候,机试写程序上反应半天,笔试的时候,题目鲜有答对。


 入门级:
 可以完整的搭建自己的网站和进行域名解析绑定操作,
 在windows下能完整的配置环境,能看懂dedecms,ecshop,smarty等代码,可以进行模板的修改和常规功能的二次开发。
 可以用thinkphp或者YII进行CURD操作。可以对企业网站数据库进行迁移备份。掌握ajax,cookie,session等基本概念的使用。了解php的语法,数组,字符串,可以写最简单的算法比如简单的随机分组读取,用过100个以上的php函数,同时需要掌握一定div+css html  js jquery的前端知识(这种php程序员大部分在外包或者对企业网站进行维护公司)


 初级:
 可以在Linux下独立的配置LAMP或者LNMP环境(保持简单的运行即可)使用过20个以上的Linux命令,掌握Linux的目录大致结构。可以手写一定的原生mysql和对mysql进行初步的管理。理解了MVC系统的构成,可以完成对该系统的一些简单改写使得更加符合开发要求。理解php库的概念,同时使用过五个以上其他的函数库。可以用php在理解了业务逻辑的情况下,完成小型模块的编写并进行维护,理解api和数据交换概念,可以很快完成对各种开放API同时可以使用svn或者git进行合作协同开发(比如腾讯和微信api)进行组合利用。(很大一部分初创公司招聘的php程序员)


 中级进阶:
 可以看懂LNMP的log日志,使用过40个以上的Linux的命令(组合算新功能命令) 可以完成简单的shell脚本编写,完成部分自动化工作,可以自己独立make安装php的某个需要支持库。 理解性的配置nginx上的server/fastcgi_pass/access_log等选项。可以自己独立make安装php的某个需要支持库
 熟悉各种跟MySQL操作链接的api(mysql/mysqli/PDO)等的不同。能很快的看懂一个mvc结构框架。理解一些数据库的读取效率与基本的设计(可以独立在不考虑效率的情况表现一套简单的业务逻辑,例如签到系统)道基本的InnoDB/MyISAM索引存储结构和不同(聚簇索引,B树);知道基本的InnoDB事务处理机制了解部分MySQL异常情况的处理方案。同时了解nosql,能使用Redis或者Memcache进行数据的储存。
 理解程序算法结构对程序运行的效率影响,可以用php进行模块开发,同时对自己熟悉的框架进行拓展性改造。
 熟悉基本的HTTP协议(协议代码200/300/400/500,基本的HTTP交互头)(中型公司招聘的php写功能开发的,小公司的主管也常常在该级)
 
 中级:
 能够流畅的使用Shell脚本来完成很多自动化的工作;awkd/perl 也操作的不错,能够完成很多文本处理和数据统计等工作;基本能够安装大部分非特殊的Linux程序(包括各种库、包、第三方依赖等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之类的);了解基本的Linux服务,知道如何查看Linux的性能指标数据,
 了解复杂一些的Nginx配置;包括 多核配置、events、proxy_pass,sendfile/tcp_*配置,知道超时等相关配置和性能影响;知道nginx除了web server,还能够承担代理服务器、反向静态服务器等配置;知道基本的nginx配置调优;知道如何配置权限、编译一个nginx扩展到nginx;知道基本的nginx运行原理(master/worker机制,epoll),知道为什么nginx性能比apache性能好等知识。
 熟悉常规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等)
 PHP上已经对大部分框架掌握了(一般会用过俩种以上做过项目开发),可以写出自己的MVC框架,理解常见的面向对象开发方式(抽象工厂/单例/观察者/命令链/策略/适配器 等模式)由于php层已经到了瓶颈层,会对C/c++进行一定的了解,可以对用C或者c++写一定的简单的程序并进行编译等操作。为了优化性能,可能会用到HHVM等工具
 由于可以对一般的系统进行设计,需要考虑到性能和优化方面,需要Memcached和Redis的异同和应用场景,了解Memcahed的一些基本特性和限制,比如最大的value值,知道PHP跟他们的使用结合;Redis了解基本工作原理和使用,了解常规的数据类型,知道什么场景应用什么类型,了解Redis的事务等等。原理部分,能够大概了解Memcached的内存结构(slab机制),redis就了解常用数据类型底层实现存储结构(SDS/链表/SkipList/HashTable)等等,顺便了解一下Redis的事务、RDB、AOF(大部分公司招聘公司里提到的高级php要求)


 高级进阶:
 可以用c/c++进行写小型规模的程序,基本的C/C++语法熟悉(指针、数组操作、字符串、常规标准API)和数据结构(链表、树、哈希、队列)有一定的熟悉下;会简单的makefile文件编写,能够使用简单的GCC/GDB的程序编译简单调试工作;对基本的网络编程有大概了解。可以使用高级复杂的Linux命令完成工作(watch/tcpdump/starce/ldd/ar等)能够编写比较复杂的shell脚本(超过500行)来协助完成很多包括备份、自动化处理、监控等工作的shell;对awkd/perl 等应用已经如火纯青,能够随意操作控制处理文本统计分析各种复杂格式的数据;对Linux内部机制有一些了解,对内核模块加载,启动错误处理等等有个基本的处理;同时对一些其他相关的东西也了解,比如NFS、磁盘管理等等。
 数据库方面可以对大批量数据的导入导出,线上大批量数据的更改表结构或者增删索引字段等等高危操作;除了安装配置,已经能够处理更多复杂的MySQL的问题,比如各种问题的追查,主从同步延迟问题的解决、跨机房同步数据方案、MySQL高可用架构等都有涉及了解;对MySQL应用层面,对MySQL的核心关键技术比较熟悉,比如事务机制(隔离级别、锁等)、对触发器、分区等技术有一定了解和应用;对MySQL性能方面,有包括磁盘优化(SAS迁移到SSD)。
 理解php-fpm工作机制(比如php-fpm在不同配置机器下面开启进程数量计算以及原理),对zend引擎有基本熟悉(vm/gc/stream处理),阅读过基本的PHP内核源码(或者阅读过相关文章),对PHP内部机制的大部分核心数据结构(基础类型/Array/Object)实现有了解,对于核心基础结构(zval/hashtable/gc)有深入学习了解;能够进行基本的PHP扩展开发,了解一些扩展开发的中高级知识(minit/rinit等),熟悉php跟apacheinx不同的通信交互方式细节(mod_php/fastcgi)。(非常非常厉害的php程序员,圈子太窄了,就知道一俩个)


 高级:
  代码内核部分基本都阅览过(lmnp),熟悉多进程、多线程编程;多进程情况下面了解大部分多进程之间的通信方式,能够灵活选择通信方式(共享内存/信号量/管道等);多线程编程能够良好的解决锁冲突问题,并且能够进行多线程程序的开发调试工作;同时对网络编程比较熟悉,了解多进程模型/多线程模型/异步网络IO模型的差别和选型,熟悉不同异步网络IO模型的原理和差异(select/poll/epoll/iocp等),并且熟悉常见的异步框架(ACE/ICEbevbeventbuv/Boost.ASIO等)和使用,如果闲暇也可以看看一些国产自己开发的库(比如muduo);同时能够设计好的高并发程序架构(leader-follow/master-worker等);了解大部分C/C++后端Server开发中的问题(内存管理、日志打印、高并发、前后端通信协议、服务监控),知道各个后端服务RPC通信问题(structtp/thirft/protobuf等);能够更熟络的使用GCC和GDB来开发编译调试程序,在线上程序core掉后能够迅速追查跟踪解决问题。(超越了php的范畴,感觉像独孤求败了)

更多推荐

PHP等级水平评定标准