《2019年小米春季上海 PHP 實習生招聘面試題》部分答案解析

2020-07-16 10:05:49

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 實習生招聘面試題》部分答案解析的詳細內容,更多請關注TW511.COM其它相關文章!