天天看點

如何建構自己的Java學習體系?

因公衆号更改推送規則,請點“在看”并加“星标”第一時間擷取精彩技術分享

點選關注#網際網路架構師公衆号,領取架構師全套資料 都在這裡

如何建構自己的Java學習體系?

0、2T架構師學習資料幹貨分

上一篇:一行log日志,引發了P1的線上事故

大家好,我是網際網路架構師!

先說一件值得思考的事情:聯考的時候大家都是一樣的教科書,同一個教室,同樣的老師輔導,時間精力基本差不多,可是最後别人考的是清華北大或者一本,而你的實力隻能考個三本,為什麼?當然這裡主要是智商的影響,那麼其他因素呢?智商解決的問題能不能後天用其他方式來補位一下?

大家平時都看過很多方法論的文章,看的時候很爽覺得非常有用,但是一兩周後基本還是老樣子了。其中有很大一部分原因那些方法對腦力有要求、或者方法論比較空缺少落地的步驟。下文中描述的方式方法是不需要智商也能學會的,非常具體的。

關鍵問題點

為什麼你的知識積累不了?

有些知識看過就忘、忘了再看,實際碰到問題還是聯系不上這個知識,這其實是知識的積累出了問題,沒有深入的了解自然就不能靈活運用,也就談不上解決問題了。這跟大家一起看相同的聯考教科書但是聯考結果不一樣是一個原因。問題出在了了解上,每個人的了解能力不一樣(智商),絕大多數人對知識的了解要靠不斷地實踐(做題)來鞏固。

同樣實踐效果不一樣?

同樣工作一年碰到了10個問題(或者說做了10套聯考模拟試卷),但是結果不一樣,那是因為在實踐過程中方法不夠好。或者說你對你為什麼做對了、為什麼做錯了沒有去複盤

假如碰到一個問題,身邊的同僚解決了,而我解決不了。那麼我就去想這個問題他是怎麼解決的,他看到這個問題後的邏輯和思考是怎麼樣的,有哪些知識指導了他這麼邏輯推理,這些知識哪些我也知道但是我沒有想到這麼去運用推理(說明我對這個知識了解的不到位導緻靈活運用缺乏);這些知識中又有哪些是我不知道的(知識缺乏,沒什麼好說的快去Google什麼學習下–有場景案例和目的加持,學習了解起來更快)。

等你把這個問題基本按照你同僚掌握的知識和邏輯推理想明白後,需要再去琢磨一下他的邏輯推了解題思路中有沒有不對的,有沒有啰嗦的地方,有沒有更直接的方式(對知識更好地運用)。

我相信每個問題都這麼去實踐的話就不應該再抱怨靈活運用、舉一反三,同時知識也積累下來了,這種場景下積累到的知識是不會那麼容易忘記的。

這就是向身邊的牛人學習,同時很快超過他的辦法。這就是為什麼聯考前你做了10套模拟題還不如其他人做一套的效果好

知識+邏輯 基本等于你的能力,知識讓你知道那個東西,邏輯讓你把東西和問題聯系起來

這裡的問題你可以了解成方案、架構、設計等

系統化的知識哪裡來?

知識之間是可以聯系起來的并且像一顆大樹一樣自我生長,但是當你都沒了解透徹,自然沒法産生聯系,也就不能夠自我生長了。

真正掌握好的知識點會慢慢生長連接配接最終組成一張大網

但是我們最容易陷入的就是掌握的深度、系統化(工作中碎片時間過多,學校裡缺少時間)不夠,是以一個知識點每次碰到花半個小時學習下來覺得掌握了,但是3個月後就又沒印象了。總是感覺自己在懵懵懂懂中,或者一個領域學起來總是不得要領,根本的原因還是在于:宏觀整體大圖了解不夠(缺乏體系,每次都是盲人摸象);關鍵知識點深度不夠,了解不透徹,這些關鍵點就是這個領域的骨架、支點、抓手。缺了抓手自然不能生長,缺了宏觀大圖容易誤入歧途。

我們有時候發現自己在某個領域學起來特别快,但是換個領域就總是不得要領,問題出在了上面,即使花再多時間也是徒然。這也就是為什麼學霸看兩個小時的課本比你看兩天效果還好,感受下來還覺得别人好聰明,是不是智商比我高啊。

是以新進入一個領域的時候要去找他的大圖和抓手。

好的同僚總是能很輕易地把這個大圖交給你,再順便給你幾個抓手,你就基本入門了,這就是教育訓練的魅力,這種情況肯定比自學效率高多了。但是目前絕大部分的教育訓練都做不到這點

好的邏輯又怎麼來?

實踐、複盤

如何建構自己的Java學習體系?

圖檔

講個前同僚的故事

有一個前同僚是5Q過來的,負責技術(所有解決不了的問題都找他),這位同學從chinaren出道,跟着王興一塊創業5Q,5Q在學校靠雞腿打下大片市場,最後被陳一舟的校内收購(據說被收購後5Q的好多技術都走了,最後王興硬是呆在校内網把合約上的所有錢都拿到了)。這位同學讓我最佩服的解決問題的能力,好多問題其實他也不一定就擅長,但是他就是有本事通過Help、Google不停地驗證嘗試就把一個不熟悉的問題給解決了,這是我最羨慕的能力,在後面的職業生涯中一直不停地往這個方面嘗試。

應用剛啟動連接配接到資料庫的時候比較慢,但又不是慢查詢

  1. 這位同學的解決辦法是通過tcpdump來分析網絡包,看網絡包的時間戳和網絡包的内容,然後找到了具體卡在了哪裡。
  2. 如果是專業的DBA可能會通過show processlist 看具體連接配接在做什麼,比如看到這些連接配接狀态是 authentication 狀态,然後再通過Google或者對這個狀态的了解知道建立連接配接的時候MySQL需要反查IP、域名這裡比較耗時,通過配置參數 skip-name-resolve 跳過去就好了。
  3. 如果是MySQL的老司機,一上來就知道連接配接慢的話跟 skip-name-resolve 關系最大。

在我眼裡這三種方式都解決了問題,最後一種最快但是純靠積累和經驗,換個問題也許就不靈了;第一種方式是最牛逼和通用的,隻需要最少的知識就把問題解決了。

我當時跟着他從sudo、ls等linux指令開始學起。當然我不會輕易去打攪他問他,每次碰到問題我盡量讓他在我的電腦上來操作,解決後我再自己複盤,通過history調出他的所有操作記錄,看他在我的電腦上用Google搜啥了,然後一個個去學習分析他每個動作,去想他為什麼搜這個關鍵字,複盤完還有不懂的再到他面前跟他面對面的讨論他為什麼要這麼做,指導他這麼做的知識和邏輯又是什麼。

有哪些好的行為幫你更好地掌握知識

筆記+寫部落格

看東西的時候要做筆記,要不當時看得再爽也很容易忘記,我們需要反複複習來加深印象和了解,複習的根據就是筆記(不可能再完整又看一次),筆記整理出裡面的要點和你的盲點。

一段時間後把相關的筆記整理成一篇體系性的部落格文章,這樣既加深了了解又系統化了相關知識。以後再看到跟這篇部落格相關的案例、知識點時不斷地更新部落格(完善你的知識點)

場景式學習、體感的來源、面對問題學習

前面提到的對知識的深入了解這有點空,如何才能做到深入了解?

舉個學習TCP三向交握例子

經曆稍微豐富點的工程師都覺得TCP三向交握看過很多次、很多篇文章了,但是文章寫得再好似乎當時了解了,但是總是過幾個月就忘了或者一看就懂,過一陣子被人一問就模模糊糊了,或者兩個為什麼就答不上了,自己都覺得自己的回答是在猜或者不确定

為什麼會這樣呢?而學其它知識就好通暢多了,我覺得這裡最主要的是我們對TCP缺乏體感,比如沒有幾個工程師去看過TCP握手的代碼,也沒法想象真正的TCP握手是如何在電腦裡運作的(打電話能給你一些類似的體感,但是細節覆寫面不夠)。

如果這個時候你一邊學習的時候一邊再用wireshark抓包看看三次握手具體在幹什麼,比抽象的描述實在多了,你能看到具體握手的一來一回,并且看到一來一回帶了哪些内容,這些内容又是用來做什麼、為什麼要帶,這個時候你再去看别人講解的理論頓時會覺得好了解多了,以後也很難忘記。

但是這裡很多人執行能力不強,想去抓包,但是覺得要下載下傳安裝wireshark,要學習wireshark就放棄了。隻看不動手當然是最舒适的,但是這個最舒适給了你在學習的假象,沒有結果。

這是不是跟你要解決一個難題非常像,這個難題需要你去做很多事,比如下載下傳源代碼(翻不了牆,放棄);比如要編譯(還要去學習那些編譯參數,放棄);比如要搭建環境(太瑣屑,放棄)。你看這中間九九八十一難你放棄了一難都取不了真經。這也是為什麼同樣學習、同樣的問題,他能學會,他能解決,你不可以。

如何建構自己的Java學習體系?

圖檔

再來看一個解決問題的例子

會員系統雙11優化這個問題對我來說,我是個外來者,完全不懂這裡面的部署架構、業務邏輯。但是在問題的關鍵地方(會員認為自己沒問題–壓力測試正常的;淘寶API更是認為自己沒問題,alimonitor監控顯示正常),結果就是會員的同學說我們沒有問題,淘寶API肯定有問題,然後就不去思考自己這邊可能出問題的環節了。思想上已經甩包了,那麼即使再去review流程、環節也就不會那麼仔細,自然更是發現不了問題了。

但是我的經驗告訴我要有證據地甩包,或者說拿着證據優雅地甩包,這迫使我去找更多的細節證據(證據要給力哦,不能讓人家拍回來)。如果我是這麼說的,這個問題在淘寶API這裡,你看理由是…………,我做了這些實驗,看到了這些東東。那麼淘寶API那邊想要證明我的理由錯了就會更積極地去找一些資料。

事實上我就是做這些實驗找證據過程中發現了會員的問題,這就是态度、執行力、知識、邏輯能力綜合下來拿到的一個結果。我最不喜歡的一句話就是我的程式沒問題,因為我的邏輯是這樣的,不會錯的。你當然不會寫你知道的錯誤邏輯,程式之是以有錯誤都是在你的邏輯、意料之外的東西。有很多次一堆人電話會議中扯皮的時候,我一般把電話靜音了,直接上去人肉一個個過對方的邏輯,一般來說電話會議還沒有結束我就給出來對方邏輯之外的東西。

釘子式學習方法和系統性學習方法

系統性學習方法就是想掌握MySQL,那麼搞幾本MySQL專著和MySQL 官方DOC看下來,一般課程設計的好的話還是比較容易掌握下來,絕大部分時候都是這種學習方法,可是在種學習方法的問題在于學完後當時看着似乎了解了,但是很容易忘記,一片一片地系統性的忘記,并且缺少應用能力(了解不深)。這是因為一般人對知識的了解沒那麼容易真正了解(掌握或者說應用)。釘子式的學習方式,就是在一大片知識中打入幾個樁,反複演練将這個樁不停地夯實,夯穩,做到在這個知識點上用通俗的語言跟小白都能講明白,然後再這幾個樁中間發散像星星之火燎原一樣把整個一片知識都掌握下來。這種學習方法的缺點就是很難找到一片知識點的這個點,然後沒有很好整合的話知識過于零散。

釘子式學習方法看着慢但是因為這樣掌握的更透徹和牢固實際最終反而快。

我們常說的一個人很聰明,就是指系統性的看看書就都了解了,是真的了解那種,還能靈活運用,但是大多數普通人就不是這樣的,看完書似乎了解了,實際幾周後基本都忘記了,真正實踐需要用的時候還是用不好。

舉個Open-SSH的例子

為了做通 SSH 的免密登陸,大家都需要用到 ssh-keygen/ssh-copy-id, 如果我們把這兩個指令當一個小的釘子的話,會去了解ssh-keygen做了啥(生成了密鑰對),或者ssh-copy-id 的時候報錯了(原來是需要秘鑰對),然後将 ssh-keygen 生成的pub key複制到server的~/.ssh/authorized_keys 中。

然後你應該會對這個原理要有一些了解(更大的釘子),于是了解了密鑰對,和ssh驗證的流程,順便學會怎麼看ssh debug資訊,那麼接下來網絡上各種ssh攻略、各種ssh卡頓的解決都是很簡單的事情了。

比如你通過SSH可以解決這些問題:

  • 免密登陸
  • ssh卡頓
  • 怎麼去掉ssh的時候需要手工多輸入yes
  • 我的ssh怎麼很快就斷掉了
  • 我怎麼樣才能一次通過跳闆機ssh到目标機器
  • 我怎麼樣通過ssh科學上網
  • 我的ansible(底層批量指令都是基于ssh)怎麼這麼多問題,到底是為什麼
  • 搜尋公衆号網際網路架構師背景回複“2T”,擷取一份驚喜禮包。
  • 我的git怎麼報網絡錯誤了
  • X11 forward我怎麼配置不好
  • https為什麼需要随機數加密,還需要簽名
  • …………

這些問題都是一步步在擴大ssh的外延,讓這個釘子變成一個巨大的樁。

然後就會學習到一些進階一些的ssh配置,比如幹掉經常ssh的時候要yes一下(StrictHostKeyChecking=no), 或者怎麼配置一下ssh就不會斷線了(ServerAliveInterval=15),或者将 ssh跳闆機->ssh server的過程做成 ssh server一步就可以了(ProxyCommand),進而發現用 ssh的ProxyCommand很容易科學上網了,或者git有問題的時候輕而易舉地把ssh debug打開,對git進行debug了……

這基本都還是ssh的本質範圍,像ansible、git在底層都是依賴ssh來通訊的,你會發現學、調試X11、ansible和git簡直太容易了。

另外了解了ssh的秘鑰對,也就了解了非對稱加密,同時也很容易了解https流程(SSL),同時知道對稱和非對稱加密各自的優缺點,SSL為什麼需要用到這兩種加密算法了。另外,搜尋公衆号網際網路架構師背景回複“9”,擷取一份驚喜禮包。

你看一個簡單日常的知識我們隻要沿着它用釘子精神,深挖細挖你就會發現知識之間的連接配接,這個小小的知識點成為你知識體系的一根結實的柱子。

我見過太多的老的工程師、年輕的工程師,天天在那裡ssh 密碼,ssh 跳闆機,ssh 目标機,一小會ssh斷了,重來一遍;或者ssh後卡住了,等吧……

在這個問題上表現得沒有求知欲、沒有探索精神、沒有一次把問題搞定的魄力,是以就習慣了

空洞的口号

很多老師和文章都會教大家:舉一反三、靈活運用、活學活用、多做多練。但是隻有這些口号是沒法落地的,落地的基本步驟就是前面提到的,卻總是被忽視了。

什麼是工程效率,什麼是知識效率

有些人純看理論就能掌握好一門技能,還能舉一反三,這是知識效率,這種人非常少;

大多數普通人都是看點知識然後結合實踐來強化理論,要經過反反複複才能比較好地掌握一個知識,這就是工程效率,講究技巧、工具來達到目的。

肯定知識效率最牛逼,但是擁有這種技能的人畢竟非常少(天生的高智商吧)。從小我們周邊那種不怎麼學的學霸型基本都是這類,這種學霸都還能觸類旁通非常快的掌握一個新知識,非常氣人。剩下的絕大部分隻能拼時間+方法+總結等也能掌握一些知識

非常遺憾我就是工程效率型,隻能羨慕那些知識效率型的學霸。但是這事又不能獨立看待有些人在某些方向上是工程效率型,有些方向就又是知識效率型(有一種知識效率型是你掌握的實在太多也就比較容易觸類旁通了,這算灰色知識效率型)

使勁挖掘自己在知識效率型方面的能力吧,兩者之間當然沒有明顯的界限,知識積累多了邏輯訓練好了在别人看來你的智商就高了

知識分兩種

一種是通用知識(不是說對所有人通用,而是說在一個專業領域去到哪個公司都能通用);另外一種是跟業務公司綁定的特定知識

通用知識沒有任何疑問碰到後要非常饑渴地撲上去掌握他們(受益終生,這還有什麼疑問嗎?)。對于特定知識就要看你對業務需要掌握的深度了,肯定也是需要掌握一些的,特定知識掌握好的一般在公司裡混的也會比較好。

一個具體知識體系裡面又有一些核心知識點(抓手、essential knowledge),也就是掌握可以快速幫你膨脹、延伸到其他相關知識的知識點。

還有一些知識、工具一旦掌握就能幫你貫穿、具象、了解别的知識點,比如網絡知識體系中的wireshark;理工科中的數學;知識體系中的學習方法、行為方式。我們要多去發現這些知識、工具(how?)

哪些品質能夠決定一個人學習好壞

排在第一名的品質是複盤、總結能力

簡單的說,這個能力就是這個孩子心裡是否有個“小教練”,能夠每次跳脫出目前任務,幫助自己分析,失敗在哪裡,成功在哪裡,如何進階,如何訓練等等。

舉幾個例子:

如果寫不出作文,這個“小教練”能告訴孩子,是沒有素材,還是文字能力不強。

如果是文字能力不強,應該如何訓練(是造句,還是拆段落)

如果數學題做不出來,這個“小教練”能告訴孩子,我的弱點在哪裡,哪個類型題我有重大問題,是因為哪裡沒有了解和打通。

有内化的“自我教練”,這個能力系數是1.67。也就是其他能力相當,學習效果可以翻1.67倍。

排在第二名的是建構能力。簡單的說是邏輯推理,做事順序等等

在内心“小教練”能把問題進行拆解之後,建構能力能把這些問題進行排序,應該怎麼做更合理。

最終怎麼把訓練步驟整合。遇見一個問題,先幹什麼,再幹什麼等等。

有很強的順序能力,系數為1.44。也就是其他能力相當,學習效果可以翻1.44倍。

排在第三名的能力是智商和過去成績

這個毋庸置疑,聰明做事就會簡單一些。平均效應系數為0.67。

也就是說,其他能力相當,智商高和過去成績好,學習效果提升67%

智商重要程度應該比這裡更高,但是實際高智商的太少,大多都是因為基礎知識好給人産生了智商高的誤解!

排在第四名的能力是自我驅動力

簡單的說,知道自己為什麼學習,能夠自我鼓勵,遇見失敗能抗挫,有很強的心理驅動力。

平均效應系數為0.48。也就是說,其他能力相當,有自我驅動力的人,學習效果提升48%。

排在第五名的才是集中注意力

也就是說,注意力強。注意力對學習影響,并沒有很多家長想象的那麼大。

注意力的平均效應系數為0.44

也就是說,其他能力相當,注意力好的孩子,效果能提升44%

———總結一下——-

學習提升的個人因素:

自我分析,自我教練的元認知能力 》 邏輯排序與制定計劃的建構能力》 智商和過去成績 》自我驅動力》 集中注意力。另外,搜尋公衆号網際網路架構師背景回複“面試”,擷取一份驚喜禮包。

很多家長癡迷于“專注力”。當然專注力是一個效應量很強的學習力,但是從整體資料看,對學習的提升效果,僅僅排到第五名。

幫助孩子建立元認知能力和建構能力的教育訓練,才能給他們對終身學習有幫助的技能包

以上缺少了對方法的落地執行能力的評估,實際這是影響最大的

為什麼一直努力卻沒有結果

人生不是走斜坡,你持續走就可以走到巅峰;人生像走階梯(有時候需要跳上台階),每一階有每一階的難點,學實體有實體的難點,學漫畫有漫畫的難點,你沒有克服難點,再怎麼努力都是原地跳。是以當你克服難點,你跳上去就不會下來了。

這裡的克服難點可以了解成真正掌握知識點,大多時候隻是似是而非,是以一直在假忙碌、假學習,隻有真正掌握後才像是上了個台階。

這句話本身就是對知識的具象化了解,本來要描述的是有些人很容易達到目的、有些人則很難,我們很容易歸結到天賦等原因,但是還是不能完全了解這個事情,知道天賦差異也不會幫助到我們跳樓梯,而這句話給出了一個形象的描述,一下子就會記住并在日常中盡量嘗試跳上去和脫離假忙碌的狀态。

如何建構自己的Java學習體系?

圖檔

在上述截圖中,溫伯格拿他自己玩彈子球遊戲的經驗,來描述”躍遷模式”。

為啥在躍遷之前會出現一個【低谷】捏?溫伯格認為:要想提升到一個新的 level,你需要放棄某些你擅長的技能,然後嘗試你所【不】擅長的技能。溫伯格以他的彈子球遊戲舉例說:為了得到更高的分數,他必須放棄以前熟悉的【低】難度技巧,轉而嘗試某種【高】難度技巧。在練習高難度技巧的過程中,他的分數會跌得比原先更低(也就是截圖中下凹的低谷)。經過了一段時間的練習,當他掌握了高難度技巧,他的遊戲得分就突然飛躍到一個新的 level。

相關閱讀:

1、Alibaba開源内網高并發程式設計手冊.pdf

2、2T架構師學習資料幹貨分享

3、10000+TB 資源,阿裡雲盤,牛逼!!

4、基本涵蓋了Spring所有核心知識點總結

  · END ·

最後,關注公衆号網際網路架構師,在背景回複:2T,可以擷取我整理的 Java 系列面試題和答案,非常齊全。

如何建構自己的Java學習體系?

如果這篇文章對您有所幫助,或者有所啟發的話,幫忙掃描下發二維碼關注一下,您的支援是我堅持寫作最大的動力。

求一鍵三連:點贊、轉發、在看。