首頁 後端開發 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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

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

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles