更新時(shí)間:2019-08-03 09:00:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2882次
程序員每天都和代碼打交道。經(jīng)過(guò)數(shù)年的基礎(chǔ)教育和職業(yè)培訓(xùn),大部分程序員都會(huì)「寫(xiě)」代碼,或者至少會(huì)抄代碼和改代碼。但是,會(huì)讀代碼的并不在多數(shù),會(huì)讀代碼又真正讀懂一些大項(xiàng)目的源碼的,少之又少。這種怪狀,真要追究起來(lái),怪不得程序員這個(gè)群體本身——它是兩個(gè)原因造成的。
我們所有的教育和培訓(xùn)都在強(qiáng)調(diào)怎么寫(xiě)代碼,并沒(méi)有教大家如何讀代碼
大多數(shù)工作場(chǎng)景都是一個(gè)蘿卜一個(gè)坑,我們只需要了解一個(gè)系統(tǒng)的局部便能開(kāi)展工作,讀不相干的代碼,似乎沒(méi)用
我常常把寫(xiě)代碼和寫(xiě)作進(jìn)行類(lèi)比——二者有很多相通之處;但從培養(yǎng)寫(xiě)代碼和寫(xiě)作的過(guò)程來(lái)看,二者又有很多不同。我們的寫(xiě)作能力,是建立在大量基礎(chǔ)閱讀的基礎(chǔ)上的,是除了學(xué)習(xí)語(yǔ)法和文法知識(shí)外,從小學(xué)開(kāi)始,經(jīng)年累月,通過(guò)閱讀各種不同層次的名家的作品,再加上各種各樣的寫(xiě)作訓(xùn)練,累積出來(lái)的;而我們的寫(xiě)代碼的能力,在了解和掌握了語(yǔ)法/文法之后(學(xué)習(xí)和抄寫(xiě)example代碼也算語(yǔ)法/文法學(xué)習(xí)的一部分),跳過(guò)了大量閱讀名家作品的過(guò)程,直接biu地一下就自動(dòng)養(yǎng)成了:學(xué)會(huì)基礎(chǔ)的語(yǔ)法和試驗(yàn)了若干example后,我們就火箭般躥到了自己寫(xiě)代碼打怪贊經(jīng)驗(yàn)的階段。這樣略過(guò)大量閱讀代碼的階段有三個(gè)害處:
寫(xiě)代碼的基礎(chǔ)是不牢靠的,打怪升級(jí)的過(guò)程也是最慢的。道理很簡(jiǎn)單——前輩們踩過(guò)的坑,總結(jié)的經(jīng)驗(yàn)教訓(xùn),你都不得不親自用最慢的法子一點(diǎn)點(diǎn)試著踩一遍。
很容易養(yǎng)成stackoverflowdriven的寫(xiě)代碼習(xí)慣——遇到不知如何寫(xiě)的代碼,從網(wǎng)上找現(xiàn)成的答案,找個(gè)高票的復(fù)制粘貼改吧改吧,湊活著完成功能再說(shuō)。寫(xiě)代碼的過(guò)程中遇到問(wèn)題,開(kāi)啟調(diào)試模式,要么設(shè)置無(wú)數(shù)斷點(diǎn)一步步跟蹤,要么到處打印信息試圖為滿是窟窿的代碼打上補(bǔ)丁,導(dǎo)致整個(gè)寫(xiě)代碼的過(guò)程是一部調(diào)代碼的血淚史。(見(jiàn)我的文章:你要避免的軟件開(kāi)發(fā)模式)
你周?chē)顝?qiáng)的那個(gè)工程師的開(kāi)發(fā)水平的上限就是你的上限。
二、分布式架構(gòu)體系
分布式怎么來(lái)的。傳統(tǒng)的電信、銀行業(yè),當(dāng)業(yè)務(wù)量大了之后,普通服務(wù)器CPU/IO/網(wǎng)絡(luò)到了100%,請(qǐng)求太慢怎么辦?最直接的做法,升級(jí)硬件,反正也不缺錢(qián),IBM小型機(jī),大型機(jī),采購(gòu)了堆硬件。
但是互聯(lián)網(wǎng)不能這么干,互聯(lián)網(wǎng)沒(méi)有那么財(cái)大氣粗,還有很多初創(chuàng),能不能賺錢(qián)還不知道。所以就有了軟件方面的解決方案:分布式系統(tǒng),簡(jiǎn)單說(shuō),就是一臺(tái)服務(wù)器不行,我用兩臺(tái)、10臺(tái)、100臺(tái)...這就要軟件系統(tǒng)需要支持。
那么多臺(tái)機(jī)器,我如何讓他們協(xié)同工作,這就需要一個(gè)調(diào)度中心(或注冊(cè)中心);肯定涉及到機(jī)器間通信,那么需要一個(gè)高效的RPC框架;一個(gè)請(qǐng)求過(guò)來(lái)了,如何分發(fā),需要一個(gè)請(qǐng)求分發(fā)系統(tǒng)(負(fù)載均衡);然后還要考慮每個(gè)角色都不能成為性能瓶頸;還有要能方便的進(jìn)行橫向擴(kuò)展,還有考慮單節(jié)點(diǎn)故障。
三,并發(fā)編程體系
為什么需要并發(fā)
并發(fā)其實(shí)是一種解耦合的策略,它幫助我們把做什么(目標(biāo))和什么時(shí)候做(時(shí)機(jī))分開(kāi)。這樣做可以明顯改進(jìn)應(yīng)用程序的吞吐量(獲得更多的CPU調(diào)度時(shí)間)和結(jié)構(gòu)(程序有多個(gè)部分在協(xié)同工作)。做過(guò)JavaWeb開(kāi)發(fā)的人都知道,JavaWeb中的Servlet程序在Servlet容器的支持下采用單實(shí)例多線程的工作模式,Servlet容器為你處理了并發(fā)問(wèn)題。
誤解和正解
最常見(jiàn)的對(duì)并發(fā)編程的誤解有以下這些:
-并發(fā)總能改進(jìn)性能(并發(fā)在CPU有很多空閑時(shí)間時(shí)能明顯改進(jìn)程序的性能,但當(dāng)線程數(shù)量較多的時(shí)候,線程間頻繁的調(diào)度切換反而會(huì)讓系統(tǒng)的性能下降)-編寫(xiě)并發(fā)程序無(wú)需修改原有的設(shè)計(jì)(目的與時(shí)機(jī)的解耦往往會(huì)對(duì)系統(tǒng)結(jié)構(gòu)產(chǎn)生巨大的影響)-在使用Web或EJB容器時(shí)不用關(guān)注并發(fā)問(wèn)題(只有了解了容器在做什么,才能更好的使用容器)
下面的這些說(shuō)法才是對(duì)并發(fā)客觀的認(rèn)識(shí):
-編寫(xiě)并發(fā)程序會(huì)在代碼上增加額外的開(kāi)銷(xiāo)-正確的并發(fā)是非常復(fù)雜的,即使對(duì)于很簡(jiǎn)單的問(wèn)題-并發(fā)中的缺陷因?yàn)椴灰字噩F(xiàn)也不容易被發(fā)現(xiàn)-并發(fā)往往需要對(duì)設(shè)計(jì)策略從根本上進(jìn)行修改
四、性能優(yōu)化
性能優(yōu)化,簡(jiǎn)而言之,就是在不影響系統(tǒng)運(yùn)行正確性的前提下,使之運(yùn)行地更快,完成特定功能所需的時(shí)間更短。性能問(wèn)題永遠(yuǎn)是永恒的主題之一,而優(yōu)化則更需要技巧。
五、工程化專(zhuān)題
工欲善其事必先利其器,工具對(duì)Java程序員的重要性不言而喻現(xiàn)在有很多庫(kù)、實(shí)用工具和程序任Java開(kāi)發(fā)人員選擇。下圖列出的工具都是程序員必不可少的工具
六、微服務(wù)架構(gòu)
微服務(wù)(Microservice)這個(gè)概念是2012年出現(xiàn)的,作為加快Web和移動(dòng)應(yīng)用程序開(kāi)發(fā)進(jìn)程的一種方法,2014年開(kāi)始受到各方的關(guān)注,而2015年,可以說(shuō)是微服務(wù)的元年;
越來(lái)越多的論壇、社區(qū)、blog以及互聯(lián)網(wǎng)行業(yè)巨頭開(kāi)始對(duì)微服務(wù)進(jìn)行討論、實(shí)踐,可以說(shuō)這樣更近一步推動(dòng)了微服務(wù)的發(fā)展和創(chuàng)新。
微服務(wù)架構(gòu)(MicroserviceArchitecture)是一種架構(gòu)概念,旨在通過(guò)將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對(duì)解決方案的解耦。你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的
類(lèi)上應(yīng)用很多SOLID原則。微服務(wù)架構(gòu)是個(gè)很有趣的概念,它的主要作用是將功能分解到離散的各個(gè)服務(wù)當(dāng)中,從而降低系統(tǒng)的耦合性,并提供更加靈活的服務(wù)支持。
七,項(xiàng)目實(shí)戰(zhàn)專(zhuān)題
對(duì)于所學(xué)的知識(shí)將用一個(gè)大型的電商項(xiàng)目來(lái)實(shí)踐使用你的知識(shí)
最后在給大家分享一些適合于1-5年以上開(kāi)發(fā)經(jīng)驗(yàn)的Java程序員面試涉及到的絕大部分面試題及答案,以及比較好的架構(gòu)視頻資料免費(fèi)分享給大家:


相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)