这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高。解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验。如果解决问题能力不佳是无法通过面试的。
这里举个例子,假如我执行了一个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的内存,全局变量的状态等。
相关推荐
PHP开发程序员解决问题的能力编程小技巧共3页.pdf.zip
在PHP程序员面试中,你会被问到一些常见的问题。以下是一些你需要准备好的问题: - 你在PHP开发方面的经验是什么? - 你的PHP技能是如何得到提升的? - 你最喜欢的PHP框架是哪一个?为什么? - 你在PHP开发中遇到的...
PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行配置,然后...
但所谓“解铃还需系铃人”,coding的问题终究还需要coder来解决,无论对于安全服务工程师还是对于普通开发工程师,在面对Web安全问题时终究要把其脉、摸其底,以往的渗透测试工程师讲Web安全或侧重漏洞原理,或侧重...
这些问题php程序员工具箱都为您解决!php程序员工具箱集合了Apache和Mysql,可以一键搭建和配置!并且有多个版本可以进行切换! 2、在线小工具 集合了一些日常使用频繁的一些小工具,方便实用,大大提高您的工作...
... ...并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题。以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则。
每一章都分为两部分,前一部分“深入分析”详细说明相关的技术信息,后一部分“快速解决方案”针对问题提供快速解决之道,可以帮助读者运用知识,解决问题,以及快速掌握复杂的技术要点,从而成为PHP专家。...
...并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个...以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则。 1.懒惰是金 2.编写漂亮的代码 3.追求程序的速度,而不是编程的速度
不论你是经验丰富的PHP程序员,还是刚从其他语言转到PHP,本书都是一个理想的实用资源。 本书提供的技巧包括: 基本数据类型:字符串、数字、数组和日期时间。 程序构建模块:变量、函数、类和对象。 Web编程:...
最令PHP初学者们头痛的十四个问题,解决PHP程序员初学是遇到的问题,对于学习php很有帮助
工作经验大概在3~4年,普通的WEB系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题。但他们会这样的物点: 除了PHP不使用其它的语言,可能会点shell 脚本。 对PHP的掌握不...
对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可伸缩...
《php开发实战1200例》包括第1卷、第2卷共计1200个例子,《PHP开发实战1200例...PHP开发实战1200例(第1卷)(附光盘)》适合php的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合php程序员参考、查阅。
PHP设计模式,适合有经验的...事实上,许多程序问题都不断的反复的遇到,而且许多用来解决这些问题的基本 (或者说是设计模式)都已经浮现出来。设计模式就是一个教你如何利用真实可靠的设计来 组织你的代码的模板。
对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可...
如果您无法在一小时内解决PHP的5个问题,这些问题将使您失去程序员的资格 问题1 编写三个函数,这些函数使用for循环,while循环和递归来计算列表中数字的总和。 问题2 编写一个函数,通过采用交替元素将两个列表...
这个仓库是关于什么的 创建该存储库是为了组织与数据结构和算法有关的问题的解决方案。 并且,如果可能的话,为学习与数据结构和算法有关的各种概念提供一种更简单的方法。 以下评委使用的问题 代码部队 厨师 紫外线...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则...
PHP作为一个开源产品,在短短的几年时间里,已倍受广大网页程序员的喜爱。 PHP与 MYSQL 的组合,已成为各企业、公司的一种普遍采用的技术方案。一些 中小企业由于技术成本等问题,一直采用老旧的系统,而出现的 PHP...
PHP开发手册是针对PHP程序员做开发实的查询工具,可以很方便的查询到你当前所需问题的解决办法