现在可以说php挺复杂的了

熊猫88 发布于 2016/01/31 19:21
阅读 8K+
收藏 33
PHP

 这些天看了下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脚本来完成很多自动化的工作;awk/sed/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;对awk/sed/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跟apache/nginx不同的通信交互方式细节(mod_php/fastcgi)。(非常非常厉害的php程序员,圈子太窄了,就知道一俩个)

 高级:
  代码内核部分基本都阅览过(lmnp),熟悉多进程、多线程编程;多进程情况下面了解大部分多进程之间的通信方式,能够灵活选择通信方式(共享内存/信号量/管道等);多线程编程能够良好的解决锁冲突问题,并且能够进行多线程程序的开发调试工作;同时对网络编程比较熟悉,了解多进程模型/多线程模型/异步网络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掉后能够迅速追查跟踪解决问题。(超越了php的范畴,感觉像独孤求败了)
 

 
加载中
1
同城陌路人
同城陌路人
都还没有还跳出性能的怪圈,还在认为写出好性能的代码是程序员的终极追求
真友
真友
回复 @简单代码 : 赞同,一直以来我也是这样蛊惑我们老板的,老板要蛊惑,讲这样的道理他不听的。
朝半仙
朝半仙
还是社会主义初级阶段
简单代码
简单代码
赞同!先解决业务需求,不能纯抓代码,能加内存解决的问题,都不是事。
熊猫88
熊猫88
敲代码的就这点追求
0
yak
yak
独孤求败的水平,在二线城市能拿到多少钱的工资?
yak
yak
@熊猫88 一线20k,水平再高了到二线城市变8k这种就是正相关吧?
熊猫88
熊猫88
工资和水平只是正相关关系,不是正比例关系 都明白的
0
自由之信
自由之信
个人看法,如果职业需要,就做吧,如果是技术爱好(不过别过头了,生活,健康和时间还是要考虑的),就做吧,如果就是幻想能成为独孤求败,先冷静一下,然后再确定做不做了。
0
风华神使
风华神使
php研究到一定程度,基本就和php没太大关系了
攻城的狮子
攻城的狮子
赞同
0
jQer
jQer

了解多进程模型/多线程模型/异步网络IO模型的差别和选型,熟悉不同异步网络IO模型的原理和差异(select/poll/epoll/iocp 等),并且熟悉常见的异步框架(ACE/ICE/libev/libevent/libuv/Boost.ASIO等)和使用


这几样东西。没个专业 5 年 C Socket 经历,你一个主职 PHP 辅职看点 C 能搞懂?而且搞懂这些的人谁还会去写 PHP。

eechen
eechen
腾讯多年一线工作经验的峰哥不就用C开发了多进程多线程事件驱动高性能PHP网络扩展Swoole么?打脸了吧.扩展已经收录到PHP官方PECL仓库,并且扩展支持PHP7: https://pecl.php.net/package/swoole 看看PHP7+Swoole,想想都有点小激动!
荣sirl
荣sirl
这个等赞你一下
0
卖爷爷的老红薯
卖爷爷的老红薯
C学好,直接去看PHP源码,nginx源码,mysql源码。
陆小七的主页
陆小七的主页
程序=算法+数据,算法=数学.
卖爷爷的老红薯
卖爷爷的老红薯
回复 @晓组织 : 让你说对了。
晓组织
晓组织
菜b言论
lmlion
lmlion
没有深厚的数学知识,算法功底和数据库理论,C再熟练谈这些也是空中楼阁。
0
梅开源
梅开源

略微看了下,感觉越高级越打杂,兼了运维的活

或许web这点事本身并没有太复杂逻辑吧


OSC首席保安
OSC首席保安
回复 @同城陌路人 : 问题是好的开发团队,上哪找?好的寿命短,差的能永生。
同城陌路人
同城陌路人
好的开发团队,应该扁平化,每个开发人员都有机会接触到到架构+运维+基本的项目管理意识,聪明的你,一定不难发现这样的扁平化的团队出来的人跟其他团队出来的人是不一样的,,,这是我对鹅厂的一个小分析
0
徐迎龙
徐迎龙
thrift 写错了 写成 thirft
0
开开心心打酱油
开开心心打酱油
dedecms 看见就恶心
0
d
dlfish
看了下,感觉就是入门级还达不到,搞了好多年的php。丢人啊。
返回顶部
顶部