有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

10 個回答
哎哟JAVA不错哦
2019-03-03

五年經驗不懂jvm,絕對面不上bat,甚至TMD這一類一線互聯網大廠!

三年以上經驗的時候,不管去哪家公司面試,總會問關於jvm的東西,其實現在jvm默認配置都已經很強大了,而且在工作中實在用的很少,但終歸還是要學的,我就來回憶下,到底哪些jvm相關知識容易問到!
有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

1,jvm內存結構(堆棧等各種結構分區)與內存模型(多線程不安全的原因)的區別,具體的含義?

2,有哪些垃圾收集算法?複製算法,標記清除,標記整理等等!

3,新生代,老年代,永久代對象怎麼劃分?什麼時候處於什麼代?什麼時候回收?
有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

4,怎麼手動回收垃圾?1,重寫falinize方法並調用,2,調用system.gc,然後等待jvm回收,也即是說永遠不可能手動回收垃圾!

5,怎麼判斷對象是否能回收?遍歷gc roots不可達的對象,就是可以回收的對象!

引用計數法為什麼不能用來做為可回收對象依據?有些相互引用的對象永遠不會回收!
有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

6,垃圾收集器有哪些?有什麼區別?比較常用的CMS,G1收集器,以最大吞吐量,最小響應時間,儘量少的full gc等因素進行選擇!

7,類加載的執行過程是什麼?雙親委派是啥意思?自行百度。。

8,jvm監控工具?調優工具?調優參數?

基本上掌握這些之後,jvm的相關面試都可以對答如流了,這也是互聯網大廠肯定會問的東西!

誰讓現在的面試箴言就是,我們可以不用,但是你必須要會呢?jvm這也是我經常分享的東西,更多的技術分享,敬請關注。。

尼古拉斯天儿
2019-03-03

看到這個問題,忍不住來湊湊熱鬧。(* ̄︶ ̄)

我轉過頭,輕輕撫摸著案頭的《深入理解Java虛擬機》,嘴角微微上揚——

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

還記得那個夏天,面試官拋出了幾個關於垃圾回收的問題。

我略加思索,腦海中那個熟悉的畫面漸漸清晰——GC同學正在努力的完成著它的工作,忽然它停下手頭的工作,和我對視片刻。。。

我總是習慣性的將Java的內存比作一個巨大的工廠,GC同學就是這個工廠的垃圾回收工,而每一個對象都有條有理的擺放在不同的區域,這都要歸功於GC同學的勤勞能幹。

為了記住這些區域,我還給他們編了一條順口溜:

兩棧(Java虛擬機棧和本地方法棧)一計數(程序計數器),一堆(Java堆)一方法(方法區)

那些日子,我在那個密不透風的出租屋裡,像書蟲一樣蠶食著這本厚厚的《深入理解Java虛擬機》,期待著能夠有朝一日亮瞎別人的雙眼——“天哪,你對JVM的理解真是太到位了!”“天哪,JVM調優你都可以擺平!真有你的!”

思緒回到面試官的問題上,我淡定地回答了關於JVM的一切問題。

思緒再一次回到現在,看了看這個題目,工作了5年對JVM知之甚少?我覺得這沒什麼不正常的。

Java開發領域是非常廣泛的,Java語言的設計者屏蔽了有關底層編譯的相關工作,當然,還有對象的回收等工作。可以負責任地說,如今不太瞭解JVM相關知識的開發者不會低於50%。就算是工作10年的老鳥,可能也未必將JVM說得頭頭是道,更別提上手進行JVM調優。

實際上,JVM相關知識在整個Java學習技術棧中,更像是和數據結構與算法等理論性較強的知識一個等級。平時很少會用到。

然而,如果稍微上進一點的程序員,都不會忽視這一塊的學習

我們應當保持一種寬容進取的態度,主動學習,但也不能嘲笑和批評他人的短板。

因為我個人對JVM也只是停留在書本層面的膚淺理解,所以我也就不過多評價他人的種種了。

希望我的觀點可以幫助到你。


好看嗎?好看就是好文!點個贊吧老鐵!

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

IT人刘俊明
2019-09-27

對於應用級程序員來說,即使從事多年Java開發也不一定會涉及到虛擬機的知識。這主要是由工作性質決定的。所以,有5年工作經驗的程序員,對於java虛擬機機制並不十分了解也是比較正常的情況。

對於應用級程序員來說,Java虛擬機的作用就是一個實現Java功能的“容器”,程序員平時雖然每天都會接觸到虛擬機,但是虛擬機本身對程序員來說是“透明的”。大部分應用級程序員都是在容器之上從事功能性開發,也就是說通過Java API來完成大部分編程任務。簡單的說容器的作用就是“Don't Call me,I'll Call you”,可以理解為“在需要的時候會出現”。

對於研發級程序員來說,掌握Java虛擬機的機制是十分有必要的,因為研發級程序員往往都是以產品為導向,性能是研發級程序員關注的核心問題之一。Java虛擬機是Java實現功能的基礎,提供了Java API的支持。Java虛擬機考慮的核心問題有兩點,一點是功能的實現如何組織(Java字節碼、方法調用原理等),另一點是優化(常量池、棧幀、執行引擎、生命週期管理等)。有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

其實,即使是Java應用級程序員,瞭解Java虛擬機的內部機制還是有一定必要的,因為在編寫代碼的時候可以更好的運用Java虛擬機的機制來提高代碼的執行效率。瞭解Java虛擬機能夠從更高的層次來了解Java語言,對編程語言也會有一個更深層次的認知。

我使用Java的時間比較久,使用Java做過Web開發以及大數據方面的開發工作,我會陸續在頭條上寫一些關於Java方面的文章,感興趣的朋友可以關注我的頭條號,相信一定會有所收穫。

如果有Java方面的問題,也可以諮詢我,謝謝!

会点代码的大叔
2019-11-21

JVM,大部分程序員可能幾乎用不到,但這項技能是面試高級程序員的敲門磚,如果已經有五年的Java的開發經驗,對JVM還不甚瞭解,是可以理解的,因為可能一直關注業務功能開發,不過強烈建議還是補習JVM相關的知識。


積累了一定的工作經驗之後,建議大家不要滿足單純的實現業務需求,要花一些時間關注程序的性能。也就是不僅讓程序“能跑”,還要讓程序跑的快;這也就是我們常說的“調優”;而JVM的調優是程序調優重要的一部分;只有深入學習JVM底層原理,才能做到知其然知其所以然。


有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?


然而很多人程序員都覺得JVM是很高深的知識,我覺得主要是因為很多資料都是講概念,太生澀不好理解,還沒入門就放棄了,要知道每項技術的出現都是有背景的,理論結合著實踐,理解起來應該不會特別困難。


學習虛擬機,建議大概參考這個流程:

  • Java內存模型:運行時候的數據區域,每個區域的作用,在線程的角度看待堆和棧;虛擬機對對象的分配過程,訪問定位;堆參數的設置等等。

  • 垃圾回收相關:概念,GC算法,內存分配及回收策略,內存洩露和內存溢出。

  • JVM類加載相關:Class文件,類加載的過程,類加載器

  • JVM優化:常用的性能指標(響應時間、併發數、吞吐量),常用的優化手段。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?


放對JVM有一定了解了之後,有一些問題再返回來看,就會容易很多,例如:

  • 不創建不必要的對象

  • 接口優於抽象類

  • 局部變量的作用於最小化

  • 使類和成員的可訪問性最小化

  • 字符串連接的性能


另外我也蒐集過和寫過一些Java優化方面的文章,如果大家有需要的話,可以關注我後私信【優化】或【JVM】獲取鏈接。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?


希望我的回答,能夠幫助到你!

我會持續分享Java程序開發、架構設計、職業發展等方面的知識和見解,希望能得到你的關注今日頭條【會點代碼的大叔】,轉載請註明出處。

极客宇文氏
2019-03-14

對於一個5年工作經驗的Java程序員,不懂jvm,也就是傳說中的Java虛擬機,這是非常正常的事情。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

Java這一行學問很多,可以細分非常多的方向,每個人側重都有差異。有的人對數據庫調優非常有造詣,那他可能就沒有過多關注虛擬機。有的人對架構很有想法,那他關注點更多的是結合業務和技術選型,不懂jvm也屬於正常。你能說他們不懂jvm他們技術水平不高嗎,那自然不能下這個結論。

jvm在許多面試時都會問到,或深或淺,甚至現在的校招生都會遇到這類問題。所謂面試造火箭,乾貨擰螺絲,實際上在工作中jvm幾乎是用不到的,即使是高級工程師都很少專研這方面。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

因此不要因為jvm而有過多執念,但是瞭解一點jvm對Java的瞭解會有更加底層的深挖。

我是“極客宇文氏”,關注我更多精彩言論。

老顾聊技术
2019-03-25

  • 這個很正常,因為jvm一般工作用不到,當然你要成為高手,一定要去了解jvm知識,尤其寫底層框架,中間件的,是一定需要了解的。

  • 當然你不要恐慌,知道jvm的技術人員,也就是個皮毛,什麼新生代,老年代等。整體應用絕大數也是不懂的。
  • 在一線大廠面試的時候,肯定會問到jvm;但真正工作就會少點,除了你分配到架構部等寫底層組件的部門。
  • 別人說的好:面試的時候要你造火車,工作的時候扭螺絲。

JDIt
2019-04-01

怎麼說那,java只是一個工具,jvm是核心。你可以不能憑腦力記住所有的配置項,但是需要明白他的架構,運作原理,大體有那些配置,有那些問題及大體的處理方案。最後可以憑藉這個知識結構,遇到調優需要去翻閱資料或者筆記。

目前工作不再是單一要求了,可能做一個產品一個開發人員至少需要js,html5,css3,java,mongo,mysql,oracle,redis,python,kafka,activemq,nginx,openresty,lua,c,shell,bat再加上開發框架等等。

現在開發人員要求越來越高,從前端寫到服務器進程,sql優化,表設計,linux或者windows服務器問題處理,服務器端自動化腳本開發和調試,以及高併發處理,都是又開發人員做,做不到就會被釋放。

每日精彩科技
2019-03-05

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

對於這個問題,我認為應該是正常的。人非聖賢,知識無窮無盡,不可能說什麼都會學到,什麼都會掌握。題主有五年的Java經驗,這是一個很大的優勢,學有餘力的情況下掌握JVM一般不會太難,就看你是否有心去學習!

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

下面結合幾個例子談談自己的看法,希望能夠對您有所幫助!

已經工作四到五年的學生相信你在學習的領域有一些想法。到這個時候,你應該在技術上遇到瓶頸。在這個時候,不要急於改進你的技術。是時候改善你的影響力了。您可以嘗試改善一些著名公司的背景。您可以發佈一些文章來影響更多人。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

當然,您也可以去Github創建一個屬於您的開源項目並構建您自己的產品。在技術學習的這個階段,很容易遇到瓶頸,而且往往在一定程度上,你走得更遠,效果真的很小,除非你專注於學術研究。不幸的是,大多數編程猿不能這樣做。這就是科學家所做的。此時,影響力的增強不僅是因為技術瓶頸,還因為影響力可以為您創造更多機會。

因此,在這個階段,您最大的任務是提高自己的影響力,為10年職業生涯做好準備。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

在這個階段,你可能再次處於艱苦學習的階段......因為你不能只使用它,你需要知道原則,而不是讓自己意識到原則,但基本原則需要知道。

在這個階段,您需要了解jvm的基本結構,垃圾收集機制,常用垃圾收集算法,JVM簡單調優參數;

數據庫也是一項重要任務。您需要了解MySQL事務隔離機制的實現,如何優化sql,Spring MVC進程的原理,事務傳播機制,mybatis進程原理,樂觀鎖和悲觀鎖。您需要學會考慮系統瓶頸,系統容災,單點故障,您需要知道什麼是一致性,上限理論,

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

Paxos算法等等。動物園管理員做了什麼以及它可以解決哪些問題?您必須瞭解SOA體系結構,dubbo,spring boot spring cloud並嘗試使用這些高級框架。谷歌,開源社區將取代百度作為解決問題的主要動力和方向。您將感受到全景。您會覺得構建數百萬個併發系統並不困難。後續問題很難解決。記錄將處理操作和維護問題。關於操作和維護,我無法給出太多建議。您可以瞭解docker微服務和docker的未來趨勢,例如zabbix。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

此時,您可能不必擔心自己的工作。對擁有三到五年經驗的高級程序員總是有強烈的需求。請注意,我說的是三到五年的實踐經驗,而不是三年或五年的經驗。這時,如果你去北方到廣州,你的工資可能接近20或更高。一些二線城市將在15至20左右。你不必過多擔心錢。但請不要太舒服,因為以上只是第一眼。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

在這一點上,很難提高薪水,但大多數程序員都無法到達那裡......因為他們眼中只有工資並且對這個程序沒有一定的喜愛,所以很難堅持這一步。

上面提到的高級階段只是建立一個相對大而穩定的系統所必需的。仍然存在許多問題,例如上面提到的日誌處理。如何使用巨大的日誌來產生商業價值?今天的淘寶京東系統,如果你買一個鼠標,它可以推薦你一個鍵盤和其他外圍設備,所以為什麼不推薦你內衣?要了解這一點,您需要了解更多信息。大數據即將到來

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

Flume日誌處理Hadoop hive Presto HDFS風暴火花大數據流計算,這些足以讓你喝一壺,學習這個,不需要別人給你點什麼,你可以達到這個階段本身已經證明了它的學習和技術能力。在這個階段,你可能是一個跨語言的程序員,因為處理數據不擅長java,你必須使用java ...然後我只能說生命太短暫不能折磨我自己。你應該學習Python Scala,也許還有一些R語言。在這個時候,你會發現語言實際上只是一種工具。學習一門語言非常快。來回就是那些東西。思想是最重要的。

有5年Java經驗的人,對於JVM知之甚少,這正常嗎?你如何評價?

在這個階段,你會覺得技術就是這樣,媽媽的學習是不夠的,學習學習是跟隨臀部背後的外國人與框架............... ...........................祝賀你的無聊和寂寞,這將帶你進入下一階段。

以上便是我的一些見解,希望能夠對您有所幫助!如果您喜歡我的回答,敬請關注我的頭條號“每日精彩科技”!”

感謝花時間閱讀,每天回答一個優質的問題,如果有幫助請幫忙點個贊!

更多精彩內容,敬請關注頭條號“每日精彩科技”,和我一起感受科技的魅力!

alex136442470
2019-03-29

太不正常了,正常的三年就應該精通虛擬機原理,熟讀Java虛擬機源碼,並開始動手寫自己的Java虛擬機了

nutman
2019-12-29

你用了一輩子的電腦,你以為你就能做一臺電腦出來了?

相關推薦

推薦中...