PHP程序员等级素质模型
初级PHP程序员〔T1〕
素质模型:可以完成根本的LNMP系统安装,简单配置维护;可以做根本的简单系统的PHP 开发;可以在PHP中型系统中支持某个PHP功能模块的开发。
1.Linux:
根本命令、操作、启动、根本效劳配置〔包括rpm包、源码包安装文件,各种效劳配置等〕。
2.Nginx:
可以安装配置nginx+php,知道根本的nginx核心配置选项,知道server/fastcgi_pass/access_log 等根底配置信息,可以让nginx+php_fpm顺利工作。
3.MySQL:
会自己搭建mysql,知道根本的mysql配置选项;知道InnoDB和MyISAM的区别,知道针对InnoDB和MyISAM两个引擎的不同配置选项;知道根本的两个引擎的差异和选择上面的区别;知道MySQL字段类
型,知道如何选择MySQL的字段类型;可以纯手工编译搭建一个MySQL 数据库且配置好编码等正常稳定运行。
4.PHP:
根本语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api〔mysql/mysqli/PDO),知道各种编码问题的解决;知道常规纯熟使用的PHP框架〔ThinkPHP、Yii、Yaf等〕;理解根本MVC的运行机制和为什么这么做,理解不同的PHP框架之间的区别;可以快速学习一个MVC框架。可以知道开发工程中的文件目录架构,有根本的良好的代码构造和风格,可以完成小系统的开发和中型系统中某个模块的开发工作。
5.前端:
理解 HTML/CSS/JS 等相关根底知识,知道什么web标准,div+css的web/wap页面形式,知道HTML5和HTML4的区别;理解一些根本的前端知识和JS框架〔jQuery之类的〕;理解一些根本的JavaScript编程知识。
nginx和apache区别6.系统设计:
可以完成小型系统的根本设计,包括简单的数据库设计,可以完成根本的:阅读器 -> Nginx+PHP ->
数据库架构的设计开发工作。
中级PHP程序员〔T2〕
素质模型:可以随时随地搭建好LNMP环境,快速完成常规配置;可以追查解决大部分遇到的开发和线上环境的问题;可以独立承担中型系统的构架和开发工作;可以在大型系统中承担某个中型模块的开发工作。
1. Linux:
在第一阶段的根底上面,可以流畅的使用Shell脚本来完成很多自动化的工作〔数据库备份等〕;会简单的awk/sed/perl 操作,可以完成部分文本处理和数据统计等工作;可以安装大部分非特殊的Linux程序〔包括各种库、包、第三方依赖等等,比方Memcached/MongoDB/Redis/Sphinx之类的〕;理解根本的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索引存储构造和不同〔聚簇索引,BTree,B+Tree〕;知道根本的InnoDB事务处理机制;理解大部分MySQL 异常情况的处理方案〔或者知道哪儿到处理方案〕。
4. Redis/Memcached:
在大部分中型系统里面一定会涉及到缓存处理,所以一定要理解根本的缓存;知道Memcached和Redi
s的异同和应用场景,可以独立安装 Redis/Memcached,理解Memcahed 的一些根本特性和限制,知道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. 前端:
在第一阶段的根底上面,熟悉根本的协议〔协议代码200/300/400/500,根本的交互头〕;条件允许,可以在深化写出略微优雅的HTML+CSS+JavaScript,或者可以大致简单使用某些前端框架〔jQuery/Angular/React/RequireJS/BootStrap之类〕;假设条件允许,可以深化学习JavaScript编程,比方闭包机制、DOM处理;再深化些可以读读jQuery源码做深化学习。
8. 系统设计:
可以设计大部分中型系统的网站架构、数据库、根本PHP框架选型;性能测试排查处理等;可以完成类似:阅读器 -> CDN(Squid) -> Nginx+PHP -> 缓存 -> 数据库构造网站的根本设计开发维护;可以支撑每天数百万到千万流量根本网站的开发维护工作。
高级PHP程序员〔T3〕
素质模型:除了可以完成根本的PHP业务开发,还可以解决大部分深化复杂的技术问题,并且可以独立设计完成中大型的系统设计和开发工作;自己可以独立hold深化某个技术方向,在这块比较专业。〔比方在MySQL、Nginx、PHP、Redis等等任一方向深化研究〕
1. Linux:
除了第二阶段的才能,在Linux下面除了常规的操作和性能监控跟踪,还可以使用很多高级复杂的命令完成工作〔watch/tcpdump/starce/ldd/ar/gdb/sar/free等);在shell脚本方面,已经可以编写比较复杂的shell脚本来协助完成很多包括备份、自动化处理、监控等工作的shell;对awk/sed/perl 等应用很纯熟,可以随意操作控制处理文本统计分析各种复杂格式的数据;对Linux内部机制有一些理解,对内核模块加载,启动错误处理等等有个根本的处理;同时对一些其他相关的东西也理解,比方NFS、磁盘管理等等;理解Linux集、
负载平衡、容灾、数据同步等等。
2. Nginx:
在第二阶段的根底上面,已经可以把Nginx操作的很纯熟,可以对Nginx进展更深化的运维工作,比方
监控、性能优化,复杂问题处理等等;深化学习过Nginx工作原理部分,主要表如今阅读源码开始,比方详细的master/worker工作机制,Nginx内部的事件处理,内存管理等等;可以进展Nginx扩展的开发;同时对Nginx+Lua有一定程度的理解,使用Nginx+Lua 开发过相关程序。
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_loc k_wait_timeout等〕、连接池软件选择应用,对show *〔show status/show profile〕类的操作语句有深化理解,可以完成大部分的性能问题追查;MySQL备份技术的深化熟悉,包括灾备复原、对Binlog的深化理解,冷热备份,多IDC备份等;在MySQL原理方面,有更多理解,阅读源码理解MySQL的工作机制,比方主从同步〔复制〕技术的源码学习,或者某个存储引擎〔MyISAM/Innodb/Memery〕的源
码学习理解。 MongoDB层面,可以做一些线上的数据分析处理的操作,核心是要更好的深化理解RMDBS和NoSQL的不同场景下面的应用。
4. Redis/Memcached:
在第二阶段的根底上面,可以对Redis/Memcached进展更深化的应用。因为Memcached不是特别复杂,需对内存管理部分,阅读过源码或纯熟掌握其原理;Redis部分,做过一些复杂的数据构造的应用〔zset来做排行榜排序操作/事务处理用来保证原子性在秒杀类场景应用之类的使用操作〕;熟悉aof等同步机制的原理,可设计一个高可用的Redis应用架构和集。
5. PHP:
作为根底核心技能,需要在第二阶段的根底上,有更深化的学习和应用。从根本代码应用上面来说,可以解决在PHP开发中遇到95%的问题,理解大部分PHP的技巧;对大部分的PHP 框架可以迅速在一周内上手使用,并且理解各个主流PHP框架的优缺点,可以迅速方便工程开发中做技术选型;在配置方面,除了常规第二阶段会的知识,会理解一些比较偏门的配置选项〔php auto_prepend_file/auto_append_file〕,包括扩展中的一些复杂高级配置和原理〔比方memcached扩展配置中的memcache.hash_strategy、apc扩展配置中的ap_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〕。
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等〕和使用,理解大部分C/C++后端Server 开发中的问题
〔内存管理、日志打印、高并发、前后端通信协议、效劳监控〕,知道各个后端效劳RPC通信问题〔struct/ /thirft/protobuf等〕;可以更熟络的使用GCC和GDB 来开发编译调试程序,在线上程序core掉后可以迅速追查跟踪解决问题;通用模块开发方面,开发过一些通用的工具或库〔比方异步网络框架、日志库、内存池、线程池等〕。
7. 前端:
深化理解协议〔包括各个细致协议特殊协议代码和背后原因,比方302静态文件缓存了,502是nginx后面php挂了之类的〕;除了之前的前端方面的各种框架应用整合才能,前端方面的学习假设有兴趣可以更深化,表现形式是,可以自己开发一些类似jQuery的前端框架,或者开发一个富文本编辑器之类的比较琐碎考验JavaScript功力;
8. 系统设计:
系统设计在第二阶段的根底之上,可以应用掌握的经历技能,设计出比较复杂的中大型系统,可以解决大部分线上的各种复杂系统的问题,完成类似阅读器 -> CDN -> 负载平衡 ->接入层 -> Nginx+PHP -> 业务缓存 -> 数据库 -> 各路复杂后端RPC交互〔存储后端、逻辑后端、反作弊后端、外部效劳〕 -> 更多后端的复杂业务;可以支撑每天数千万到数亿流量网站的正常开发维护工作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论