當(dāng)前位置:首頁 > 公眾號精選 > 小林coding
[導(dǎo)讀]許久不見的【面試官來襲】系列終于又和大家見面啦!很多人問我,面試到底考察什么?面試官究竟想聽到怎樣的回答?針對這類疑惑,我覺得最好的解答,無疑是帶著大家,以面試官視角,去進(jìn)行面試,知己知彼,百戰(zhàn)不殆,這就是這個系列的初衷。針對MySQL,一般要考察的知識點都在下圖,根據(jù)候選人的情...


許久不見的【面試官來襲】系列終于又和大家見面啦!

很多人問我,面試到底考察什么?面試官究竟想聽到怎樣的回答?針對這類疑惑,我覺得最好的解答,無疑是帶著大家,以面試官視角,去進(jìn)行面試,知己知彼,百戰(zhàn)不殆,這就是這個系列的初衷。
針對MySQL,一般要考察的知識點都在下圖,根據(jù)候選人的情況,會選擇不同的知識點進(jìn)行提問。


通過上圖,大家對MySQL面試問題也心里有數(shù)了吧?
由于有小伙伴反應(yīng)第一彈Redis系列內(nèi)容過長,消化不過來。所以我從本次開始,每個技術(shù)專題,都會由淺至深,分篇進(jìn)行講解,知識點也會更加全面。
話不多說,接下來就來看看我們面試官系列的第二彈——MySQL基礎(chǔ)篇。
今天的面試者依舊是阿柴,經(jīng)過上次Redis的洗禮,面對惡魔面試官,相信阿柴也更游刃有余了。
現(xiàn)在,就讓我們開啟這場沉浸式面試吧。


基本概念


你能談?wù)凪ySQL是什么嗎?

MySQL是一個傳統(tǒng)的RDBM數(shù)據(jù)庫,也就是關(guān)系型數(shù)據(jù)庫,廣泛應(yīng)用于OLTP場景。



你提到了OLTP,能說說它和OLAP的區(qū)別是什么嗎?

OLTP(聯(lián)機(jī)事務(wù)處理)是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的主要應(yīng)用,用于基本的、日常的事務(wù)處理,例如銀行的交易記錄;


OLAP(聯(lián)機(jī)分析處理)是數(shù)據(jù)倉庫系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供了直觀易懂的查詢結(jié)果。最常見的應(yīng)用就是復(fù)雜的動態(tài)報表系統(tǒng)。


總體來說,OLTP用于日常處理、OLAP用于數(shù)據(jù)分析。





你知道數(shù)據(jù)庫的三范式分別是什么嗎?

第一范式:字段不可分。強(qiáng)調(diào)的是列的原子性,即數(shù)據(jù)庫表的每一列都是不可分割的原子數(shù)據(jù)項;


第二范式:有主鍵,非主鍵字段依賴主鍵。要求實體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性;


第三范式:非主鍵字段不能相互依賴,任何非主屬性不依賴于其它非主屬性。



基礎(chǔ)定義類的問題一般問校招生比較多,考察一下理論知識。在實際應(yīng)用中,只是個參考,某些場景,甚至可以反范式。
DML是什么呢

DML是數(shù)據(jù)操作語言,用于檢索或者修改數(shù)據(jù)。我們平常最常用的增刪查改就是DML。



DDL又是什么?

DDL是數(shù)據(jù)定義語言,用于操作數(shù)據(jù)結(jié)構(gòu),比如創(chuàng)建表,刪除表,更改索引等都是DDL。


那DCL呢

DCL是數(shù)據(jù)控制語言,用于定義數(shù)據(jù)庫用戶的權(quán)限,比如創(chuàng)建用戶,授權(quán)用戶,刪除用戶等都是DCL。



以上三個問題,是針對數(shù)據(jù)庫操作分類的考察。很多同學(xué)只知道增刪查改,并不知道它們屬于哪類。
這些抽象概念都是重要的數(shù)據(jù)庫基礎(chǔ)知識,由于學(xué)生大多缺乏經(jīng)驗,面試官不會偏向于實戰(zhàn)型或技術(shù)型的問題,所以這類概念型知識點往往是校招考察的重點方向。




數(shù)據(jù)結(jié)構(gòu)與常見操作


能說說varchar與char的區(qū)別是什么嗎?

char是一種固定長度的類型,varchar則是一種可變長度的類型。比如char(128)和varchar(128),前者無論字符串長短,在磁盤上,都會占據(jù)固定的128字符大小。后者是可變長度,不過它最大也不能超過128。



既然varchar是變長,那是不是設(shè)置varchar(1000)一定比varchar(100)好?


嗯...不是這樣的。雖然varchar是變長,在相同長度下,磁盤空間占用一樣,將值設(shè)置更大一些,彈性空間也更大。但也不是完全沒有代價的...


在內(nèi)存加載的時候,每次都是按最大空間來分配的。顯然,在排序場景,或者一些臨時表聚合場景,更大空間會產(chǎn)生明顯的不利影響。



varchar中的長度不光影響磁盤空間,還會影響在使用時的內(nèi)存空間,并不是越長越好,這也是個常見且易踩坑的考點。



varchar是變長,char是定長,那能用varchar完全代替char么?

不能。varchar的優(yōu)點是更靈活。但是char也不是一無是處的。

首先,varchar會額外用一個字節(jié)存儲長度信息,而char則節(jié)約了一個字節(jié);


其次,char的存儲空間都是一次性分配的,存儲是固定連續(xù)的,而varchar的存儲的長度是可變的,當(dāng)varchar更改前后數(shù)據(jù)長度不一致時,就不可避免的會出現(xiàn)碎片的問題。針對此,需要進(jìn)行碎片消除作業(yè),也是額外的成本。


一般來說,長度固定的字段,還是用char比較合適,比如Hash,就很適合用char。



varchar(11)和int(11)中的50,有什么區(qū)別?

varcahr中代表能存11個字符,int中只是代表顯示長度,對大多數(shù)應(yīng)用沒有意義,只是規(guī)定一些工具用來顯示字符的個數(shù),比如int(1)和int(20)存儲和計算其實是一樣的。


int(11)的11代表什么,這是個初學(xué)者很容易混淆的問題,其實它只是用于顯示長度,不會影響存儲空間。如果這個問題答錯,會給面試官留下基礎(chǔ)不扎實的印象。

接下來能說說delete和truncate的區(qū)別嗎

delete是刪除行;truncate是整表刪除。具體來說,有下面幾點區(qū)別:


1.truncate之后,會釋放空間;delete之后,不會釋放空間,因為delete只是在行上標(biāo)記刪除,后續(xù)可以復(fù)用;


2.delete因為是DML,會產(chǎn)生redo log;truncate是DDL則不會;


3.truncate效率更高;

4.truncate之后,id從頭開始;delete不會。





MySQL特性考察


你知道MySQL有哪些存儲引擎嗎?

首先有Innodb引擎,它提供了對數(shù)據(jù)庫ACID事務(wù)的支持,并且還提供了行級鎖和外鍵的約束。Innodb的設(shè)計目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫系統(tǒng);


還有MyIASM引擎,它是原本Mysql的默認(rèn)引擎,不提供事務(wù)的支持,也不支持行級鎖和外鍵;


最后還有一個MEMORY引擎,它的所有數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高,很少使用。



那么ACID是什么呢?

它是原子性、一致性、隔離性和持久性的縮寫。


原子性,指的是一個事務(wù)只有執(zhí)行成功和失敗回滾兩種狀態(tài),沒有中間態(tài);一致性是說數(shù)據(jù)狀態(tài)一定是一致的;隔離性是說事務(wù)之間互不影響;持久性是指事務(wù)執(zhí)行完成后,對數(shù)據(jù)所做的操作持久的保存在數(shù)據(jù)庫中。


從一定程序上來講,數(shù)據(jù)庫通過原子性、隔離性、持久性來保證一致性。也就是說ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔離性)、D(持久性)是手段。





主鍵和外鍵分別是什么?

主鍵是表中的一個或多個字段,它的值用于唯一的標(biāo)識表中的某一條記錄。


外鍵是說某張表b的主鍵,在另一張表a中被使用,那么a中該字段可以使用的范圍,取決于b。外鍵約束主要用來維護(hù)兩個表之間數(shù)據(jù)的一致性。





那么一張表一定有主鍵嗎

是的。一定有。如果主動設(shè)置,則采用設(shè)置的。否則會自動生成一個默認(rèn)的行。



你怎么查看有多少個Sql語句在執(zhí)行?


可以用show processlist,它是顯示用戶正在運行的線程的命令。需要注意的是,用戶都只能看到自己正在運行的線程,除非是root用戶,或者專門進(jìn)行了授權(quán)的用戶。





MySQL是后臺開發(fā)中非常重要的領(lǐng)域,更是面試環(huán)節(jié)的高頻考點,十次面試有十一次都會被問到!


針對MySQl的問法各有不同,但基礎(chǔ)知識是繞不過的,這些重點問題,如果在面試中遇到,要能找到聯(lián)系并往上靠。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉