簡歷要求中“ 扎實的JAVA基礎”的學習方法

最近在頭條看到一篇關于Java基礎學習的文章,感覺寫的很不錯,分享一下,希望對大家有幫助

什么東西算作Java基礎?學到什么程度才算扎實?

這些問題的答案,LZ已經用文言文告訴你了,咳咳,答案就是玩好JDK就可以了。

不過JDK這東西包含的東西實在太多,群里的猿友還是拎不清到底應該學哪個,所以,LZ就專門寫一篇文章,來講一講JDK應該怎么玩。

或許有的猿友會問,“林蕭是誰?”

恩,問得好!林蕭就是某程序員小說的主角啦,傳言無所不知,看看你就知道咯。

玩好JDK

在詳細講解JDK之前,LZ首先要強調下,本文的內容,都是LZ個人的主觀判斷。因此,各位猿友務必結合自己的判斷之后,再決定是否要學習,以及學習到什么程度。

此外,本文只是告訴你學什么,學到什么程度,本文不會包含太多具體的技術細節講解。

JDK其實就是Java SE Development Kit的縮寫,要玩好這東西可不簡單。JDK主要包含了三部分,第一部分就是Java運行時環境,這其實就是JVM。此外,第二部分就是Java的基礎類庫,這個類庫的數量還是非常可觀的。最后,第三部分就是Java的開發工具,它們都是輔助你更好的使用Java的利器。

那么很顯然,要玩好JDK,就是要玩好JDK的這三部分。接下來,咱們就逐個的來說一下,每一個部分要學什么,學到什么程度。

第一部分:Java運行時環境

這一部分其實就是常說的jre,而它的核心其實就一個東西,就是JVM。

JVM這個東西,它的重要性LZ不想再強調了,在之前的那篇《回答阿里社招面試如何準備,順便談談對于Java程序猿學習當中各個階段的建議》中,LZ就說過,JVM那本書甚至比《Thinking in java》還重要,這已經足見LZ多么看重JVM了。

當然了,只是LZ看重,當然沒什么卵用,但只要Java稍微高級一點點的職位,這部分基本上都是面試必問內容,這更加說明了JVM的重要性。

所以,對于JVM,沒什么可說的,就是往死里學,往死里研究,能有多深就多深!

第二部分:Java的基礎類庫

Java的基礎類庫從你剛開始學Java就開始接觸了,但是,直到你結束整個Java生涯,你都不一定能把所有的類都見一遍。

這說明了什么?是不是說明了Java基礎類庫的龐大?

錯!大錯特錯!這其實真正說明的是,有很多類你完全不必要care它們,因為它們從你接觸Java到放棄,都不一定能接觸到。

所以,搞清楚哪些類重要,哪些類不重要,就非常有必要了。這可以讓你以最短的時間,做最有價值的事。

首先,我們來Java基礎類庫的包都有哪些,為了使得本文更有代表性,我們取JDK6的包列表。

java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.im.spi java.awt.image java.awt.image.renderable java.awt.print java.beans java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref java.lang.reflect java.math java.net java.nio java.nio.channels java.nio.channels.spi java.nio.charset java.nio.charset.spi java.rmi java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java.text.spi java.util java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks java.util.jar java.util.logging java.util.prefs java.util.regex java.util.spi java.util.zip javax.accessibility javax.activation javax.activity javax.annotation javax.annotation.processing javax.crypto javax.crypto.interfaces javax.crypto.spec javax.imageio javax.imageio.event javax.imageio.metadata javax.imageio.plugins.bmp javax.imageio.plugins.jpeg javax.imageio.spi javax.imageio.stream javax.jws javax.jws.soap javax.lang.model javax.lang.model.element javax.lang.model.type javax.lang.model.util javax.management javax.management.loading javax.management.modelmbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote javax.management.remote.rmi javax.management.timer javax.naming javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax.rmi javax.rmi.CORBA javax.rmi.ssl javax.script javax.security.auth javax.security.auth.callback javax.security.auth.kerberos javax.security.auth.login javax.security.auth.spi javax.security.auth.x500 javax.security.cert javax.security.sasl javax.sound.midi javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi javax.sql javax.sql.rowset javax.sql.rowset.serial javax.sql.rowset.spi javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.plaf.synth javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo javax.tools javax.transaction javax.transaction.xa javax.xml javax.xml.bind javax.xml.bind.annotation javax.xml.bind.annotation.adapters javax.xml.bind.attachment javax.xml.bind.helpers javax.xml.bind.util javax.xml.crypto javax.xml.crypto.dom javax.xml.crypto.dsig javax.xml.crypto.dsig.dom javax.xml.crypto.dsig.keyinfo javax.xml.crypto.dsig.spec javax.xml.datatype javax.xml.namespace javax.xml.parsers javax.xml.soap javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stax javax.xml.transform.stream javax.xml.validation javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.xml.ws.wsaddressing javax.xml.xpath org.ietf.jgss org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextExtPackage org.omg.CosNaming.NamingContextPackage org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage org.omg.DynamicAny.DynAnyPackage org.omg.IOP org.omg.IOP.CodecFactoryPackage org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage org.omg.PortableServer.POAPackage org.omg.PortableServer.portable org.omg.PortableServer.ServantLocatorPackage org.omg.SendingContext org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax org.xml.sax.ext org.xml.sax.helpers

View Code

怎么樣?是不是被嚇到了?這么多包,而且還這么多陌生的包名,有的連見都沒見過,這特么怎么玩?

不要著急,LZ先帶你把這些包給分下級別,LZ將這些包一共分為四個級別。

第一級別:精讀源碼

該級別包含的包如下:

java.io java.lang java.util

View Code

精讀源碼,這是要求最高的級別。但是,要求你精讀源碼并不意味著,這些類就是最重要的。而是因為,LZ覺得這些類比較常用,而且比較簡單,看看它們的源碼有助于鍛煉你看源碼的感覺,也了解一下大神們寫代碼的風格。

看這些源碼的目的,更多是為了增加你的閱讀代碼能力。而且,LZ這里必須要強調一下,像Exception和Error這一類的,就不用讀源碼了,親。

其實上面三個包都有一個共同點,那就是這三個包,基本上都是你最常用的了。lang包不用說了,你隨便寫點啥都得用到,io包和util包也是你平時讀寫文件和使用數據結構必不可少的。

看源碼從這些常用的包下手找手感,LZ個人覺得再合適不過。

第二級別:深刻理解

該級別包含的包如下:

java.lang.reflect java.net javax.net.* java.nio.* java.util.concurrent.*

View Code

深刻理解,這個看似比精讀源碼要求低的級別,其實恰恰是最重要的。這個級別要求的類,全都是一些進階到高級所必須了解的。

當然了,這里要強調一點的是,LZ說這些類要深刻理解,而沒說要看它們源碼,并不是說這些類的源碼不能看,或者看了沒用。而是這些類的源碼往往非常復雜,要了解清楚細節花費的時間是非常多的,因此,花費巨量的時間去研究這么復雜的代碼其實沒必要的。

不過,如果你在使用這些類的過程中,遇到了問題,這個時候如果看它們源碼可以解決的話,那就不要再矜持了,果斷看看源碼解決你的問題吧,這是最適合的看源碼的契機了。

小小的透露一下,LZ看過的JDK源碼,基本上全是這么看過來的。遇到了問題不要百度和谷歌,看源碼能解決你90%的問題。

此外,看到這四個包的名字,不難看出它們各自代表了什么。reflect代表了反射,net代表了網絡IO,nio代表了非阻塞io,concurrent代表了并發。

這四個家伙可以說每一個都夠面試官問上半天的,而且,這四個包的內容,如果你要深刻理解的話,其實還牽扯了很多其它的知識。

舉個例子,反射你要了解清楚的話,你是不是要搞明白JVM的類加載機制?網絡IO要搞清楚的話,你是不是要清楚TCP/IP和HTTP、HTTPS?包括并發包,如果你要搞清楚的話,是不是要了解并發的相關知識?

因此,這四個包要徹底搞清楚,還是需要花費一定時間和精力的。

但是,請相信LZ,這絕對是值得的,甚至可以說,這四個包用的夠不夠叼,基本決定了一個Java程序員所處的檔次。

第三級別:會用即可

該級別包含的包如下:

java.lang.annotation javax.annotation.* java.lang.ref java.math java.rmi.* javax.rmi.* java.security.* javax.security.* java.sql javax.sql.* javax.transaction.* java.text javax.xml.* org.w3c.dom.* org.xml.sax.* javax.crypto.* javax.imageio.* javax.jws.* java.util.jar java.util.logging java.util.prefs java.util.regex java.util.zip

View Code

會用即可,這個級別的要求很顯然了,就是會用就可以了。這些包大部分都是在特定的情況下會用到,但卻不會時刻用到。

就像sql包和transaction包,就是操作數據庫時用到的。而xml、dom和sax這些,都是操作xml時用到的。其它的包也都是類似的,有使用注解時用的,有遠程方法調用時用的,也有涉及到加密時用到的等等。

這些包在面試時一般不會問到,所以它們的重要性自然要低很多,而且也不太需要刻意的去學,用到了研究一下,會用即可。

第四級別:請無視它

該級別包含了所有以上沒有提到的包。

這個級別就更不用解釋了,到現在還沒提到的包,基本上可以忽略,因為你基本上不太可能用到它們,比如swing、awt這些玩意兒。

什么?你說你經常用它們?

如果真的是這樣的話,那么LZ只能遺憾的告訴你,趕緊跳槽吧,你待在這公司沒啥前途的,0-0。

第三部分:Java的開發工具

這些開發工具主要就是輔助你開發的了,javac應該是最常用的一個了,雖然你幾乎不用手動執行它。

此外,其實還有一些比較實用的工具,可以幫助你排查問題。而且有的面試官,也會問你這類問題,比如問你平時都用什么工具排查問題。

LZ覺得比較實用的幾個工具主要有jmap、jconsole、jstack、jvisualvm,至于這幾個工具有什么作用,LZ這里就不提了,如果你要了解這些命令的詳細內容,可以去谷歌或者官網上找,還是非常好找的。

當然,如果你有興趣的話,也可以自己去JDK的bin目錄下找找,看有沒有什么更好玩的工具。

小結

好了,到這里基本上就把“玩好JDK”這件事說完了。

總的來說,第一級別和第二級別是最重要的。

更簡單的說,可以把第一級別的那些包稱作基礎,第二級別的那些包稱為進階。至于第三級別和第四級別的那些包,就沒什么可說的了。

當然了,最重要的還是那萬年不變的JVM,請記住了,JVM才是你Java根基的根本,就是再牛逼的類,沒了JVM它也就是一個無用的class文件而已。

如果你想擁有扎實的Java基礎,那就抓緊玩好JDK吧。玩好JDK以后,不要忘了學個一技之長,就可以來LZ的公司面試咯。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++11 tuple的使用

多少分轉載于:https://www.cnblogs.com/DswCnblog/p/6524832.html

c語言程序設計貪吃蛇需求分析,C語言編程新手入門基礎進階學習!貪吃蛇小游戲演示和說明...

C語言是面向過程的,而C++是面向對象的設計貪吃蛇游戲的主要目的是讓大家夯實C語言基礎,訓練編程思維,培養解決問題的思路,領略多姿多彩的C語言。游戲開始后,會在中間位置出現一條只有三個節點的…

解決bash: mysql: command not found 的方法【linux mysql命令 】

linux下,在mysql正常運行的情況下,輸入mysql提示: mysql command not found 遇上-bash: mysql: command not found的情況別著急,這個是因為/usr/local/bin目錄下缺失mysql導致,只需要以下方法即可以解決: …

堆和棧的區別(經典干貨)

一、預備知識—程序的內存分配 一個由C/C編譯的程序占用的內存分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其 操作方式類似于 數據結構 中的棧。 2、堆區(he…

Strus2中關于ValueStack詳解

什么是ValueStack 它是一個接口com.opensymphony.xwork2.util.ValueStack。我們使用它是將其做為一個容器,用于攜帶action數據到頁面。在頁面上通過ognl表達式獲取數據。 valueStack主要是將action數據攜帶到頁面上,通過ognl獲取數據 1.ValueStack有一個…

Airbnb React/JSX 編碼規范

Airbnb React/JSX 編碼規范算是最合理的React/JSX編碼規范之一了內容目錄基本規范Class vs React.createClass vs stateless命名聲明模塊代碼對齊單引號還是雙引號空格屬性Refs引用括號標簽函數/方法模塊生命周期isMountedBasic Rules 基本規范每個文件只寫一個模塊.但是多個無…

Mysql數據庫使用總結

mysql數據庫使用總結 本文主要記錄一些mysql日常使用的命令,供以后查詢。 1.更改root密碼 mysqladmin -uroot password yourpassword 2.遠程登陸mysql服務器 mysql -uroot -p -h192.168.137.10 -P3306 3.查詢數據庫 show databases; 4.進入某個數據庫 use databa…

c語言遞歸漢諾塔次數,漢諾塔問題(C語言經典遞歸問題(一))

把A桿上的金盤全部移到C桿上,并仍保持原有順序疊好。操作規則:每次只能移動一個盤子,并且在移動過程中三根桿上都始終保持大盤在下,小盤在上,操作過程中盤子可以置于A、B、C任一桿上。思路:圖解&#xff1a…

Eclipes導入的項目中的中文都是亂碼的解決辦法

把項目導入Eclipse時,里邊的中文全是亂碼,試了很多方法,最終總結一下! eclipse之所以會出現亂碼問題是因為eclipse編輯器選擇的編碼規則是可變的。一般默認都是UTF-8或者GBK,當從外部導入的一個工程時,如果…

理解瀏覽器是如何加載及渲染網頁的

先上圖,我們再慢慢解釋,這圖就是瀏覽器加載網頁的一個過程 當我們在瀏覽器輸入一個地址(比如:http://toadw.cn),那么點擊回車后,瀏覽器是如何加載網頁的呢? 加載過程 一開始瀏覽器是不知道你輸入的http://t…

CentOS下的Mysql的安裝和使用

1.使用安裝命令 :yum -y install mysql mysql-server mysql-devel 安裝完成卻發現Myserver安裝缺失,在網上找原因,原來是因為CentOS 7上把MySQL從默認軟件列表中移除了,用MariaDB來代替,所以這導致我們必須要去官網上…

NOIP模擬題——神秘大門

【題目描述】最近小K大牛經過調查發現,在WZland的最南方——WZ Antarctica 出現了奇怪的磁場反應。為了弄清楚這一現象,小K 大牛親自出馬,來到了WZ Antarctica。小K大牛發現WZ Antarctica 出現了一道神秘的大門。人總有好奇心,小K…

大學c語言程序設計大賽,關于舉辦寧夏大學第二屆C語言程序設計大賽的通知

各學院:根據學校《關于進一步加強基礎課教學改革的意見》(寧大校發〔2008〕178號)、《關于加強學生創新精神和創新能力培養的實施意見》(寧大校發〔2008〕75號)的有關文件精神,經研究決定舉辦寧夏大學第二屆C語言程序設計大賽,從中選拔出優秀…

Android中創建自己的對話框

Activities提供了一種方便管理的創建、保存、回復的對話框機制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用這些方法的話,Activity將通過getOwnerActivity()方法返回該Act…

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11

搭建Django2.0Python3MySQL5時同步數據庫時報錯: django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None 解決辦法: 找到Python安裝路勁下的Python36-32\Lib\site-packages\django\db\backend…

一件很好笑的事情

我是一個比較習慣努力學習的人, 我也會去學習各種可能與我有交集的知識, 就在這幾天,我看到以前的一個android網絡培訓學校開辦了C/C的培訓,這是挺好的事, 但是看他們的文件,我就奇怪了。 這份文件&#xf…

c語言實現循環鏈表,c語言實現循環鏈表的基本操作

循環鏈表和單鏈表其實區別不大,差別僅在于算法中的循環條件不是p或者p->next,而是是否等于頭指針。下面這個例子簡單的實現了循環鏈表的基本操作,其中插入和刪除只是完成了主要的部分,沒有判斷。#include#includestruct Data{char name;int age;};struct CirList{Data *data…

關于Eclipes的Logcat無法打印消息的解決辦法

轉自:http://blog.csdn.net/harry211/article/details/8453532 調試程序需要打印一些消息出來,logcat不好用的話就很麻煩了。這個問題折騰了好久,為啥就是不出來呢? 上網找了很多解決辦法: 重啟eclipse 重啟adb 重啟…

17:文字排版

17:文字排版 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述給一段英文短文,單詞之間以空格分隔(每個單詞包括其前后緊鄰的標點符號)。請將短文重新排版,要求如下: 每行不超過80個字符;每個單詞…

解決AttributeError: 'str' object has no attribute 'decode'報錯問題

順著報錯文件點進去,找到query query.decode(errors‘replace’) 將decode修改為encode即可