http://blog.csdn.net/lmj623565791/article/details/26626391
豬廠面試(Java后臺(tái)開(kāi)發(fā))
- i++的并發(fā)問(wèn)題在棧中如何改變
- atomicInteger的具體實(shí)現(xiàn)原理(直接說(shuō)了句硬件實(shí)現(xiàn)保證變量的原子操作,其他的關(guān)鍵點(diǎn)沒(méi)說(shuō)出來(lái),沒(méi)復(fù)習(xí))
- threadlocal源碼實(shí)現(xiàn)
- 多線程共享數(shù)據(jù)的多種方式,除了共享變量
- 為什么hashtable用了synchronized,concurrentHashMap用的是ReentrantLcok
- 線程有序執(zhí)行的幾種方法晌姚,守護(hù)線程之前的線程死循環(huán)的條件下守護(hù)線程如何結(jié)束
- 讀寫(xiě)鎖(會(huì)嗎屿储?不太了解鹊奖,只知道CopyAndWriteArrayList)
- 兩個(gè)線程操作一個(gè)變量i店展,一個(gè)從1-50自加养篓,一個(gè)從51-100自加,最終結(jié)果輸出給main線程赂蕴,保證main的結(jié)果準(zhǔn)確柳弄,結(jié)果一定是兩個(gè)線程變量的準(zhǔn)確值相加(如何保證線程安全)
- 生產(chǎn)者消費(fèi)者模型寫(xiě)代碼(不能用blockingqueue)
- java反射的過(guò)程,C++有反射嗎?為什么沒(méi)有概说?
- 抽獎(jiǎng)碧注,如何保證10小時(shí)內(nèi)發(fā)出十個(gè)獎(jiǎng)品保證公平性(不能將獎(jiǎng)品在很短的時(shí)間間隔全部發(fā)出)
- hashmap的entry太長(zhǎng)怎么處理
- gc的幾種方法原理,脫離jvm應(yīng)用糖赔,引用計(jì)數(shù)方式的優(yōu)缺點(diǎn)萍丐,GCRoot的優(yōu)缺點(diǎn),在哪種條件下引用計(jì)數(shù)能比GCRoot發(fā)揮更好的效果放典?
- 寫(xiě)一段代碼逝变,給出一個(gè)用數(shù)組實(shí)現(xiàn)的隊(duì)列,保證隊(duì)列在滿的條件下依舊能夠push刻撒,在push之前pop隊(duì)頭元素(感覺(jué)是考察線程安全的問(wèn)題骨田,一直在跟面試官確認(rèn)線程安全和隊(duì)列可有的數(shù)據(jù)結(jié)構(gòu))
- Tcp的連接過(guò)程,加解密算法的簡(jiǎn)單邏輯声怔,常有的MITM能干啥态贤?CA的詳細(xì)驗(yàn)證過(guò)程
i++的并發(fā)問(wèn)題,在棧中如何改變##
通過(guò)源碼的字節(jié)碼觀察數(shù)據(jù)移動(dòng)過(guò)程醋火,使用javap -c class文件名
查看對(duì)應(yīng)的class文件內(nèi)容
JVM指令集:http://blog.csdn.net/lm2302293/article/details/6713147
public class Test {
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
}
}
Class字節(jié)碼文件分析
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0 // 將常量0放入棧中
1: istore_1 // 將棧中的0存入局部變量1中
2: iload_1 // 將局部變量1的值(也就是0)存入棧中
3: iinc 1, 1 //對(duì)局部變量1中的值自加(加后為1)
6: istore_1 //重新將棧中的0存入局部變量1的值中悠汽,此時(shí)局部變量1的值又變回0
7: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1 // 將局部變量1的值寫(xiě)回棧中,此時(shí)為0芥驳,因此i依舊為0柿冲;
11: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
14: return
}