- 相關(guān)推薦
2017年BAT的JAVA面試題
Java 不同于一般的編譯執行計算機語(yǔ)言和解釋執行計算機語(yǔ)言。它首先將源代碼編譯成二進(jìn)制字節碼(bytecode),然后依賴(lài)各種不同平臺上的虛擬機來(lái)解釋執行字節碼,從而實(shí)現了“一次編譯、到處執行”的跨平臺特性。
以下是關(guān)于BAT的JAVA面試題,希望大家認真閱讀!
Java基礎
集合類(lèi)以及集合框架;HashMap與HashTable實(shí)現原理,線(xiàn)程安全性,hash沖突及處理算法;ConcurrentHashMap;
進(jìn)程和線(xiàn)程的區別;
Java的并發(fā)、多線(xiàn)程、 線(xiàn)程模型;
什么是線(xiàn)程池,如何使用? 答:線(xiàn)程池就是事先將多個(gè)線(xiàn)程對象放到一個(gè)容器中,當使用的時(shí)候就不用new 線(xiàn)程而是直接去池中拿線(xiàn)程即可,節
數據一致性如何保證;Synchronized關(guān)鍵字,類(lèi)鎖,方法鎖,重入鎖;
Java中實(shí)現多態(tài)的機制是什么;
如何將一個(gè)Java對象序列化到文件里;
說(shuō)說(shuō)你對Java反射的理解; 答:Java 中的反射首先是能夠獲取到Java 中要反射類(lèi)的字節碼, 獲取字節碼有三種方法,
同步的方法;多進(jìn)程開(kāi)發(fā)以及多進(jìn)程應用場(chǎng)景;
在Java中wait和seelp方法的不同;答:最大的不同是在等待時(shí)wait 會(huì )釋放鎖,而sleep 一直持有鎖。wait 通常被用于線(xiàn)程間交互,sleep 通常被用于暫停執行。
synchronized 和volatile 關(guān)鍵字的作用;答:1)保證了不同線(xiàn)程對這個(gè)變量進(jìn)行操作時(shí)的可見(jiàn)性,即一個(gè)線(xiàn)程修改了某個(gè)變量的值,這新值對其他線(xiàn)程來(lái)說(shuō)是立即可見(jiàn)的。2)禁止進(jìn)行指令重排序。
volatile 本質(zhì)是在告訴jvm 當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized 則是鎖定當前變量,只有當前線(xiàn)程可以訪(fǎng)問(wèn)該變量,其他線(xiàn)程被阻塞住。
1.volatile 僅能使用在變量級別;synchronized 則可以使用在變量、方法、和類(lèi)級別的
2.volatile 僅能實(shí)現變量的修改可見(jiàn)性,并不能保證原子性;synchronized 則可以保證變量的修改可見(jiàn)性和原子性
3.volatile 不會(huì )造成線(xiàn)程的阻塞;synchronized 可能會(huì )造成線(xiàn)程的阻塞。
4.volatile 標記的變量不會(huì )被編譯器優(yōu)化;synchronized 標記的變量可以被編譯器優(yōu)化
服務(wù)器只提供數據接收接口,在多線(xiàn)程或多進(jìn)程條件下,如何保證數據的有序到達;
ThreadLocal原理,實(shí)現及如何保證Local屬性;
String StringBuilder StringBuffer對比;
你所知道的設計模式有哪些; 答:Java 中一般認為有23 種設計模式,我們不需要所有的都會(huì ),但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。需要掌握的設計模式我單獨列出來(lái)了,當然能掌握的越多越好。
總體來(lái)說(shuō)設計模式分為三大類(lèi):
創(chuàng )建型模式,共五種:工廠(chǎng)方法模式、抽象工廠(chǎng)模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀(guān)模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀(guān)察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪(fǎng)問(wèn)者模式、中介者模式、解釋器模式。
Java如何調用c、c++語(yǔ)言;
接口與回調;回調的原理;寫(xiě)一個(gè)回調demo;
泛型原理,舉例說(shuō)明;解析與分派;
抽象類(lèi)與接口的區別;應用場(chǎng)景;抽象類(lèi)是否可以沒(méi)有方法和屬性;
靜態(tài)屬性和靜態(tài)方法是否可以被繼承?是否可以被重寫(xiě)?以及原因?
修改對象A的equals方法的簽名,那么使用HashMap存放這個(gè)對象實(shí)例的時(shí)候,會(huì )調用哪個(gè)equals方法;
說(shuō)說(shuō)你對泛型的了解;
Java的異常體系;
如何控制某個(gè)方法允許并發(fā)訪(fǎng)問(wèn)線(xiàn)程的個(gè)數;
動(dòng)態(tài)代理的區別,什么場(chǎng)景使用;
數據結構與算法
堆和棧在內存中的區別是什么(數據結構方面以及實(shí)際實(shí)現方面);
最快的排序算法是哪個(gè)?給阿里2萬(wàn)多名員工按年齡排序應該選擇哪個(gè)算法?堆和樹(shù)的區別;寫(xiě)出快排代碼;鏈表逆序代碼;
求1000以?xún)鹊乃苫〝狄约?0億以?xún)鹊乃苫〝?
子串包含問(wèn)題(KMP 算法)寫(xiě)代碼實(shí)現;
萬(wàn)億級別的兩個(gè)URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分組->多文件讀寫(xiě)效率->磁盤(pán)尋址以及應用層面對尋址的優(yōu)化)
蟻群算法與蒙特卡洛算法;
寫(xiě)出你所知道的排序算法及時(shí)空復雜度,穩定性;
百度POI中如何試下查找最近的商家功能(坐標鏡像+R樹(shù))。
【BAT的JAVA面試題】相關(guān)文章:
java面試題及答案11-01
經(jīng)典的Java基礎面試題09-02
java面試題2017及答案06-08
2016年JAVA面試題07-13
Java認證經(jīng)典面試題目07-02
高級Java面試題匯總07-17
java基礎面試題201708-28
Java main方法面試題及答案08-06
高級Java面試題及答案201602-26
NIIT認證Java面試題及答案07-01