千萬別給本身女友以任何方式講技術,問就是不知道,長壽祕訣~前端
(我拿出了當年面試小米測開的面經)面試
女友最近忽然愛學習了,各類刷數據庫、Linux方面的題,之前都是沒日沒夜的追劇,忽然有了學習的勁頭,着實讓我沒想到。看似一片欣欣向榮,不過,長期的生存經驗告訴我,這並非什麼好事,事出反常必有妖~算法
她被個人動做逗笑了sql
但凡是有交友經驗的兄弟都知道,和女友講技術真是一言難盡,不光看你講解的臨場發揮能力,還要分N次考覈你對女友的耐心程度。數據庫
一個零基礎小白不追肥皂劇了,開始研究數據庫、Linux,彎轉的有點急啊,不過,無論怎麼樣渴望學習是好事。
和當初去小米麪試不同,你要沒有紮實的基本功,想忽悠住面試官可太難了。但如今我這點水平忽悠她,那還不跟欺負小學生同樣。後端
那天忽然問我:" 什麼是 數據庫 的二叉樹算法?",我有點驚訝,問的挺深刻,看來此次是認真學了啊。那得趕忙講不能打消人家的學習積極性。服務器
因而我清了清嗓子:關於數據庫,我認爲是軟件測試工程師第一個要學的技術也是最重要的基礎。不只你作功能測試要用到數據庫;接口測試、不少接口的返回值它是動態的,那麼你要去數據庫拿數據來校驗;還有自動化,怎麼去作一些數據驅動,都要從數據庫裏去拿。你作性能測試是否是也和數據庫有關。好比慢查詢,都和數據庫有關。網絡
打開電腦翻出了當初我面試時候總結的面試題:(公衆號主頁點擊領取資料,你也能得到節日禮物)數據結構
因此說,你要去面試軟件測試工程師。數據庫這一關你得要有底。tcp
她雙手託着下巴聽得非常仔細。(貌似從她眼中看到了崇拜)
首先若是你要去面試,你得首先保證你掌握了sql的基本查詢
增刪改查
第一部分:軟件測試基礎理論、流程還有項目管理
增刪改查你們基本都會吧,Select、Delete、Update、還有一個子查詢、關聯查詢、分組查詢、分組過濾。
子查詢:就是一個嵌套在查詢語句中的查詢
關聯查詢:內鏈接、外鏈接(左鏈接、右鏈接)
我相信每次去面試的時候不少小夥伴都會去百度。搜素什麼是什麼子查詢?什麼是關聯、分組查詢?什麼是分組過濾……通過熬夜看完了幾篇「深度好文」可能面試官問,你也會成竹在胸。
若是以上的內容都不熟悉,就不要在簡歷中寫:「我熟悉數據庫的語句」
你們可能比較陌生的多是分組查詢( group by)和分組過濾(having)
分組查詢( group by)是一個按照表中一個或者多個字段,將數據進行分組,通常用於數據進行分類彙總。
其實這是個挺簡單的概念。
她點了點頭,說嗯嗯,這些我都掌握了
「好的,那咱們接着來看下面的面試問題,從面試題反推來學習軟件測試的技術」
第二部分:數據庫
1.說一下你經常使用的sql優化方式?爲何select*效率低?
優化方式好比說你用到了select*,那麼我就會問你爲何select*效率低?
可能你會說由於*是查詢全部的。
面試官:那還有呢?還有什麼要補充的嗎?
我:(抓抓頭髮,手兒無處安放)面試官,你乾脆把簡歷還給我吧,我都不想再說下去了。
有不少時候是這樣子的 ,當面試官問到你一個問題,若是你只知道一點點,你說出來一點點,面試官問你還有沒有其餘要補充的……
select*爲何效率低?
第一個你須要根據你理解的原理,具體分析。有時候作測試你會去看一些Mysql的書籍,它會告訴你,一概不要用*做爲查詢的字段的列表。
她放開了託着下巴的手,擡頭問我:爲何呢?
第一個,不須要的列會增長數據傳輸時間和網絡開銷。有些數據庫和應用不在一臺服務器。
好比個人應用數據庫確定是有一個服務器的,那你的後端前端可能不在同一臺服務器上,會有不少網絡開銷。由於有時候咱們在前端的操做都會用到數據庫,若是你都用select* 那麼就大大增長了網絡開銷,它會去解析不少的內容。特別一些select語句比較複雜解析比較多的時候,會給數據庫形成沉重的負擔。
特別有一些大類型的字段,好比有一個叫作text 、 它是很是大的
varchar(字符串類型)好比還有一些加密的、日之類的字段,增長網絡消耗是很是明顯的。即便這個Mysql服務器和客戶端在同一臺機器上,使用的協議tcp通訊也須要額外的時間,因此說這個傳輸時間和網絡開銷確定會加大。
那麼對於這些無用的大字段,可能還會增長一些IO操做。(若是長度超過必定字節,它會把一些超出的速率數據化到另外一個地方,而後再去讀取這些記錄就會增長一次IO操做)
其實還有一個很是重要的點,Mysql有一個概念:覆蓋索引(業界極爲推崇的查詢優化方式)
若是你用到了select*,你將失去Mysql優化器覆蓋索引策略優化的可能性。
奧,原來如此,懂了懂了……懂得還挺多嘛~
(此時,心中暗喜,雖然常常被誇,但對於技術這一塊,我拿捏得死死的,誇到終點了)
那咱們接下來看什麼是索引?索引爲何能增長查詢效率?
索引是和性能息息相關的一個東西
若是咱們把數據庫當作一本「新華字典」索引就是這個字典的目錄。通常會針對where(id等於多少)條件後面的字段
索引既然是一個目錄,那麼它就能夠分爲不少級。(目錄下面又有一個目錄)
圖中的id是一個int類型,那麼圖中的「鑰匙」表明什麼?主鍵。因此說id多是主鍵,其餘的一些就是字段名稱、字段類型、字段的長度
SHON INDEX from orderl (查詢某個表索引語句)
吧啦吧啦半天,給我本身都講嗨了,我問人家懂了嘛,她來一句:懂了一丟丟,我待會再好好理解一下?
記住一個概念,主鍵自己就是一種惟一索引。
好比你要去查詢select * from where id=4 id等於多少,它就用到了一種索引。因此說索引就是這個字典的目錄,通常會針對where條件後面的字段。
因此說這樣去查,若是你不是主鍵,那麼會慢不少,若是你是主鍵是索引,就會快不少。
此時她明顯有點不耐煩了,說了這麼多。「那麼什麼是二叉樹算法呢」
「別急別急,立刻就講」
爲何索引能讓查詢變快?
數據結構
btree:二叉樹算法
舉個例子:
這個數據庫表恰好有11行,當我想查詢小六,好比說select * from where id=4 的時候,這個時候若是不加索引。執行這行語句作的什麼動做?就是一個一個查下去,查到4的時候還會往下查詢,查11次。
若是通常的有百萬級的數據,它就會去查百萬次。
若是咱們用二叉樹算法(索引)它會去查詢多少次呢?
二叉樹的原理:取中間一個數,大於的右移,小於的左移。每次減半。
11個數據,二叉樹的一個經典的算法,取中間的一個數,11最中間的一個數是什麼?是6對吧。那麼它會把小於6的12345放一邊,而後這裏7891011也會放一邊,他就會這樣去進行。
咱們來看一看若是它加了索引,它會查詢幾回。好比它第一次查id等於4,它會取中間一個數等於6,咱們要的不是等於6。根據原理,它就又會去取中間一個值,大於的右移,小於的左移6的中間值是3,12放左邊,45放右邊。
那麼它可能查三到四次就能夠查到了。這就是索引的效率,是否是會快不少?數據量大的時候提升效率可想而知。
我就讓你給我解釋什麼是二叉樹算法,你給我講這麼多,我要好好消化一下。這個月的飯你來作,衣服碗也一塊兒洗了奧~
太難了……
以上故事純屬虛構,若有雷同算你牛批
整理了幾百本各種技術電子書,送給小夥伴們。關注公號回覆【2021面試】自行領取。和一些小夥伴們建了一個技術交流羣,一塊兒探討技術、分享技術資料,旨在共同窗習進步,若是感興趣就加入咱們吧!
金三銀四,給你們推薦一個面試訓練營