PHP 程序员解决问题能力的八个级别

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高。解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验。如果解决问题能力不佳是无法通过面试的。

这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串。但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强。

Lv0 查看PHP错误信息

程序没有达到预期效果,证明代码出错了,看PHP的错误信息是第一步。如果直接忽略错误信息,表明这个人不适合担任专业的程序员岗位。有些情况下 php.ini配置中关闭了错误显示,需要修改php.ini打开错误信息,或者错误信息被导出到了日志文件,这种情况可以直接tailf php_error.log来看错误信息。

拿到错误信息后直接定位到程序代码问题,或者到Google/百度搜索,即可解决问题。

注:打开错误显示的方法是

  • php.ini中display_errors / display_startup_errors 设置为On
  • php.ini中error_reporting 设置为E_ALL
  • PHP代码中设置error_reporting(E_ALL)

Lv1 存在多个版本的php或php-cli与php-fpm加载不同的配置

存在多个版本的php,懂得通过which php来看是哪个PHP,或者加绝对路径制定php版本。表示此PHPer通过了此层级的50%考验。

另外一个情况就是php-cli与php-fpm得到的执行情况不一样,如在web浏览器中执行是对的,cli下执行是错的。这时候可能是2个环境 加载的php.ini不同所致。cli下通过php -i grep php.ini得到加载了哪个php.ini。而fpm下通过phpinfo()函数可以得到php.ini的绝对路径。

Lv2 var_dump/die打印变量值信息单步调试

这是惯用的程序调试手段,也是最简单粗暴有效的解决问题方法。高级一点的手段是使用PHP的Trace类/日志类,花哨一点的可以借助phpstorm+xdebug在IDE工具里进行Debug。

Trace工具还可以分析脚本的耗时,进行PHP程序的性能优化。

这3个考验全部通过,表明此程序员已经具备了专业PHP程序员应该有的解决问题能力了。PHP程序员只要过了这个等级,就足以应多大部分情况,在中小型网站中毫无压力。 

Lv3 使用strace工具跟踪程序执行

strace可以用来查看系统调用的执行,使用strace php test.php,或者strace -p 进程ID。strace就可以帮助你透过现象看本质,掌握程序执行的过程。这个手段是在大型网站,大公司里最常用的。如果没掌握strace,这里只能说 抱歉了,我们不接受不会strace的PHPer。

strace其实也是对程序员基础的考验,如果不懂操作操作系统,完全不懂底层,肯定也达不到会用strace的程度。当然strace对于PHP 代码里的死循环是解决不了的。比如你发现一个php-fpm进程CPU100%了,strace恐怕是解决不了的。因为strace是看系统调用,一般都 是IO类操作,既然是IO密集,那CPU一定不可能是100%。

Lv4 使用tcpdump工具分析网络通信过程

tcpdump可以抓到网卡的数据通信过程,甚至数据内容也可以抓到。使用tcpdump可以看到网络通信过程是什么样的,如何时发起了TCP SYN3次握手,何时发送FIN包,何时发送RST包。这是一个基本功,如果不懂tcpdump,证明不具备网络问题解决能力。

Lv5 统计函数调用的耗时和成功率

使用xhporf/xdebug导出PHP请求的调用过程,然后分析每个函数调用的过程和耗时。能够分析PHP程序的性能瓶颈,找出可以优化的点。

另外一个对于网络服务的调用,如mysql查询,curl,其他API调用等,通过记录起始和结束时microtime,返回的是不是false, 可以得到调用是否成功,耗时多少。如果可以汇总数据,整理出调用的成功率,失败率,平均延时,证明此程序员对接口质量敏感,有大型网站项目经验。

Lv6 gdb使用

gdb是C/C++调试程序的利器,需要具备一定C/C++功底的程序员才会能熟练使用gdb。上面说的strace无法跟踪php程序CPU100%,而gdb是可以跟踪的。另外gdb也可以解决php程序core dump的问题。

通过gdb -p 进程ID,再配合php-src的.gdbinit zbacktrace等工具,可以很方便地跟踪PHP程序的执行。像上面的CPU100%往往是PHP程序中发生死循环了,gdb进行多次查看,就大致可 以得到死循环的位置。具备gdb解决问题能力的PHP程序员少之又少。如果能使用gdb解决PHP问题,这个PHPer百分之百可以通过面试,并且可以拿 到较高的技术评级。 

Lv7 查看PHP内核和扩展源码

如果能熟悉PHP内核和扩展的源码,遇到PHP程序中最复杂的内存错误,也可以有解决的能力。这类PHP程序员就是凤毛麟角了。配合gdb工具和对PHP源码的熟悉,可以查看opcode的信息,execute_data的内存,全局变量的状态等。

你是哪个级别呢?

原文:http://rango.swoole.com/archives/340 作者: @韩天峰-Rango

时间: 2025-01-19 06:58:22

PHP 程序员解决问题能力的八个级别的相关文章

【杂谈】PHP程序员的能力水平层次

PHP程序员的能力水平层次 前言 之前看过很多篇关于服务端工程师和PHP开发者的能力模型介绍,每篇都对能力有侧重点. 下面我们来详细谈谈以开发能力为基准点的PHP程序员的能力水平层次. 层层递进 1.功能开发 这个水平的程序员一般是在校学生或者培训机构学习中的同学,这时对PHP基本语法不太熟悉,做东西都靠查资料. 对于功能实现,能用但是健壮性和扩展性都不行,也就是我们所提到的实验性项目的模块.推荐处于这个层次的同学去尝试大型的模块,去解决复杂的问题,在实际开发中提升对语言的熟悉程度. 2.系统开

关于PHP程序员解决问题的能力

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能力不佳是无法通过面试的. 这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串.但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强. Lv0 查看PHP错误信息 程序没有达到预期效果,

程序员解决问题的60个策略(转)

英文原文:60 Problem Solving Strategies 程序员的生活就是解决一个又一个问题,永无止境.这篇文章介绍了一系列解决问题的策略. 根本的指导方针 1. 首先写代码的时候最好不要有缺陷.最好的修复方法就是让 bug 胎死腹中. 良好的单元测试 强制数据库约束 使用输入验证框架 避免未实现的"else"条件 在应用到主程序之前知道如何在孤立的情况下使用 日志 2. print 语句.往往额外输出个一两行将有助于隔离问题. 3. 切换至详细的日志记录.详细的日志记录有

程序员解决问题的 60 个策略

程序员的生活就是解决一个又一个问题,永无止境.这篇文章介绍了一系列解决问题的策略. 根本的指导方针 1 . 首先写代码的时候最好不要有缺陷.最好的修复方法就是让 bug 胎死腹中. 良好的单元测试 强制数据库约束 使用输入验证框架 避免未实现的"else"条件 在应用到主程序之前知道如何在孤立的情况下使用 日志 2 . print 语句.往往额外输出个一两行将有助于隔离问题. 3 . 切换至详细的日志记录.详细的日志记录有助于发现更多的线索. 4 . 搜索日志.如果日志太多,可采取关键

程序员保持身心健康的八种方式

       国际  程序员是一个辛苦的行业,长时间面对的只是需要解决的问题,更不要提开发期限和无理取闹的客户了,这样的工作简直无以承受.怎么办呢我们?我们热爱编程,乐于创建功能--我们喜欢那种将一堆代码弄成像Facebook或者Digg那样的赚钱工具的感觉.        也正由于程序员所带给我们的一切,这工作仍让我们欲罢不能.这种情况下,如何处理工作带来的压力便成了一项技巧.以下分享我的一些方式,以保持你的身心健康. 懂得何时走开        一般来说程序员大多有定力.做事有条理.我们不愿

程序员的八个级别

你是否被人问过这样一个经典的面试问题,"五年内你对自己有什么规划?"当被问到时,我的脑子里总会回放一段1984年<Twisted Sister>里的一个视频片段. 我想让你告诉我说--不,这样更好,站起来,对着全班说– 你今后打算干什么? 你想当摇滚明星,这很自然!或者至少要成为一名明星级程序员.这种问题一般不会得到一个很严肃的回答--就像另外一个毫无新意且充满压抑的问题,"你最大的弱点是什么?"弱点是有时候太过摇滚,可能会伤着无辜的旁观者. 但我却不这

程序员成长规划

引言 我的程序员成长之路 程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远.总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快:或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情. 第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序.这个过程可以说是对计算机和程序设计的入门阶段.这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识. 第二阶段,而后参加工作

我是怎么招聘程序员的

很早以前就想写一篇和面试相关的文章了,今天在网络上看到一篇关于如何去面试程序员的英文文章,发现其中有很多和我共鸣的东西,所以仿照其标题通过自己的经历写下了这篇文章. 工作这么多年来,即被面试过,也面试过他人,对于程序员的面试,经历过很不错的面试,很专业的面试,也经历过一些BT和令人不爽的面试,我个人觉得一个好的面试,面试官是很重要的,所以,本文想从"面试官"的角度来阐述一下.于是,有了下面这样一篇的文章,希望本文对你的职场经历有用,特别是那些正在招聘和面试程序员的朋友,我觉得这篇文章会

程序员为啥不被人喜欢

林语堂有提到不被人喜欢的十种原因: 一.腰有十文钱必振衣作响.  二.每与人言必谈及贵戚.  三.遇美人必急索登床.  四.见到问路之人必作傲睨之态.  五.与朋友相聚便喋喋高吟其酸腐诗文.  六.头已花白却喜唱艳曲.  七.施人一小惠便广布于众.  八.与人交谈便借刁言以逞才.  九.借人之债时其脸如丐,被人索偿时则其态如王.  十.见人常多蜜语而背地却常揭人短处. 我们反过来看看,作为程序员,哪些特质容易招人喜欢,让我们试试看能不能做一个被人喜欢的程序员. 编码又快又好 程序稳定Bug少 积