java mysql八股

  1. mysql中如何定位慢查詢
    表象:頁面加載過慢、接口壓測響應時間較長(超過1秒)
    可以采用開源工具如Arthas以及Skywalking,使用skywalking可以檢測出哪個接口過慢。同時可以在mysql中開啟慢日志查詢,設置值為2秒,一旦sql執行超過2秒就記錄到日志中(調試階段)。

  2. 一條sql執行的很慢,應該如何分析?
    可以采用EXPLAIN或者DESC命令獲取MySQL如何執行select語句的信息,直接在select語句前加上expla/desc。其中的possible-key表示當前sql可能會用到的索引,key表示當前sql實際命中的索引,key-len表示索引占用的大小。extra表示額外的建議。
    通過key和key-len檢查是否命中了索引
    通過type字段查看sql是否由進一步的優化空間,是否存在全索引掃描或全盤掃描。(index:索引樹掃描/all:全盤掃描)
    通過extra判斷是否出現了回表的情況,如果出現了,可以嘗試添加索引或者修改返回字段來修復。

  3. 什么是索引?
    索引是MySQL中高效獲取數據的數據結構(有序)主要用來提高數據檢索的效率,降低數據庫的IO成本同時降低數據排序的成本,也降低了CPU的消耗

  4. 索引的底層數據結構?
    MySQL默認的存儲引擎InnoDB采用的是B+樹來存儲索引。采用B+樹的原因是:第一階數更多,路徑更短,第二個磁盤讀寫代價更低,非葉子節點只存儲指針,葉子節點存儲數據。第三是B+樹便于掃庫和區間查詢,因為它的葉子節點是雙向鏈表。

  5. B樹和B+樹什么區別?
    第一:B樹中,非葉子節點和葉子節點都放數據,而B+樹只在葉子節點存放數據,查詢時,B+樹效率更加穩定
    第二:在進行范圍查詢時,B+樹效率更高,因為B+樹都在葉子節點存儲,并且葉子節點是雙向鏈表。

  6. 什么是聚簇索引?什么是非聚簇索引?
    聚簇索引是指將數據存儲與索引放到了一塊,索引結構的葉子節點保存了一整行的數據(必須有且只有一個)
    非聚簇索引(二級索引)是將數據和索引分開存儲,索引結構的葉子節點關聯的是對應數據的主鍵(可以存在多個)
    一般我們自己定義的都是非聚簇索引

  7. 什么是回表查詢?
    回表的意思就是通過二級索引(非聚簇索引)找到對應的主鍵值,然后再通過主鍵值找到聚簇索引中對應的整行數據

  8. 什么是覆蓋索引?
    覆蓋索引是指查詢使用了索引,并且需要返回的列,在該索引中已經全部被找到。就是通過聚簇索引或者非聚簇索引一次直接命中查詢的數據,沒有觸發回表查詢。所以我們要盡量避免使用select*,盡量在返回的列中都包含添加索引的字段。

  9. MySQL中超大分頁怎么處理?
    超大分頁一般都是在數據量比較大的時候,我們使用limit進行分頁查詢,并且需要對數據進行排序,這個時候效率就很低。可以使用覆蓋索引來解決。通過覆蓋索引+子查詢。先分頁查詢數據的id字段,確定了id之后再通過子查詢來過濾,只查詢這個id列表中的數據就可以了。

  10. 索引創建的原則有哪些?
    表中數據超過10w以上通常才會創建索引,并且添加索引的字段是查詢比較頻繁的字段,一般也是像作為查詢條件、排序字段或分組的字段這些。
    通常創建索引使用聯合索引來創建,一條sql的返回值,盡量使用覆蓋索引。
    如果一個字段內容較長,我們會考慮使用前綴索引。但索引并不是越多越好,需要控制索引的數量,添加索引也會導致增刪改查的速度變慢。

  11. 什么情況下索引會失效?
    索引在使用的時候沒有遵守最左匹配法則。(查詢從索引的最左前列開始,并且不跳過索引中的列,如果違反則失效,如果跳過,則只有最左列索引生效)
    模糊查詢時,如果%號在前面也會導致索引失效
    如果在添加索引的字段上進行了運算操作或者類型轉換,索引也會失效。
    字符串不加單引號,也會導致索引失效
    通常情況下,想判斷這條sql是否有索引失效的情況,可以使用explain執行計劃來分析。

  12. 談一談你對sql優化的經驗
    建表的時候,使用索引、sql語句的編寫、主從復制、讀寫分離。數據量過大的時候考慮分庫分表。
    建表的時候,定義字段的時候需要結合字段的內容來選擇合適的類型,如果是數值,像tinyint、int、bigint這些類型,要根據實際情況選擇。如果是字符串類型,也是結合存儲的內容來選擇char、varchar、text類型。
    使用索引的時候,比如select語句一定要指明字段名稱,不能直接使用select*,還要注意sql語句避免造成索引失效的寫法。
    如果數據庫的使用場景讀的操作比較多的時候,為了避免寫的操作鎖造成的性能影響,可以采用讀寫分離的架構。讀寫分離解決的是,數據庫的寫入,影響了查詢的效率。

  13. 事務的特性是什么?
    事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,或者同時失敗(ACID)
    原子性、一致性、隔離性、持久性
    在這里插入圖片描述

  14. 并發事務帶來哪些問題?
    多個事務并發進行是經常發生的,并發也是必然的。
    第一個是臟讀:當一個事務正在訪問數據并對數據進行了修改,而這種修改還沒有提交到數據庫,這時另一個事務也訪問了這個數據,因為這個數據是還沒有提交的數據,所以另一個事務讀到的數據就是臟數據,
    第二個是不可重復讀:比如在一個事務內多次讀同一數據,在這個事務還沒有結束的時候,另一個事務也訪問了這個數據,那么,在第一個事務中的兩次讀數據之間,由于第二個事務的修改導致第一個事務兩次讀取的數據可能不太一樣。這就發生了在一個事務內兩次督導的數據是不一樣的情況,因此稱為不可重復度。
    第三個是幻讀:它發生在一個事務讀取了幾行數據,接著另一個并發事務插入了一些數據。在之后的查詢中,第一個事務就會發現多了一些原本不存在的記錄,就像發生了幻覺一樣。

  15. 如何解決并發事務帶來的問題,MySQL的默認隔離級別是什么?
    我們可以通過對事務進行隔離來解決這些問題。
    MySQL中支持四種隔離級別
    第一個是未提交讀:它解決不了臟讀、不可重復讀、幻讀,平常也不用
    第二個是讀已提交:他能解決臟讀
    第三個是可重復讀:可以解決臟讀和不可重復讀,但不能解決幻讀(MySQL默認)
    第四個是串行化:都可以解決,但性能太低。
    一般都是使用可重復讀(MySQL的默認隔離級別)

  16. undo log和redo log的區別?
    redo log日志記錄的是數據頁的物理變化,服務宕機可以用來同步數據
    undo log日志主要記錄的是邏輯日志,當事務回滾時,通過逆操作恢復原來的數據
    redo log保證了事務的持久性
    undo log保證了事務的原子性和一致性

  17. 事務中的隔離性是如何保證的?
    通過鎖和mvcc來實現的。mvcc就是多版本并發控制,指維護一個數據的多個版本,使得讀寫操作沒有沖突,底層實現主要分三個部分,第一個是隱藏字段,第二個是undo log日志,第三個是readView讀視圖。
    隱藏字段是指:在mysql中給每個表都設置了隱藏字段,有一個是trx_id(事
    務id),記錄每一次操作的事務id,是自增的;另一個字段是roll_pointer(回
    滾指針)
    ,指向上一個版本的事務版本記錄地址。
    undo log主要的作用是記錄回滾日志,存儲老版本數據,在內部會形成一個
    版本鏈,在多個事務并行操作某一行記錄,記錄不同事務修改數據的版本,
    通過roll_pointer指針形成一個鏈表
    readView解決的是一個事務查詢選擇版本的問題,在內部定義了一些匹配規
    則和當前的一些事務id判斷該訪問那個版本的數據
    ,不同的隔離級別快照讀
    是不一樣的,最終的訪問的結果不一樣。如果是rc隔離級別,每一次執行快
    照讀時生成ReadView
    ,如果是rr隔離級別僅在事務中第一次執行快照讀時生
    成ReadView,后續復用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715537.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人車輛檢測與計數(Python+PySide6界面+訓練代碼)

摘要:開發行人車輛檢測與計數系統對于提升城市交通管理和監控系統的效率至關重要。本篇博客詳細介紹了如何利用深度學習構建一個行人車輛檢測與計數系統,并提供了完整的實現代碼。該系統基于強大的YOLOv8算法,并結合了YOLOv7、YOLOv6、YOLOv5…

[Java 探索者之路] 一個大廠都在用的分布式任務調度平臺

分布式任務調度平臺是一種能夠在分布式計算環境中調度和管理任務的系統,在此環境下,各個任務可以在獨立的節點上運行。它有助于提升資源利用率,增強系統擴展性以及提高系統對錯誤的容忍度。 文章目錄 1. 分布式任務調度平臺1. 基本概念1.1 任…

Linux文本處理三劍客:sed

在Linux操作系統中,grep、sed、awk被稱為文本操作“三劍客”,上一期中,我們將詳細介紹grep的基本使用方法,希望能夠幫助到有需要的朋友,現在,我們繼續學習sed。 我會參考官方文檔來做翻譯理解。下面正式開…

使用Java同步Linux服務器時間

前言 公司客戶線上服務器采用的是UOS系統&#xff0c;實施發現系統不會同步時間&#xff0c;并且時間有真實時間有偏差&#xff0c;本意想安裝NTP授時服務&#xff0c;結果發現UOS安裝NTP都要折騰好久&#xff0c;遂采用Java來曲線救國了。 添加依賴 <dependency><…

Java基于SpringBoot的旅游網站的設計與實現論文

目 錄 摘 要 2 Abstract 3 1.1 課題開發的背景 4 1.2 課題研究的意義 4 1.3 研究內容 5 第二章 系統開發關鍵技術 6 2.1 JSP技術介紹 6 2.2 JAVA簡介 6 2.3 MyEclipse開發環境 7 2.4 Tomcat服務器 7 2.5 Spring Boot框架 7 2.6 MySQL數據庫 8 第三章 系統分析 9 3.1 系統可行性…

實踐航拍小目標檢測,基于YOLOv8全系列【n/s/m/l/x】參數模型開發構建無人機航拍場景下的小目標檢測識別分析系統

關于無人機相關的場景在我們之前的博文也有一些比較早期的實踐&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《deepLabV3Plus實現無人機航拍目標分割識別系統》 《基于目標檢測的無人機航拍場景下小目標檢測實踐》 《助力環保河道水質監測&#xff0c;基于yolov…

使用 llama.cpp 在本地部署 AI 大模型的一次嘗試

對于剛剛落下帷幕的2023年,人們曾經給予其高度評價——AIGC元年。隨著 ChatGPT 的火爆出圈,大語言模型、AI 生成內容、多模態、提示詞、量化…等等名詞開始相繼頻頻出現在人們的視野當中,而在這場足以引發第四次工業革命的技術浪潮里,人們對于人工智能的態度,正從一開始的…

JVM(5)

垃圾回收相關 垃圾收集器 警告:純八股文! 如果說上面我們講的收集算法是內存回收的方法論,那么垃圾收集器就是內存回收的具體體現. 垃圾收集器的作用:垃圾收集器是為了保證程序能夠正常,持久運行的一種技術,它是將程序中不用的死亡對象也就是垃圾對象進行清除,從而保證新的…

第四十五天| 322. 零錢兌換、279.完全平方數

Leetcode 322. 零錢兌換 題目鏈接&#xff1a;322 零錢兌換 題干&#xff1a;給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。計算并返回可以湊成總金額所需的 最少的硬幣個數 。如果沒有任何一種硬幣組合能…

AI大語言模型【成像光譜遙感技術】ChatGPT應用指南

遙感技術主要通過衛星和飛機從遠處觀察和測量我們的環境&#xff0c;是理解和監測地球物理、化學和生物系統的基石。ChatGPT是由OpenAI開發的最先進的語言模型&#xff0c;在理解和生成人類語言方面表現出了非凡的能力。本文重點介紹ChatGPT在遙感中的應用&#xff0c;人工智能…

vscode + git

寫在前面&#xff1a; origin分支&#xff1a; 當我們在使用git clone的時候&#xff0c;git會自動地將這個遠程的repo命名為origin&#xff0c;拉取它所有的數據之后&#xff0c;創建一個指向它master的指針&#xff0c;命名為origin/master&#xff0c;之后會在本地創建一個…

C#單向鏈表實現:用泛型類在當前位置插入新數據的方法Insert()

一、涉及到的知識點 1.ListNode<T>類 ListNode<T>是一個泛型類&#xff0c;用于表示鏈表中的一個節點。Value和Next屬性是ListNode<T>最基本的屬性&#xff0c;用于表示節點的值和指向下一個節點的引用。但是&#xff0c;完全可以根據實際需求添加其他屬性&…

雙非二本找實習前的準備day5

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;今天的八股背少一點&#xff0c;MySQL和Redis各1-2道好了&#xff0c;主攻復習是java基礎 今日…

C語言5道編程題簡單介紹(三)

1、打印楊輝三角 程序分析&#xff1a; 結構如下所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代碼如下&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a…

Vuex 是什么?它在 Vue 應用中扮演什么角色?解釋一下 Vuex 的狀態管理模式。如何在 Vuex 中進行異步操作?

一、Vuex 是什么&#xff1f; Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 的出現解決了多個組件間共享狀態的問題&#xff0c;使得狀態管理變得更加直…

#WEB前端(HTML屬性)

1.實驗&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; a: href插入超鏈接 默認情況下在本窗口打開鏈接, target可以設置打開的窗口,parent在父窗口打開&#xff0c;blank新開串口打開,top在頂層串口打開,self為默認在本窗口打開 img: 插入圖片 可以插…

解析/區分MOS管的三個引腳G、S、D(NMOS管和PMOS管)

MOS管的三個引腳分別是Gate&#xff08;柵極&#xff09;、Source&#xff08;源極&#xff09;和Drain&#xff08;漏極&#xff09;。以下是詳細介紹&#xff1a; Gate&#xff08;柵極&#xff09;。這是控制MOS管開關的關鍵引腳&#xff0c;用于控制電流的流通。Source&…

智能分析網關V4安全帽檢測/反光衣檢測/通用工服檢測算法及應用

TSINGSEE青犀視頻智能分析網關V4內置了近40種AI算法模型&#xff0c;支持對接入的視頻圖像進行人、車、物、行為等實時檢測分析&#xff0c;上報識別結果&#xff0c;并能進行語音告警播放。硬件管理平臺支持RTSP、GB28181協議、以及廠家私有協議接入&#xff0c;可兼容市面上常…

【DDD】學習筆記-實體和值對象:從領域模型的基礎單元看系統設計

今天我們來學習 DDD 戰術設計中的兩個重要概念&#xff1a;實體和值對象。 這兩個概念都是領域模型中的領域對象。它們在領域模型中起什么作用&#xff0c;戰術設計時如何將它們映射到代碼和數據模型中去&#xff1f;就是我們這一講重點要關注的問題。 另外&#xff0c;在戰略…

springboot238光影視頻

光影視頻平臺 摘 要 使用舊方法對光影視頻平臺的信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在光影視頻平臺的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題。這次開…