hello,大家好呀,我是小樓。 前段時間不是在忙麽,忙的內容之一就是花了點時間重構了一個服務的健康檢查組件,目前已經慢慢在灰度線上,本文就來分享下這次重構之旅,也算作個總結吧。 背景 服務健康檢查簡介 服務健康檢查是應對分散式應用下某些服務節點不健康問題的一種解法。如下圖,消費者調用提供方集群,通 ...
學習的兩個目的:
應付面試
應付工作(解決問題)
首先要明白學習的目的,不同階段,不同技術的學習目的是不一樣的。
有些技術,僅僅是應用級別的,有些技術是原理級別的(主要還是應試)。所以不同技術、不同時間學習方式需要改變。
學習方法:
mysql、redis等日常使用技術:
直接就要熟練掌握,因為日常工作經常使用,忘記說不過。
分散式微服務技術:
組件用來解決什麼問題;思想是什麼;會帶來什麼新的問題,新的問題怎麼解決?
分散式技術就是用來解決各種分散式問題的組件,體系龐大,涉點面廣,主要對應於具體的業務問題。所以學習時瞭解原理,會應用就行了。源碼什麼的,面試前挑選兩個核心、經典組件瞭解下核心原理(主要記結論)
項目
不得不說,外包的項目是真的很水,水到自己看著都發慌。
那如果你項目很水,怎麼準備面試呢?
首先項目水,不代表你水。這就需要你具備一定的架構思想。
- 第一,在面試中,並不是只能展示自己的那些誰都會寫的CURD,你參與在整個大的項目當中的科技與狠活,只要你瞭解過的都可以聊,項目中所有東西都和你有關的,所以多花點時間多瞭解下別人做的事情,對你是有好處的。
- 第二,就算項目再水,也一定涉及到項目選型,這就是你可以吹的地方,至於你到底參與了多少,反正面試官也不知道,只要你準備好,解釋的通就好了。比如你對比了一下產品,看了下他們各自支持哪些功能,評估了一下落地成本和運維的複雜度,並且瞭解了一下他們的學習成本和團隊的上手速度,調研了一下這個產品的開源支持力度,最終再結合實際業務情況,選擇了某某產品。而且呢我還去瞭解了一下他的核心原理是啥啥啥。如果面試官說你這個方案不完美,那你就直接說:”我當然知道這個方案不完美了,我也知道其中問題有哪幾點,但是綜合評估下來呢,這個方案更適合我們當時的情況。“
- 第三,就算你的項目很古老,你的參與度很低,那也不是一無是處的,線上問題總會遇到過,就算你自己沒遇到過,同事總遇到過,同事也沒遇到過那就編一個線上問題往簡歷上寫。比如幫助同事排查並解決了慢SQL問題、多次解決過CPU飆高的問題、記憶體泄漏問題、對於頻繁的FullGC有解決經驗等等。那關於這些問題到底是怎麼回事,去網上搜相關文章,模擬一下問題的發生,並嘗試這解決一下。然後重點來了,按照這個腳本準備,”問題是怎麼發生的,是怎麼發現的,當時的現象是什麼,具體有哪些指標,你怎麼排查的,排查之後的解決方案是什麼,解決之後的指標是怎麼樣的。“
- 第四,實在水到沒有亮點,那就推翻原設計,架構重構思想,自己創造亮點。把本來不合理的設計替換成更合理的方案,借鑒別的項目還是自己憑經驗技術來都行,合理就行。
總之就是想盡一切辦法告訴面試官,我和別人不一樣,不要我就是你們的損失,就算我的項目很水,但是我一點不水。
源碼:
源碼這種東西主要是用於應試的,像spring源碼這種東西,平時沒誰去管它,又用不上。所以理解核心原理和流程就行了,沒必要去死摳源碼。因為摳了也記不住,找工作前再去學習閱讀就可以了。或者你像寫相關博客帖子的時候再去學習。
數據結構、設計模式、演算法等東西:
理解思想是什麼,有什麼特點,用來解決什麼問題就行了。
主要還是用於應試(筆試刷題,面試也就是思想)。這種東西雖然重要,但是和數學相關度很大,還不是面向百度編程。所以主要就是理解思想,面試刷題,工作面向百度。
JVM:
原理偏多,理解優先。面試前複習+刷題。
併發、多線程:
難度最大,工作中也可能會用。
學習以原理為主(真正理解),反覆複習,應用還需在正式開發中提升。
其他語言:
建議選擇GO語言作為第二語言,按照行業趨勢,Java必然被GO語言逐漸蠶食,市場份額越來越小。