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