java基礎(chǔ)知識(shí)都掌握了嗎,面試時(shí)別打臉了

有些剛學(xué)出來(lái)的新人,沒(méi)有一點(diǎn)務(wù)實(shí)的精神,自以為是,感覺(jué)自己基礎(chǔ)學(xué)好了,好高騖遠(yuǎn),一味的總想趕快學(xué)習(xí)進(jìn)階的知識(shí),不是我在這里貶低初學(xué)者,俗話說(shuō)萬(wàn)丈高樓平地起,把你的基礎(chǔ)打扎實(shí)了再說(shuō)。來(lái)看看下面的菜鳥(niǎo)是什么窘態(tài)。

這里涉及到了異常棧,編譯期,main函數(shù)等等再基礎(chǔ)不過(guò)的知識(shí),有那么部分毫不客氣的新人就說(shuō)了,為什么你不講得通俗易懂點(diǎn)兒呢?

通俗易懂,是需要成本的。

異常即是程序不期望的異常情況,它處理不了交給程序員自己來(lái)處理了。是個(gè)再基礎(chǔ)不過(guò)的數(shù)據(jù)結(jié)構(gòu),出現(xiàn)它就說(shuō)明棧頂?shù)脑?,是最后入棧的。那么,看到你出錯(cuò)后控制臺(tái)拋出的那堆文字沒(méi)有?貼出來(lái),距離XXXException最近的通常就是最關(guān)鍵的信息。

你看,就算精簡(jiǎn)為“控制臺(tái)拋出的那堆文字”,比較起來(lái),是不是“異常?!备庸?jié)約雙方的時(shí)間,畢竟以當(dāng)前IT業(yè)界的薪資水準(zhǔn),老鳥(niǎo)可能已經(jīng)浪費(fèi)了公司好幾十塊。

更何況,可能有人是連“控制臺(tái)”都無(wú)法理解的,這就涉及到了作用2。

還有更不務(wù)實(shí)和浮夸的新手。

我見(jiàn)過(guò)一份簡(jiǎn)歷,quartz、POI、easyUI、jquery等等,寫(xiě)了一堆。這人自己可能覺(jué)著,這些名詞高端,厲害,可是呢,看看這份技能表:

就暴露出了他的問(wèn)題,此人并不懂他所說(shuō)的這些名詞是什么。

至少,一個(gè)有基礎(chǔ)的程序員就不會(huì)寫(xiě)上熟悉xml、json、dom4j技術(shù),也不會(huì)把“在線支付”和servletjsp放在同一欄下面。他無(wú)需長(zhǎng)篇累述自己的技能樹(shù)多么豐滿,合適的內(nèi)容,合理的排版,本身就代表了他的水準(zhǔn)。

新人基礎(chǔ)不扎實(shí),沒(méi)關(guān)系,可以慢慢學(xué)習(xí),但是學(xué)習(xí)要有個(gè)學(xué)習(xí)的態(tài)度和方法,要有解決問(wèn)題的能力,要發(fā)揮自己的主觀能動(dòng)性,不要什么問(wèn)題都做伸手黨,讓別人把東西嚼碎了喂給你。這樣的話,自己是很難成長(zhǎng)起來(lái)的。

比如:

般來(lái)說(shuō),挨了這三連懟的老鳥(niǎo)無(wú)不火從心起,但凡有例外,要么脾氣太好要么姑娘太好看。

合適的解決方案:搜索關(guān)鍵字->查看文檔->閱讀源碼->詢問(wèn)老鳥(niǎo)關(guān)鍵字->*。

從來(lái)沒(méi)到過(guò)的問(wèn)題如何解決呢?或者擴(kuò)展一下,我寫(xiě)的功能,如何適應(yīng)未來(lái)千奇百怪的需求呢?當(dāng)然,這其實(shí)本質(zhì)還是個(gè)碼量和閱讀量的問(wèn)題。

下來(lái),給新人一點(diǎn)學(xué)習(xí)的方法和思路。

我把學(xué)習(xí)分為幾個(gè)階段:

(一)基礎(chǔ)理解階段,你看到一個(gè)基礎(chǔ)知識(shí)點(diǎn),開(kāi)始理解它的含義,看到具體的實(shí)例能反應(yīng)出它所對(duì)應(yīng)的基礎(chǔ)知識(shí)。比如看到Animal cat=new Cat()能反應(yīng)出它體現(xiàn)了如下知識(shí)點(diǎn):聲明、實(shí)例化、引用、多態(tài)。

(二)串聯(lián)階段,把知識(shí)點(diǎn)串聯(lián)起來(lái),構(gòu)建出它本源的樣子,比如上面的例子,結(jié)合JVM相關(guān)知識(shí),腦海里出現(xiàn)一張粗略的堆棧圖,就像這幅圖:

這樣的能力不光可以用于向本源推測(cè),也可以主動(dòng)的把知識(shí)點(diǎn)組合,玩味出新的結(jié)構(gòu),比如,新需求是“根據(jù)配置來(lái)產(chǎn)生動(dòng)物”。

那么,我們分析會(huì)有一個(gè)根據(jù)配置項(xiàng)來(lái)產(chǎn)生動(dòng)物實(shí)例的構(gòu)建工具。代碼可能長(zhǎng)下面的樣子:

Animal animal=AnimalFactory.createAnimal(“貓”);

在createAnimal里,我們對(duì)字符串進(jìn)行if判斷,決定到底是new Cat還是new Dog

事實(shí)上,這樣的結(jié)構(gòu)已經(jīng)有人總結(jié)在了GoF里。誒,GoF是什么?忘了本段是說(shuō)什么的嗎?

(三)進(jìn)階階段,具備串聯(lián)知識(shí)點(diǎn)的能力之后,就應(yīng)當(dāng)有看到未知技術(shù)逆推具體實(shí)現(xiàn)的能力。比如hibernate,它的功能是什么?核心在于“實(shí)現(xiàn)持久層和數(shù)據(jù)層的同步”,也就是說(shuō),數(shù)據(jù)表和JavaBeanPOJO的映射。那么,我們來(lái)思考,假如從來(lái)不存在hibernate類(lèi)似的ORM框架,要如何實(shí)現(xiàn)這個(gè)功能呢?

首先,我們要有和數(shù)據(jù)庫(kù)溝通的工具和配置,java可以選用jdbc,數(shù)據(jù)庫(kù)相關(guān)配置可以使用xml、json、bean任意方式。我們也可以看到,hibernate底層就是jdbc,也有Configuration這個(gè)配置入口。

然后要有種配置方式讓數(shù)據(jù)表和Bean達(dá)成統(tǒng)一。為什么?因?yàn)樗鼈兊男畔⒘坎灰恢拢男畔⑹窍嘟坏年P(guān)系,比如,它們都有類(lèi)似的數(shù)據(jù)類(lèi)型(varchar->String),又有互不相融的內(nèi)容(索引和約束),得出結(jié)論,我們需要一個(gè)映射工具,來(lái)使相交的部分匹配,并且補(bǔ)充缺失的內(nèi)容。于是,我們可以推論出,hibernate一定有個(gè)映射工具(xml和annotation)。

再后,為了適應(yīng)多種不同的數(shù)據(jù)庫(kù),每一條語(yǔ)句可能都有不同的表達(dá),比如Oracle有Number(*,*)這個(gè)類(lèi)型,對(duì)于mysql就不適用,我們需要設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)的適配器。在hibernate里,這個(gè)部分叫做方言,Dialect。

經(jīng)過(guò)這樣的分析過(guò)程,不管是實(shí)現(xiàn)新的需求,還是分析未知的框架,都具備了理論上的基礎(chǔ)。

就我個(gè)人的見(jiàn)解,達(dá)到這個(gè)階段的程序員,才能稱(chēng)之為合格。說(shuō)了這么多了,需要自己內(nèi)省,才知道自己的問(wèn)題出在哪里,然后發(fā)現(xiàn)問(wèn)題解決問(wèn)題。推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【六七八,二四一,五六三】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容