Java 不同於一般的編譯執行計算機語言和解釋執行計算機語言。它首先將原始碼編譯成二進位制位元組碼(bytecode),然後依賴各種不同平臺上的虛擬機器來解釋執行位元組碼,從而實現了“一次編譯、到處執行”的跨平臺特性。
以下是關於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樹)。