“PHP學習網” 公眾號會每天分享一些面試題,正在找工作的小夥伴們可以來看看哦。
一、寫出面相物件的三大特性以及定義?
封裝 繼承 多型
封裝:物件以外的部分不能隨意存取物件內部資料
繼承:透過子類繼承父類進行功能擴充套件
多型:對具有繼承關係的不同類物件,可以對相同名稱的成員函式呼叫,產生不同的反應效果
二、用PHP程式寫出5種以上方式獲取一個檔案的副檔名?
//第1種方法
substr(strrchr($file, ‘.’), 1);
//第2種方法
substr($file, strrpos($file, ‘.’)+1);
//第3種方法
end(explode(‘.’, $file));
//第4種方法
$info = pathinfo($file);
echo $info[‘extension’];
//第5種方法
pathinfo($file, PATHINFO_EXTENSION);
三、寫出以下PHP程式的執行結果
<?
$count=5;
function get_count(){
static $count=0;
return ++$count;
}
echo $count;
echo $count++;
echo $count;
echo get_count();
echo get_count();
?>
輸出為:5 5 6 1 2
四、寫出下列程式碼的輸出結果:
function myfunc($argument){
echo $argunment + 10;
}
$variable = 10;
echo “myfunc($variable)=”.myfunc($variable);
先呼叫函式輸出,後輸出字串
輸出為: 20myfunc(10)=
五、請用盡可能少的語句實現對輸出Email地址進行驗證的功能
'/[0-9a-zA-Z_]+@[0-9a-zA-Z_]\.com|\.net|\.cn/ism'
六、php是否有安全問題,如果有,請列舉說明。
1.過濾使用者輸入的值 比如從post和get傳參得來的值
例:$_POST[‘user’];不過濾,會造成一連串的麻煩
2.禁用register_globals 如果不禁止,就無法確定該變數是否是預定義全域性變數裡的值
例:regiseter_globals=on $var 會代替掉 $_POST[‘var’]
3.防止sql注入
使用 mysql_real_escape_string() 作為使用者輸入的包裝器,就可以避免使用者輸入中的任何惡意 SQL 注入
例: $sql = "select count(*) as ctr from users where username='".mysql_real_
_string($username)."' and password='". mysql_real_escape_string($pw)."'
limit 1";
七、如何判斷SQL語句的執行效率?如何最佳化一個查詢SQL?
使用explain檢視sql語句
最主要的檢視type和Extra的值
- 避免全表掃描
- 以下操作不當也會造成全表掃描
- 避免在where子句中使用!=或<>運算子, 還有null值的判斷全表掃描
- 避免在where子句中使用or in not in
- 避免在where子句中對欄位使用函式操作
- 不要寫一些沒有意義的查詢
- 索引儘量不要過多
八、一群猴子排成一圈,按1,2,…,n依次編號,然後從第一個開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,再把它踢出去,……。如此不停的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。要求程式設計模擬此過程,輸入m,n,?輸出最後那個大王的編號。
這題和擊鼓傳花一樣,可以用佇列的思路實現
//註釋不要抄,幫助理解
function king($m ,$n)
{
//構造陣列
for($i=1 ;$i<$m+1 ;$i++){
$arr[] = $i ;
}
$i = 0 ; //設定陣列指標
while(count($arr)>1)
{
//遍歷陣列,判斷當前猴子是否為出局序號,如果是則出局,否則放到陣列最後
if(($i+1)%$n ==0) {
unset($arr[$i]) ;
} else {
array_push($arr ,$arr[$i]) ; //本輪非出局猴子放陣列尾部
unset($arr[$i]) ; //刪除
}
$i++ ;
}
return $arr ;
}
var_dump(king(6,4));
或者
public static function play($first,$m,$k)
{
//先要找到是後一個節點
$tail=$first;
while ($tail->next!=$first)
$tail=$tail->next;
//從第幾個人開始數就要將這個人設為頭節點,也要找到它的後一個結點,作作輔助結點。
for($i=0;$i<$k-1;$i++)
{
$first=$first->next;
$tail=$tail->next;
}
while($tail!=$first)
{
//找到要移出的結點。
for($j=0;$j<$m-1;$j++)
{
$first=$first->next;
$tail=$tail->next;
}
//刪除節點
echo '小孩'.$first->no.'被移除'.'<br>';
$first=$first->next;
$tail->next=$first;
}
echo '大王是:'.$first->no;
}
}
附加題
1、一們獵人帶著一隻兒狼,一隻羊和一捆白菜過河,但他一次只能帶三者中的一者過河。問:他怎樣過河才能不至於讓兒狼吃掉羊或讓羊吃掉白菜
先帶羊 後帶白菜 再帶狼
2、用小圓爐烤兩個餅,每個餅正反面都要烤,而每烤一面所需要的時間是半分鐘,怎樣在一分半鐘烤好三個餅?
a餅 b餅 烤 半分鐘 把b拿掉 換上c餅 a餅反面 烤 半分鐘 再把a餅拿掉 換上b餅反面 c餅反面 烤半分鐘
3、一隻青蛙掉進一口18英尺深的井,每天白天它向上爬6英尺,晚上向下滑3英尺。按照這個速度多少天可以爬出井口?
5天 第五天白天爬出井口
最後各位可以掃下方二維碼關注我公眾號,目前我正在更新基礎面試題,之後會更新中高階、redis、liunx面試題
本作品採用《CC 協議》,轉載必須註明作者和本文連結