PHP面試

2019年的PHP面試,把天天面試的東西記錄下來。php

PHP部分

1. php無限級分類
function getTree($data, $pid) {
    $tree = [];
    foreach($data as $value) {
        // 父親找兒子
        if ($value['parent_id'] == $pid) {
            $value['children'] = getTree($data, $value['id']);
            $tree[] = $value;
        }
    }
    return $tree;
}
複製代碼
2. 三種方法實現字符串翻轉
//第一種
function str_rev1($str) {
    $newstr = '';
    for($i = strlen($str); $i >= 0; $i --) {
        $newstr .= $str{$i};
    }
    return $newstr;
}

//第二種
function str_rev2($str) {
    $newstr = '';
    $arr = str_split($str, 1);
    foreach($arr as $value) {
        $newstr = $value . $newstr;
    }
}

//第三種
function str_rev3($str) {
    $newstr = '';
    if (strlen($str) <= 1) return $str;
    $newstr .= substr($str, -1) . str_rev3(substr($str, 0, strlen($str) - 1));
}
複製代碼
3.多進程同時寫入一個文件成功
$fp = fopen('a.txt', 'w+');
if (flock($fp, LOCK_EX)) {
    // 得到寫鎖,寫數據
    fwrite($fp, 'write something');
    flock($fp, LOCK_UN);
} else {
    echo 'file is locking'
}
fclose($fp);
複製代碼
4.處理文件裏上億條數據,並去重。

MYSQL 部分

1. 遠程鏈接mysql數據庫
mysql -h localhost -u root -p
複製代碼
2. 備份數據庫命令
mysqldump -u root -p person >d:\person.sql
複製代碼
3.union 和 union all 的區別
union: 對結果進行並集操做,會自動壓縮重複的結果,同時會進行默認的結果排序。
union all: 對結果進行並集操做,直接所有顯示出來,不進行任何排序。
複製代碼

其餘

1. 高併發
  • 從前端方向看
1.web資源防盜鏈
兩種方式防禦,一種是檢驗referer,一種用簽名算法,加載第三方模塊HttpAccessKeyModule實現防盜鏈。

2.減小http請求次數,由於HTTP協議規定請求只能串行發送,也就是一個一個發。
 - css雪碧圖
 - 合併js與css文件
 - 圖片使用base64編碼
 
3. CDN加速

4. 資源壓縮
複製代碼
  • 從php方向
1. 動態語言靜態化
 - 使用像smarty模板引擎
 - 使用ob系列函數

2.數據緩存
複製代碼
  • 從mysql方向
1. 字段數據類型優化
    - 儘可能避免null
    - varchar儲存可變長字符串,char定長的,適合很短的字符串
    - 知足存儲須要的狀況下使用最小的數據類型
2. 索引優化
    
3.SQL語句優化
    - 少用select *
    - 用外鏈接代替子查詢,儘可能用inner join
    - 儘可能不要使用NOT IN和<>操做
    
4. 儲存引擎的優化
    
5.表結構設計優化
複製代碼
  • 從服務器方向
負載均衡
 - 七層負載均衡(Nginx)
 - 四層負載均衡(LVS/硬件設備)
複製代碼
2. 查看端口占用
// 查看3306是否被佔用
netstat -anp | grep 3306

//查看當前全部已經使用的端口狀況
netstat -nultp
複製代碼
3. 進程和線程的區別

1、區別:css

  1. 進程是一個具備必定獨立功能的程序關於某個數據集合的一次運行活動,它是系統進行資源分配和調度的一個獨立單位。
  2. 線程是進程的一個實體,是CPU調度和分配的基本單位。線程基本不擁有系統資源,與同一個進程的其餘線程共享進程中所擁有的全部資源。

2、聯繫:前端

  1. 一個進程能夠包括多個線程。
  2. 在沒有實現線程的操做系統中,進程是資源分配的基本單位,又是調度的基本單位,它是系統中併發執行的單元;而在實現了線程的操做系統中,進程是資源分配的基本單位,可是線程是調度的基本單位,是系統中併發執行的單元。
複製代碼
相關文章
相關標籤/搜索