互聯網大廠數據庫面試真題解析

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

但凡是有職場經驗的兄弟都知道,大廠的面試真是一言難盡,不光看你面試時的臨場發揮能力,還要分N次考你對公司業務核心技術的熟悉度。前端

你要沒有紮實的基本功,想忽悠住面試官可太難了。你去翻翻大廠那些20、30K的崗位就懂了:程序員

關於數據庫,我認爲是軟件測試工程師第一個要學的技術也是最重要的基礎。面試

不只你作功能測試要用到數據庫;接口測試、不少接口的返回值它是動態的,那麼你要去數據庫拿數據來校驗;還有自動化,怎麼去作一些數據驅動,都要從數據庫裏去拿。你作性能測試是否是也和數據庫有關。好比慢查詢,都和數據庫有關。算法

因此說,你要去面試軟件測試工程師。數據庫這一關你得要有底。sql

掌握sql查詢增刪改查、子查詢、關聯查詢、分組查詢、分組過濾數據庫

1.說一下你經常使用的sql優化方式?爲何select*效率低?後端

2.什麼是索引?索引爲何能增長查詢效率服務器

3.索引是建的越多越好嗎?微信

4.什麼是ORM?爲何要用ORM?網絡

5.如何將查詢的數據彙總到excel,txt文件?6.關係型數據庫和非關係型數據庫的區別?


首先若是你要去面試,你得首先保證你掌握了sql的基本查詢

增刪改查

第一部分:軟件測試基礎理論、流程還有項目管理

增刪改查你們基本都會吧,Select、Delete、Update、還有一個子查詢、關聯查詢、分組查詢、分組過濾。

子查詢:就是一個嵌套在查詢語句中的查詢

關聯查詢:內鏈接、外鏈接(左鏈接、右鏈接)

我相信每次去面試的時候不少小夥伴都會去百度。搜素什麼是什麼子查詢?什麼是關聯、分組查詢?什麼是分組過濾……通過熬夜看完了幾篇「深度好文」可能面試官問,你也會成竹在胸。

若是以上的內容都不熟悉,就不要在簡歷中寫:「我熟悉數據庫的語句」

你們可能比較陌生的多是分組查詢( group by)和分組過濾(having)

分組查詢( group by)是一個按照表中一個或者多個字段,將數據進行分組,通常用於數據進行分類彙總。

若是讀這一塊還不是很熟悉的夥伴,能夠去觀看我錄製的分組查詢教學視頻。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

第二部分:數據庫

1.說一下你經常使用的sql優化方式?爲何select*效率低?

優化方式好比說你用到了select*,那麼我就會問你爲何select*效率低?

可能你會說由於*是查詢全部的。

 

面試官:那還有呢?還有什麼要補充的嗎?

我:(抓抓頭髮,手兒無處安放)面試官,你乾脆把簡歷還給我吧,我都不想再說下去了。

有不少時候是這樣子的 ,當面試官問到你一個問題,若是你只知道一點點,你說出來一點點,面試官問你還有沒有其餘要補充的……

select*爲何效率低?

 

第一個你須要根據你理解的原理,具體分析。有時候作測試你會去看一些Mysql的書籍,它會告訴你,一概不要用*做爲查詢的字段的列表。

爲何呢?

第一個,不須要的列會增長數據傳輸時間和網絡開銷。有些數據庫和應用不在一臺服務器。

好比個人應用數據庫確定是有一個服務器的,那你的後端前端可能不在同一臺服務器上,會有不少網絡開銷。由於有時候咱們在前端的操做都會用到數據庫,若是你都用select* 那麼就大大增長了網絡開銷,它會去解析不少的內容。特別一些select語句比較複雜解析比較多的時候,會給數據庫形成沉重的負擔。

特別有一些大類型的字段,好比有一個叫作text 、 它是很是大的

varchar(字符串類型)好比還有一些加密的、日之類的字段,增長網絡消耗是很是明顯的。即便這個Mysql服務器和客戶端在同一臺機器上,使用的協議tcp通訊也須要額外的時間,因此說這個傳輸時間和網絡開銷確定會加大。

那麼對於這些無用的大字段,可能還會增長一些IO操做。(若是長度超過必定字節,它會把一些超出的速率數據化到另外一個地方,而後再去讀取這些記錄就會增長一次IO操做)

其實還有一個很是重要的點,Mysql有一個概念:覆蓋索引(業界極爲推崇的查詢優化方式)

若是你用到了select*,你將失去Mysql優化器覆蓋索引策略優化的可能性。

 

2.什麼是索引?索引爲何能增長查詢效率

索引是和性能息息相關的一個東西

若是咱們把數據庫當作一本「新華字典」索引就是這個字典的目錄。通常會針對where(id等於多少)條件後面的字段

索引既然是一個目錄,那麼它就能夠分爲不少級。

 

圖中的id是一個int類型,那麼圖中的「鑰匙」表明什麼?主鍵。因此說id多是主鍵,其餘的一些就是字段名稱、字段類型、字段的長度

 

SHON INDEX fromorderl (查詢某個表索引語句)

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放右邊。

那麼它可能查三到四次就能夠查到了。這就是索引的效率,是否是會快不少?數據量大的時候提升效率可想而知。

還有不少問題,好比什麼是ORM?爲何要用ORM?(難度四顆星)你們不只僅要說出這個概念,你要把它們的底層原理理解透徹。

面試中高級測試,每每三顆星的面試問題就刷了一大批人。

若是你這樣從底層原理開始講,面試官對你豎大拇指!你開一個工資吧,何時來上班?

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

絮叨

若是你想去一家不錯的公司,可是目前的硬實力又不到,我以爲仍是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度。

若是你經過努力成功進入到了心儀的公司,必定不要懈怠放鬆,職場成長和新技術學習同樣,不進則退。

一凡發如今工做中發現我身邊的人真的就是實力越強的越努力,最高級的自律,享受孤獨

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

本文分享自微信公衆號 - 程序員一凡(gh_6cafb826630a)。若有侵權,請刪除。

相關文章
相關標籤/搜索