更新時(shí)間:2019-11-27 15:09:30 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3530次
1.架構(gòu)師應(yīng)不應(yīng)該寫(xiě)代碼
合格的程序員對(duì)于明確分配的任務(wù)會(huì)完成的很好,但是大部分情況下“架構(gòu)”這個(gè)詞意味著架構(gòu)師并不會(huì)涉及太多細(xì)節(jié),架構(gòu)圖和代碼實(shí)現(xiàn)之間總還是有些距離,你無(wú)法保證所有人都會(huì)正確的理解你的設(shè)計(jì),或者是程序員寫(xiě)代碼時(shí)遇到障礙時(shí)會(huì)立刻想出足夠優(yōu)雅的解決方案。
在我看來(lái),寫(xiě)代碼的架構(gòu)師更像是在做后勤保障的工作:在代碼中第一時(shí)間發(fā)現(xiàn)可能存在的問(wèn)題,向其他人提出警告,或是給予其他人改進(jìn)的意見(jiàn),必要的時(shí)候或是給其他人演示一下正確的姿勢(shì)。
大部分情況下我作為架構(gòu)師并不需要攬下“核心模塊”開(kāi)發(fā)這種工作,畢竟我能調(diào)配的時(shí)間太零散了,效率難以保證,很多人在專(zhuān)注的情況下比我做的好很多,我只需要保持大局觀需要適度參與就可以了。
總的來(lái)說(shuō),架構(gòu)師和程序員在某些方面上有點(diǎn)像產(chǎn)品經(jīng)理和用戶(hù)的關(guān)系,大部分程序員并不會(huì)主動(dòng)告訴你他們想要什么、哪里需要優(yōu)化,甚至自己也不知道這些。想要做出好的產(chǎn)品,捷徑之一就是跟用戶(hù)做同樣的事情。
2.為什么別人的系統(tǒng)總是那么爛
很多程序員解決問(wèn)題的能力很強(qiáng),說(shuō)要解決一個(gè)什么問(wèn)題,下午就能寫(xiě)出幾百行代碼把功能實(shí)現(xiàn)了。但是做出來(lái)的東西有種少考慮了什么東西的感覺(jué)。大部分程序都能實(shí)現(xiàn)功能,但是如果把“時(shí)間”這個(gè)也作為一個(gè)考慮的維度的話(huà),就會(huì)意識(shí)到一個(gè)合格的項(xiàng)目需要考慮更多的東西:更通用的使用方式、易于理解的文檔、簡(jiǎn)單而易于擴(kuò)展的設(shè)計(jì),等等。
很多公司應(yīng)該都會(huì)有一些遺留系統(tǒng),它們龐大、笨重、難用、幾乎無(wú)法維護(hù),所有人都在抱怨這些系統(tǒng),并且每天都在想方設(shè)法換掉那些遺留系統(tǒng)。但是一段時(shí)間過(guò)去之后,又會(huì)發(fā)現(xiàn)身邊的新人又開(kāi)始吐槽當(dāng)時(shí)替代遺留系統(tǒng)的那個(gè)系統(tǒng)了。
“大多數(shù)系統(tǒng)當(dāng)初都很好使,功能當(dāng)時(shí)夠用,擴(kuò)展性看起來(lái)也可以,但是這些系統(tǒng)都是開(kāi)發(fā)的人離職之后變壞的。”
3.成為架構(gòu)師最困難的門(mén)檻是什么?
很多人自稱(chēng)架構(gòu)師的人跟你講一個(gè)架構(gòu)時(shí)簡(jiǎn)直滔滔不絕,各種技術(shù)名詞像是說(shuō)相聲一樣從他嘴里說(shuō)出來(lái),三句話(huà)不離高并發(fā)大數(shù)據(jù),但是稍微追問(wèn)一下,就會(huì)發(fā)現(xiàn)很多基本概念的缺失,例如自稱(chēng)精通高并發(fā)的人說(shuō)不清楚他所謂的高并發(fā)系統(tǒng)的瓶頸在哪里,自稱(chēng)精通架構(gòu)設(shè)計(jì)的人說(shuō)不明白他的系統(tǒng)怎么保證高可用,自稱(chēng)超大數(shù)據(jù)量的系統(tǒng)實(shí)際上只有不到100萬(wàn)條數(shù)據(jù),等等。
架構(gòu)師雖然聽(tīng)起來(lái)很高大上,但本質(zhì)上仍然是工程師,不是科學(xué)家,也不是忽悠人的江湖騙子。學(xué)習(xí)再多,也需要實(shí)踐落地。設(shè)計(jì)架構(gòu)方案更多的是在做一些抽象和權(quán)衡:把復(fù)雜的需求抽象成簡(jiǎn)單的模型,從功能、性能、可用性、研發(fā)成本等等方面規(guī)劃如何構(gòu)建一個(gè)系統(tǒng),這些內(nèi)容需要更多的實(shí)踐練習(xí)。
4.如何更高效的學(xué)習(xí)?
大多數(shù)人每天能留給自己學(xué)習(xí)的時(shí)間有限,這個(gè)階段如何提升學(xué)習(xí)效率就成了要解決的重點(diǎn)。
說(shuō)說(shuō)自己提升學(xué)習(xí)效率的心得,其實(shí)非常簡(jiǎn)單:體系化的學(xué)習(xí)。
在重復(fù)了幾次痛苦的學(xué)習(xí)-梳理過(guò)程后,再去看一些獨(dú)立的文章或者資料往往會(huì)事半功倍,因?yàn)槟茉隗w系內(nèi)找到相對(duì)應(yīng)的知識(shí),甚至有時(shí)候一本書(shū)里一頁(yè)只需要看一句話(huà),點(diǎn)破那層窗戶(hù)紙,就可以掌握新的知識(shí)。
跟很多人一樣,剛畢業(yè)時(shí)我覺(jué)得作為程序員,只要努力,加上少許天賦便可以獲得一些成績(jī)。
工作一段時(shí)間后,對(duì)自己和其他人的認(rèn)識(shí)也越來(lái)越清晰,逐漸的發(fā)現(xiàn)程序員之間的差距或許比人和猴子之間的差距還大,接受這個(gè)事實(shí)這讓我郁悶了很久。
再過(guò)一段時(shí)間,發(fā)現(xiàn)自己已經(jīng)能夠客觀的評(píng)價(jià)自己的能力,也意識(shí)到了距離并不是那么重要,只要想辦法跑的更快,就足夠了。
分布式架構(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í)例多線(xiàn)程的工作模式,Servlet容器為你處理了并發(fā)問(wèn)題。
誤解和正解
最常見(jiàn)的對(duì)并發(fā)編程的誤解有以下這些:
-并發(fā)總能改進(jìn)性能(并發(fā)在CPU有很多空閑時(shí)間時(shí)能明顯改進(jìn)程序的性能,但當(dāng)線(xiàn)程數(shù)量較多的時(shí)候,線(xiàn)程間頻繁的調(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í)
以上就是動(dòng)力節(jié)點(diǎn)java學(xué)院小編針對(duì)“一位程序員的進(jìn)階Java阿里學(xué)習(xí)路線(xiàn)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如果對(duì)于學(xué)習(xí)Java的學(xué)習(xí)計(jì)劃,怎么學(xué)才有效率,或者學(xué)完如果找工作的問(wèn)題,請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743