PHP 面試問哪些問題可以比較準確的反映出應聘者的開發水平?

不要泛泛而談的。


不清楚是什麼原因,面試了好多人,有經驗淺的,也有工作十幾年的,但沒有遇到一個能把下邊的基礎題回答好的.

我都很奇怪,他們寫代碼的時候都不考慮數據驗證,SQL注入,XSS的問題嗎???

這樣的代碼是怎麼敢放到線上的?

迫不得已,又出了一套筆試題,面向1-5年工作經驗的PHPer,分享給大家.

這套題共7個問題,前5題面向3年以內工作經驗的,第6題期望3年以上的能做出來,第7題期望5年以上的能做出來.

1.

寫一個php腳本,抓取頁面http://php.net/manual/en/langref.php右側的目錄列表.運行此腳本期望得到如下輸出:

[2016-12-17 13:44:30] fetching http://php.net/manual/en/langref.php
[2016-12-17 13:44:31] parsing start
[2016-12-17 13:44:32] the right side list is:
PHP Manual (http://php.net/manual/en/index.php)
Copyright (http://php.net/manual/en/copyright.php)
PHP Manual (http://php.net/manual/en/manual.php)
Getting Started (http://php.net/manual/en/getting-started.php)
Installation and Configuration (http://php.net/manual/en/install.php)
Language Reference (http://php.net/manual/en/langref.php)
Security (http://php.net/manual/en/security.php)
Features (http://php.net/manual/en/Features)
Function Reference (http://php.net/manual/en/funcref.php)
PHP at the Core: A Hacker"s Guide (http://php.net/manual/en/internals2.php)
FAQ (http://php.net/manual/en/faq.php)
Appendices (http://php.net/manual/en/appendices.php)
[2016-12-17 13:44:33] parsing end
[2016-12-17 13:44:34] saving to file langref.txt
[2016-12-17 13:44:35] saved

2.

創建一個資料庫php_manual,新建表index,這個表有3個欄位: id, title, link.
然後創建一個資料庫用戶php_manual_user,密碼是php_manual_pass.
把上述資料庫導出成sql,把SQL語句貼到下面,使得我們在mysql命令行終端里執行這些sql語句可以完成上述操作.

3.

寫一個php腳本,讀取第1題的結果langref.txt並解析出title和link,插入第2題創建的資料庫表index里.

4.

使用jQuery寫一個function來解析langref.php右側的目錄列表,運行這個function返回如下一個object.

{
"Copyright": "http://php.net/manual/en/copyright.php",
"PHP Manual": "http://php.net/manual/en/manual.php",
"Getting Started": "http://php.net/manual/en/getting-started.php",
"Installation and Configuration": "http://php.net/manual/en/install.php",
"Language Reference": "http://php.net/manual/en/langref.php",
"Security": "http://php.net/manual/en/security.php",
"Features": "http://php.net/manual/en/Features",
"Function Reference": "http://php.net/manual/en/funcref.php",
"PHP at the Core: A Hacker"s Guide": "http://php.net/manual/en/internals2.php",
"FAQ": "http://php.net/manual/en/faq.php",
"Appendices": "http://php.net/manual/en/appendices.php"
}

5.

寫一條shell命令,執行此命令可獲取到http://php.net/manual/en/langref.php的內容並將頁面里的所有大寫的PHP轉成小寫,最後將結果保存到/tmp/langref.html里.

6.

(加分題) 改寫下邊的腳本,使得當接收到SIGINT信號時列印出"caught signal SIGINT, exit"並退出.

&

7.

(加分題) 有一個超級大的int數組要求和,假設有1000W,寫一個php腳本,根據當前機器(假設是多核的)cpu的核數,fork出這麼多子進程,把數組平分,每個子進程計算其中一部分,並把結果保存到/tmp/子進程pid.txt.
最後父進程匯總並輸出求各結果.

=============================================================

Update: 最後加上了基礎題分析說明

兩年多之後,更新一下新的面試題.

基礎題

場景:

你入職了一家新公司.

上班第一天,接待人給你安排好了座位,然後拉過來一台沒拆封的新電腦.

你把電腦連接好之後,按下電源....

好吧,這真是一台新電腦,裡邊竟然內置了個DOS系統!!

你找同事拿來了操作系統光碟/U盤(這個無所謂了).半個小時後,操作系統安裝好了.

  1. 第一件事就是要把LAMP環境搭建起來,這樣才好工作.簡述搭建LAMP環境過程中的注意點.

  1. LMAP環境搭建好之後,你拿到了第一個開發任務.給公司內部開發一個通用審批系統.公司內部有一個DNS伺服器,上邊已經配好了這個系統的域名,叫approving.great-company.com,並指向了你本機的ip.
    你嘗試訪問了一下http://approving.great-company.com
    ,出現了apache經典的It
    Works頁面,域名是生效的.你打算在桌面新建一個目錄叫approving並在這個目錄下完成這個系統的開發.如何配置apache使得訪問http://approving.great-company.com的時候能夠打開approving/index.php

  1. apache配置好之後,你開始了開發工作.這時,同事給了你一份代碼,是另一個人寫了一半的通用審批系統.這下好多了,你不用從零開始寫代碼了.你翻看了他的代碼,發現邏輯是這樣的:
    用戶使用email和密碼登錄這個系統後,程序把這個用戶的id放到了session里.通過$_SESSION["uid"]就可以拿到登錄用戶id,然後去資料庫里就能把這個用戶的個人信息(比如叫什麼名字,是哪個部門的)拿到了.接著,你找到了這個通用審批系統主要功能點的代碼

&

審批事項: &
詳細描述: &