畫江湖之面試篇 [第三篇] tip:生活沒你想的那麼容易~你不努力沒人能幫你

Krisji發表於2019-03-22

第一題:寫出你認為語言中的高階函式?

這道題呢?主要考察你的知識面

1 陣列裡面 
   array_filter
   array_map
   array_multisort
   array_count_values
   array_splice  
2 字串
   htmlspecialchars
   json_encode
   json_decode
   substr_count //計算一個字串在字串出現的次數
   pathinfo
   parse_url
   parse_str //把查詢字串解析到變數中
3 正則
   preg_match_all
   preg_replace 
get_class_methods() 得到類的方法名的陣列

第二題:

請寫一個函式,實現以下功能:

字串"open_door" 轉換成 "OpenDoor"、"make_by_id" 轉換成 "MakeById"。

這道題呢?主要考察你的基礎是否紮實

function demo($string){
    $arr=explode('_',$string); 
    foreach($arr as $key=>$val){
        $arr[$key]=ucfirst($val); 
    }
    return implode('',$arr);
}

請寫一個函式將 1234567890 轉換成 1,234,567,890 每 3 位用逗號隔開的形式:

<?php 
$str='1234567890';
function demo($str){
  $str=strrev($str);//先翻轉字串
  $arr=str_split($str,3);//每3個隔開
  $str=strrev(implode(',',$arr));//在把陣列以,變成字串 在翻轉
  echo $str;
}
demo($str);

第三題:透過PHP函式的方式對目錄進行遍歷,寫出程式

這道題呢?主要考察你的基礎是否紮實

dirs('F:\wwwroot');
function dirs($path){ 
     $path=str_replace('\\','/',$path); //替換下轉義的問題
     $res=opendir($path); //開啟檔案
     while($filename=readdir($res)){//迴圈讀取檔案
           $newpath=$path.'/'.$filename; //拼接檔名
           if(is_dir($newpath)){//如果還是個目錄
               echo '<font color="red">目錄:</font>'.$filename.'<br />';//輸出目錄名
               dirs($newpath); //遞迴遍歷此目錄
            }else{
              echo '檔案:'.$filename.'<br />';//輸出檔名
            }   
      }     
}

第四題:寫出程式執行的結果

這道題呢?主要考察你的優先順序的問題 這邊有個坑 仔細看

<?php 
$a=0;
$b=0;
If($a=3 || $b=3){ //仔細分析下 其實是3 || $b=3 3 就是真 $a=3 就是true 後面$b=3 不會執行
    $a++;//true++ 就是1
    $b++;//0++ 就是1
}

Echo $a.",".$b; 所以最後就是1 1
?>

第五題:寫出程式執行的結果

這道題呢?主要考察你的排坑能力 什麼是函式里面的返回 echo return

function myfunc($argument){
   echo $argument+10;
}
echo $argunment + 10; //這裡多了一個 n 字母,變數為空,就相當於直接 echo 10  這邊函式並沒有返回只是輸出

$variable = 10;

echo "myfunc($variable)=".myfunc($variable);

答案是10myfunc(10)=

第六題:試寫出 mysql 資料庫最佳化的一些方法

這道題呢?主要考察你對mysql 最佳化的能力

(1)  選取最適用的欄位屬性,儘可能減少定義欄位長度,儘量把欄位設定 NOT NULL,例如'省 份,性別',最好設定為 ENUM
(2) 使用連線(JOIN)來代替子查詢:
(3) 建立索引:
(4) 使用擴充套件庫 PDO 或者 mysqli 使用預處理 stmt 快取欄位
(5) 最佳化查詢語句最好在相同欄位進行比較操作 ,select 查詢的時候儘量少用*,用到什麼
欄位查什麼欄位在 sql 語句中儘量少用 mysql 的函式,我們在 PHP 端處理好後再交給mysql
(6) 不要用 like 來查詢 這樣很不效率,用 Sphinx 全文檢索
(7) 分割槽技術
(8) 主從資料庫
(9) 結合 memcache
(10)結合 sphinx es 全文檢索
(11).資料庫最佳化和伺服器最佳化 
  Mysql 主從
  Mysql 叢集

第七題:echo(),print(),print_r()的區別

這道題呢?主要考察你的php的基礎理解 而且經常考這個 我發現

echo 是 PHP 語句,
print 和 print_r 是函式,
語句沒有返回值,函式可以有返回值(即便沒 有用)
print() 只能列印出簡單型別變數的值(如 int,string) 
print_r() 可以列印出複雜型別變數的值(如陣列,物件)
echo 輸出一個或者多個字串

第八題:用PHP 寫出客戶端ip和服務端ip的區別?

這道題呢?主要考察你的php的基礎理解 而且經常考這個 我發現

答:
列印客戶端 IP:
echo $_SERVER['REMOTE_ADDR']; 
列印服務端IP
echo $_SERVER['SERVER_ADDR']

第九題:請寫一個函式驗證電子郵箱的格式是否正確?

這道題呢?主要考察正則

答:
function  c_email($email){
    $reg='/^
    ([a-zA-Z0-9]{1,20})//
    (([\_\-\.])?//
    中間可以有"-"與"_"符號
    ([a-zA-Z0-9]{1,20}))*//
    * 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \* 
    @
    ([a-zA-Z0-9]{1,20})(([\-\_])?([a-zA-Z0-9]{1,20}))*// 同上
    (\.[a-z]{2,4}){1,2}//
    支援.net.cn,.com.cn這樣的域名字尾;
    $/';
}
1,不做總長度判斷,長度判斷可以自己加上;

2,支援.net.cn,.com.cn這樣的域名字尾;

3,郵箱名部分以字母或者數字開頭,中間可以有"-"與"_"符號;

4,域名部分以字母或者數字開頭,中間可以有"-"與"_"符號;

第十題:請將2維陣列按照name的長度進行重新排序?按照順序將id 賦值(從1開始)

這道題呢?主要考察你對php 陣列的操作能力

<?php
$Tarray = [['id'=>0,'name'=>'123833'],['id'=>1,'name'=>'44'],['id'=>3,'name'=>'22'],['id'=>2,'name'=>'3232']];
//定義一個二維陣列

foreach($Tarray as $key=>$value) {
  $long[$key] = strlen($value['name']);//定義一個關聯陣列 以key 和value 為name的長度
}

array_multisort($long, SORT_ASC, $Tarray);
//使用這個函式 第一個是要排序的欄位的陣列 第二個按照什麼方式排序 //要處理的二維陣列

$i = 1;
foreach($Tarray as &$value) {
  $value['id'] = $i;
  $i++;
}//按照順序將id 賦值(從1開始)

var_dump($Tarray);die();
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章