記錄
一、有沒有寫過自定義classloader二、本地去更新遠程服務器上容器代碼的方法
三、兩個對象的hashcode一樣說明就是同一個對象嗎
四、java中關鍵字volatile的作用
一般說來,volatile用在如下的幾個地方:
1、中斷服務程序中修改的供其它程序檢測的變量需要加volatile;
2、多任務環(huán)境下各任務間共享的標志應該加volatile;
3、存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;
另外,以上這幾種情況經(jīng)常還要同時考慮數(shù)據(jù)的完整性(相互關聯(lián)的幾個標志讀了一半被打斷了重寫),在1中可以通過關中斷來實現(xiàn),2中可以禁止任務調(diào)度,3中則只能依靠硬件的良好設計了。
其實Volatile是由于編譯器優(yōu)化所造成的一個Bug而引入的關鍵字。
int a = 10;
int b = a;
int c = a;
理論上來講每次使用a的時候都應該從a的地址來讀取變量值,但是這存在一個效率問題,就是每次使用a都要去內(nèi)存中取變量值,然后再通過系統(tǒng)總線傳到CPU 處理,這樣開銷會很大。所以那些編譯器優(yōu)化者故作聰明,把a讀進CPU的cache里,像上面的代碼,假如a在賦值期間沒有被改變,就直接從CPU的 cache里取a的副本來進行賦值。但是bug也顯而易見,當a在賦給b之后,可能a已經(jīng)被另一個線程改變而重新寫回了內(nèi)存,但這個線程并不知道,依舊按 照原來的計劃從CPU的cache里讀a的副本進來賦值給c,結(jié)果不幸發(fā)生了。
于是編譯器的開發(fā)者為了補救這一bug,提供了一個Volatile讓開發(fā)人員為他們的過失埋單,或者說提供給開發(fā)人員了一個選擇效率的權(quán)利。當變量加上了Volatile時,編譯器就老老實實的每次都從內(nèi)存中讀取這個變量值,否則就還按照優(yōu)化的方案從cache里讀
六、maven的好處
七、硬引用和軟引用區(qū)別 強引用和弱引用區(qū)別
1.強引用
本章前文介紹的引用實際上都是強引用,這是使用最普遍的引用。如果一個對象具有強引用,那就類似于必不可少的生活用品,垃圾回收器絕不會回收它。當內(nèi)存空 間不足,Java虛擬機寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內(nèi)存不足問題。
2.軟引用(SoftReference)
如果一個對象只具有軟引用,那就類似于可有可物的生活用品。如果內(nèi)存空間足夠,垃圾回收器就不會回收它,如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實現(xiàn)內(nèi)存敏感的高速緩存。
軟引用可以和一個引用隊列(ReferenceQueue)聯(lián)合使用,如果軟引用所引用的對象被垃圾回收,Java虛擬機就會把這個軟引用加入到與之關聯(lián)的引用隊列中。
3.弱引用(WeakReference)
如果一個對象只具有弱引用,那就類似于可有可物的生活用品。弱引用與軟引用的區(qū)別在于:只具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它 所管轄的內(nèi)存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對象,不管當前內(nèi)存空間足夠與否,都會回收它的內(nèi)存。不過,由于垃圾回收器是一個優(yōu)先級很低的線程, 因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象。
弱引用可以和一個引用隊列(ReferenceQueue)聯(lián)合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯(lián)的引用隊列中。
4.虛引用(PhantomReference)
"虛引用"顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用并不會決定對象的生命周期。如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。
虛引用主要用來跟蹤對象被垃圾回收的活動。虛引用與軟引用和弱引用的一個區(qū)別在于:虛引用必須和引用隊列(ReferenceQueue)聯(lián)合使用。當垃 圾回收器準備回收一個對象時,如果發(fā)現(xiàn)它還有虛引用,就會在回收對象的內(nèi)存之前,把這個虛引用加入到與之關聯(lián)的引用隊列中。程序可以通過判斷引用隊列中是 否已經(jīng)加入了虛引用,來了解
被引用的對象是否將要被垃圾回收。程序如果發(fā)現(xiàn)某個虛引用已經(jīng)被加入到引用隊列,那么就可以在所引用的對象的內(nèi)存被回收之前采取必要的行動。
九、客戶經(jīng)理發(fā)展的主要產(chǎn)品有哪些
十、webservice服務端具體開發(fā)
十一、java虛擬機中的內(nèi)存模型及主要算法。堆棧區(qū)別
十二、.net和java中傳輸基本類型時大端及小端避免辦法
十三、sessioin和cookie區(qū)別
十四、hash實現(xiàn)對key和value的排序
十五、如何在代碼中中斷一個線程任務
十六、動態(tài)代理和cglig區(qū)別
十七、java中是值傳遞還是引用傳遞
十八、java中集合類底層數(shù)據(jù)結(jié)構(gòu)
十九、threadlocal解釋
二十、狀態(tài)模式、責任鏈模式、適配器模式、觀察者模式、工廠方法、抽象工廠,各屬于創(chuàng)建型、行為型還是什么型
二十一、面象對象設計原則
二十二、uml各圖,特別是時序圖
二十四、敏捷快發(fā)理解
二十五、寫一個編譯器最快算法(a+(b*c))*(d+e)正確,而))a+c則出錯
二十六、linix中軟鏈接和硬鏈接區(qū)別,> >> 的區(qū)別,找出一個文件中第四行和第五行的命令
1. 軟連接(符號鏈接) ln -s source target
2. 硬鏈接 ln source target
知道了inode的作用就不難理解軟硬鏈接的區(qū)別了。
- 軟連接相當于快捷方式,如果打開并修改軟連接,相應的文件也會隨之改變。但是如果刪除軟連接,源文件并不會受到影響。
- 硬鏈接有點像引用和指針的結(jié)合,當打開和修改它時,相應的文件隨之改變,但是所有這個文件的硬鏈接的內(nèi)容也隨之改變,這是因為所有的硬鏈接都擁有唯一的一個 inode 號,他們指向的是同一文件。
- 軟連接可以跨文件系統(tǒng)創(chuàng)建,也就是可以在某個分區(qū)中創(chuàng)建到另外一個分區(qū)的軟連接
- 硬鏈接則只能在本文件系統(tǒng)中使用(想想為什么?),其實原理很簡單,因為 inode 是這個文件在當前分區(qū)中的索引值,是相對于這個分區(qū)的,當然不能跨越文件系統(tǒng)了。
- 最后一個區(qū)別是軟連接可以連接任何文件或者文件夾,而硬鏈接則只能在文件之間創(chuàng)建
> 輸出重定向,內(nèi)容會全部覆蓋 >>是追加
sed -n '5,10p' filename 這樣你就可以只查看文件的第5行到第10行
二十八、加強英文
二十九、jdk5和jdk6的新特性
posted on 2012-03-31 23:20 tobyxiong 閱讀(529) 評論(0) 編輯 收藏 所屬分類: java