首頁 後端開發 php教程 《2019年小米春季上海 PHP 實習生招募面試題》部分答案解析

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

Dec 07, 2019 pm 01:33 PM
php

相關推薦:《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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles