對java一點感悟

  都說程序員喫青春飯,也許你可能不信,你會覺得不管哪行哪業都是喫青春飯呀!因爲其他行業的知識是大概學完的然後使用一輩子,就比如司機,只要學會開車就行了,然後不斷的每天開;比如教師,只靠考證考了,然後平常上課就好了,而課本的內容也是好久才改版一次;就比如做燒餅,只要長年累月的做就行了(武大郎表示內行╮(╯_╰)╭)

  而程序員如果也是這樣,那可能要不了幾年就會慢慢的被淘汰了,只能在一家公司一直幹直到被裁失業;

  彷彿想起了開始學習編程的我,打開了一個新世界的大門,所有的一切對我來說都是新奇的,我可以通過不斷的學習掌握一個個知識點,感覺對java所有的東西都很有興趣,沉迷於java不可自拔,這也是喜歡編程的人的共性吧!

  我比較喜歡Linux 的創始人 Linus Torvalds 在 2000-08-25 給linux-kernel 郵件列表的一封郵件提到的一句話“Talk is cheap, show me the code”,簡單翻譯就是:少bb,代碼給我瞅瞅!

  仔細瞭解任何一門語言的會發現很多東西很巧妙,宛若天成,這背後是由不知道多少大佬不斷的進行完善。

  由於我是自學的java,很單純的就是因爲興趣,在學習中途也走了不少彎路,其實也是在不斷的完善自己的知識體系,從最開始接觸java從java的起源開始,到現在也能憑着寫代碼喫飯了,哈哈哈,功夫不負有心人吧!

  畢竟,興趣驅動學習!

  不斷的學習,終有一天將javase,ssh,ssm,spring源碼,springcloud,double,redis等等知識點學習過了一遍,這個時候你會覺得這他喵的學的東西真的多,有哪個語言需要啃這麼多東西纔是入門的?還記得ssm框架我學了兩三天(主要是有配置文件和註解兩種方式,就跟學6個框架一樣),然後搭環境用了兩三天......

  等到入門了之後你就會發現這些框架纔是邁出第一步,接下來就是了解原理了,例如jdk中常用數據結構的原理,然後spring,springboot等常用開源框架源碼以及原理,這些瞭解之後,你會發現接下來你需要了解數據結構和算法了(非科班出身這塊是很薄弱的),這也是走向中級程序員的必經之路,這些東西學完了之後然後就是jvm了,其中各種分區,垃圾收集機制,class結構以及文件解析方式以及各種調優(從來沒調過,但是出去面試經常被問,你可以沒有調過,但是你必須要會調,還要把怎麼操作一步一步說清楚,裝作你很拿手的樣子\(@ ̄∇ ̄@)/)

  ok,到了這裏java基礎知識算是告了一段落,你以爲結束了嗎?並沒有,上面那些只是讓能搭建出一個基本的分佈式項目,但是性能方面卻是很拉誇;

  然後推出面試必問三大點:關係型數據庫,緩存,消息隊列

  關係型數據庫的話,一般就是用mysql和oracle,sql寫法差不多,就是一些函數名稱不一樣;面試的時候有筆試題就看看你sql寫的溜不溜(其實說實話,工作上sql寫的溜比你瞭解什麼什麼原理強多了),然後就是問你sql怎麼優化呀,怎麼用索引,索引原理啊,怎麼排查一個sql執行的慢,更高級的一點的就是怎麼讀寫分離,分庫分表...

  緩存的話一般就是redis,噁心點的問題就是redis和memcache的區別,這個就是技術選型的問題了,然後還有redis數據結構,持久化原理,分佈式鎖,主從複製,哨兵模式,集羣模式,雖然不會問你詳細的怎麼搭建,但是會問你緩存在你項目中使用的場景,出了問題你是怎麼排查,怎麼處理

  消息隊列的話,一般就是rabbitmq,rocketmq和kafka,就我感覺入門就先學習rabbitmq,然後再去深入學習kafka!因爲學kafka,又會扯到zookeeper,因爲kafka是基於zookeeper搭建的,zookeeper又能扯出來一大堆東西。。。面試一問到消息隊列,首先就是問你之前項目的應用場景,其中實現原理,出現了一些問題你是怎麼排查的,怎麼處理的

  你以爲這些就學完了麼,殊不知還有一大堆東西

  比如:非關係型數據庫mongodb,一般的使用場景,和關係型數據庫mysql什麼區別啊,然後各種知識點吧啦吧啦一大堆;

  又比如站內搜索引擎solr和elasticsearch(簡稱es),學其中一個就好了,這個就是做站內搜索的,例如淘寶網站那個站內搜索和百度的那個搜索區別就很大好吧,我們可以把es看做一個數據庫吧,將es和mysql中一些表的數據進行同步,然後在網站中用es就可以達到搜索的功能了;

  可能那有些人要問了,mysql不是可以搜嗎?爲什麼還要使用es啊?坑爹啊!舉個例子,你的系統中需要有個搜索物品的功能,用戶輸入了“夏天鞋子 男性”,你肯定希望用戶既能查詢出來“夏天鞋子 男性”相關的數據,也能查詢出類似“夏天鞋子”“鞋子”“夏天”這種相關的數據嘛,這樣給用戶選擇的可能性就高多了,如果用mysql實現這種功能很麻煩,而且效率很辣雞,使用es就是比較好的選擇了。哎,不說es了,搜索這塊的東西太龐大了,還能扯出來elk之類的很多東西

  還比如權限框架,比如springsecurity與shiro,兩個框架功能差不多,建議學其中一個,但是學起來都不容易啊

  又繼續比如分佈式事務框架,例如seata,其實簡單來說就是你在一個微服務A中首先調用B服務的service1,然後調用C服務中的service2,由於B和C不在同一臺機器上,而且數據庫用的也不是同一個,怎麼保證A中調用B和C的事務性呢?所以就有了分佈式事務了;

  學到這裏,跟框架相關的東西就已經是完成了,而且你已經可以寫完一個分佈式項目了,項目中是一個個微服務組成,各個微服務之間還有各種緩存,消息等中間件,通過一個網關對外提供一個統一的接口,權限框架控制每個用戶訪問的路徑;

  但是問題來了,項目做好了是要部署到服務器的,你以爲是要運維做嗎?當然是要你做啦!所以你還要學習linux系統的常用命令,如果想精通linux的話還需要很長時間的學習和使用,然後由於微服務太多,不可能一個一個服務的部署,所以你要需要學習docker進行微服務的打包和部署,當微服務數量太多的時候docker管理也不容易,於是你還要會k8s,又是一個漫長學習的過程。

  經歷了上面說的這麼一大堆的的東西,才只能說明你起步了,對java開發有了一個基礎的認識,怎麼說呢?停留在了大概知道有這麼個東西,基本什麼用處,但是過不了多久就會忘記,因爲很多東西實際項目中根本用不到好吧.....那就需要實際項目和熬夜加班的沉澱,才能讓你對其中某些框架知識有深刻的印象!

  說了老半天,這還只是後端的東西,如果還有精力啃啃前端,那又是一個全新的世界等着你探索,哈哈哈哈!

  前端的話就沒有這麼多技術了,感覺比較純粹吧,最開始入門的html,css,js學完了之後,就是各種庫了,jquery,bootstrap以及各種ui組件庫,然後就是vue,react,angular三大組件化開發的框架了,其實只要精通vue和react會了就好了,因爲這兩個框架是必學的嘛!不過最好主攻一個框架,另外一個框架平常瞭解吧!前端還包括安卓開發,ios開發以及混合模式開始app,這就已經是另外一個層面了.....

  別看我三兩句話就把前端說完了,但是組件化開發中的各個插件也是很多很多的,需要學習的東西真的很多;

  說了這麼多,再回頭想想程序員是喫青春飯這句話真的沒錯,因爲技術的發展太快了,就比如目前時間是2021.04.17,常用的jdk大多都是jdk7和jdk8的,而JDK16已於北美時間2021年3月16日發佈了,尼瑪拼了命也追不上這版本的更新速度啊!還有我們知道springcloud全家桶中很多組件其實直接拿的netflix公司開發的組件用的,但是netflix公司早就宣佈很多組件暫時停止維護了,在這麼發展迅速的時代,也許過幾年就會有新的框架代替如今的框架了(其實現在已經有了開源的springcloud alibaba可以代替之前的springcloud了),畢竟發展的速度太快了,都快學不動了;

  真的是學的東西越多,就會發現需要學習的東西越多,就越不敢談“精通”二字,這兩個字太沉重了,只敢說熟悉,瞭解,哈哈哈

  java真正可怕的是既需要足夠的廣度,還要足夠的深度,同時還需要有足夠的業務來支持,畢竟沒有經過業務的考驗終究“|紙上得來終覺淺”,但是很多業務場景實際中根本碰不到呀,尷尬!

  在日常工作中其實我們大多是去處理各種業務邏輯,就不信晚上九、十點回來了還能繼續學習的,那簡直就是精神太亢奮了,容易掉頭髮,正常的是一到家洗洗睡了,躺着立馬就能睡着,週末纔有時間整理一下最近讓自己進步的東西吧!

  最後說一點,如果剛學java沒多久的人覺得java知識點太多,學了總是忘記,建議最好就是去背誦面試題,想想,被網上廣爲流傳的面試題肯定就是最重要的東西呀!背面試題真的是最快掌握知識點的一個途徑,比你自己總結的筆記不好多了麼,哈哈!

  大家共同進步呀! 不管怎麼樣,每天都要明確自己的目標,不要忘記了當初下定的決心,不要放棄當初定下的理想!

  時刻保持正能量!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章