但凡是有職場經驗的兄弟都知道,大廠的面試真是一言難盡,不光看你面試時的臨場發揮能力,還要分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)是一個按照表中一個或者多個字段,將數據進行分組,通常用於數據進行分類彙總。
若是讀這一塊還不是很熟悉的夥伴,能夠去觀看我錄製的分組查詢教學視頻。
第二部分:數據庫
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?(難度四顆星)你們不只僅要說出這個概念,你要把它們的底層原理理解透徹。
面試中高級測試,每每三顆星的面試問題就刷了一大批人。
若是你這樣從底層原理開始講,面試官對你豎大拇指!你開一個工資吧,何時來上班?
絮叨
若是你想去一家不錯的公司,可是目前的硬實力又不到,我以爲仍是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度。
若是你經過努力成功進入到了心儀的公司,必定不要懈怠放鬆,職場成長和新技術學習同樣,不進則退。
一凡發如今工做中發現我身邊的人真的就是實力越強的越努力,最高級的自律,享受孤獨
本文分享自微信公衆號 - 程序員一凡(gh_6cafb826630a)。若有侵權,請刪除。