php面試考點整理

離你多遠發表於2020-12-04

1、引用變數的概念和定義方式

不同的名字訪問同一個變數內容
用&符號定義

2.簡述cookie和session的區別及工作機制,儲存位置等、簡述cookie的優缺點

(1)session基於cookie,儲存session_id,儲存與服務端,沒有cookie,也可以另一種形式使用
cookie存於客戶端,可修改和禁止
(2)session可以存於伺服器檔案、mysql、memcache、redis等

3、版本控制器軟體?執行的環境?
4、常見伺服器配置?

註冊全域性變數(register_globals)、允許遠端開啟(all_url_fopen)、
允許遠端包含(allow_url_include)、設定時區(date.timezone)、
顯示錯誤(display_errors)、錯誤級別(error_reportimg)、
是否開啟安全模式(safe_mode)、上傳檔案大小(wenupload_max_filesize)、
上傳檔案數量(max_file_uploads)、post大小(post_max_size)

5、php-fpm(cgi、fastCgi)的概念
6、正則的作用?正則的函式

(1)分割、查詢、匹配、替換
(2)preg_match()、preg_match_all()、preg_replace()、preg_split()

7、變數作用域和靜態變數、自建函式的返回值、外部檔案的引用、內建函式
8、檔案讀取和寫入?訪問遠端檔案(ftp和http的區別)?其他函式?
9、設計模式、魔術函式等
10、常見的埠、http協議的工作原理和特點、請求和響應的方法、osl七層模型
11、運算子、運算子優先順序

運算子優先順序
遞增/遞減>!>算術運算子>大小比較>(不)相等比較>引用位運算子(^)>
位運算子()>邏輯與>邏輯或>三目>賦值>and>xor>or

12、型別轉換和擷取等?不同型別的特點、預定義函式
13、mysql資料型別特點和應用?

時間戳使用bigint
14、表引擎的特點innoDb和myisam
15、表鎖(寫鎖和讀鎖)、行鎖
16、事務處理
17、儲存過程使用場景
18、mysql觸發器
19、索引描述,普通索引,主鍵、唯一、聯合索引的區別,對效能的影響?建立原則和注意事項

索引的使用場景
對於非常小的表,大部分情況下全表掃描效率更高
中到大型表,索引非常有效
特大型的表,建立和使用索引的代價將隨之增長,可以使用分割槽技術來解決

原則
1最適合索引的列是出現在 WHERE子句中的列,或連線子句中的列而不是出現在 SELECT關鍵字後的列
2.索引列的基數越大,索引的效果越好3對字串進行索引,應該制定一個字首長度,可以節省大量的索引空間
3.對字串進行索引,應該制定一個字首長度,可以節省大量的索引空間
4根據情況建立複合索引,複合索引可以提高查詢效率
5避免建立過多索引,索引會額外佔用磁碟空間,降低寫操作效率
6.主鍵儘可能選擇較短的資料型別,可以有效減少索引的磁碟佔用提高查詢效率

注意事項:
1、複合索引遵循字首原則

索引對效能的影響
大大減少伺服器需要掃描的資料量
幫助伺服器避免排序和臨時表
將隨機I/O變順序I/O
大大提高查詢速度,降低寫的速度、佔用磁碟

(1)檢視慢查詢日誌,show profile、show status、show processlist、explain
(2)mysql慢的原因

訪問資料太多導致查詢效能下降
確定應用程式是否在檢索大量超過需要的資料,可能是太多行或列
確認 MYSQL伺服器是否在分析大量不必要的資料行

避免使用如下SQL語句

查詢不需要的記錄,使用lmit解決
多表關聯返回全部列,指定Aid, A name,B.age
總是取出全部列, SELECT*會讓優化器無法完成索引覆蓋掃描的優化
重複查詢相同的資料,可以快取資料,下次直接讀取快取
是否在掃描額外的記錄
改變資料庫和表的結構,修改資料表正規化
重寫SQL語句,讓優化器可以以更優的方式執行查詢

一個複雜查詢還是多個簡單查詢

MysL內部每秒能掃描記憶體中上百萬行資料,相比之下,響應資料給客戶端就要慢得多
使用盡可能少的查詢是好的,但是有時將一個大的查詢分解為多個小的查詢是很有必要的

切分查詢、分解關聯查詢、優化count查詢、優化關聯查詢、優化子查詢()、優化group和distinct、優化limit分頁、優化union查詢

21、分割槽表的原理和分開分表的原理、延申負載均衡和複製原理
適用場景

1表非常大,無法全部存在記憶體,或者只在表的最後有熱點資料,其他都是歷史資料
2分割槽表的資料更易維護,可以對獨立的分割槽進行獨立的操作
3分割槽表的資料可以分佈在不同的機器上,從而高效使用資源
4可以使用分割槽表來避免某些特殊的瓶頸
5可以備份和恢復獨立的分割槽 

限制

1、一個表最多隻能有1024個分割槽
2、5.1版本中,分割槽表表示式必須是整數,55可以使用列分割槽
3、分割槽欄位中如果有主鍵和唯一索引列,那麼主鍵列和唯一列都必須包含進來
4、分割槽表中無法使用外來鍵約束
5、需要對現有表的結構進行修改
6、所有分割槽都必須使用相同的儲存引擎
7、分割槽函式中可以使用的函式和表示式會有一些限制
8、某些儲存引擎不支援分割槽
9、對於 MYISAM的分割槽表,不能使用 load index into cache
10、對於 MYISAM表,使用分割槽表時需要開啟更多的檔案描述符

工作原理

通過一些HASH演算法或者工具實現將一張資料表垂直或者水平進行物理切分

分庫分表的原理

分表方式

水平分割:表很大,分割後可以降低在查詢時需要讀的資料和索引的頁數,同時也降低了索引的層數,提高查詢速度

適用場景

1、單表記錄條數達到百萬到幹萬級別時
2、解決表鎖的問題 

水平分表缺點:

1.給應用增加複雜度,通常查詢時需要多個表名,查詢所有資料都需 UNION操作
2.在許多資料庫應用中,這種複雜性會超過它帶來的優點,查詢時會增加讀一個索引層的磁碟次數

垂直分表:把主鍵和一些列放在一個表,然後把主鍵和另外的列放在另一個表中
垂直分表使用場景:

1如果一個表中某些列常用,而另外一些列不常用
2.可以使資料行變小,一個資料頁能儲存更多資料,查詢時減少I/O次數

垂直分表缺點:管理冗餘列,查詢所有資料需要JOIN操作
分表缺點

1、有些分表的策略基於應用層的邏輯演算法,一旦邏輯演算法改變,整個分表邏輯都會改變,擴充套件性較差
2、對於應用層來說,邏輯演算法無疑增加開發成本

延伸: MYSQL的複製原理及負載均衡

Mysql主從複製工作原理

在主庫上把資料更改記錄到二進位制日誌
從庫將主庫的日誌複製到自己的中繼日誌
從庫讀取中繼日誌中的事件,將其重放到從庫資料中

MYSQL主從複製解決的問題

資料分佈:隨意停止或開始複製,並在不同地理位置分佈資料備份
負載均衡:降低單個伺服器的壓力
高可用和故障切換:幫助應用程式避免單點失敗
升級測試:可以使用更高版本的 MYSQL作為從庫

22、程式功能設計的考察
PDO:可擴充套件性更好、支援預處理、物件導向
MYSQLI:只支援 MYSQL操作、支援預處理、物件導向和過程,效率較高
MYSQL:只支援 MYSQL資料庫、沒有預處理的支援、程式導向

根據考題所出功能,先分析應該儲存哪些資訊,設計好資料表,這一步很關鍵,如果編碼時才發現設計有問題,會浪費大量的時間,基本沒有時間改,所以要先設計好,然後根據設計好的資料表建立資料表,通常建議大家使用PDo來連線 MYSQL,最終完成編碼所以一定要熟悉PDo的基本操作。

23、mvc工作原理、認識mvc框架、模板引擎、單一路口優點和缺點
延伸考點:單一入口的工作原理
優勢

可以進行統一的安全性檢查
集中處理程式

劣勢

URL不美觀(URL重寫)
處理效率會稍低 

延伸考點:模板引擎的理解
工作原理:

模板引擎就是龐大的完蓍的正規表示式替換庫

24、用框架如何實現自動驗證?
25、常見演算法、演算法的基本概念?

一個問題可以有多種演算法,每種演算法都不同的效率
一個演算法具有五個特徵:有窮性、確切性、輸入項、輸出項、可行性

演算法分析的目的在於選擇合適演算法和改進演算法。
一個演算法的評價主要從時間複雜度和空間複雜度來考慮
26、介紹常見資料結構?
27、邏輯演算法
28、模擬內建函式的功能:邏輯思維能力;對PHP內建函式的熟悉程度;字串和陣列的處理能力
29、高併發的概念、案例;pv,uv\qps、吞吐量、頻寬
30、高併發的問題,我們具體該關心什麼?

日網站頻寬=PV/統計時間(換算到秒)平均頁面大小(單位KB
(總PV數
80%)/(6小時秒數*20%)=峰值毎秒請求數(QPS)
壓力測試:測試能承受的最大併發;測試最大承受的QPS值

QPS=100;資料快取+資料庫的負載均衡
QPS=800;cdn加速+負載均衡
QPS=1000;頁面靜態化;
QPS=2000;業務分離、分散式儲存;

案例

1、防盜鏈處理
2、減少http請求(合併檔案)
3、新增非同步請求
4、啟動瀏覽器快取和檔案壓縮
5、cdn加速
6、獨立的圖片伺服器
7、頁面靜態化
8、併發處理
9、佇列處理
10、資料庫快取
11、分庫分表
12、分割槽操作
13、讀寫分離
14、負載均衡(資料庫和伺服器)

26、穿著、言行、公司情況、業務情況、時間重要性

相關文章