第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

1. 前言

在校招或者社招面試中,無論你是 Java 后端、Cpp 后端、Python 后端,面試官都會(huì)詳細(xì)地考察各種語(yǔ)法細(xì)節(jié)、框架知識(shí),但是大多數(shù)候選人入職之后,都會(huì)體會(huì)到 "面試造火箭,上班擰螺絲"。面試時(shí)我們熟悉各種知識(shí)細(xì)節(jié),入職后卻發(fā)現(xiàn)大部分工作都是重復(fù)的 CRUD(Create - 增加,Retrieve - 查詢,Update - 更新,Delete - 刪除),這種現(xiàn)象其實(shí)很正常。后端開發(fā)的核心職責(zé)就是倒騰數(shù)據(jù),面臨的基礎(chǔ)問題例如如何設(shè)計(jì)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)并且選擇合適的數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ),如何在各種限制條件下查詢數(shù)據(jù)。當(dāng)我們負(fù)責(zé)的系統(tǒng)非常龐大之后,還會(huì)面臨如何解決分布式系統(tǒng)的數(shù)據(jù)一致性這類更復(fù)雜的問題。

總結(jié)來說,操作數(shù)據(jù)庫(kù)是后端程序員的必備技能。數(shù)據(jù)庫(kù)按照存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的方式,可以分為關(guān)系型數(shù)據(jù)庫(kù)以及非關(guān)系型數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)都是以二維表的形式存儲(chǔ),最常用的數(shù)據(jù)庫(kù)有 Oracle、MySQL,非關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)都是以結(jié)構(gòu)化的形式存儲(chǔ),最常用的數(shù)據(jù)庫(kù)有 Redis、MongoDB、Hbase 等。目前互聯(lián)網(wǎng)一二線大廠的校招要求,MySQL 基本是必備技能,非關(guān)系性數(shù)據(jù)庫(kù)例如 Redis 這類不是必考內(nèi)容,當(dāng)然掌握了會(huì)是錦上添花。

本小節(jié)中會(huì)介紹關(guān)于 MySQL 常見高頻面試題,以及核心回答思路解析。

2. MyISAM 和 InnoDB

面試官提問: 介紹下 InnoDB 和 MyISAM 存儲(chǔ)引擎的區(qū)別,以及具體的應(yīng)用場(chǎng)景?

題目解析:

首先要明確存儲(chǔ)引擎的定義:MySQL 提供不同的技術(shù)存儲(chǔ)數(shù)據(jù),這些技術(shù)使用不同的數(shù)據(jù)存儲(chǔ)機(jī)制、索引建立方式、鎖方式來完成數(shù)據(jù)的構(gòu)建,這些技術(shù)統(tǒng)稱為存儲(chǔ)引擎。

MySQL Client 終端輸入 show engines 可查看支持的存儲(chǔ)引擎類型。

圖片描述

MySQL 5.7 實(shí)驗(yàn)結(jié)果

如圖可見 MySQL 至少支持 9 種存儲(chǔ)引擎,而面試中最受關(guān)注的是 InnoDB 和 MyISAM 存儲(chǔ)引擎,一般的面試場(chǎng)景是這樣的:

在上圖的實(shí)驗(yàn)結(jié)果中,我們會(huì)發(fā)現(xiàn)在 MySQL 的所有存儲(chǔ)引擎中,只有 InnoDB 支持 Transaction(事務(wù))、XA(分布式事務(wù)),其他引擎均不支持,關(guān)于事務(wù)的支持能力是需要強(qiáng)調(diào)的點(diǎn)。關(guān)于兩種引擎之間的區(qū)別,可以按下表進(jìn)行分點(diǎn)闡述。

InnoDB MyISAM
事務(wù) 支持,強(qiáng)調(diào)的是保持?jǐn)?shù)據(jù)一致性的高級(jí)功能 不支持,強(qiáng)調(diào)的是性能,查詢速度比 InnoDB 快
外鍵 支持 不支持
索引 使用聚集索引,索引文件和數(shù)據(jù)文件綁定 使用非聚集索引,索引文件和數(shù)據(jù)文件分開存儲(chǔ),索引中保存的是數(shù)據(jù)文件的指針
支持表級(jí)鎖、行級(jí)鎖;
行級(jí)鎖粒度小,處理并發(fā)的能力更強(qiáng)
支持表級(jí)鎖,用戶在執(zhí)行 insert、update、select、delete 時(shí)都會(huì)給表自動(dòng)加鎖,效率低
主鍵 表必須有唯一索引(例如用戶規(guī)定 id 作為主鍵),沒有的話會(huì)用默認(rèn)隱藏列 row_id 作為唯一索引 沒有要求
存儲(chǔ)文件 在操作系統(tǒng)中的存儲(chǔ)文件:
.frm:表定義文件
.ibd:數(shù)據(jù)文件
在操作系統(tǒng)中的存儲(chǔ)文件:
.frm:表定義文件
.myd:數(shù)據(jù)文件
.myi:索引文件

在闡述完兩種存儲(chǔ)引擎的區(qū)別之后,再根據(jù)兩者的特點(diǎn),枚舉一些使用場(chǎng)景:

  1. MyISAM 對(duì)于不支持事務(wù)并且存在大量 SELECT 的讀場(chǎng)景比較合適;

  2. 如果業(yè)務(wù)代碼中要支持事務(wù),必須選擇 InnoDB 存儲(chǔ)引擎;

  3. 如果業(yè)務(wù)代碼中要支持外鍵,必須選擇 InnoDB 存儲(chǔ)引擎;

  4. 例如對(duì)電商公司來說,大部分的業(yè)務(wù)情況是要支持事務(wù)回滾的,例如下單流程失敗之后要回滾已有的 Insert 語(yǔ)句,并且數(shù)據(jù)并發(fā)量高,這種場(chǎng)景肯定都是選擇 InnoDB,筆者在生產(chǎn)環(huán)境中從未看到使用 MyISAM 存儲(chǔ)引擎,兩者對(duì)比更側(cè)重考察候選人的理論知識(shí)。

3. 小結(jié)

本章節(jié)介紹了 MySQL 中兩種不同的數(shù)據(jù)存儲(chǔ)引擎,面試官針對(duì)回答可能會(huì)涉及到一些擴(kuò)展性的問題,例如當(dāng)談到 InooDB 對(duì)事務(wù)的支持時(shí),面試官很可能轉(zhuǎn)為考察候選人對(duì)事務(wù)的理解程度。上述提到了聚集索引和非聚集索引,面試官可能會(huì)特意考察這兩種索引的實(shí)現(xiàn)區(qū)別。MySQL 的外鍵定義,枚舉使用場(chǎng)景和案例。這些問題也是候選人需要掌握的知識(shí)點(diǎn)。