1.數據結構:
數組、鏈表、棧、隊列、數java
2.jmm內存模型:
jmm java memory model java內存模型
volatile具有兩種特性,第一就是保證共享變量對全部線程的可見性。將一個共享變量聲明爲volatile後,會有如下效應:redis
1.當寫一個volatile變量時,JMM會把該線程對應的本地內存中的變量強制刷新到主內存中去;數據庫
2.這個寫操做會致使其餘線程中的緩存無效。數組
3.jvm內存模型:
堆區:
1.存儲的所有是對象,每一個對象都包含一個與之對應的class的信息。(class的目的是獲得操做指令)
2.jvm只有一個堆區(heap)被全部線程共享,堆中不存放基本類型和對象引用,只存放對象自己
棧區:
1.每一個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中
2.每一個棧中的數據(原始類型和對象引用)都是私有的,其餘棧不能訪問。
3.棧分爲3個部分:基本類型變量區、執行環境上下文、操做指令區(存放操做指令)。
方法區:
1.又叫靜態區,跟堆同樣,被全部的線程共享。方法區包含全部的class和static變量。
2.方法區中包含的都是在整個程序中永遠惟一的元素,如class,static變量。 緩存
4.java垃圾回收機制
答:java垃圾回收機不是一直運行,只有達到了觸發條件纔會啓動。安全
一般兩種狀況下,會自動觸發java垃圾回收機。數據結構
(1)cpu空閒jvm
gc線程(垃圾回收器線程)執行的優先級最低。當cpu空閒時,纔會輪到gc線程執行。優化
(2)java堆內存不足線程
當jvm堆內存不足時,gc會自動執行,清理過時對象和垃圾,釋放內存空間。當一次清理以後,內存仍然不足時,gc會重複執行。
須要指出的是,當堆內存超出堆內存上限時,會發生內存泄漏(out of memory),拋出異常,程序執行結束。
5.hashmap和hashtable區別,hashtable爲何是線程安全的
hashmap:底層數組+鏈表實現,不管key仍是value都不能爲null,線程安全,實現線程安全的方式是在修改數據時鎖住整個HashTable,效率低
hashmap:底層數組+鏈表實現,能夠存儲null鍵和null值,線程不安全
6.arraylist和linkedlist區別
底層數據節後,arraylist是數組,linkedlist是鏈表,物理上有序 和邏輯上有序
7.redis數據庫有哪幾種數據類型
String list set sortedset hash
8.數據庫優化
答:索引的做用是避免全表掃描,提升查詢效率。
索引的原理:二分查找,折半查詢。
索引的應用場景:
(1)常常查詢的列,才須要建索引。
(2)大文本的列不要建索引,由於索引會額外佔用內存空間;
(3)值不惟一的列,不要建索引。索引要排序,值不惟一的狀況下,數據庫須要額外建一個序列,去維護這個排序。
聯合索引是同時對兩個或多個列創建索引。
聚簇索引並非一種單獨的索引類型,而是一種數據存儲方式。(瞭解便可)