有关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