1.九種就本數(shù)據(jù)類型及他們的封裝類
- boolean ---> Boolean--->1/8字節(jié)(1位)
- byte --->Byte--->1字節(jié)
- char--->Character --->2字節(jié)
- short ---> Short --->2字節(jié)
- int ---> Integer ---> 4字節(jié)
- float ---> Float ---> 4字節(jié)
- double --->Double ---> 8字節(jié)
- long ---> Long ---> 8字節(jié)
ps:整數(shù)默認是int,浮點數(shù)默認是double泳梆。
2.Switch能否用String 做參數(shù)
- java7以前不行幻捏,Java7以后可以,java7以后可放* int ,Enum,String*
3.equals 與== 的區(qū)別
- equals初始和==一樣嘱么,是比較對象的地址,但是可以覆寫equals,實現(xiàn)自己的比較邏輯蛉威。
4.Object 有哪些公共方法:
- equals : 比較對象是否相等
- clone() : 拷貝(淺拷貝)
- getClass():返回當前對象相關(guān)的Class對象
- wait(),notify(),notifyAll():配合線程使用瓷耙,進行同步。
5.java四鐘引用雇锡,強弱軟虛,用到的場景
- 強引用僚焦,就是平常普通寫的那種 * A a = new A() *;a為強引用锰提,JVM不會回收有強引用的對象。
- 軟引用 SoftReference: 在內(nèi)存不足時,JVM會回收 軟引用立肘,可用作緩存圖片的鍵边坤,可有效避免OOM。
- 弱引用 WeakReference: 在下一次JVM垃圾回收時谅年,會回收弱引用,WeakHashMap
+虛引用 PhantonReference: 形同虛設(shè)惩嘉,必須和引用隊列配合使用,JVM 在回收一個對象時踢故,如果發(fā)現(xiàn)他有虛引用,會把他加入引用隊列里惹苗。程序可以通過判斷隊列里是否有虛引用殿较,來判斷他是否將要被垃圾回收。
6.haseCode()的作用桩蓉,與equals()有什么區(qū)別
用于鑒定兩個對象是否相等
- Set:不予許重復淋纲,如果用equals()比較,set里面有1000個院究,就要比較1000次洽瞬,但是如果用hashCode()算出對象的儲存地址,如果該地址有對象业汰,則再調(diào)用equals()比較是否相等伙窃,不相等再 存;否則就不存了。
- List通過equals()判斷是否相等样漆。
7.ArrayList为障,LinkedList,Vector區(qū)別
- ArrayList,底層基于數(shù)組,線程不安全放祟。
- Vector ,底層基于數(shù)組鳍怨,線程安全。
- LinkedList 跪妥,底層雙向循環(huán)鏈表鞋喇,線程不安全。
8.String 眉撵,StringBuilder,StringBuffer區(qū)別
- String 是不可變對象
- StringBuilder 底層是char數(shù)組侦香,線程不安全
- StringBuffer 底層是char數(shù)組,線程安全
9. Map执桌、Set鄙皇、List、Queue仰挣、Stack的特點與用法伴逸。
- Map 鍵值對映射
- Set 無序,不可重復
- List ArrayList改查快膘壶,增刪慢错蝴,LinkedList 增刪快洲愤,查找慢。
- Queue 先進先出
- Stack 先進后出
10.HashMap和HashTable的區(qū)別顷锰。
- HashMap: 線程不安全,可以用null作為鍵或值柬赐。
- HashTable :線程安全,并且鎖住整個表官紫。
11. HashMap和ConcurrentHashMap的區(qū)別肛宋,HashMap的底層源碼。(看源碼)
- ConcurrentHashMap 線程安全束世,鎖的粒度小
12.TreeMap酝陈、HashMap、LindedHashMap的區(qū)別毁涉。
- HaseMap
- TreeMap :能夠把保存的記錄根據(jù)鍵排序沉帮,可以自己指定比較器
- LinkedHashMap : 可以保存插入順序,也可以指定根據(jù)使用次數(shù)排序贫堰。遍歷比hashmap慢
13.Collection 包結(jié)構(gòu)穆壕,與Collections的區(qū)別:
- Collection 是接口集合
- Collections類似一個工具類,服務(wù)于Collection框架;Collections.sort()--->Array.sort()--->mergeSort
14.Exception 與Error包結(jié)構(gòu)
- Error 也不會編譯檢查
15.OOM其屏,SOF
-
OOM: 圖片過大喇勋, 壓縮:
BitmapFactory.Options options = new BitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds 設(shè)回true了
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath,options);//此時返回bm為空options.inJustDecodeBounds = false; int w = options.outWidth;//圖片的寬 int h = options.outHeight;//圖片的高 //根據(jù)情況設(shè)置壓縮率 options.inSampleSize = 2;//圖片寬高都為原來的二分之一漫玄,即為原圖大小的1/4 //加載壓縮后的圖片 Bitmap bitmap = BitmapFactory.decodeFile(srcPath,options);
OOM :Bitmap使用后未調(diào)用recycle()茄蚯。
OOM:構(gòu)造adapter沒有使用緩存contentview。
OOM: 內(nèi)存泄露睦优,導致Activity不能被回收渗常。
OOM:緩存過大,可使用SoftReference
SOF(棧溢出):遞歸汗盘,死循環(huán)皱碘。
16. Java面向?qū)ο蟮娜齻€特征與含義。
- 封裝 : 暴露接口隐孽,隱藏內(nèi)部實現(xiàn)細節(jié)
- 繼承 : 代碼復用
- 多態(tài): 更加靈活癌椿,父類引用子。
17.Override和Overload的含義去區(qū)別菱阵。
- Override :重寫踢俄。方法特征相同。子類在覆蓋父類帶throws子句的方法時晴及,子類的方法聲明中的throws子句拋出的異常不能超出父類方法的異常范圍都办。重寫的返回值可以是父類及其子類。
ps:Java語言規(guī)范里,一個方法的特征僅包括方法的名字琳钉、參數(shù)的數(shù)目和種類势木,而不包括返回類型、參數(shù)的名字以及拋出的異常歌懒。
+Overload :重載啦桌, 函數(shù)名相同,參數(shù)列表不同及皂;
18. Interface與abstract類的區(qū)別甫男。
- Interface :不能有方法實現(xiàn),方法默認修飾符 public abstract验烧,變量默認修飾public static final查剖。
- abstract 類:不能實例化,可以擁有abstract方法噪窘,其他的與普通的class沒區(qū)別。
19. Static class 與non static class的區(qū)別效扫。
- 靜態(tài)內(nèi)部類不需要持有外部類的引用倔监,非靜態(tài)內(nèi)部類需要持有外部類的引用。
20. java多態(tài)的實現(xiàn)原理菌仁。
- 程序在運行期動態(tài)綁定浩习,在運行期間,根據(jù)具體實例化的對象找到方法區(qū)中此對象的方法表济丘,再找到方法表中的被調(diào)用方法谱秽,最后通過直接地址找到字節(jié)碼所在的內(nèi)存空間。
21.線程同步的方法:sychronized摹迷、lock疟赊、reentrantLock等。
22. 鎖的等級:方法鎖峡碉、對象鎖近哟、類鎖。
23.實現(xiàn)多線程的兩種方法:Thread與Runable鲫寄。
24.寫出生產(chǎn)者消費者模式吉执。
25.ThreadLocal設(shè)計理念與作用。
- 防止任務(wù)在共享資源上產(chǎn)生沖突的第二種方法就是根除對變量的共享地来,于是有了線程本地化存儲戳玫。
26.ThreadPool用法與優(yōu)勢。 ExecutorService exec = Executors.newCachedThreadPool();
- newCachedThreadPool():數(shù)量不固定未斑,可復用咕宿,不夠了就創(chuàng)建新的線程。
- newFixedThreadPool():固定線程數(shù),任務(wù)超過線程數(shù)荠列,會在隊列中等待
- newSingleThreadExecutor:就一個線程的線城池
- newScheduledThreadPool:類似Timer类浪。支持周期性工作。
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
27.Concurrent包里的其他東西:ArrayBlockingQueue肌似、CountDownLatch等
- ArrayBlockingQueue
- LinkedeBlockingQueue
- PriorityBlockingQueue
- CopyOnWriteArrayList
- DelayQueue
- CountDownLatch
- CyclicBarrier
28.wait()和sleep()的區(qū)別
- wait()來自O(shè)bject,sleep()來自Thread
- wait()會讓出鎖费就,sleep()不會;即wait()會讓出CPU,sleep()不會川队。
29. foreach與正常for循環(huán)效率對比力细。
- foreach 語法糖卑笨,內(nèi)部是迭代器遍歷固该,因此較for稍慢一點
30.java NIO:
NIO的目的在于提高速度,速度的提高來源于所使用的結(jié)構(gòu)更接近于操作系統(tǒng)執(zhí)行I/O的方式:* 通道和緩沖器 *
-
通道 是數(shù)據(jù)雾棺,唯一與通道打交道的是 緩沖器 斗躏,我們通過 緩沖器 *從通道讀取數(shù)據(jù)逝慧,或者向通道寫入數(shù)據(jù)。
FileChannel fc = new FileOutputStream("data.txt").getChannel();
fc.write(ByteBuffer.wrap("some text".getBytes()));
fc.close();//read fc = new FileInputStream("data.text").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE);//分配BSIZE大小的緩沖區(qū) fc.read(buff); buff.flip();//告訴緩沖器啄糙,別人要來讀取了笛臣,做好準備 //輸出時必須編碼 String encoding = System.getProperty("file.encoding); System.out.print(Charest.forName(encoding).decode(buff));
-
buffer.mark(); 配合buffer.reset();回到mark()位置 buffer.rewind();回到起始位置 buffer.asCharBuffer() ---> CharBuffer; //其他的int啥的類似
MappedByteBuffer = new RandomAccessFile("text.txt","rw").
getChannel().map(FileChannel.MapMode.READ_WRITE,0,length);
大文件映射。
31. 反射的作用與原理隧饼。
- 反射:在運行期間動態(tài)生成對象并調(diào)用方法沈堡,提供了動態(tài)性
- 寫框架,寫接口
32. 泛型常用特點燕雁,List<String>能否轉(zhuǎn)為List<Object>
- 不能
33.解析XML的幾種方式的原理與特點:DOM诞丽、SAX、PULL拐格。
- DOM :先把xml文檔都讀到內(nèi)存中,占內(nèi)存
- SAX:基于事件驅(qū)動僧免,順序掃描,每個地方都有對應(yīng)的函數(shù)處理
- PULL:與SAX類似捏浊,可以通過next()方法獲取他的下一個解析事件猬膨,也可以調(diào)用getAttributte()方法來獲取屬性的值,也可調(diào)用它的nextText()獲取本節(jié)點的值呛伴。
34. Java與C++對比勃痴。
- Java:不用自己管理內(nèi)存,跑在虛擬機上热康,平臺無關(guān)沛申。
- C++ : 速度快
35.java1.8新特性
-
Java 8允許我們給接口添加一個非抽象的方法實現(xiàn),只需要使用 default關(guān)鍵字即可姐军。
interfece IA{ default int a(){return 1;} }
引入Lambda表達式