畫江湖之面試篇 [第一篇] tip:基礎是每個程式設計師必須的

Krisji發表於2019-03-21

第一題:用 PHP 獲取當前時間並列印,列印格式:2006-5-10 22:21:21

大家覺得是不是狠easy~ no 前面有個坑 仔細看5-10 這是什麼? 記住必須答成這種格式~

答案看下面區域:

date_default_timezone_set('PRC');//設定中國區域
echo date('Y-n-d H:i:s');//仔細看`n-d` 對應就是輸出5-10 而不是10-5

第二題:

字串轉陣列,陣列轉字串,字串擷取,字串替換,字串查詢的函式分別是什麼?

這道題呢?主要考察大家的基礎好不好 接下里我帶你們一起寫一下

答案看下面區域:

1 字串轉陣列

$str='www.baidu.com';
print_r(str_split($str));//第一種按照長度 去切割字串變成陣列
var_dump(explode('.',$str));//第二種 用explode 按照某個字串 去切割這個字串變為陣列

2 陣列轉字串

$arr=array("aaa","bbb","ccc");
print_r(implode('',$arr)); //join() 這個函式不知道小夥伴們用過沒有 其實join() 函式是 implode() 函式的別名 沒什麼區別!

3 字串擷取

substr($str,1,10); 
mb_substr mb_strcut//這2個函式 後面是為了解決中文亂碼的問題

4 字串替換

$bodytag = str_replace("%body%", "black", "<body text='%body%'>"); 

preg_replace();//這個函式是透過正則去替換咯 看下方事列
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';//寫入正則格式 不會正則自己去補充
$replacement = 'runoob ${2},$3';//${} 代表你要替換的哪個元素
echo preg_replace($pattern, $replacement, $string);

5 字串查詢

preg_match()//正則查詢 返回的是匹配的次數 看下方事列
//模式分隔符後的"i"標記這是一個大小寫不敏感的搜尋
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "查詢到匹配的字串 php。";
} else {
    echo "未發現匹配的字串 php。";
}

preg_grep() //函式用於返回匹配模式的陣列條目。 看下方事列
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮點數的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);

strstr() //函式搜尋字串在另一字串中的第一次出現。看下方事列
查詢 "Shanghai" 在 "I love Shanghai!" 中的第一次出現,並返回字串的剩餘部分:
echo strstr("I love Shanghai!","Shanghai");
Shanghai!

strpos() //函式查詢字串在另一字串中第一次出現的位置 記住返回是int 就是索引的位置
strrpos() //函式查詢字串在另一字串中最後一次出現的位置 記住返回是int 就是索引的位置

第三題:

解釋一下 PHP 的類中:protected,public,private,interface,abstract,final,static 的含義?

這道題呢?主要考察大家對物件導向的基礎理解

答案看下面區域:

1)protected 被保護的 
2)public 公有的 
3)private 私有的 
4)interface 介面 
5)abstract 抽象類 
6)final 最後的類和方法  //這個大家不知道用的多不多 特別解釋下 final定義的類不能被繼承
7)static 靜態方法和屬性

第四題:寫出下列程式碼的資料結果?

這道題呢?主要考察大家對正則的理解 和對 PHP函式的理解

答案看下面區域:

$date='08/26/2003'; 
echo preg_replace("/([0-9]+)\/([0-9]+)\/([0-9]+)/","\${3}/\${1}/\${2}",$date); 
輸出為2003/08/26 記住正則這個()代表子表示式 代表要匹配的子元素

第五題:

從表 login 中選出 name 欄位包含 admin 的前 10 條結果所有資訊的 sql 語句?

這道題呢?主要考察大家對sql 語句的基礎掌握

答案看下面區域:

select * from login where name like "%admin%" limit 10;

第六題:簡述論壇中無限分類的實現原理?

這道題呢?主要考察大家對mysql 的建表理解

建立以下欄位:id name pid path 其中pid 就是指向父類的id

第七題:寫一個函式,儘可能高效的,從一個標準 url 裡取出檔案的副檔名?

這道題呢?主要考察大家對php 函式的掌握


$str="http://www.test.com.cn/abc/de/fg.php?id=1";//先定義一個字串
$str2=getExt($str);
echo $str2;
function getExt($url){
    $arr = parse_url($url);//透過此函式解析url 地址

//    var_dump($arr);
    /*
     * array(4) {
          ["scheme"]=>
          string(4) "http"
          ["host"]=>
          string(15) "www.test.com.cn"
          ["path"]=>
          string(14) "/abc/de/fg.php"
          ["query"]=>
          string(4) "id=1"
        }
     */
    $file = basename($arr['path']);//顯示帶有副檔名的檔名
    var_dump($file);
        /*
         * string(6) "fg.php"
         */
    $ext = explode(".",$file);//最後透過此函式切割字串
    return $ext[1];//取出第一個就是字尾咯~
}

第八題:描述一下大流量高併發量網站的解決方案?

這道題呢?主要考察處理過高併發能力

對比現實中飯店一下子同一個時間段來吃飯 比方中午
1 把這個店面面積擴大點,增加同時吃飯人數
   伺服器最佳化:我們把apache伺服器只支援(3000併發)可以換成nginx伺服器(3w併發)
2 多找點服務員和廚師嘛  
   伺服器最佳化:修改apache,nginx的預設配置,把其中的併發數調到最高嘛
3 多開一些店 連鎖店
   伺服器最佳化:多增加幾臺伺服器同時對客戶提供網路服務 lvs nginx 做負載均衡
4 限時客戶在我們店吃飯的時間 不能讓他們吃完還打牌把
   伺服器最佳化:減少客戶在伺服器上的連線斷開時間 比方mysql 的連線斷開時間 wait_timeout這個引數最多的連線時間 不能讓客戶惡意一直連著
5 給廚師培訓 減少他的上菜時間
   那就要給php程式碼做最佳化
6 讓廚師叫手下把菜提前做好 放到冰箱裡面
   redis 快取 檔案快取

第九題:如何設計或配置 Mysql,才能達到高效使用的目的?

這道題呢?主要考察處理過mysql 最佳化

1 mysql伺服器主從配置 降低單機下mysql的負載 可以讀寫分離
2 表分割槽
3 索引最佳化 用desc 或者開啟慢查詢日誌解析sql語句 看哪個欄位是否需要最佳化
4 分庫分表 進行垂直拆分和水平拆分

第十題:如何進行防 SQL 注入?

這道題呢?主要考察如何處理安全措施

1 表單儘量用 post 提交,核心使用者驗證都走 post,避開 get容易暴露客戶資料
2 使用HTTP_REFERER 檢查原始檔是否來自本系統
3 開啟addslashes在特殊符號前加\
4 使用htmlspecialchars對字串轉實體
5 使用者授權登入
6 使用PDO
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章