1. 程式人生 > >Java 面試之資料庫

Java 面試之資料庫

Redis

介紹Redis

  基於C語言開發的一種非關係型資料庫,資料放在記憶體,使用RDB[快照]方式或者AOF[日誌]方式持久化。
  Redis的優勢包括速度、對富資料型別的支援(String、Hash、List、Set、Zset)、原子性操作、通用性。

Redis使用場景

  • 快取(熱資料:經常被查詢,但不常被改變的資料)
  • 共享Session(SSO系統)
  • 佇列 / 棧
  • 位操作(大資料處理
  • 分散式鎖(setnx命令)與單執行緒機制(秒殺系統
  • 排行榜 / 計數器(ZSet的zadd命令
  • 釋出 / 訂閱

MySQL

InnoDB引擎與MyISAM引擎

比較點 InnoDB MyISAM
事務 支援 不支援
外來鍵 支援 不支援
行鎖 表鎖
索引 聚集索引(資料和索引捆綁) 非聚集索引(資料和索引分離)
FullText索引 不支援 支援
跨平臺 可直接拷貝 難直接拷貝
表格壓縮 較難 較易

資料庫事務

  資料庫事務是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。事務滿足以下四大特性:

  1. 原子性(Atomicity):一個事務中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態。
  2. 一致性(Consistency):在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。
  3. 隔離性(Isolation):資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離級別 見Spring部分。
  4. 永續性(Durability):事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

正規化

第一正規化(1NF)

  所謂第一正規化(1NF)是指在關係模型中,對域新增的一個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化(1NF)表中的每個域值只能是實體的一個屬性或一個屬性的一部分。
> 簡而言之,第一正規化就是無重複的域。

第二正規化(2NF)

  在1NF的基礎上,非碼屬性必須完全依賴於候選碼(在1NF基礎上消除非主屬性對主碼的部分函式依賴)。第二正規化(2NF)是在第一正規化(1NF)的基礎上建立起來的,即滿足第二正規化(2NF)必須先滿足第一正規化(1NF)。第二正規化(2NF)要求資料庫表中的每個例項或記錄必須可以被唯一地區分,選取一個能區分每個實體的屬性或屬性組,作為實體的唯一標識。
> 簡而言之,第二正規化就是在滿足第一正規化的基礎上,屬性完全依賴於主鍵。

第三正規化(3NF)

  在2NF基礎上,任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)。第三正規化(3NF)是第二正規化(2NF)的一個子集,即滿足第三正規化(3NF)必須滿足第二正規化(2NF)。簡而言之,第三正規化(3NF)要求一個關係中不包含已在其它關係已包含的非主關鍵字資訊。
> 簡而言之,第三正規化就是在滿足第二正規化的基礎上,屬性不依賴於其它非主屬性。

分庫後如何實現分頁查詢

  1. 直接使用跨庫的多表聯合查詢(不建議)。
  2. 向每個資料庫均傳送一個查詢請求,然後對所有查詢結果彙總,再處理分頁邏輯。
  3. 建立一個總資料庫,只負責維護主鍵和必要的索引,以供分頁查詢。
  4. 使用Redis維護一個主鍵序列,分頁操作就是擷取該序列的一部分,其結果就是主鍵ID集合,拿到ID後便可對映到多個數據庫查詢資料。

“多臺”資料庫訪問的問題無解,但同臺“多次”資料庫訪問的問題可以通過程式優化。

SQL注入的原理,如何預防

  所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。

  1. 對使用者的輸入進行校驗,可以通過正則表示式,或限制長度,對單引號和雙"-"進行轉換等。
  2. 不要使用動態拼裝SQL,應使用引數化的SQL或者直接使用儲存過程進行資料查詢存取。
  3. 不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。
  4. 不要把機密資訊明文存放,應加密或者Hash掉密碼和敏感的資訊。
  5. 使用自定義的錯誤資訊對原始錯誤資訊進行包裝,把異常資訊存放在獨立的表中。

左右連線

  1. 左連線(left join):顯示左表所有資料和右表相應資料。
  2. 右連線(right join):顯示右表所有資料加左表相應資料。
  3. 內連線(inner join):顯示有效公共資料。
  4. 全連線(full join):顯示所有資料。

左連線隻影響右表,右連線隻影響左表

資料庫索引的實現

  資料庫索引包括B+樹索引R樹索引Hash索引FullText索引等。

B樹

  一棵 mm 階 B 樹,或為空樹,或滿足:
1. 每個結點至多有 mm 棵子樹。
2. 若根結點不是葉子,則至少有兩棵子樹。
3. 除根之外的所有非終端結點至少有 m2\frac{m}{2} 棵子樹。
4. 所有非終端結點包含 nn 個關鍵字和 n+1n+1 棵子樹,nn 滿足:m21nm1\frac{m}{2} - 1 \leq n \leq m-1
5. 所有葉子結點在同一層,不含資訊,表示查詢失敗。

B+樹

  一棵 mm 階 B+ 樹,或為空樹,或滿足:
1. 根結點只有一個,分支數量範圍為[2m][2,m]
2. 每個分支結點包含分支數範圍為[m2m][\frac{m}{2},m]
3. 分支結點的關鍵字數量等於其子分支的數量減一,關鍵字數量範圍為[m21m1][\frac{m}{2} - 1, m - 1],關鍵字順序遞增
4. 所有葉子結點在同一層。

  由於B+樹的資料都儲存在葉子結點中,分支結點均為索引,方便掃庫,只需要掃一遍葉子結點即可,但是B樹因為其分支結點同樣儲存著資料,我們要找到具體的資料,需要進行一次中序遍歷按序來掃。其中B樹和B+樹的區別如下:

  • 關鍵字數量不同;B+樹中 n 棵子樹的結點中含有 n 個關鍵字;B樹中 m 棵子樹的結點中含有 m - 1 個關鍵字。
  • 儲存位置不同;B+樹中所有葉子結點中包含了全部關鍵字,且按大小順序排列;B樹的資料儲存在每一個結點中,並不僅僅儲存在葉子結點上。
  • 分支結點構造不同;B+樹中所有非終端結點都是索引;B樹中非終端結點儲存資料。
  • 查詢方式不同;B+樹中查詢時走了一條從根結點到葉子結點的路徑;B樹中在找到具體的數值以後就結束,並不一定到葉子結點。

R樹(空間索引)

  一棵R樹滿足如下的性質:

  1. 除根結點之外,所有非根結點包含有 m 至 M 個記錄索引,根結點的記錄個數可以少於 m 。通常 M = 2m 。
  2. 對於所有葉子結點中儲存的記錄,I 是最小的可以在空間中完全覆蓋這些記錄所代表的點的矩形(此處“矩形”可以擴充套件到高維空間)。
  3. 對於所有非葉子結點上的記錄,i 是最小的可以在空間上完全覆蓋這些條目所代表的點的矩形。
  4. 所有葉子結點在同一層。

R樹是B樹在K維上的自然擴充套件

相關推薦

java面試資料庫面試知識點

1. 主鍵 超鍵 候選鍵 外來鍵 主 鍵: 資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。 超 鍵: 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可

Java 面試資料庫

Redis 介紹Redis   基於C語言開發的一種非關係型資料庫,資料放在記憶體,使用RDB[快照]方式或者AOF[日誌]方式持久化。   Redis的優勢包括速度、對富資料型別的支援(String、Hash、List、Set、Zset)、原子性操作、通用性。

Java面試資料庫——資料庫索引

原文:https://blog.csdn.net/sundacheng1989/article/details/53117172https://www.cnblogs.com/gavinsp/p/5513536.htmlhttps://www.cnblogs.com/lpsh

java面試Hashmap

試圖 dfa 單個 也說 掌握 illegal cep 引用變量 引用類型 在java面試中hashMap應該說一個必考的題目,而且HashMap 和 HashSet 是 Java Collection Framework 的兩個重要成員,其中 HashMap 是 Map

java面試專案面試問題-【專案框架-僅代表一部分】

1.請描述下你做的專案: XXX系統是什麼什麼,主要目的是XXX,整個系統包含了哪些功能模組,然後說包含了哪些模組,自己做了哪些模組。 2.結合專案談談你對MVC的理解 MVC是model-view-controler的簡稱。也就是模型-檢視-控制器。mvc是一種設計模式,他強制性的把應用

Java面試Java是解釋執行的嗎?

一、個人觀點    這個說法不夠準確,Java原始碼首先通過Javac編譯成相應的位元組碼(bytecode),然後,在執行時,通過JVM內嵌的直譯器將位元組碼轉換為最終的機器碼,然後進行執行,這部分是解釋執行。但是常見的JVM(比如Hotspot JVM)提供了JIT(Ju

java面試—mysql資料庫

MYSQL 一、sql的select語句完整的執行順序     1.sql select的執行順序:     1)、from組裝來自不同資料來源的資料;     2)、where基於指定的條件對記錄進行篩選

java面試什麼是ThreadLocal?

ThreadLocal用於建立執行緒的本地變數,我們知道一個物件的所有執行緒會共享它的全域性變數,所以這些變數不是執行緒安全的,我們可以使用同步技術。但是當我們不想使用同步的時候,我們可以選擇ThreadLocal變數。 每個執行緒都會擁有他們自己的Thread變數,他們可以使用get/set方法去獲取他們

Java面試基礎篇(上)

題目來源於網路 後面是筆者自己提供的答案,僅供參考,如有錯誤,歡迎指正   一、基礎篇 1.1、Java基礎  面向物件的特徵:繼承、封裝和多型 final, finally, finalize 的區別 Exception、Er

Java面試ArrayList與LinkedList的比較

介紹 ArrayList和LinkedList的使用方法很像,因為他們都實現了List介面,List介面抽象了對集合常見的操作,比如增刪查詢。但是他們在底層實現上卻不一樣,所以在使用的時候也有一些點是特別需要注意的。所以我們先簡單看看他們的實現。 資料結構 ArrayLi

JAVA面試 簡答題

(一)override與overload有何異同? Override(重寫):是指子類重新定義了父類同名的方法,方法重寫也叫方法覆蓋。 Overload(過載):是在一個類中,多個方法具有相同的方法名稱,但卻具有不同的引數列表。 相同點: 它們存在的形式都是方

java面試java基礎部分(未完待續)

1.&與&&區別? &和&&都是邏輯運算子,都是判斷兩邊同時真則為真,否則為假;但是&&當第一個條件不成之後,後面的條件都不執行了,而&

java面試多執行緒(未完待續)

1.什麼是多執行緒? 在一個應用程式中,同時,有多個不同的執行路徑。 2.執行緒和程序有什麼區別? 執行緒是程序的一條執行路徑,而程序是執行緒的集合。 3.什麼是執行緒同步、非同步? 執行緒同

java面試專案相關面試題目(未完待續)

1.你說說你做的最好的專案? 要重點介紹到①專案是做什麼?②用到那些技術?③整個專案中最大的亮點是?核心部分④遇到bug是怎麼解決的? 例如: 我認為我做的最好的專案是 創辦了螞蟻課堂it線上教學

Java面試異常處理

B.異常處理 1.Java 中異常分為哪些種類 編譯時異常(也叫強制性異常)也叫CheckedException 和執行時異常(也叫非強制性異常)也叫 RuntimeException. 當前方法指導如何處理該異常,則用try...catch 塊來處理該異常

JAVA面試JavaWeb部分(一)

1、 forward 和 redirect 的區別 forward是伺服器的轉向,就是請求轉發, redirect是客戶端的跳轉, 就是重定向 forward瀏覽器的地址不會發生改變 forward是一次請求中完成。redirect是重新發起請求 請求轉發的

java面試_資料庫

1.group by 根據表裡的欄位名分類,相同欄位名只顯示一行記錄,通常與聚集函式max、min合用選擇最大值最小值,或者與having合用篩選,結果按照group by的欄位排序 例:select * from examine group by e_date; 結果: +-------------+---

JAVA面試容器

java collections框架中大量集合介面以及這些介面的實現類和操作他們的演算法,具體而言,主要提供了List、Queue、Set、Stack和Map。其中Collection介面下有List

Java 面試資料結構

常見資料結構 HashMap、Hashtable、 ConcurrentHashMap HashMap 底層實現:HashMap底層整體結構是一個數組,陣列中的每個元素又是一個連結串列。每次新增一個物件(put)時會產生一個連結串列物件(Object型別),Map中的每個

java面試資料庫

1.SQL語句分為哪幾種?SQL語句主要可以劃分為以下幾類: DDL(Data Definition Language):資料定義語言,定義對資料庫物件(庫、表、列、索引)的操作。 包括:CREATE、