2017年BAT的JAVA面試題

來源:文萃谷 1.12W

Java 不同於一般的編譯執行計算機語言和解釋執行計算機語言。它首先將源代碼編譯成二進制字節碼(bytecode),然後依賴各種不同平台上的虛擬機來解釋執行字節碼,從而實現了“一次編譯、到處執行”的跨平台特性。

2017年BAT的JAVA面試題

以下是關於BAT的JAVA面試題,希望大家認真閲讀!

Java基礎

集合類以及集合框架;HashMap與HashTable實現原理,線程安全性,hash衝突及處理算法;ConcurrentHashMap;

  進程和線程的區別;

Java的併發、多線程、 線程模型;

什麼是線程池,如何使用? 答:線程池就是事先將多個線程對象放到一個容器中,當使用的時候就不用new 線程而是直接去池中拿線程即可,節

數據一致性如何保證;Synchronized關鍵字,類鎖,方法鎖,重入鎖;

Java中實現多態的機制是什麼;

如何將一個Java對象序列化到文件裏;

説説你對Java反射的理解; 答:Java 中的反射首先是能夠獲取到Java 中要反射類的字節碼, 獲取字節碼有三種方法,

同步的方法;多進程開發以及多進程應用場景;

在Java中wait和seelp方法的不同;答:最大的不同是在等待時wait 會釋放鎖,而sleep 一直持有鎖。wait 通常被用於線程間交互,sleep 通常被用於暫停執行。

synchronized 和volatile 關鍵字的作用;答:1)保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來説是立即可見的。2)禁止進行指令重排序。

volatile 本質是在告訴jvm 當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized 則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。

tile 僅能使用在變量級別;synchronized 則可以使用在變量、方法、和類級別的

tile 僅能實現變量的修改可見性,並不能保證原子性;synchronized 則可以保證變量的修改可見性和原子性

tile 不會造成線程的`阻塞;synchronized 可能會造成線程的阻塞。

tile 標記的變量不會被編譯器優化;synchronized 標記的變量可以被編譯器優化

服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達;

ThreadLocal原理,實現及如何保證Local屬性;

String StringBuilder StringBuffer對比;

你所知道的設計模式有哪些; 答:Java 中一般認為有23 種設計模式,我們不需要所有的都會,但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。需要掌握的設計模式我單獨列出來了,當然能掌握的越多越好。

總體來説設計模式分為三大類:

創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

Java如何調用c、c++語言;

接口與回調;回調的原理;寫一個回調demo;

泛型原理,舉例説明;解析與分派;

抽象類與接口的區別;應用場景;抽象類是否可以沒有方法和屬性;

靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?

修改對象A的equals方法的簽名,那麼使用HashMap存放這個對象實例的時候,會調用哪個equals方法;

説説你對泛型的瞭解;

Java的異常體系;

如何控制某個方法允許併發訪問線程的個數;

動態代理的區別,什麼場景使用;

  數據結構與算法

堆和棧在內存中的區別是什麼(數據結構方面以及實際實現方面);

最快的排序算法是哪個?給阿里2萬多名員工按年齡排序應該選擇哪個算法?堆和樹的區別;寫出快排代碼;鏈表逆序代碼;

求1000以內的水仙花數以及40億以內的水仙花數;

子串包含問題(KMP 算法)寫代碼實現;

萬億級別的兩個URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)

  蟻羣算法與蒙特卡洛算法;

寫出你所知道的排序算法及時空複雜度,穩定性;

百度POI中如何試下查找最近的商家功能(座標鏡像+R樹)。

熱門標籤