1. 程式人生 > >在校生如何面向面試地學習Java

在校生如何面向面試地學習Java

    最近我在部落格園裡,看到不少在校的同學在學java,而且,在我最近舉辦的一次直播活動中,也有不少在校生同學來提問,java該怎麼學。

    對於那些已經工作的同學,哪怕才工作不久,畢竟也能從專案實踐裡總結和探索java的學習途徑和相關方法。但在校生同學由於沒機會接觸實際專案,在學習內容、進階途徑和學成標準這些方面都是兩眼一抹黑,而大學裡的內容可能偏重於理論,講述的技術往往也和軟體公司裡常用的技術不匹配。

    這就導致了很多上心的在校生,雖然很努力,但到畢業時,才發現自己起早貪黑學成的技能並不能幫他們找到工作。在本文裡,就將結合我面試實習生和畢業生的標準,專門給在校生這個群體一些學習Java方面的建議。

1 明確目標,先說下公司面試應屆生的標準

    我最近可能都在大公司,到畢業季,會到一些學校去校招,校招的標準描述起來很簡單:Java方面能幹活,或者能經短期幫帶後能幹活,具體標準如下。

    1 Web框架方面,需要以全棧的形式,瞭解SSM,或Spring Boot或Spring Cloud從前端到後端的基本語法,至少能在專案經理短期幫助下,能照著別人的例子寫程式碼。應屆生候選人只要能講清楚相關框架的語法點和流程即可,最多再附帶說明下mybatis等元件的用法,至於redis,dubbo,根本沒要求。

    2 資料庫方面,能會基本的增刪改查即可,外帶一些基本概念,比如事務怎麼處理,JDBC裡批處理怎麼處理。

    3 Java語法(也就是核心方面),其實如果能講清楚SSM等Web框架技能,這塊只要刷題就能過,比如就問些ArrayList和LinkedList的差別,以及多執行緒等的概念。

    4 人看上去聽話,想法少,學習能力強,責任心強,不是刺頭,這塊其實大多數人都可以達標。

    以上不要求有商業專案經驗,當然如果有,絕對是加分項,而且這還是大公司的面試應屆生的標準。至於一些小公司,或者是一些外包公司,有時候能招到人就阿彌陀佛了(至於有些能力比較強的一本的應屆生願不願意去還難說)。有些在招收應屆生的時候,不少小公司甚至在“專案經驗”方面沒要求,哪怕沒學習專案經驗也不要緊,只會問些網上比較大路的面試題,能說上來即可。

2 面試中大多數應屆生的實際表現

    從面試官角度來看,招收應屆生的標準其實是很低的,對應的,在招初級開發時,多少都需要有商業專案經驗。從這個角度來看,應屆生最好在校期間就找到工作,畢業後兩三個月找不到工作問題還不怎麼大,但如果半年後再找不到工作,那麼到時候被面試的標準就高於“應屆生”的標準了。

    這裡我無意貶低應屆生的水平,畢竟我們都是從這個階段過來的,但從面試情況來看,至少有將近一半的應屆生達不到標準,下面列些具體的表現。

    1 沒有框架開發的經驗,這裡最低要求是能自行搭建個SSM專案,但不少同學根本沒有。

    2 資料庫方面,就知道理論上的增刪改查,甚至不會在MySQL, Oracle和SQL Server平臺上執行過SQL語句。

    3 Java核心方面,掌握了一大堆專案裡一定不會用的,比如Swing之類的介面程式設計技術,但該掌握的多執行緒集合等,一些常用的概念也不清楚。

    論動手能力,有些同學甚至沒有在Eclipse等IDE上執行通Java程式碼,或者出了基本的語法錯誤不知道如何自行解決,至於沒有debug除錯經驗的,就更加見怪不怪了,而在程式碼裡需要加必要的try...catch異常處理語句,這就更加鳳毛麟角了。

    在一些一本大學裡,理論和實際操作能力較差的同學雖然不多,但也有,就更別提其它大學和大專了。我也和一些大學老師打過交道,也看過一些大學裡用的Java和資料庫等程式設計方面的教材,再結合諸多應屆生在面試時的表現,我的感受是,或許大學階段更會培養學生的理論素養,但大學生朋友在讀大學階段,一定要提升實際的程式設計能力,包含但不限於(SSM)框架的程式設計能力,資料庫實際操作能力和Java核心部分程式碼的開發和除錯能力 。 

3 哪些大學裡學到的知識點面試大概率不問(根本不用太費精力看的技術有哪些)

     前幾天我看到篇大學生朋友寫的文章,匹馬行天下之思維決定高度篇——大學再努力,培訓機構做兄弟,或許很多大學生朋友也知道上進,平時也在不斷看各種資料,但可能苦於方法不當,可能有些大學老師也沒真在公司裡幹過,也沒法給出合適的學習建議,所以導致最終畢業找工作時,能力沒達到基本的期望要求。

    也就是說,大學教育和公司面試需求之間存在差距,這就給一些培訓機構帶來了商機。但培訓機構收的錢也不便宜,而培訓班也不是一定能保證學生能找到工作,關鍵要靠自己。從這裡開始,就將給出有實際操作性的學習建議。

    我最近接觸到不少大學生朋友,發現他們努力正在學的知識,面試時未必會問,也就是說,這些點白學了。之前已經提到了面試的標準,這裡就將結合具體的知識點,列出面試時需要掌握的最低技能標準,除此之外,大概率不會問的。

    1  Java核心方面,集合,多執行緒,異常處理,IO,JDBC,面向物件技能,大概率會問到,其它的沒提到的,比如圖形化介面,NIO,Socket網路程式設計,甚至Applet之類的,不會問到。

    2 資料庫方面,會寫增刪改查的SQL語句,知道儲存過程之類的概念,會通過索引優化查詢條件,會建表,會些諸如子查詢,group by,having,表關聯查詢等基本SQL技能,這裡請注意,至少得用過一種商業化資料庫。

    3 框架方面,需要有Spring+Spring MVC+mybatis框架的實際操作能力(不是商業專案開發能力),至於有Spring Boot或Spring Cloud,那更好了。

    4 綜合技能方面,能知道基本的資料結構知識(線性表外帶排序外帶一些樹的技能),基本的作業系統知識(一般僅限於執行緒程序概念),基本網路通訊知識(一般僅限於網路通訊模型和tcp udp協議),但這僅僅是“需要知道”而已。

     大家其實也可以通過看各種職位描述和招聘需求,看下哪些技能實際上是不會問的,對於這些知識,就不用學,從而把精力用到學實際Java相關技能上。

     這裡需要說明,在大學階段學的很多知識,不能說沒用。比如網路通訊裡的tcp底層通訊細節,這些技能或者要等到工作5年後升級到高階開發或架構師的時候才會用到,而且以高階開發視角觀察需要掌握的通訊協議細節知識,絕對要比大學階段要複雜。

    換句話說,很多技能,在大學階段也就“需要了解有這事”,以在大學階段的經歷,再多用時間學,估計也無法達到“實際專案的需求”,而且等到有實際專案經驗時,再學這類技能也就是一兩週的事情。兩廂一對比,結論就很明確了:在校階段應該更多積累實際開發能力,因為更得靠這個找工作。 

4 用一個月的時間瞭解Java核心部分的內容

    通過上文,大家大致可以瞭解到畢業時找工作的目標,如果再不瞭解,可以實際看下招聘要求,甚至直接多去參加招聘會和麵試,總之優先考察實際的開發能力,具體在Java核心部分,該如何高效學習呢?

    1 在電腦上裝jdk,eclipse,別用editplus之類的工具,最好再用eclipse的自動編譯功能。這方面,其實是鍛鍊自己的動手搭建環境的能力,工作後,開發是一方面,搭建環境的能力同樣重要。

    2 剛開始,一定得去找兩三本Java入門書,先通過執行現有程式碼,理解程式碼的含義。別光看書不執行,開始階段,也多執行別人的程式碼,別自己敲程式碼。這裡建議直接找書,因為相比一些視訊教材,畢竟書上的知識很系統,而且能正式出版的書一般沒程式碼問題,能直接執行。不建議自己敲程式碼,是因為自己敲程式碼時,多少會遇到問題,遇到問題後延誤學習進度是小,因為一直得不到解決從而影響學習信心,甚至終止學習了,事情就大了。

    3 如果找到兩三本Java入門書,一般其中涵蓋的知識系統大多很相似,大家可以先執行一遍所有程式碼,這樣就能大致掌握程式碼結構和基本知識點,而且由於書上程式碼一般問題不大,而且質量也不會低,至少不會有太大的阻礙性問題。

    4 當執行好以後,著重觀察集合,面向物件,多執行緒,IO處理,JDBC,異常處理相關章節,這個階段,是以掌握API用法為主,在這基本上再看下諸如介面,抽象類,異常處理流程,垃圾回收之類的高階知識點。 

    在上述基礎上,如果可以通過資料的幫助,用Java實現堆疊,連結串列,佇列,散列表,樹等的資料結構,同時操練各種排序演算法,這對找工作也有些幫助。

5 用半個月的時間,以MySQL為例,瞭解資料庫的大致操作

    在資料庫方面,最好也去找本書,同時在MYSQL上實踐。為什麼選MYSQL?因為這比較輕,相比Oracle而言,好安裝,當然如果有條件裝SQL Server之類的,那就更好了。 

    1 在MySQL資料庫上,實踐各種增刪改查的SQL語句,實踐建表,建索引能技巧,同時實踐一下諸如子查詢,with as等等複雜的SQL語句。

    2  用JDBC連同MYSQL,在Java程式碼裡做各種增刪改查的操作。

    3  在此基礎上,瞭解諸如索引,正規化和鎖等概念,這時候雖然認識也會很膚淺,但至少不會一頭霧水了。

    這樣,在資料庫方面,好歹有實際操作經驗了,這為之後的專案實踐,能打下很好的基礎。

6 用一個月的時間,瞭解基於Spring的web框架

    面試時更看重的是框架經驗,這塊學習的建議如下。

    1 先通過執行程式碼,瞭解Spring裡IOC, AOP,這時應該注意各種配置。

    2 熟悉Spring的基本概念後,可以嘗試跑一個SSM的小例子,這個例子可以非常簡答,就一個頁面也行,但要包含Spring MVC和Mybatis諸多要素,這樣大家好歹能知道框架的構成,在這個基礎上,可以繼續擴充套件,加些必要的業務,從而進一步瞭解這個框架。

    在這個階段,還是最好看書上的例子,因為書上的例子一定能通,而且還會帶部署和執行的步驟,還是不建議自己敲程式碼,因為SSM框架相對複雜,在這個階段如果自己敲,很有可能會因為問題太多而放棄。

    3 在自己機器上跑通SSM框架的案例後,可以網上找個帶業務的系統,比如圖書管理系統等,從中看些前端和後端互動資料的流程,同時,結合業務看Mybatis裡的ORM過程,以及Spring裡的常用註解。     

7 在學習過程中,可以避免的誤區

    Java方面,本人按照上述步驟輔導過不少在校的同學,只要肯上心練習,效果不會太差,不過很多同學在實踐過程中會走彎路,這裡列些普遍存在的問題,請大家在操練的過程中儘量避免。

    1 別鑽牛角尖,先面再點。比如有同學對一個知識點不理解,或者一段程式碼執行有問題,就會在這個點上耗費很多時間,不解決就不繼續。其實在這個過程中,首先需要全方位掌握SSM框架、Java技術和資料庫,個別點如果有問題,可以跳過,或者一個案例執行不通可以執行其它類似的,總之別在一個點上花費太多的時間。

    2 再囉嗦一下,最好先照著書上程式碼執行,開始階段的學習方法是“複製貼上執行理解”,在自己已經有一定的基礎後,再嘗試自己寫程式碼。

    3 在操練SSM專案時,有些同學會照著視訊上提到步驟做,如果有些視訊步驟不對,這樣就會有問題,所以還是建議照著書做。

    4 工具要選對,剛開始就eclipse,或者Idea,別用editplus或命令列。

    上述是方法上的誤區,其實最大的問題出在態度上,上述學習過程持續時間不會短,快則兩三個月,慢則半年,如果中途因為效果不明顯而放棄,那就很可惜了。 

8 有學習專案經驗後,爭取找些商業專案的實踐機會

    按照上述步驟,讓自己擁有最基本的SSM以及其它Java和資料庫相關技能後,要做的絕不是繼續積累學習專案經驗,而是儘可能去找實習的機會,以積累商業專案的經驗。在找實習經驗方面,大家可以參照如下的建議。

    1 在我之前的博文裡也提到,大三時,打聽計算機學院裡哪些老師和外面公司有合作,一般碩導都有這樣的專案,然後直接去找老師,剛開始不要錢,只求經驗,或許對各位在校生同學而言,這種方式是比較可行的,本人第一個商業專案經驗也是由此得到的。

    2 一般學校裡都會安排實習,實習的過程中,一定要重視,這個是實打實的商業專案經驗。

    3 寒暑假,找軟體公司,這可能會比較艱辛,因為在校階段自己非常難找相關實習機會,但要去找。

    4 這個大家根據自己的實際情況自己斟酌:如果報培訓班,多少能積累些專案經驗,但這僅僅是學習專案經驗,不過在培訓班裡,可以找相關老師推薦實習的機會。

    5 如果實在找不到實習的機會,那麼儘可能通過各種渠道,去找商業專案經驗的案例,我知道有些網站有,但不做廣告。雖然靠這種方式積累的商業專案經驗質量就打折扣了,但好歹聊勝於無,而且畢竟很多畢業生,連學習專案經驗都沒。 

    不少在校的同學發現,哪怕實際只幹了三個月的商業專案經驗,自己的技能也會很大程度提升,而且實際的商業專案經驗,會讓大家掌握書本上根本不會多提但專案裡一定會用的技能,比如JVM記憶體調優或多執行緒併發。從這意義上來講,只要有條件,大學生朋友應該擠破頭去找商業專案的經驗,而不是悠哉遊哉地坐在機房裡敲程式碼。只要你有商業專案的經驗,哪怕就三個月,找工作時你就有代差優勢。

9 畢業生準備簡歷的要點

    按照上述步驟,大家在畢業時,多少會有些商業專案經驗,再不濟也能有學習專案經驗,請記住,在招聘畢業生時,第一看專案經驗,第二看專案裡包含的技能,第三再問演算法和理論問題,至於邏輯題和情商題,只供參考。

     對此,畢業生在簡歷中,一定得突出做過的專案經驗,優先挖掘商業專案經驗,實在沒有學習專案也行。如果沒任何專案經驗,那麼找工作時會吃力很多。本文的重點是講學習方法,準備簡歷的技能只是稍微提到。這塊可以參考的之前寫的博文,你的簡歷能幫你爭取到面試機會嗎。如果有時間的話,或許我會再專門針對畢業生朋友,寫篇文章講在java方面,如何準備簡歷和麵試,以及如何找工作。 

10 總結:最多堅持半年,技能就會大變樣

    我記得兩年前,我的Python能力僅限於寫hello world,我執行程式碼看文件,辛苦堅持了半年,自認為就達到了出版書的地步,再過了半年,果真就從出版社接到了一本以股票案例講述Python技術的選題,並自認為寫的內容不會誤人子弟。

    我持續關注了一位大學生網友的公眾號,也就是寫了半年多部落格,他技術看上去就更專業多了。能堅持不懈地上進,這種精神值得提倡,雖然我工作很久了,但也得時刻警惕,不能懈怠,這也是我肯推薦該公眾號的原因,不僅推薦其內容,更提倡這種精神。

    不光是這位同學,經我培訓的其它很多大學生,也只要肯上心學,最多半年,最短三個月,就能從小白進階到能實際幹活的水平,而且還真能面試進軟體公司幹活。 

    本文雖然長,但其中也是盡我所能,給出大學生朋友若干有實際操作性的學習建議,其實對於其它初學者,本文給出的建議同樣適用。希望本文能幫到大家,最後感謝大家能讀完此文。

版權說明:

    如果要轉載本文,請先徵得本人同意。