更新時(shí)間:2019-07-17 11:35:09 來源:動力節(jié)點(diǎn) 瀏覽2548次
中級Java工程師面試知識點(diǎn),當(dāng)你經(jīng)歷過一次工作變動,你才知道你到底是一個怎樣的人,你在行業(yè)處于一個什么樣地位,你有什么是讓企業(yè)給你行業(yè)標(biāo)準(zhǔn)薪資又或者說高于標(biāo)準(zhǔn)薪資的能力?當(dāng)你經(jīng)歷過這些,你才知道自己到底有幾斤幾兩。本篇微博算是一次總結(jié),希望在今后能夠在工作中,年限在增長,經(jīng)驗(yàn)與能力也要與之匹配。
基本語法:
Static,Transient,foreach循環(huán)的原理,Switch,java反射機(jī)制,單線程安全類demo,常規(guī)算法等關(guān)鍵字作用,至少掌握其用法和場景
Exception和Error區(qū)別
Exception是程序錯誤,可控或不可控,可在程序中捕獲異常
Error是系統(tǒng)異常,不可控,可能的話可在系統(tǒng)中捕獲異常
java.util.Date和java.sql.Date的區(qū)別及應(yīng)用
java.util.Date就是在除了SQL語句的情況下面使用
java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時(shí)間部分,它都有g(shù)etTime方法返回毫秒數(shù),自然就可以直接構(gòu)建
java.util.Date是java.sql.Date的父類
java.util.Dated=newjava.util.Date(sqlDate.getTime());
java.util.Dated=newjava.util.Date(date.getTime());
集合
集合的結(jié)構(gòu)
其中ArrayList和HashMap用到特別多,也是被問到特別多的地方
ArrayList原理
以數(shù)組實(shí)現(xiàn)。節(jié)約空間,但數(shù)組有容量限制。
超出限制時(shí)會增加50%容量,用System.arraycopy()復(fù)制到新的數(shù)組,因此最好能給出數(shù)組大小的預(yù)估值。默認(rèn)第一次插入元素時(shí)創(chuàng)建大小為10的數(shù)組。
按數(shù)組下標(biāo)訪問元素—get(i)/set(i,e)的性能很高,這是數(shù)組的基本優(yōu)勢。
直接在數(shù)組末尾加入元素—add(e)的性能也高,但如果按下標(biāo)插入、刪除元素—add(i,e),remove(i),remove(e),則要用System.arraycopy()來移動部分受影響的元素,性能就變差了,這是基本劣勢。
特點(diǎn):
是一個相對來說比較簡單的數(shù)據(jù)結(jié)構(gòu),最重要的一點(diǎn)就是它的自動擴(kuò)容,可以認(rèn)為就是我們常說的“動態(tài)數(shù)組”。
其中操作可以理解為直接將數(shù)組的內(nèi)容置位,remove操作可以理解為刪除index為0的節(jié)點(diǎn),并將后面元素移到0處
LinkedList原理:
Hashtable原理:
HashMap原理:
HashMap基于hashing原理,我們通過put()和get()方法儲存和獲取對象。
當(dāng)我們將鍵值對傳遞給put()方法時(shí),它調(diào)用鍵對象的hashCode()方法來計(jì)算hashcode,讓后找到bucket位置來儲存值對象。
當(dāng)獲取對象時(shí),通過鍵對象的equals()方法找到正確的鍵值對,然后返回值對象。
碰撞:
HashMap使用LinkedList來解決碰撞問題,當(dāng)發(fā)生碰撞了,對象將會儲存在LinkedList的下一個節(jié)點(diǎn)中。HashMap在每個LinkedList節(jié)點(diǎn)中儲存鍵值對對象。
當(dāng)兩個不同的鍵對象的hashcode相同時(shí)會發(fā)生什么?它們會儲存在同一個bucket位置的LinkedList中。鍵對象的equals()方法用來找到鍵值對
負(fù)載因子:
默認(rèn)負(fù)載因子大小0.75
當(dāng)map填滿75%的bucket時(shí)候,和其他集合類一樣(ArrayList)將會創(chuàng)建原來HashMapda大小兩倍的bucket數(shù)組
重新調(diào)整map大小,并將原來的對象放入新的bucket數(shù)組中,此過程稱之為rehashing
集合為什么不直接實(shí)例化接口
Setset=newHashSet()而不是Setset=newSet()
Mapmap=newHashMap()而不是HashMapmap=newHashMap()
Listlist=newArrayList()而不是ArrayListlist=newArrayList();
1.Set,List,map是接口,不能實(shí)例化,只能實(shí)例化接口實(shí)現(xiàn)類,HashSet,ArrayList,HashMap
2.實(shí)現(xiàn)類中的屬性和方法set,map,list不能調(diào)用,只能調(diào)用接口本身屬性和方法
3.接口有多個實(shí)現(xiàn)類,便于代碼的重構(gòu),以后只需改實(shí)現(xiàn)類,其他可不變
Eg:我是老板A,有兩個員工B,C。我現(xiàn)在有一個任務(wù),目的是完成任務(wù),須根據(jù)我的想法授權(quán)于B或者C,不能讓B自己按自己想法完成(Bb=newB()),若后面老板想換人(Aa=newC())
數(shù)據(jù)庫
數(shù)據(jù)庫十有八九也都會問到。一些基本的像rightjoin、fulljoin、leftjoin、幾種索引及其區(qū)別就不談了,比較重要的就是數(shù)據(jù)庫性能的優(yōu)化,如果對于數(shù)據(jù)庫的性能優(yōu)化一竅不通,那么有時(shí)間,還是建議你在面試前花一兩天專門把SQL基礎(chǔ)和SQL優(yōu)化的內(nèi)容準(zhǔn)備一下。
不過數(shù)據(jù)庫倒是不用擔(dān)心,一家公司往往有很多部門,如果你對數(shù)據(jù)庫不熟悉而基本技術(shù)又非常好,九成都是會要你的,估計(jì)會先把你放到對數(shù)據(jù)庫使用不是要求非常高的部門鍛煉一下。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743