看下資深架構(gòu)師平時(shí)需要解決的問(wèn)題,對(duì)比你離資深架構(gòu)師還有多少距離——再論技術(shù)架構(gòu)的升級(jí)之路

這篇文章更多的是從溝通角度分析架構(gòu)師的升級(jí)之道。但我們知道,架構(gòu)師更多是靠技術(shù)拿高薪。

??在本文里,我將列些我見到的技術(shù)架構(gòu)平時(shí)需要解決的問(wèn)題,有技術(shù)的,也有溝通協(xié)調(diào)方面的,以這些實(shí)實(shí)在在的案例,來(lái)列舉些技術(shù)架構(gòu)需要具備的技能,以此來(lái)分析下高級(jí)開發(fā)如何更高效地升級(jí)到技術(shù)架構(gòu)。好了,開場(chǎng)白結(jié)束,正文開始。

1 技術(shù)本身不產(chǎn)生價(jià)值,業(yè)務(wù)才會(huì),論技術(shù)和業(yè)務(wù)的整合

???一般會(huì)把架構(gòu)分為技術(shù)架構(gòu)和業(yè)務(wù)架構(gòu),這里我無(wú)意對(duì)比這兩類的優(yōu)劣,但我只想說(shuō),在公司里,是靠業(yè)務(wù)價(jià)值創(chuàng)造盈利點(diǎn)的,所以技術(shù),比如消息隊(duì)列,內(nèi)存優(yōu)化,以及分庫(kù)分表數(shù)據(jù)庫(kù)集群等,只有嵌入到業(yè)務(wù)里,才能通過(guò)提升業(yè)務(wù)的可擴(kuò)展性或性能,從而產(chǎn)生價(jià)值。


??上述似乎是廢話,但恰恰是架構(gòu)師工作的難點(diǎn),大家可以想象一下,比如通過(guò)MyCat搭建個(gè)分庫(kù)分表架構(gòu)不難,甚至把分庫(kù)分表組件通過(guò)負(fù)載均衡搭建成集群也不難,這些網(wǎng)上都有現(xiàn)成的案例。但如何要在當(dāng)前的業(yè)務(wù)系統(tǒng)里實(shí)現(xiàn)分庫(kù)分表,難度就不小了。具體來(lái)講,因?yàn)闃I(yè)務(wù)系統(tǒng)里或許有冗余數(shù)據(jù),而且有各類帶join, group by等的查詢語(yǔ)句,如何在分庫(kù)分表系統(tǒng)里兼容這些歷史問(wèn)題,而且在上線新分庫(kù)系統(tǒng)后遷移歷史數(shù)據(jù),又如,在產(chǎn)線切換到分庫(kù)分表時(shí),萬(wàn)一有問(wèn)題如何回退,這些絕非是知道些Demo案例的高級(jí)開發(fā)能解決的問(wèn)題。

??所以在技術(shù)和業(yè)務(wù)方面,我自己的感受是(包括我見到的和聽到的) :只有接觸到業(yè)務(wù)了,才能用技術(shù)解決實(shí)際問(wèn)題,才能更了解這個(gè)技術(shù)用起來(lái)的各類坑,像剛才提到的分庫(kù)分表是這樣,其它的諸如日志組件,消息隊(duì)列組件都這樣。通過(guò)下面部分給出的架構(gòu)師平時(shí)要解決的實(shí)際問(wèn)題的講述,大家能更深刻地體會(huì)到這點(diǎn)。

2 資深架構(gòu)師平時(shí)要解決的問(wèn)題

??如下的問(wèn)題均是來(lái)源于實(shí)際,出于項(xiàng)目保密的原則,本人隱去了關(guān)鍵性的業(yè)務(wù)描述,但大家都能看懂,并能感受到架構(gòu)師平時(shí)要解決問(wèn)題的難度。


??問(wèn)題一,A公司有財(cái)務(wù)管理人事管理等10個(gè)左右的項(xiàng)目,它們?cè)诋a(chǎn)線上,需要標(biāo)準(zhǔn)化管理,比如用同一個(gè)Maven倉(cāng)庫(kù),不論功能業(yè)務(wù)如何,得用同一套配置管理服務(wù),用同一套日志管理和分析組件,還得用同一套大數(shù)據(jù)組件來(lái)根據(jù)不同的業(yè)務(wù)維度來(lái)分析數(shù)據(jù)。

??如果是重新搭建一套系統(tǒng),這個(gè)難度也不小,更何況,對(duì)資深架構(gòu)師的要求是,在歷史項(xiàng)目的技術(shù)上做標(biāo)準(zhǔn)化管理,否則每個(gè)項(xiàng)目各管各的,維護(hù)成本大不算,不同項(xiàng)目間的庫(kù)還很容易產(chǎn)生沖突。架構(gòu)師要在保持業(yè)務(wù)穩(wěn)定的前提下實(shí)現(xiàn)這點(diǎn),大家可以考慮下難度。

??問(wèn)題二,隨著B公司業(yè)務(wù)量的上升,數(shù)據(jù)庫(kù)里的數(shù)據(jù)達(dá)到了T級(jí),所以需要通過(guò)分庫(kù)分表來(lái)實(shí)現(xiàn)優(yōu)化。這本身不難,但如何在升級(jí)的過(guò)程中保持業(yè)務(wù)的穩(wěn)定?不能說(shuō)上個(gè)功能點(diǎn),關(guān)鍵業(yè)務(wù)就掛了,而且,萬(wàn)一上線后出現(xiàn)問(wèn)題,得提供應(yīng)急的回退方案。

??問(wèn)題三,C公司是個(gè)創(chuàng)業(yè)型公司,剛開始的時(shí)候,通過(guò)SSM外加Oracle,能滿足大多數(shù)的業(yè)務(wù)需求,但隨著業(yè)務(wù)量的提升,需要資深架構(gòu)在短時(shí)間里實(shí)現(xiàn)針對(duì)高并發(fā)和大數(shù)據(jù)的方案,比如并發(fā)量高了,系統(tǒng)至少不能垮,而且針對(duì)每筆訂單,處理可以稍作延遲,但不能丟數(shù)據(jù)。

???問(wèn)題四,D公司需要在linux上搭建一套和產(chǎn)線一樣的測(cè)試環(huán)境,在平時(shí)的開發(fā)過(guò)程中,各業(yè)務(wù)組可以通過(guò)工具,在測(cè)試環(huán)境上部署或回退本項(xiàng)目的組件,這里,不僅要搭建測(cè)試環(huán)境,更要通過(guò)jenkins等工具給各業(yè)務(wù)組搭建一套能便捷部署系統(tǒng)的工具。

???除了上述的問(wèn)題之外,資深架構(gòu)更像一個(gè)救火隊(duì)員,比如在公司的業(yè)務(wù)體系里,任何一個(gè)團(tuán)隊(duì)報(bào)出的和架構(gòu)相關(guān)的問(wèn)題,比如調(diào)消息隊(duì)列有延遲,調(diào)分庫(kù)分表時(shí)報(bào)內(nèi)存OOM異常了,或者因Dubbo底層而導(dǎo)致的延遲或OOM,資深架構(gòu)得能親自或帶領(lǐng)手下解決具體的問(wèn)題。

3 和高級(jí)開發(fā)相比,資深架構(gòu)一定得精通的技能(或素質(zhì))

??其實(shí)高級(jí)開發(fā)和資深架構(gòu)在需要掌握的技能方面,并沒太大的差別,具體而言,能幫助實(shí)現(xiàn)性能優(yōu)化的分布式組件和數(shù)據(jù)庫(kù)組件(或者叫中間件)也就這么多,linux下的操作命令也就這么些,一些系統(tǒng)管理的工具,比如Maven,Jenkins,ant等的用法也不難。但和高級(jí)開發(fā)相比,資深架構(gòu)的差別在于如下幾點(diǎn)。

??1 資深架構(gòu)解決的問(wèn)題種類和數(shù)量要比高級(jí)開發(fā)多很多,所謂神槍手得靠子彈喂出來(lái),有些問(wèn)題,比如針對(duì)Kafka消息中間件的問(wèn)題,資深架構(gòu)一看日志就知道該怎么改,或者一看log4j錯(cuò)誤信息就知道和其它哪些類有沖突了,又如,在搭建線程池時(shí)遇到了OOM問(wèn)題,資深架構(gòu)估計(jì)也能通過(guò)簡(jiǎn)單地看日志,也能快速定位問(wèn)題所在。

??也就是說(shuō),資深架構(gòu)已經(jīng)積累了很多處理問(wèn)題的經(jīng)驗(yàn),遇到一般問(wèn)題時(shí),無(wú)需再通過(guò)比較耗時(shí)的debug看問(wèn)題根源,往往在腦子里已經(jīng)存儲(chǔ)了大量可能會(huì)導(dǎo)致問(wèn)題的原因,再通過(guò)查看關(guān)鍵日志即可定位到具體的代碼點(diǎn),然后就能很快地給出解決方案。

??2 在給出解決方案時(shí),比如要上個(gè)分布式redis集群,或者上個(gè)消息中間件,對(duì)高級(jí)開發(fā)而言,往往會(huì)有很多試錯(cuò)的時(shí)間,比如上線后有某些功能點(diǎn)沒調(diào)通,得通過(guò)Debug或查日志來(lái)逐一解決問(wèn)題,或上線某個(gè)基于python的大數(shù)據(jù)分析系統(tǒng)后,雖然能滿足基本的功能,但在某個(gè)場(chǎng)景(比如寫日志線程并發(fā)量太多)里,可能會(huì)導(dǎo)致OOM異常。

??而對(duì)資深架構(gòu)來(lái)說(shuō),往往之前已經(jīng)做過(guò)同類事情,所以能避免很多坑(少了很多試錯(cuò)成本和時(shí)間),而且由于對(duì)底層代碼比較熟悉,所以哪怕出現(xiàn)比較疑難的問(wèn)題(比如不能穩(wěn)定重現(xiàn)),資深架構(gòu)能通過(guò)看日志很快定位到具體的底層類,(而高級(jí)開發(fā)一般對(duì)此就束手無(wú)策了)。相比之下,資深架構(gòu)的中流砥柱效應(yīng)就能體現(xiàn)出來(lái)。

??3 資深架構(gòu)一般具有對(duì)各組件的差別非常了解,比如做分布式隊(duì)列,該先用Kafka還是rabbitMQ,或者搭建數(shù)據(jù)庫(kù)集群時(shí),該用MySQL里的哪種引擎。

??這樣,在選型時(shí),由于知道了各種方案的優(yōu)缺點(diǎn),所以能知道哪類方案更適合本業(yè)務(wù)系統(tǒng),或者說(shuō),通過(guò)重寫哪類組件的底層代碼,能很快地搭建起滿足本系統(tǒng)的中間件組件。這點(diǎn),高級(jí)開發(fā)未必能做到。

??總結(jié)一下,資深架構(gòu)得對(duì)關(guān)鍵組件的底層非常了解,并且精通針對(duì)某些組件(比如消息組件,分庫(kù)組件)的實(shí)施和排查問(wèn)題的能力,此外,資深架構(gòu)的基本功也得非常扎實(shí)。

??1 debug能力就不用說(shuō)了,得能熟練地通過(guò)linux命令,從各類日志中發(fā)現(xiàn)并解決問(wèn)題。

??2 無(wú)需了解所有組件的底層代碼(這太難了,也做不到),但需要了解一些常用組件的關(guān)鍵底層實(shí)現(xiàn)(比如Spring IOC或常用中間件) 方式,更得具備到組件內(nèi)部jar里debug排查問(wèn)題的能力。

??3 學(xué)習(xí)能力更不說(shuō)了,和高級(jí)開發(fā)相比,資深架構(gòu)更得了解哪類組件該學(xué),而且,每個(gè)組件內(nèi)部的知識(shí)太多,比如Kafka的知識(shí)就能寫至少一本書,對(duì)于資深架構(gòu)而言,首先需要用較短的時(shí)間了解該組件(比如kafka)的架構(gòu)以及和其它分布式組件(比如Flume)的整合方式,而且還得具備過(guò)濾知識(shí)的能力,即知道哪些知識(shí)不用學(xué)。這樣一旦有需求,就可以較快地搭建出系統(tǒng)原型骨架,隨后再逐步完善功能效果。?

4 對(duì)于程序員而言,如何高效地升級(jí)到架構(gòu)或資深架構(gòu)?

???當(dāng)我還處在一般開發(fā)和高級(jí)開發(fā)的中間水平時(shí),我認(rèn)為我能很快地升級(jí)到架構(gòu)師的水平,所謂無(wú)知者無(wú)畏。當(dāng)我邁出升級(jí)的步伐時(shí),剛開始,我突然發(fā)現(xiàn)升級(jí)的難度很大,從而無(wú)處下手,因?yàn)槠綍r(shí)我缺乏實(shí)踐架構(gòu)師技能的實(shí)戰(zhàn)機(jī)會(huì)?,F(xiàn)在,通過(guò)一些努力,我雖然沒有自信說(shuō)自己一定達(dá)到了架構(gòu)師的水平,但大多數(shù)架構(gòu)師能干的活,我勉強(qiáng)能做好。而且我平時(shí)也在不斷揣摩身邊技術(shù)架構(gòu)的思考方式和解決問(wèn)題的方法,所以在這方面我自認(rèn)為給出的建議不會(huì)耽誤大家。

??首先是鞏固自己基本功方面的建議。

??1 學(xué)再多的視頻和材料,也不及動(dòng)手實(shí)踐一個(gè)案例。

??比如,大家在學(xué)習(xí)消息隊(duì)列時(shí),一定得動(dòng)手搭建個(gè)環(huán)境,最好用虛擬機(jī)模式分布式的場(chǎng)景,這時(shí)可能就有同學(xué)說(shuō)了,環(huán)境太難搭建,怎么辦?自己查資料,這種動(dòng)手能力對(duì)架構(gòu)師而言就屬于基本功,如果這也做不好,那么也沒希望升級(jí)到架構(gòu)師了。

??類似這樣,大家可列個(gè)學(xué)習(xí)列表,網(wǎng)上升級(jí)到架構(gòu)師的系列視頻很多,質(zhì)量高的也不少,都是別人的經(jīng)驗(yàn)之談,但如果就看理論,或者看關(guān)鍵點(diǎn),這連架構(gòu)師的面試都通過(guò)不了,更何況做實(shí)際的架構(gòu)師的活。

??2 平時(shí)不能畏難,一定得多解決問(wèn)題。

??在平時(shí)工作中,一定會(huì)出很多問(wèn)題,而且不少是出在核心代碼和底層代碼里,這時(shí)就一定得通過(guò)看日志等方式去排查問(wèn)題。 我知道,對(duì)很多想升級(jí)的高級(jí)開發(fā)而言,剛開始的時(shí)候一定很難,比如linux命令都不熟,或者效率很慢,別人都找出問(wèn)題點(diǎn)了,自己才剛打開日志。其實(shí)大家都這樣過(guò)來(lái)的,多查多練,最多三個(gè)月,動(dòng)手能力一定能提升。?

??3 得鍛煉自己在linux里(或在分布式環(huán)境里)部署系統(tǒng)部署組件的能力,尤其是部署集群的能力,在此基礎(chǔ)上,通過(guò)各種工具能進(jìn)行壓力測(cè)試。

??比如還是拿kafka來(lái)說(shuō),搭建好集群后,就可以用kafka自帶的Performance來(lái)做壓測(cè)。其實(shí)如果是自己練習(xí),壓測(cè)的結(jié)果沒太大的意義,但這個(gè)流程走下來(lái),一定能對(duì)搭建環(huán)境,使用工具和看日志等技巧就非常熟悉了。

??4 盡量培養(yǎng)自己的調(diào)優(yōu)意識(shí)。說(shuō)這個(gè)話很虛,具體而言,自己得能通過(guò)各種數(shù)據(jù)庫(kù)日志(比如各sql的運(yùn)行時(shí)間)來(lái)找出長(zhǎng)sql,并在此基礎(chǔ)上通過(guò)執(zhí)行計(jì)劃來(lái)優(yōu)化,又如,可以通過(guò)dump文件和GC日志來(lái)看虛擬機(jī)的內(nèi)存使用曲線,看內(nèi)存主要耗在哪些方面,如果是自己代碼沒寫好那還好辦,如果是耗在(中間件的)底層jar包里的代碼里,那也得知道解決方案。

??以上只是架構(gòu)師所需要的基礎(chǔ)技能, 其實(shí)如果能真正做到上述4點(diǎn)的話,大家離開架構(gòu)師的水準(zhǔn)也不遠(yuǎn)了,在此基礎(chǔ)上,大家還得繼續(xù)鍛煉整合的能力。

??從縱向來(lái)講,需要進(jìn)一步深化搭建集群的技能,比如能從底層代碼的角度,了解集群的組成方式,這樣的話,就能很清晰地了解到集群的擴(kuò)展方式和性能調(diào)優(yōu)點(diǎn)。

??從橫向來(lái)講,需要進(jìn)一步了解多種組件的整合方式,比如系統(tǒng)如何同日志組件整合,大數(shù)據(jù)分析工具如何同日志組件整合等。

??剩下的就是不斷積累經(jīng)驗(yàn)技能了。

5 在升級(jí)路上,如何避免一些坑

??我在平時(shí)還有機(jī)會(huì)接觸一些大神,這些其實(shí)都是大神們的經(jīng)驗(yàn)之談。下面分享下在升級(jí)過(guò)程中應(yīng)當(dāng)避免哪些坑。

??1 就像大家以前準(zhǔn)備政治考試時(shí),先準(zhǔn)備大點(diǎn),在保證大點(diǎn)不拉下的基礎(chǔ)上,再詳細(xì)復(fù)習(xí)每個(gè)大點(diǎn)里的細(xì)節(jié)。比如,可以先了解Spring Cloud里有哪些組件,比如Ribbon可以用來(lái)負(fù)載均衡,Hystrix可以用來(lái)容錯(cuò)等,先把Spring Cloud里諸多組件先了解個(gè)大概,能用它們搭建成一個(gè)微服務(wù)體系后,再深入了解其中每個(gè)組件的細(xì)節(jié),比如Spring Cloud Stream里Kafka配置細(xì)節(jié)。

??但我經(jīng)過(guò)和多位架構(gòu)師溝通,他們?cè)谏?jí)時(shí),多少都在這方面走過(guò)彎路,我自己有時(shí)候也會(huì)不知不覺陷入技術(shù)細(xì)節(jié)之中,而忘記我學(xué)這個(gè)技術(shù)的初衷。這里給大家的建議是,在明確學(xué)習(xí)目標(biāo)后(比如要學(xué)Spring Cloud),剛開始別先自己閉門造車地為自己制定學(xué)習(xí)目標(biāo),可以先借鑒現(xiàn)有的視頻講解等的學(xué)習(xí)路線。制定學(xué)習(xí)計(jì)劃時(shí),以兩到三天為單位,給自己定好一個(gè)短期目標(biāo),等到Spring Cloud組件全都了解后,再通過(guò)運(yùn)行通若干個(gè)案例來(lái)深入了解組件的細(xì)節(jié),這樣就能控制住自己的學(xué)習(xí)步驟。

??2 千萬(wàn)別理論和實(shí)際脫節(jié)。這似乎是廢話,但我見過(guò)很多高級(jí)開發(fā),平時(shí)就看視頻和書,也不運(yùn)行代碼,結(jié)果進(jìn)步的速度很慢。

??如果沒機(jī)會(huì)實(shí)踐架構(gòu)技能怎么辦?看自己組里有沒有架構(gòu)的活。如果也沒有怎么辦?(別嫌我啰嗦)回家自己準(zhǔn)備環(huán)境,按視頻里的搭建架構(gòu)環(huán)境。必要時(shí),你甚至可以通過(guò)跳槽來(lái)?yè)Q得一個(gè)架構(gòu)師的實(shí)踐機(jī)會(huì)。

??3 架構(gòu)師可以是技術(shù)控,但絕不能是完美主義,畢竟解決方案得和實(shí)際業(yè)務(wù)切合,并得考慮解決問(wèn)題的成本。而且,架構(gòu)師不能過(guò)于拘泥于細(xì)節(jié),不能什么都事必躬親,很多時(shí)候,得給出方向,或者把問(wèn)題拆分成開發(fā)能理解的子問(wèn)題,然后讓手下人去干。?這似乎和技術(shù)沒有關(guān)系,這就要求架構(gòu)師更具備和人打交道的能力了,這點(diǎn)將在本文的第6部分詳細(xì)說(shuō)明。

6 指導(dǎo)技術(shù)難于自己實(shí)現(xiàn)功能,再論資深架構(gòu)的協(xié)調(diào)(或者說(shuō)扯皮)能力的煉成

??不少開發(fā)者,尤其是資深開發(fā)者,或許都有這樣的體會(huì),對(duì)于一些功能,我寧可自己做,而不是把它們拆分成若干個(gè)子功能再安排手下人去做?;蛘呶覍幙扇スタ艘恍┘夹g(shù)的難題,也不愿意去和人扯皮,從而去制定架構(gòu)里組件的選型方案。?

??可以這樣說(shuō),架構(gòu)師30%的價(jià)值來(lái)自他擁有的專業(yè)技能,30%的價(jià)值來(lái)自他分析和解決問(wèn)題的能力,而40%的價(jià)值(甚至更高)來(lái)自于指導(dǎo)和協(xié)調(diào)能力。除去最后40%的價(jià)值,架構(gòu)師其實(shí)和高級(jí)開發(fā)沒什么差別。比如通過(guò)下面的例子,我們能看到架構(gòu)師為什么還得具備指導(dǎo)和協(xié)調(diào)的能力。

??案例1:當(dāng)架構(gòu)師被要求改善本公司系統(tǒng)(比如是個(gè)應(yīng)用網(wǎng)站)的調(diào)用性能時(shí),他就得和多個(gè)組打交道,往往是,有些組未必肯支持(畢竟現(xiàn)有系統(tǒng)用得不錯(cuò)誰(shuí)都不愿改),或者具體的改善點(diǎn)需要一些組來(lái)落實(shí),這就相當(dāng)于增加該組的工作量了。

??案例2:當(dāng)架構(gòu)師搭建好一套分布式緩存系統(tǒng)后,就得培訓(xùn)其它組的開發(fā)人員,讓他們合理使用這套系統(tǒng)。

??案例3:又如架構(gòu)師幫一個(gè)組解決了一個(gè)典型的OOM問(wèn)題后,得把解決這個(gè)問(wèn)題的思路向其他組推廣,以便節(jié)省解決同類問(wèn)題的時(shí)間。

??從上述案例中,我們一定能感受到在溝通,協(xié)調(diào)方面架構(gòu)師需要掌握的技能水準(zhǔn)。這方面說(shuō)難不難,多練就行,但對(duì)IT開發(fā)而言,動(dòng)嘴要比動(dòng)手寫代碼要難。下面也給出些提升“動(dòng)嘴”能力的技巧。

??1 首先得提升自己綜合邏輯思維的能力,這點(diǎn)可以靠多寫博客,甚至寫書來(lái)提升。其實(shí)寫的時(shí)候,就相當(dāng)于把自己要講的內(nèi)容用文字整理了一遍,這樣無(wú)形中也提升了自己綜合表達(dá)能力。

??2 在組內(nèi)要多分享技術(shù)。其實(shí)剛開始分享時(shí),一定不知道該說(shuō)什么,甚至講完后沒人能懂(當(dāng)然自己一定能懂),但多講幾次后,口頭表達(dá)和與別人的交流能力也上去了。

??3??在遇到和其它組交流時(shí)(比如聯(lián)調(diào)或溝通接口),一定得抓住機(jī)會(huì)多開口,剛開始的時(shí)候,估計(jì)很難讓別人能接受自己的觀點(diǎn),或者自己有理也未必能講清楚,但經(jīng)過(guò)多次協(xié)調(diào)后,就能讓別人接受自己的觀點(diǎn),或者大家能達(dá)成彼此能接受的妥協(xié)方案。

歡迎工作一到五年的Java工程師朋友們加入Java高級(jí)架構(gòu):617912068 進(jìn)我的粉絲群領(lǐng)取一些架構(gòu)資料 電子書籍在群里也會(huì)有面試上的一些建議交流

資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來(lái)掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來(lái)的自己一個(gè)交代!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、生命周期 一個(gè)事物一旦出生,就必然會(huì)長(zhǎng)大,變異,一旦長(zhǎng)大,就面臨著衰老,接下來(lái)就是消亡了,這個(gè)過(guò)程就稱為一個(gè)事...
    ZyBlog閱讀 2,685評(píng)論 1 11
  • 數(shù)據(jù)結(jié)構(gòu)隊(duì)列集合鏈表、數(shù)組字典、關(guān)聯(lián)數(shù)組棧樹二叉樹完全二叉樹平衡二叉樹二叉查找樹(BST)紅黑樹B-,B+,B*樹...
    jackcooper閱讀 3,301評(píng)論 1 50
  • (好吧,圖還是傳不上來(lái)) 好久沒有跑步了,今天鼓起勇氣穿上跑步服,扎起馬尾,帶上臂包,開心的下樓了。 樓下一輛哈嘍...
    柔小喵兒童書房閱讀 214評(píng)論 0 0
  • 世間百態(tài)無(wú)常, 人心眾口難調(diào)。 真理沒有標(biāo)準(zhǔn), 智慧各有不同。 佛法難度無(wú)緣, 雨露能救有根。 六道因果輪回, 自...
    澤仁德喜閱讀 872評(píng)論 7 14
  • 浣溪沙 午醉初醒窗影斜,小街天暗盡飛花,兒童拾桂不還家。 何夜有閑輕步月,流光入鬢笑無(wú)邪,并攜橋尾羨煙華。 戊戌秋...
    百川赴海_8501閱讀 272評(píng)論 0 0