Java線程的狀態(tài):
- New 剛被new出來,沒有調(diào)用start方法
- Runnable 調(diào)用了start方法舶治,可以運(yùn)行的狀態(tài)
- Blocked 線程嘗試獲取的鎖被其他對(duì)象持有
- Waiting 當(dāng)調(diào)用Thread.join和Object.wait方法時(shí)
- Timed_waitiong
- Terminated
- 阻塞的解決方法:1.重新啟動(dòng);2.撤銷進(jìn)程
- 長(zhǎng)期阻塞是死鎖
進(jìn)程與線程的區(qū)別钢属,進(jìn)程和線程如何通訊徘熔?
進(jìn)程是CPU所能處理的單個(gè)任務(wù),任意時(shí)刻淆党,一個(gè)cpu只能運(yùn)行一個(gè)進(jìn)程酷师。一個(gè)進(jìn)程的多個(gè)線程可以共享進(jìn)程的空間讶凉。
進(jìn)程間通訊依靠IPC資源,例如管道(pipes)窒升,套接字(sockets)缀遍;線程間通訊依靠JVM提供的API慕匠,例如wait()/notify()/norifyAll().
HashTable和ConcurrentHashMap的區(qū)別饱须。
- HashTable每次操作都會(huì)鎖住整個(gè)表結(jié)構(gòu)---導(dǎo)致一次只能有一個(gè)線程訪問HashTable對(duì)象。
- 后者只會(huì)鎖住一個(gè)節(jié)點(diǎn)台谊,只有size會(huì)鎖住整個(gè)表結(jié)構(gòu)
Cookie和Session的區(qū)別
- HTTP是無狀態(tài)協(xié)議蓉媳,跟蹤客戶端狀態(tài)。
- 客戶端锅铅;服務(wù)端
- 后者安全
- Session存放重要信息
- Session依賴Cookie傳遞SID的值酪呻,被禁止采用URL重寫技術(shù)
索引有什么用?如何建索引盐须?
- 索引用于加快mysql獲取數(shù)據(jù)的速度玩荠。提供了一種有序,而在有序的條件下進(jìn)行檢索贼邓,二分法效率最高阶冈。
- 設(shè)計(jì)成B+樹,兼顧查詢與更新塑径。InnoDB默認(rèn)使用B-樹女坑。
- 外鍵默認(rèn)索引
- 一條sql使用一個(gè)索引,一個(gè)索引可以使用多個(gè)字段统舀,為復(fù)合索引匆骗。相當(dāng)于電話薄和姓名之間的關(guān)系。電話薄先根據(jù)姓排序誉简,再根據(jù)名排序碉就。給姓建索引挺好,姓和名索引更好闷串,光給名建索引沒用瓮钥。
select * from user where area='$area' order by create_time desc limit 30;
ArrayList是如何實(shí)現(xiàn)的,ArrayList和LinkedList的區(qū)別窿克?ArrayList如何實(shí)現(xiàn)擴(kuò)容骏庸?
- 可變數(shù)組實(shí)現(xiàn)了List接口
- 區(qū)別:LinkedList實(shí)現(xiàn)了List和Deque(雙向隊(duì)列),LinkedList在插入和刪除效率高年叮,因?yàn)椴挥靡苿?dòng)其他數(shù)據(jù)具被。ArrayList查找某個(gè)index的效率高,因?yàn)橛兴饕凰稹inkedList需要的內(nèi)存比ArrayList大
- jdk1.8中擴(kuò)容1.5倍一姿。如果newCapacity比minCapacity小,將minCapacity賦給newCapacity七咧。如果比MAX_ARRAY_SIZE,則根據(jù)minCapacity的值定奪叮叹。
- 如果預(yù)先知道要存放大量值艾栋,可以自行調(diào)用ensureCapacity,避免多次遞增的重新分配
equals、hashcode等Object類中一些方法的討論蛉顽?
- 覆蓋equals方法時(shí)蝗砾,必須重新hashcode方法
- 重寫equals方法時(shí),要滿足對(duì)稱性携冤,傳遞性悼粮,一致性、自反性曾棕、和非空性
- equals不同時(shí)扣猫,hashCode可能相同
面向?qū)ο?/h2>
- 三大特性
- 封裝
- 繼承
- 多態(tài)
JVM如何加載字節(jié)碼文件?
- Classloader 裝載
- 文件驗(yàn)證器 驗(yàn)證
- 被加載到方法區(qū)中一個(gè)格子間
- 在CPU車間的線程每次運(yùn)行Java虛擬機(jī)棧最上面的工作臺(tái)(棧幀)翘地,里面有柜子(局部變量區(qū))申尤,桶(操作數(shù)棧)
- 操作柜子的抽屜中的數(shù),入桶衙耕,出桶昧穿,替換
- 虛擬機(jī)的所有指令都是對(duì)棧進(jìn)行操作
GC算法
- 常見回收算法
- 標(biāo)記-清除:產(chǎn)生碎片
- 復(fù)制
- 標(biāo)記-整理
- 分代收集算法
什么情況下回出現(xiàn)Full GC,什么情況下會(huì)出現(xiàn)Young GC
- 對(duì)象新建在新生代的Eden區(qū)臭杰,當(dāng)Eden區(qū)沒有足夠內(nèi)存時(shí)粤咪,觸發(fā)Young GC
- 在Young GC前,進(jìn)行空間分配擔(dān)保---如果老年代連續(xù)空間小于新生代對(duì)象的總大锌矢恕(或歷屆晉升的平均大辛戎Α)觸發(fā)一次Full GC。
- 顯示調(diào)用System.gc()
- 大對(duì)象從新生代晉升到老年代時(shí)磁奖,分配內(nèi)存不夠
JVM內(nèi)存模型
- 定義:嘗試屏蔽掉各種硬件和操作系統(tǒng)的訪問差異
- 目標(biāo):定義變量的訪問規(guī)則囊拜,即虛擬機(jī)將變量存儲(chǔ)到內(nèi)存,和從內(nèi)存取出的細(xì)節(jié)
- volatile變量:
- 可見性比搭,不具備原子性:當(dāng)被valatile修飾的變量的值被修改后冠跷,會(huì)被立即刷新到主內(nèi)存中,對(duì)其他線程可見身诺;當(dāng)線程讀取變量時(shí)蜜托,也會(huì)從主內(nèi)存中刷一份到工作內(nèi)存中,但是霉赡,如果多線程操作變量的運(yùn)算橄务,并且后一個(gè)值依賴前一個(gè)值,就還是會(huì)有并發(fā)問題穴亏,說明volatitle不具備原子性蜂挪。
- 禁止指令重排序優(yōu)化:在單例模式雙重檢驗(yàn)鎖版本中重挑,語句
instance = new Singleton()
做了三件事:1.給引用instance分配內(nèi)存;2.調(diào)用Singleton構(gòu)造函數(shù)初始化成員變量棠涮;3.將引用instance指向堆中對(duì)象谬哀。將instance聲明成volatile后就能將避免。給賦值操作后加一個(gè)內(nèi)存屏障严肪,讀操作不會(huì)重排序到內(nèi)存屏障之前史煎。
- synchronized關(guān)鍵字:當(dāng)一個(gè)線程對(duì)變量進(jìn)行加鎖,清空變量在工作內(nèi)存的值诬垂。滿足可見性和原子性劲室。
Java運(yùn)行時(shí)數(shù)據(jù)區(qū)
- 程序計(jì)數(shù)器:用于指定當(dāng)前線程字節(jié)碼的執(zhí)行順序
- 堆:
- 新生代:Eden區(qū)間;From Survivor1结窘,F(xiàn)rom Survior2:用于存放Young GC幸存的對(duì)象
- 老年代
- 方法區(qū):存儲(chǔ)虛擬機(jī)加載的類信息、常量充蓝、靜態(tài)變量
- 運(yùn)行時(shí)常量池:
存放字面量(文本字符串隧枫、final常量)
-
符號(hào)引用:
- 全限定名:org.apache.commons.lang3.StringUtils;
- 字段和方法名稱;描述符:private谓苟、static
有字符串常量池官脓。
事務(wù)的實(shí)現(xiàn)原理
- 事務(wù)的特性:ACID--原子性(atomicity)、一致性(Consistency)涝焙、隔離性(Isolation)卑笨、持久性(durability)
- Spring事務(wù):聲明式事務(wù)---常用注解方式;編程式事務(wù)
- 數(shù)據(jù)庫事務(wù):MySQL/InnoDB四種隔離級(jí)別RU仑撞、RC赤兴、RR、Serializable隧哮⊥傲迹快照讀,不加鎖沮翔;當(dāng)前讀陨帆,加鎖。
參考網(wǎng)址
- 封裝
- 繼承
- 多態(tài)
- 虛擬機(jī)的所有指令都是對(duì)棧進(jìn)行操作
- 標(biāo)記-清除:產(chǎn)生碎片
- 復(fù)制
- 標(biāo)記-整理
- 分代收集算法
- 可見性比搭,不具備原子性:當(dāng)被valatile修飾的變量的值被修改后冠跷,會(huì)被立即刷新到主內(nèi)存中,對(duì)其他線程可見身诺;當(dāng)線程讀取變量時(shí)蜜托,也會(huì)從主內(nèi)存中刷一份到工作內(nèi)存中,但是霉赡,如果多線程操作變量的運(yùn)算橄务,并且后一個(gè)值依賴前一個(gè)值,就還是會(huì)有并發(fā)問題穴亏,說明volatitle不具備原子性蜂挪。
- 禁止指令重排序優(yōu)化:在單例模式雙重檢驗(yàn)鎖版本中重挑,語句
instance = new Singleton()
做了三件事:1.給引用instance分配內(nèi)存;2.調(diào)用Singleton構(gòu)造函數(shù)初始化成員變量棠涮;3.將引用instance指向堆中對(duì)象谬哀。將instance聲明成volatile后就能將避免。給賦值操作后加一個(gè)內(nèi)存屏障严肪,讀操作不會(huì)重排序到內(nèi)存屏障之前史煎。
- 新生代:Eden區(qū)間;From Survivor1结窘,F(xiàn)rom Survior2:用于存放Young GC幸存的對(duì)象
- 老年代
- 運(yùn)行時(shí)常量池:
存放字面量(文本字符串隧枫、final常量)
-
符號(hào)引用:
- 全限定名:org.apache.commons.lang3.StringUtils;
- 字段和方法名稱;描述符:private谓苟、static
有字符串常量池官脓。