關於PHP程序員解決問題的能力

這個話題老生長談了,在面試中必然考覈的能力中,我我的認爲解決問題能力是排第一位的,比學習能力優先級更高。解決問題的能力既能看出程序員的思惟能力,應變能力,探索能力等,又能夠看出他的經驗。若是解決問題能力不佳是沒法經過面試的。php

這裏舉個例子,假如我執行了一個PHP的腳本,如php test.php,預期是能夠返回一個字符串。但執行後沒有任何信息輸出,這時候經過什麼方法能知道程序錯在哪裏?這裏能夠將解決問題能力分爲8個等級,越到後面的表示能力越強。mysql

Lv0 查看PHP錯誤信息程序員

程序沒有達到預期效果,證實代碼出錯了,看PHP的錯誤信息是第一步。若是直接忽略錯誤信息,代表這我的不適合擔任專業的程序員崗位。有些狀況下php.ini配置中關閉了錯誤顯示,須要修改php.ini打開錯誤信息,或者錯誤信息被導出到了日誌文件,這種狀況能夠直接tailf php_error.log來看錯誤信息。web

拿到錯誤信息後直接定位到程序代碼問題,或者到Google/百度搜索,便可解決問題。面試

注:打開錯誤顯示的方法是sql

  • 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的絕對路徑。swoole

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/archi...

相關文章
相關標籤/搜索