主頁 > 後端開發 > 《2019年小米春季上海 PHP 實習生招聘面試題》部分答案決議

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

2020-09-21 16:25:24 後端開發

1 丶 Nginx 怎么實作負載均衡

這個還是比較簡單

1.輪詢

這種是默認的策略,把每個請求按順序逐一分配到不同的 server,如果 server 掛掉,能自動剔除,

 

 

2.最少連接

把請求分配到連接數最少的 server

 

 

3.權重

使用 weight 來指定 server 訪問比率,weight 默認是 1,以下配置會是 server2 訪問的比例是 server1 的兩倍,

 

 

4.ip_hash

每個請求會按照訪問 ip 的 hash 值分配,這樣同一客戶端連續的 Web 請求都會被分發到同一 server 進行處理,可以解決 session 的問題,如果 server 掛掉,能自動剔除,

 

 

ip_hash 可以和 weight 結合使用,

2 丶 Linux 常用的命令

這個就不多說了

3 丶微信小程式常用的組件

view 丶 text 丶 button 丶 navigator 丶 scroll-view...... 等等

4 丶 Nginx 怎么配置虛擬主機

恩 2333333

5 丶 TP5 和 Laravel 框架差異

恩 2333333

6 丶 TP5 和 Laravel 框架中的資料遷移

這個本社區就有檔案的

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 的區別

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 的讀寫分離操作

什么主從復制,什么 bin log,胡說了一大堆

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)約束欄位必須在被參考的欄位中出現過

以上是文章全部內容,有需要學習交流的友人請加入swoole交流群的咱們一起,有問題一起交流,一起進步!前提是你是學技術的,感謝閱讀!

點此加入該群

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/98219.html

標籤:PHP

上一篇:[PHP] Workerman中的注冊樹模式

下一篇:Swoole如何處理高并發

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more