常見面試題1
1,mysql的三大引擎是啥?
mysql常用的引擎有InnoDB,MyISAM,Memory,預設是InnoDB
InnoDB:磁碟表,支援事務,支援行級鎖,B+Tree索引
ps:優點: 具有良好的ACID特性。適用於高併發,更新操作比較多的表。需要使用事務的表。對自動災難恢復有要求的表。
缺點:讀寫效率相對MYISAM比較差。佔用的磁碟空間比較大。
mysql的4大特性+4種隔離級別:
MyISAM:磁碟表,不支援事務,支援表級鎖,B+Tree索引
ps: 優點:佔用空間小,處理速度快(相對InnoDB來說)
缺點:不支援事務的完整性和併發性
MEMORY(Heap):記憶體表,不支援事務,表級鎖,Hash索引,不支援Blob,Text大型別
ps: 優點:速度要求快的,臨時資料
缺點:丟失以後,對專案整體沒有或者負面影響不大的時候。
2,redis的hash演算法用的是啥?
redis應該是使用一致性hash演算法---MurmurHash3 演算法,具有低碰撞率優點,google改進的版本cityhash也是redis中用到的雜湊演算法。
現有的主流的大資料系統都是用的 MurmurHash本身或者改進
3,nosql為啥比sql快?
Nosql是非關係型資料庫,因為不需要滿足關係資料庫資料一致性等複雜特性所以速度快;
sql是關係型資料庫,功能強大,但是效率上有瓶頸
4,什麼是索引為啥nosql沒索引?nosql有索引滴
索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照資料存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。
聚簇索引:有主鍵時,根據主鍵建立聚簇索引;沒有主鍵時,會用一個唯一且不為空的索引列做為主鍵,成為此表的聚簇索引;如果以上兩個都不滿足那innodb自己建立一個虛擬的聚集索引
非聚簇索引:非聚簇索引都是輔助索引,像複合索引、字首索引、唯一索引
5,B+樹和B樹區別?
B樹的非葉子節點儲存實際記錄的指標,而B+樹的葉子節點儲存實際記錄的指標
B+樹的葉子節點通過指標連起來了, 適合掃描區間和順序查詢。