相關推薦:《2019年PHP面試題大匯總(收藏)》
1 丶Nginx 怎麼實現負載平衡
這個還是比較簡單
1.輪詢
這種是預設的策略,把每個請求依序逐一分配到不同的server ,如果server 掛掉,可以自動剔除。
upstream fengzp.com { server 192.168.99.100:42000; server 192.168.99.100:42001; }
2.最少連線
把請求分配到連線數最少的server
upstream fengzp.com { least_conn; server 192.168.99.100:42000; server 192.168.99.100:42001; }
3.權重
使用weight 來指定server 存取比率,weight 預設是1。以下設定會是 server2 存取的比例是 server1 的兩倍。
upstream fengzp.com { server 192.168.99.100:42000 weight=1; server 192.168.99.100:42001 weight=2; }
4.ip_hash
每個請求會依照存取ip 的hash 值分配,這樣同一客戶端連續的Web 請求都會被分發到同一server 進行處理,可以解決session 的問題。如果 server 掛掉,可以自動剔除。
upstream fengzp.com { ip_hash; server 192.168.99.100:42000; server 192.168.99.100:42001; }
ip_hash 可以和 weight 結合使用。
2 丶Linux 常用的指令
參考文章:https://www.php.cn/linux-415502.html
#3 丶微信小程式常用的元件
view 丶text 丶button 丶navigator 丶scroll-view...... 等等
4 丶Nginx 怎麼設定虛擬主機
#參考文章:https://www.php.cn/php-weizijiaocheng-387454.html
#5 丶TP5 與Laravel 框架差異
參考文章:https://www.php.cn/phpkj/thinkphp/422769.html
#6 丶TP5 與Laravel 框架中的資料遷移
參考文章:
https://www.php.cn/js-tutorial-386843 .html
https://www.php.cn/phpkj/laravel/414216.html
7 丶RBAC 模型的解說
什麼是RBAC
RBAC (基於角色的存取控制):英文名稱Rose base Access Controller 。本部落格介紹這種模型的權限系統設計。取消了使用者和權限的直接關聯,改為透過使用者關聯角色、角色關聯權限的方法間接賦予使用者權限。從而實現了解耦。 RBAC 在發展過程中分為以下幾個版本。 RBAC0、RBAC1、RBAC2、RBAC3。
8 丶訂單模組的流程
9 丶訂單支付成功後的操作
10 丶設置郵箱啟動連線過期時間
在把啟動碼寫入資料庫的同時寫入時間戳過期時間
11 丶Redis 與Mongodb 的差異
1.效能
都比較高,效能對我們來說應該都不是瓶頸。
整體來講,TPS 方面 redis 和 memcache 差不多。
2.操作的便利性
redis 在2.0 版本後增加了自己的VM 特性,突破物理記憶體的限制;可以對key value 設定過期時間(類似memcache)。
mongoDB 適合大數據量的存儲,依賴作業系統 VM 做記憶體管理,吃記憶體也比較厲害,服務不要跟別的服務在一起。
4、可用性(單點問題)
對於單點問題:
redis,依賴客戶端來實作分散式讀寫;主從複製時,每次從節點重新連接主節點都要依賴整個快照,無增量複製,因性能和效率問題,所以單點問題比較複雜;不支持自動sharding, 需要依賴程序設定一致hash 機制。
一種替代方案是,不用redis 本身的複製機制,採用自己做主動複製(多份存儲),或者改成增量複製的方式(需要自己實現),一致性問題和性能的權衡。
mongoDB 支援 master-slave,replicaset (內部採用 paxos 選舉演算法,自動故障復原),auto sharding 機制,對客戶端屏蔽了故障轉移和切分機制。
5.可靠性(持久化)
對於資料持久化和資料恢復,redis 支援(快照、AOF):依賴快照進行持久化,aof 增強了可靠性的同時,對效能有所影響,MongoDB 從1.8 版本開始採用binlog 方式支援持久化的可靠性。
6.資料一致性(交易支援)
redis 事務支援比較弱,只能保證交易中的每個操作連續執行,mongoDB 不支援交易。
7.應用場景
redis:資料量較小的更效能操作和運算上
MongoDB: 主要解決大量資料的存取效率問題
12 丶redis 和memcached 的差異
參考文章:https://www. php.cn/mysql-tutorials-410551.html
13 丶redis 中的佇列
關於redis 佇列的實作方式有兩種:
1.生產者消費者模式。
普通版本:
例如一個佇列裡面,生產者 A push 了一個資料進去,消費者 B pop 了這個數據,那個這個佇列依舊為空。所以是一對一的。
至於是先進先出還是先進後出等,可以依照函數lpush (從隊列左邊,也就是隊首push 一個數據) rpush (從隊列右邊也就是隊尾push 一個數據) lpop (同理) rpop 等來控制。
阻塞版本:
但是上面的指令都是立即回傳的,無論資料有無,關於取資料lpop 有個增強版本,blpop (block left pop) 阻塞版本,
使用方法:blpop key1 key2 ... keyn 10
同時預獲取多個key 的值,並設定超時時間為10s,如果所有key,有些key 有value 就立即返回,如果所有key 都沒有value 就阻塞10 秒回傳
2.發布者訂閱者模式。
概念:
三個使用者A,B,C 同時都訂閱了一個channel 名字叫msg,然後發布者往msg 的channel 裡面發布了一個數據,那麼A ,B,C 三個用戶都會收到該資料。
注意點:
很明顯,三個用戶 ABC 需要阻塞。怎麼收到訂閱的資料呢,一定是依靠註冊在 redis 裡面的回呼函數。
發布的資料不會在 redis 裡面復現,意思是發布了以後,A,B,C 由於種種原因沒收到就沒收到。
14 丶redis 中的資料型別
Redis 支援五種資料型態:string(字串),hash(雜湊),list(列表),set (集合)及zset (sorted set:有序集合)。
15 丶TP 框架中的事件
##16 丶TP 框架的依賴注入
和Laravel 沒什麼差別17 丶MySQL 的讀寫分離操作
參考文章:https://www.php.cn/mysql-tutorials-360278.html
18 丶資料庫varchar 與char 的差異
varchar 會回收未使用的空間19 丶MyIsam 與InnoDB 的差異
1、MyISAM:預設表類型,它是基於傳統的ISAM 類型,ISAM 是Indexed Sequential Access Method (有索引的順序存取方法) 的縮寫,它是儲存記錄和檔案的標準方法。不是事務安全的,而且不支援外鍵,如果執行大量的 select,insert MyISAM 比較適合。 2、InnoDB:支援事務安全的引擎,支援外鍵、行鎖定、事務是他的最大特色。如果有大量的 update 和 insert,建議使用 InnoDB,特別是針對多個同時和 QPS 較高的情況。一、表鎖差異
MyISAM:
myisam 只支援表級鎖,使用者在操作myisam 表時,select,update,delete,insert 語句都會給表自動加鎖,如果加鎖以後的表滿足insert 並發的情況下,可以在表的尾部插入新的資料。也可以透過 lock table 指令來鎖定表,這樣操作主要是可以模仿事務,但是消耗非常大,一般只在實驗示範中使用。InnoDB :
Innodb 支援交易和行級鎖定,是 innodb 的最大特色。 事務的 ACID 屬性:atomicity,consistent,isolation,durable。 並發交易帶來的幾個問題:更新遺失,髒讀,不可重複讀,幻讀。二、資料庫檔案差異
MyISAM :
myisam 屬於堆疊表格myisam 在磁碟儲存上有三個文件,每個文件名以表名開頭,擴展名指出文件類型。 .frm 用於儲存表的定義.MYD 用來存放資料.MYI 用於存放表索引myisam 資料表也支援三種不同的儲存格式:靜態表(默認,但是注意資料結尾不能有空格,會被去掉) 丶動態表丶壓縮表。InnoDB :
innodb 屬於索引組織表innodb 有兩種儲存方式,共享表空間儲存和多表空間儲存#兩種儲存方式的表格結構和myisam 一樣,以表名開頭,而副檔名是.frm。 如果使用共享表空間,那麼所有表的資料檔案和索引檔案都保存在一個表空間裡,一個表空間可以有多個文件,透過innodb_data_file_path 和innodb_data_home_dir 參數設定共享表空間的位置和名字,一般共享表空間的名字叫ibdata1-n。如果使用多表空間,那麼每個表都有一個表空間檔案用於儲存每個表的資料和索引,文件名以表名開頭,以.ibd 為副檔名。
三、索引差異
1.關於自動成長
myisam 引擎的自動成長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以根據前面幾列進行排序後遞增。
innodb 引擎的自動增長咧必須是索引,如果是組合索引也必須是組合索引的第一列。
2.關於主鍵
myisam 允許沒有任何索引和主鍵的表存在,
myisam 的索引都是保存資料列的位址。
innodb 引擎如果沒有設定主鍵或非空唯一索引,就會自動產生一個6 位元組的主鍵(使用者不可見)
innodb 的資料是主索引的一部分,附加索引保存的是主索引的值。
3.關於count () 函數
myisam 儲存有表格的總行數,如果select count(*) from table; 會直接取出出該值
innodb 沒有保存表格的總行數,如果使用select count(*) from table; 就會遍歷整個表,消耗相當大,但是在加了where 條件後,myisam 和innodb 處理的方式都一樣。
4.全文索引
myisam 支援FULLTEXT 類型的全文索引
innodb 不支援FULLTEXT 類型的全文索引(5.6 開始已經支援了) ,但是innodb 可以使用sphinx 外掛程式支援全文索引,並且效果更好。 (sphinx 是一個開源軟體,提供多種語言的 API 接口,可以優化 mysql 的各種查詢)。
5.delete from table
使用這條指令時,innodb 不會從新建立表,而是一條一條的刪除數據,在innodb 上如果要清空保存有大量資料的表,最好不要使用這個指令。 (建議使用 truncate table,不過需要使用者有 drop 此表的權限)。
6.索引儲存位置
myisam 的索引以表名 .MYI 檔案分別儲存。
innodb 的索引和資料一起保存在表空間裡。
20 丶MySQL 中的索引有幾個
#一、普通索引
最基本的索引,只是加快了查詢速度。
二、唯一索引
與普通索引類似,不同的是:索引的列值必須唯一,但允許有空值,也就是null,如果是組合索引,則列值的組合必須是唯一的。
三、主鍵索引
即我們常用的主鍵id, 它是一種特殊的唯一索引,不允許有空值,一般在建表時同時建立主鍵索引。
特點:
1)一張表只有一個主鍵索引
2)主鍵要求自增
四、組合索引
即由多個欄位建立的索引
五、全文索引
#fulltext
myisam 引擎支援
六、外鍵
建立外鍵需要注意的事項:
1)表引擎必須一樣
2)欄位類型必須一樣
3)長度必須一樣
4)儲存範圍必須一樣
5)約束欄位必須在被引用的欄位中出現過
以上是《2019年小米春季上海 PHP 實習生招募面試題》部分答案解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!