php程式員面試分享
面試總結
今天去了北京著名IT公司進行PHP程式員的面試。這是人生第一次麼,怎麼不緊張?我是不是有病。不是,這叫自信呵.
首先是做一些筆試題。
1.mysql資料庫索引使用的資料結構?這樣做的好處是?
可以參考這篇博文:http://blog.csdn.net/ant_ren/article/details/2932068
2.有兩個字串a和b,判斷b字串是否出現在a中。不考慮大小寫。。
我的答案是:使用stripos()這個函數來解決的。
if(stripos($a,$b)>-1)echo "b in a";elseecho "b not in a";
拓展:
但是如果是不考慮順序的話,問b字串中的字元是否全部出現在a中。。。
那我們就需要用迴圈來解決的。下面提供解決方案:
$b_arr = str_split($b);for(var $i=0,$len = count($b_arr); $i < $len ; ++$i){if(stripos($a,$b_arr[$i])==-1)return false;return true;}
3.你知道的開源架構?
我按照自己的經驗寫了一些:
Laravel,PHP,jQuery。。。
4.簡單解釋session 和cookie。關閉cookie,session是否可用?
我寫的比較簡單:
session儲存在伺服器端,cookie儲存在用戶端。兩者沒有直接的聯絡。
對於訪問其他的頁面。PHP_SESSIONID是作為一個臨時cookie放在瀏覽器端的。
每次瀏覽器發出的請求,都會在http header裡 帶上 sessionid來標識自己。
如果禁用cookie,那麼會自動放在url後面進行傳遞。
5.資料庫最佳化方案
這個自己在網路上找一下。
6.設計一個Timer類,用來計算程式啟動並執行時間,並且簡單的調用它。
class Timer { private $StartTime = 0;//程式運行開始時間 private $StopTime = 0;//程式運行結束時間 private $TimeSpent = 0;//程式運行花費時間 function start(){//程式運行開始 $this->StartTime = microtime(); } function stop(){//程式運行結束 $this->StopTime = microtime(); } function spent(){//程式運行花費的時間 if ($this->TimeSpent) { return $this->TimeSpent; } else { list($StartMicro, $StartSecond) = explode(" ", $this->StartTime); list($StopMicro, $StopSecond) = explode(" ", $this->StopTime); $start = doubleval($StartMicro) + $StartSecond; $stop = doubleval($StopMicro) + $StopSecond; $this->TimeSpent = $stop - $start; return substr($this->TimeSpent,0,8)."秒";//返回擷取到的程式已耗用時間差 } } } $timer = new Timer(); $timer->start(); //...程式啟動並執行代碼 $timer->stop(); echo "程式已耗用時間為:".$timer->spent();
下面是簡單版的。
class Timer{private $t = 0;public function start(){$this->t = microtime(true);}public function stop(){return microtime(true)- $this->t;}}$time = new Timer();$time->start();//do somethings...$t = $time->stop();
7.建立複合索引應該注意的事項。
(1)對一張表來說,如果有一個複合索引 on (col1,col2)就沒有必要同時建立一個單索引 on col1。
(2)如果查詢條件需要,可以在已有單索引 on col1的情況下,添加複合索引on (col1,col2),對於效率有一定的提高。
(3)同時建立多欄位(包含5、6個欄位)的複合索引沒有特別多的好處,相對而言,建立多個窄欄位(僅包含一個,或頂多2個欄位)的索引可以達到更好的效率和靈活性。
8.設計一張資料庫表。該資料表用來儲存經常插入和查詢的url資料。
並解釋為什麼這麼設計的原因。
create table url(`id` int(11) not null primary key auto_increment comment "主鍵",`url` varchar(255) not null comment "url 內容",`name` varchar(50) comment "url對應的名稱")ENGINE=MyISAM
我是這麼建立的。
經常插入和刪除,我覺的資料庫儲存引擎應該使用MyISAM。
如果再在url,name欄位上建立一個索引就更好了。
不是我想簡單寫啊。這麼多題目就一張A4紙啊。
這不是逼著我寫簡單點嗎?不過我還是犯了一些低級的錯誤。我正在努力改正。
一點福利,分享給大家。
Best Wishes.