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