-
1 # IT人劉俊明
-
2 # 此生唯一
JAVA之父詹姆斯.高斯林開發了JAVA語言之後,有一次看到了《重構—改善既有程式碼的設計》一書之後,說了一句話:“如果我早看到這本書,JAVA就不會是這個樣子了”!
估計連JAVA之父也不敢說全部吃透了JAVA生態了,JAVA涉及到的東西實在是太多了,作為一門高階程式語言,JAVA確實很容易用來開發,JAVA封裝了大量的API,基本覆蓋了我們日常開發中的幾乎全部功能,但如果要深入底層,那麼很多人就成為“門外漢”了!
比如我去小公司面試的時候,常常遇到問題是HashMap怎麼用?concurrentHashmap怎麼用?而在大公司這樣的問題往往變成了concurrentHashMap底層是怎麼結構?為什麼執行緒安全?為什麼比起synchronizeMap效能好?
jvm相關的東西更是難倒大多“英雄好漢”,JAVA記憶體模型,記憶體結構,類載入機制,類載入器,gc的演算法,gc收集器有哪幾種?什麼時候該用哪一種?jvm怎麼調優?
這樣的問題面試基本撂倒一半人!
這只是冰山一角,還有諸如反射,動態代理,三種io(由此引申的netty,nginx等),多執行緒方面的技術(執行緒池底層,生產者消費者模型,執行緒安全等等),JAVA每個版本的新特性,更不論JAVA生態中的spring相關框架,搜尋引擎,大資料開發等等每一個知識點都是幾本書才能學完的東西!
一個人的精力實在是有限,如果非要追求對JAVA所有東西精通,終有心力交瘁之時,只要掌握大多數重點即可,我一直在分享JAVA方面比較熱門的技術,有需要的朋友可以去看看,肯定您能有所收穫!
-
3 # 極客宇文氏
敢說自己精通Java的有兩種人,一種是牛人,另一種是愛吹牛的人。
可能在Java領域工作了三五年的人都沒有資格在簡歷上寫下精通Java兩個字,同樣的,寫精通c++或者其他的也不多。
因為精通一門程式語言不僅僅是對語法瞭如指掌,還要深挖和拓寬。
難點一,拓寬Java:Java作為橫行幾十年的語言,而且一直處於開源的狀態,生態圈幾乎是程式語言裡最為龐大的。無論是大資料還是中介軟體,都可以用Java進行開發。而與Java相關的技術能精通一門就已經很厲害,最重要的是Java方面的很多技術都是要相輔相成。
比如開發一個web系統,Java相關的spring家族框架,Java相關的MySQL資料庫,都是最基本的,還有諸如快取Redis,負載均衡Nginx等等。
玩Java,其生態圈就足夠你玩一輩子不重樣。
難點二,深挖Java:Java相關技術已經琳琅滿目,更可怕的是去深挖其中某個技術。比Java最常用框架spring,你如果只是單純的會用,頂多在簡歷上寫熟練,而如果你想寫精通spring,那你沒把原始碼看個三五遍是沒有這種資本的。而很多人喜歡提的Java虛擬機器更是接近作業系統的東西,研究起來枯燥而難懂。
更重要的是,拋開Java相關技術,Java自己的語法特性比如多執行緒,網路程式設計,以及反射就足以讓人花心思研究。
不過歸根結底,深挖Java底層的東西,必須精通資料結構,設計模式,最重要的還是Java自己的語法特性。
-
4 # 專注java開發
敢說.完全吃透JAVA的生態有兩種人,一種吹牛逼的,另一種完全不懂JAVA的! 古人云:JAVA難難於上青天!
-
5 # 手機使用者66173947076
學會Java,其他語言都是浮雲,說的就是Java不僅是面向物件的嚴格的語言,更因為社群和生態的龐大,涉及到幾乎所有的方方面面,所以學好Java,基本上其他語言該涉及的基本都大同小異,只是語法方面的區別了,但是要全部都精通,那基本很難,要刻意去全面學習,是愚蠢的。學習Java最好的姿勢,就是在工作中,碰到問題,然後深挖涉及的內容,力爭在這個點上基本無憂,隨著開發時間的積累,逐步積累了屬於自己的知識庫和經驗庫,對Java的認識也會呈螺旋性逐步提升…
-
6 # 我可愛的小博博
java 很人性化 ,學java 要多思考。而不是一開始就上手寫。學會了 基本的資料型別 基本語法後 ,等到了學繼承 封裝 多型 這些高階特性的時候 一定要多思考 為什麼什麼用這些特性? 結合實際生活思考 。其實這些程式設計思想都是源自生活 最終的目的是讓我們 的程式 更健壯。等你學會了思考 其實java 越學越簡單
-
7 # 蘇北小馬鍋
我目前在美團點評從事Java後臺開發的工作,學習Java有七八年了,從事Java工作兩年。根據我這些年學習、使用Java的經驗,Java這門語言並不難學,有點程式設計基礎的人很容易上手,學習個年把時間甚至就可以勝任Java開發的工作,那能勝任工作是不是就精通Java了,不然,Java博大精深,單單是學透就就很困難。我研究生畢業找工作的時候,學習Java已有五六年,也參與過課題組專案的開發,自認為Java學的挺不錯的動手能力也可以,但是在找工作投簡歷的時候從不敢寫“精通Java”,只敢寫“熟練使用Java”。我們單位從事Java開發的同事小到敲程式碼的碼農大到CTO,沒聽誰說精通Java,那麼精通Java到底有多難呢。要精通Java,個人認為至少且不止要掌握以下技術:
紮實的計算機基礎一般學習計算機專業的同學都會系統的學習過計算機基礎,包括資料結構、計算機網路、資料庫、作業系統。這些知識我很多都是學完就還給老師了,真正的大牛是信手拈來,隨便一個知識點都能講明白。
Java知識Java是一門博大精深的程式語言,語法不復雜,可是涉及的知識點卻是非常的多。要把這些知識點都理解透,並且會應用。不然,別人問起某一個知識點,你如果講不通,豈不是很丟人,更何談精通呢?
Java web 技術目前大公司使用Java,多以開發web後臺為主,所以Java web開發的各種框架都要熟練使用,Java web開發使用到的各種庫也要拿來就能用。另網路絡協議、網路安全的東西也要熟悉。
Java併發現在的開發都面向大資料、高併發的應用場景,Java併發程式設計是必會且必熟悉的內容,並且要懂Java併發底層的實現,併發程式設計是一門藝術,真正掌握好這門藝術並不容易。
Java伺服器伺服器的部署,伺服器叢集開發,這些知識也是必知必會的技能。在參加工作之前我這方面的知識就比較欠缺,參加工作之後一頓惡補。
Java虛擬機器除了學習Java虛擬機器的知識之外,更要理解Java虛擬機器底層的架構、工作原理、垃圾回收機制、記憶體、堆疊等,更重要的是Java虛擬機器調優。
很多很多其它因為知識點太多我不再一一羅列,要會一門指令碼語言、熟練使用Linux系統、熟練使用Linux命令、熟練操作各種資料庫、資料庫快取、資料庫索引、大資料處理、各種演算法、分散式、負載均衡、訊息佇列、kafka、Hadoop、Hbase、機器學習等等還有很多我不知道的知識。
我個人認為“精通”並沒有必要,什麼知識都學了,啥都懂,看上去很厲害其實可能就是一個孔乙己。我們開發人員追求的應該是不斷提高自己創新能力、解決問題的能力,關鍵時候解決問題用我必行,而不是一昧的追求學富五車。
-
8 # AliceBillCindy6688
難點一:規範多而繁雜,並且有的應用不是太好,如JavaEE中就有很多的廢棄規範,有javaSE (包含語言規範、jvm規範), JavaEE(30多個), JavaME(不是太清楚)
難點二:各類框架豐富,層出不窮,但同樣帶來了選擇困難。而且有很多框架,也是有很多的坑,一方面帶來了開發的便利,另一方面也是加大了學習的成本。例如:spring框架,原本是用來改進JavaEE中的EJB規範,使得用POJO就能達到企業級開發的效果,號稱是輕量級開發。但是,它最大的問題在於spring本身並不是規範的標準實現,也不是一套標準的規範框架,所以,每個人的玩法都不一樣。造成對同一個問題的各種解法,沒有標準,不統一,進而增加了學習和溝通的成本
難點三:隨著網路、業務的需求發展和變化,架構也在不斷演化,對JDK的要求也越來越高,JDK不斷變化升級,各類新的框架不斷推出,需要付出更多的時間來適應變化。從一次開始的分散式,SOA,微服務,serviceMesh,再到serverless……
難點四:最關鍵的是,人的時間精力是有限的。每一個框架、技術深耕底層,都不是說一朝一夕就能搞定的。況且,它在不斷的迭代變化,推陳出新。
-
9 # 動力節點Java培訓
確實,之所以大家總在說Java行業飽和了,也都是這個原因,初級水平程式設計師過多,高階及以上的程式設計師比較缺失!總在說提升核心,提高核心競爭力和學習能力才是在職場上立足的王道。所以學習過程中選擇適合自己的培訓機構非常重要!
回覆列表
作為一名從業多年的程式設計師,同時也出版過Java程式設計書籍,所以我來回答一下這個問題。
Java語言隨著網際網路的發展,其自身的生態體系不斷得到完善,應用邊界也不斷得到拓展,目前在Web開發、大資料開發、移動終端開發等領域均有廣泛的應用,可以說不同的應用方向也需要具備不同的知識結構,所以說精通Java還是具有一定難度的。
Java語言自身的構成分為兩個大的部分,一大部分為Java虛擬機器,另一部分為Java語言自身的語法。按照Java語法要求編寫的程式需要透過Java虛擬機器完成載入、校驗、編譯和執行,而Java虛擬機器的作用就相當於Java的執行環境(容器),它自身需要完成大量的操作,包括程式碼安全性、垃圾處理、事件處理、資源管理等內容。所以精通Java開發一方面需要清晰Java語法,另一方面需要了解Java虛擬機器的執行機制。
對於初學者來說,學習Java程式設計都是從學習Java語法開始的,然後學習Java的Web開發、資料庫開發、分散式開發等內容,這個過程通常是大部分學習者的學習路線,難點在於Java面向物件概念的理解,也就是理解各種“抽象”。這部分雖然具備一定的難度,但是大部分學習者是能夠學得會的,區別往往在學習時間上。
對於從事平臺開發的研發級程式設計師來說,還需要系統的學習Java虛擬機器的內部機制,透過從深層次瞭解Java虛擬機器的構成從而輔助平臺類產品的研發,重點在於效能的提高。通常情況下需要了解Java虛擬機器的體系結構、核心演算法等內容,這部分內容的難度還是比較大的。當然,要想系統瞭解Java虛擬機器的整體結構,通常還需要閱讀大量的原始碼。