數據庫與中間件
主要是MySQL、MongDB、Redis、Nginx等;
在大學的課程裏,一般都會開設一門數據庫的課程,不過這門數據庫是沒有針對某一種數據庫語言的(例如 MySQL、SQlite)。不過我這裏只講 MySQL,因爲最頻繁。數據庫不在多。
把MySQL學好,還是特別重要的,千萬不能停留在會用的層面上,而是應該要了解一下原理,特別是對於要面試的同學,會問挺多原理,不一定要寫得很號,但是需要知道一些原理,像騰訊、阿里面試時,面得最多的就是MySQL。下面就說說一些知識以及推薦的學習資料吧。
對於 MySQL,需要學的還挺多的,例如,
1、一條 sql 語句是如何執行的?進行更新時又是怎麼處理的?
2、索引是如何實現的?多種引擎的實現區別?聚族索引,非聚族索引,二級索引,唯一索引、最左匹配原則等等(非常重要)
3、事務相關:例如事務的隔離是如何實現的?事務是如何保證原子性?不同的事務看到的數據怎麼就不一樣了?難道每個事務都拷貝一份視圖?MVCC 的實現原理(重要)等等。
4、各種鎖相關,例如表鎖,行鎖,間隙鎖,共享鎖,排他鎖。這些鎖的出現主要是用來解決哪些問題?(重要)
5、日誌相關:redolog,binlog,undolog,這些日誌的實現原理,爲了解決怎麼問題?日誌也是非常重要的吧,面試也問的挺多。
6、數據庫的主從備份、如何保證數據不丟失、如何保證高可用等等。
還有一些常用命令也要知道。下面就是關於mysql面試題的思維導圖。
推薦書籍:連 sql 都不會寫的,推薦《SQL必知必會》,接着推薦《MySQL技術內幕:InnoDB存儲引擎》。