程序員找工做必備PHP基礎面試題 - 第十五天

「PHP學習網」 公衆號會天天分享一些面試題,正在找工做的小夥伴們能夠來看看哦。

1、寫出面相對象的三大特性以及定義?

封裝 繼承 多態
封裝:對象之外的部分不能隨意存取對象內部數據
繼承:經過子類繼承父類進行功能擴展
多態:對具備繼承關係的不一樣類對象,能夠對相同名稱的成員函數調用,產生不一樣的反應效果php

2、用PHP程序寫出5種以上方式獲取一個文件的擴展名?

//第1種方法mysql

substr(strrchr($file, '.'), 1);

//第2種方法
substr($file, strrpos($file, '.')+1);面試

//第3種方法
end(explode('.', $file));redis

//第4種方法
$info = pathinfo($file);
echo $info['extension'];sql

//第5種方法
pathinfo($file, PATHINFO_EXTENSION);編程

3、寫出如下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

4、寫出下列代碼的輸出結果:

function myfunc($argument){
    echo $argunment + 10;
}
$variable = 10;
echo 「myfunc($variable)=」.myfunc($variable);

先調用函數輸出,後輸出字符串
輸出爲: 20myfunc(10)=數組

5、請用盡量少的語句實現對輸出Email地址進行驗證的功能

'/[0-9a-zA-Z_]+@[0-9a-zA-Z_]\.com|\.net|\.cn/ism'

6、php是否有安全問題,若是有,請列舉說明。

1.過濾用戶輸入的值 好比從post和get傳參得來的值
例:$_POST[‘user’];不過濾,會形成一連串的麻煩安全

2.禁用register_globals 若是不由止,就沒法肯定該變量是不是預約義全局變量裏的值函數

例:regiseter_globals=on  $var 會代替掉 $_POST['var']

3.防止sql注入
使用 mysql_real_escape_string() 做爲用戶輸入的包裝器,就能夠避免用戶輸入中的任何惡意 SQL 注入post

例: $sql = "select count(*) as ctr from users where username='".mysql_real_
_string($username)."' and password='". mysql_real_escape_string($pw)."'
limit 1";

7、如何判斷SQL語句的運行效率?如何優化一個查詢SQL?

使用explain查看sql語句
最主要的查看type和Extra的值
  1. 避免全表掃描
  2. 如下操做不當也會形成全表掃描
  3. 避免在where子句中使用!=或<>操做符, 還有null值的判斷全表掃描
  4. 避免在where子句中使用or in not in
  5. 避免在where子句中對字段使用函數操做
  6. 不要寫一些沒有意義的查詢
  7. 索引儘可能不要過多

8、一羣猴子排成一圈,按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;
  }
 }

附加題

一、一們獵人帶着一隻兒狼,一隻羊和一捆白菜過河,但他一次只能帶三者中的一者過河。問:他怎樣過河才能不至於讓兒狼吃掉羊或讓羊吃掉白菜

先帶羊 後帶白菜 再帶狼

二、用小圓爐烤兩個餅,每一個餅正反面都要烤,而每烤一面所須要的時間是半分鐘,怎樣在一分半鐘烤好三個餅?

a餅 b餅 烤 半分鐘 把b拿掉 換上c餅 a餅反面 烤 半分鐘 再把a餅拿掉 換上b餅反面 c餅反面 烤半分鐘

三、一隻青蛙掉進一口18英尺深的井,天天白天它向上爬6英尺,晚上向下滑3英尺。按照這個速度多少天能夠爬出井口?

5天 第五天白天爬出井口

最後各位能夠掃下方二維碼關注我公衆號,目前我正在更新基礎面試題,以後會更新中高級、redis、liunx面試題

weixin.jpg

相關文章
相關標籤/搜索