我的java學習之路
緣起
五年前開始接觸java,中間斷斷續續從事了廣告投放、社區app服務、云服務3個行業的服務端開發,在java這個大生態系統,web框架、中間件、大數據這幾個名詞貫穿了這幾年的職業生活
轉型期
說實話,第一次跳槽的時候,并沒有想著往java方向轉型,和大多數“迷茫”的年輕人一樣,我只是知道現在的工作不是自己期待的
偶然的機會得到了一家中型互聯網公司的offer,然后我接受了這份offer,當時根本沒有考慮待遇、發展、職業發展的問題,這也為一年后的再次跳槽埋下了伏筆
當時的團隊對于新人的培養,以放養為主(這可能也是目前大多數公司的培養方式),從零開始學java,看項目的代碼,看前面的“新人”留下的學習分享,看關于廣告投放業務的wiki,還有每個計算廣告從業者必看的“計算廣告學”
這一年,學會了guava cache
的簡單使用,學會了java集合庫HashMap
的簡單使用,了解了一點spring,其他。。。什么也沒學到
成長期
一年后,部門整體績效很差,每周要做的事情一天搞定,我接受不了這樣的現實。。。嗯嗯,好吧,更多的因素是,我存不下錢來,還看不到希望。。我跳槽了第二家社區app服務公司,另外一家中型互聯網公司,業務更具互聯網特質
新人的培養模式是放養為主,節奏卻快了很多,以周為單位完成小任務,熟悉系統之后,逐步上手更大的任務,在這里,數據量不再是之前的mysql存個數據完事,一套完整的大數據系統,存儲、分析、優化,要接觸業務開發、要了解大數據棧、要前端的開發,還要做架構的優化
這三年里,接觸了大數據棧,了解了整個web技術棧,開始了一些較深層次的技術棧學習,借用“痛并快樂著”形容這段經歷,再合適不過
再次轉型期
一年前,跳槽云計算行業,這次轉行完全出乎意料,轉行之后,也是出乎自己的意料,行業的不同,對技術棧的理解和使用是完全的不同,前幾年的開發,相對注重研發體驗,在效率和流程矛盾時,流程服務于效率,而在目前的工作中,流程至上
新人培養上是徹底的放養,對于有工作經驗的同學,“可能也不是一件壞事”,技術棧方面,web框架使用了比較非主流的web框架akka,徹徹底底的使用“自研”框架,為了解決項目中比較難以處理的資源有效管理問題,“自研”了工作流引擎
小結
選擇大于努力
項目決定了工作下限,團隊決定了視野的開闊
長遠發展,項目>團隊>收入>公司
不過,好的項目、團隊,收入不會差
web棧
前端的知識是web開發的極大補充,才能對目前的仍然主流的基于servlet
web棧有較為直觀而深入的認識,厘清頁面和請求之間關系
前端作為入口,能更好的衍生理解互聯網的發展過程,以及相關使用的技術
java棧
- jdk集合庫
集合庫是java開發打交道最多的工具庫,jdk是我讀過的最好的代碼,目前沒有之一,如linus所說rtfsc
- jvm
GcRoots是jvm中最重要的主線,是jvm的起點,也是jvm的終點 - 多線程
內存模型很重要,由此可以展開,偽共享、線程同步
aqs是必修的hard級別的課程,必讀,難度很大,典型的高投入長周期回報 - 緩存
"封神"的redis,有些過譽了,無腦吹讓人很煩
緩存穿透以及緩存雪崩的處理,還有一致性問題如何處理 - kafka
通過分區加IO優化實現高并發寫,broker間isr同步
跟其他mq的功能對比 - mysql
B+數據結構,以及由此而來的好處
sql的優化,不過,沒花時間看的,實際用的也少,是個盲點
大數據
日常使用為主,主要的是hbase、hive、spark,API用好已經占用了很多的時間,核心的點是底層數據模型,花的時間不夠
反思
少即是多
去年deno更新的時候,國內“調皮”的玩家刷屏技術更新太快,知乎上跟帖 不要在更新了,學不動了,這是個技術不斷更新迭代的時代,老的技術還沒啃,新的框架又在開發了
這種趨勢會形成從業者的不斷焦慮,有太多的東西要學了,太多不了解的東西,過去的幾年工作中,從最開始的嘗試各種不同的新技術,在學會了幾個demo之后,心里衍生出一絲自我安慰,似乎這個技術我已經掌握了
我花了很多時間在接觸新技術上,結果大多數淺嘗輒止,一個月之后,只留下自己曾經調用過某個api的印象,一直很忙碌,卻沒有成就,一直在學習,卻沒有成績
其實,少即是多,做事情、學技術,需要聚焦,然后深入一層分析,在沒有讀完官網guide之前或者一本相關的書籍之前,是不能稱之為“掌握”的,只是個調用api工具人
注重基礎積累
“沒有銀彈”不僅適用于軟件開發,也適用于自我提升,再高大上的技術棧也是建立在底層的if else之上,各種框架和庫給開發帶來了巨大的效率提升,同時也帶來了隱藏在背后的復雜性
如今快餐文化盛行,在前幾年的工作中,自己大多數的時間胡亂分配在了很多“流行”的技術點上,無法形成有效的積累,概念沒有有效串聯起來,這是個很大的問題,經歷不起一個為什么的追問
不要著急讀源碼
在過去學習一個新的技術時,我犯過兩個較大的錯誤:讀源碼和想直接讀源碼
這是很多人都會踩的坑,開始的時候,追求快速上手,閱后即焚,不再深究;在經歷幾次外部的挫折,如“面試”和“被面試”,就想去硬讀源碼,然后深受打擊,放棄深究
在決定讀源碼之前,需要明確自己讀源碼的目標是什么,需要了解源碼的基礎組成,然后再做有選擇的閱讀
在真正開始之前,大可以讀讀別人的總結或者博客,站在“巨人”的肩膀之上,將行深至遠
知識需要閉環
所有的學習方法都在告訴自己“閉環”的重要性,而“閉環”這個工作卻是最難的
“閉環”意味著總結,意味著理念的提升,也是學習路程中,最艱難卻重要的一段
總有各種各樣的干擾來打斷自己的閉環流程,主觀或者客觀,而回望過去,印象最深刻、理解最透徹的,往往都是經歷了閉環
培養好奇心
好奇心是打開新世界的鑰匙,是功利性另一面
功利性學習非常有針對性,能夠短期給自己帶來較大的收益,隨之而來的問題是基礎不穩,印象不深刻,大多數是他人的看法,他人的理解,不是自己的東西
好奇心能夠解決這些問題,達到知其所以然的目標,凡事盡量多問一個為什么,形成自己的理解,成為自己的知識
寫的很長了,補充一點,技術是工具,不是目的