JAVA面試必備的知識寶典(五)

如何實現(xiàn)集合排序?

你可以使用有序集合饶套,如 TreeSet 或 TreeMap,你也可以使用有順序的的集合宁否,如 list晌杰,然后通過 Collections.sort() 來排序。

如何打印數(shù)組內(nèi)容

你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數(shù)組功炮。由于數(shù)組沒有實現(xiàn) toString() 方法溅潜,所以如果將數(shù)組傳遞給 System.out.println() 方法,將無法打印出數(shù)組的內(nèi)容薪伏,但是 Arrays.toString() 可以打印每個元素滚澜。

LinkedList的是單向鏈表還是雙向?

雙向循環(huán)列表,具體實現(xiàn)自行查閱源碼.

TreeMap是實現(xiàn)原理

采用紅黑樹實現(xiàn),具體實現(xiàn)自行查閱源碼.

遍歷ArrayList時如何正確移除一個元素

該問題的關(guān)鍵在于面試者使用的是 ArrayList 的 remove() 還是 Iterator 的 remove()方法。這有一段示例代碼嫁怀,是使用正確的方式來實現(xiàn)在遍歷的過程中移除元素设捐,而不會出現(xiàn) ConcurrentModificationException 異常的示例代碼借浊。

什么是ArrayMap?它和HashMap有什么區(qū)別?

ArrayMap是Android SDK中提供的,非Android開發(fā)者可以略過. ArrayMap是用兩個數(shù)組來模擬map,更少的內(nèi)存占用空間,更高的效率. 具體參考這篇文章:ArrayMap VS HashMap

HashMap的實現(xiàn)原理

1 HashMap概述: HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作萝招,并允許使用null值和null鍵蚂斤。此類不保證映射的順序,特別是它不保證該順序恒久不變即寒。 2 HashMap的數(shù)據(jù)結(jié)構(gòu): 在java編程語言中橡淆,最基本的結(jié)構(gòu)就是兩種,一個是數(shù)組母赵,另外一個是模擬指針(引用)逸爵,所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩個基本結(jié)構(gòu)來構(gòu)造的,HashMap也不例外凹嘲。HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結(jié)構(gòu)师倔,即數(shù)組和鏈表的結(jié)合體。

當(dāng)我們往Hashmap中put元素時,首先根據(jù)key的hashcode重新計算hash值,根絕hash值得到這個元素在數(shù)組中的位置(下標(biāo)),如果該數(shù)組在該位置上已經(jīng)存放了其他元素,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數(shù)組中該位置沒有元素,就直接將該元素放到數(shù)組的該位置上.

你了解Fail-Fast機制嗎

Fail-Fast即我們常說的快速失敗,更多內(nèi)容參看fail-fast機制

關(guān)于日期

SimpleDateFormat是線程安全的嗎?

非常不幸周蹭,DateFormat 的所有實現(xiàn)趋艘,包括 SimpleDateFormat 都不是線程安全的,因此你不應(yīng)該在多線程序中使用凶朗,除非是在對外線程安全的環(huán)境中使用瓷胧,如 將 SimpleDateFormat 限制在 ThreadLocal 中。如果你不這么做棚愤,在解析或者格式化日期的時候搓萧,可能會獲取到一個不正確的結(jié)果。因此宛畦,從日期瘸洛、時間處理的所有實踐來說,我強力推薦 joda-time 庫次和。

如何格式化日期?

Java 中反肋,可以使用 SimpleDateFormat 類或者 joda-time 庫來格式日期。DateFormat 類允許你使用多種流行的格式來格式化日期踏施。參見答案中的示例代碼石蔗,代碼中演示了將日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy畅形。

關(guān)于異常

簡單描述java異常體系

相比沒有人不了解異常體系,關(guān)于異常體系的更多信息可以見:白話異常機制

什么是異常鏈

詳情直接參見白話異常機制,不做解釋了.

throw和throws的區(qū)別

throw用于主動拋出java.lang.Throwable 類的一個實例化對象抓督,意思是說你可以通過關(guān)鍵字 throw 拋出一個 Error 或者 一個Exception,如:throw new IllegalArgumentException(“size must be multiple of 2″), 而throws 的作用是作為方法聲明和簽名的一部分束亏,方法被拋出相應(yīng)的異常以便調(diào)用者能處理铃在。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。

關(guān)于序列化

Java 中定铜,Serializable 與 Externalizable 的區(qū)別

Serializable 接口是一個序列化 Java 類的接口阳液,以便于它們可以在網(wǎng)絡(luò)上傳輸或者可以將它們的狀態(tài)保存在磁盤上,是 JVM 內(nèi)嵌的默認(rèn)序列化方式揣炕,成本高帘皿、脆弱而且不安全。Externalizable 允許你控制整個序列化過程畸陡,指定特定的二進制格式鹰溜,增加安全機制。

關(guān)于JVM

JVM特性

平臺無關(guān)性. Java語言的一個非常重要的特點就是與平臺的無關(guān)性丁恭。而使用Java虛擬機是實現(xiàn)這一特點的關(guān)鍵曹动。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標(biāo)代碼牲览。而引入Java語言虛擬機后墓陈,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平臺相關(guān)的信息第献,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標(biāo)代碼(字節(jié)碼)贡必,就可以在多種平臺上不加修改地運行。Java虛擬機在執(zhí)行字節(jié)碼時庸毫,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行仔拟。

簡單解釋一下類加載器

有關(guān)類加載器一般會問你四種類加載器的應(yīng)用場景以及雙親委派模型,更多的內(nèi)容參看深入理解JVM加載器

簡述堆和棧的區(qū)別

VM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同飒赃。棧常用于保存方法幀和局部變量利花,而對象總是在堆上分配。棧通常都比堆小盒揉,也不會在多個線程之間共享晋被,而堆被整個 JVM 的所有線程共享兑徘。

簡述JVM內(nèi)存分配

基本數(shù)據(jù)類型比變量和對象的引用都是在棧分配的

堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組

類變量(static修飾的變量)刚盈,程序在一加載的時候就在堆中為類變量分配內(nèi)存,堆中的內(nèi)存地址存放在棧中

實例變量:當(dāng)你使用java關(guān)鍵字new的時候挂脑,系統(tǒng)在堆中開辟并不一定是連續(xù)的空間分配給變量藕漱,是根據(jù)零散的堆內(nèi)存地址,通過哈希算法換算為一長串?dāng)?shù)字以表征這個變量在堆中的"物理位置”,實例變量的生命周期--當(dāng)實例變量的引用丟失后崭闲,將被GC(垃圾回收器)列入可回收“名單”中肋联,但并不是馬上就釋放堆中內(nèi)存

局部變量: 由聲明在某方法,或某代碼段里(比如for循環(huán))刁俭,執(zhí)行到它的時候在棧中開辟內(nèi)存橄仍,當(dāng)局部變量一但脫離作用域,內(nèi)存立即釋放

其他

java當(dāng)中采用的是大端還是小端?

XML解析的幾種方式和特點

DOM,SAX,PULL三種解析方式:

DOM:消耗內(nèi)存:先把xml文檔都讀到內(nèi)存中,然后再用DOM API來訪問樹形結(jié)構(gòu)侮繁,并獲取數(shù)據(jù)虑粥。這個寫起來很簡單,但是很消耗內(nèi)存宪哩。要是數(shù)據(jù)過大娩贷,手機不夠牛逼,可能手機直接死機

SAX:解析效率高锁孟,占用內(nèi)存少彬祖,基于事件驅(qū)動的:更加簡單地說就是對文檔進行順序掃描,當(dāng)掃描到文檔(document)開始與結(jié)束品抽、元素(element)開始與結(jié)束储笑、文檔(document)結(jié)束等地方時通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)動作桑包,然后繼續(xù)同樣的掃描南蓬,直至文檔結(jié)束。

PULL:與 SAX 類似哑了,也是基于事件驅(qū)動赘方,我們可以調(diào)用它的next()方法,來獲取下一個解析事件(就是開始文檔弱左,結(jié)束文檔窄陡,開始標(biāo)簽,結(jié)束標(biāo)簽)拆火,當(dāng)處于某個元素時可以調(diào)用XmlPullParser的getAttributte()方法來獲取屬性的值跳夭,也可調(diào)用它的nextText()獲取本節(jié)點的值。

JDK 1.7特性

然 JDK 1.7 不像 JDK 5 和 8 一樣的大版本们镜,但是币叹,還是有很多新的特性,如 try-with-resource 語句模狭,這樣你在使用流或者資源的時候颈抚,就不需要手動關(guān)閉,Java 會自動關(guān)閉嚼鹉。Fork-Join 池某種程度上實現(xiàn) Java 版的 Map-reduce贩汉。允許 Switch 中有 String 變量和文本。菱形操作符(<>)用于類型推斷锚赤,不再需要在變量聲明的右邊申明泛型匹舞,因此可以寫出可讀寫更強、更簡潔的代碼

JDK 1.8特性

java 8 在 Java 歷史上是一個開創(chuàng)新的版本线脚,下面 JDK 8 中 5 個主要的特性: Lambda 表達式赐稽,允許像對象一樣傳遞匿名函數(shù) Stream API叫榕,充分利用現(xiàn)代多核 CPU,可以寫出很簡潔的代碼 Date 與 Time API姊舵,最終翠霍,有一個穩(wěn)定、簡單的日期和時間庫可供你使用 擴展方法蠢莺,現(xiàn)在寒匙,接口中可以有靜態(tài)、默認(rèn)方法躏将。 重復(fù)注解锄弱,現(xiàn)在你可以將相同的注解在同一類型上使用多次。

Maven和ANT有什么區(qū)別?

雖然兩者都是構(gòu)建工具祸憋,都用于創(chuàng)建 Java 應(yīng)用会宪,但是 Maven 做的事情更多,在基于“約定優(yōu)于配置”的概念下蚯窥,提供標(biāo)準(zhǔn)的Java 項目結(jié)構(gòu)掸鹅,同時能為應(yīng)用自動管理依賴(應(yīng)用中所依賴的 JAR 文件),Maven 與 ANT 工具更多的不同之處請參見答案拦赠。 這就是所有的面試題巍沙,如此之多,是不是荷鼠?我可以保證句携,如果你能回答列表中的所有問題,你就可以很輕松的應(yīng)付任何核心 Java 或者高級 Java 面試允乐。雖然矮嫉,這里沒有涵蓋 Servlet、JSP牍疏、JSF蠢笋、JPA,JMS鳞陨,EJB 及其它 Java EE 技術(shù)昨寞,也沒有包含主流的框架如 spring MVC,Struts 2.0炊邦,hibernate编矾,也沒有包含 SOAP 和 RESTful web service熟史,但是這份列表對做 Java 開發(fā)的馁害、準(zhǔn)備應(yīng)聘 Java web 開發(fā)職位的人還是同樣有用的,因為所有的 Java 面試蹂匹,開始的問題都是 Java 基礎(chǔ)和 JDK API 相關(guān)的碘菜。如果你認(rèn)為我這里有任何應(yīng)該在這份列表中而被我遺漏了的 Java 流行的問題,你可以自由的給我建議。我的目的是從最近的面試中創(chuàng)建一份最新的忍啸、最優(yōu)的 Java 面試問題列表仰坦。

JDBC最佳實踐

優(yōu)先使用批量操作來插入和更新數(shù)據(jù)

使用PreparedStatement來避免SQL漏洞

使用數(shù)據(jù)連接池

通過列名來獲取結(jié)果集

IO操作最佳實踐

使用有緩沖的IO類,不要單獨讀取字節(jié)或字符

使用NIO和NIO 2或者AIO,而非BIO

在finally中關(guān)閉流

使用內(nèi)存映射文件獲取更快的IO

JAVA行業(yè)交流,歡迎新人和大佬共同入駐计雌,里面有很多免費教學(xué)資源悄晃,視頻資源,書籍資源凿滤,歡迎索取妈橄,群號240448376

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翁脆,隨后出現(xiàn)的幾起案子眷蚓,更是在濱河造成了極大的恐慌,老刑警劉巖反番,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沙热,死亡現(xiàn)場離奇詭異,居然都是意外死亡罢缸,警方通過查閱死者的電腦和手機篙贸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枫疆,“玉大人歉秫,你說我怎么就攤上這事⊙” “怎么了雁芙?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钞螟。 經(jīng)常有香客問我兔甘,道長,這世上最難降的妖魔是什么鳞滨? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任洞焙,我火速辦了婚禮,結(jié)果婚禮上拯啦,老公的妹妹穿的比我還像新娘澡匪。我一直安慰自己,他們只是感情好褒链,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布唁情。 她就那樣靜靜地躺著,像睡著了一般甫匹。 火紅的嫁衣襯著肌膚如雪甸鸟。 梳的紋絲不亂的頭發(fā)上惦费,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音抢韭,去河邊找鬼薪贫。 笑死,一個胖子當(dāng)著我的面吹牛刻恭,可吹牛的內(nèi)容都是我干的瞧省。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鳍贾,長吁一口氣:“原來是場噩夢啊……” “哼臀突!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贾漏,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤候学,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纵散,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梳码,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年伍掀,在試婚紗的時候發(fā)現(xiàn)自己被綠了掰茶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜜笤,死狀恐怖濒蒋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情把兔,我是刑警寧澤沪伙,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站县好,受9級特大地震影響围橡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缕贡,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一翁授、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晾咪,春花似錦收擦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剂跟,卻和暖如春减途,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曹洽。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工鳍置, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人送淆。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓税产,卻偏偏與公主長得像,于是被迫代替她去往敵國和親偷崩。 傳聞我的和親對象是個殘疾皇子辟拷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法阐斜,內(nèi)部類的語法衫冻,繼承相關(guān)的語法,異常的語法谒出,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 從三月份找實習(xí)到現(xiàn)在隅俘,面了一些公司,掛了不少笤喳,但最終還是拿到小米为居、百度、阿里杀狡、京東蒙畴、新浪、CVTE呜象、樂視家的研發(fā)崗...
    時芥藍閱讀 42,194評論 11 349
  • Java8張圖 11膳凝、字符串不變性 12、equals()方法恭陡、hashCode()方法的區(qū)別 13鸠项、...
    Miley_MOJIE閱讀 3,693評論 0 11
  • 集合框架: 1)特點:存儲對象;長度可變子姜;存儲對象的類型可不同2)Collection(1)List:有序的祟绊;元素...
    Demo_Yang閱讀 1,248評論 0 4
  • 金星說: 女人,有了委屈哥捕,不要去找男人訴苦牧抽, 倘若他懂你,會自己過來安慰你遥赚; 女人扬舒,有了難題,不要去找男人幫助凫佛, ...
    7ba33e9293d2閱讀 259評論 0 0