1. 程式人生 > >以技術面試官的經驗分享畢業生和初級程式設計師通過面試的技巧(Java後端方向)...

以技術面試官的經驗分享畢業生和初級程式設計師通過面試的技巧(Java後端方向)...

點選上方“Java團長”,選擇“置頂公眾號”

乾貨文章第一時間送達!

本來想分享畢業生和初級程式設計師如何進大公司的經驗,但後來一想,人各有志,有程式設計師或許想進成長型或創業型公司或其它型別的公司,所以就乾脆來分享些提升技能和通過面試的技巧,技巧我講,公司你選,兩廂便利。

640?wxfrom=5&wx_lazy=1

畢業生和初級程式設計師(一般是工作經驗3年以下)大多處於事業的青黃不接的階段,在找工作時往往會遇到缺乏實際專案經驗的瓶頸,作為技術面試官,我也經常在面試過程中感受到這些候選人缺乏實際經驗的缺陷。不過本人之前做過java兼職培訓老師,也總結了些這批人群提升實際技能和麵試技能的技巧,最近也老有人來問我這個,所以我就乾脆把這寫成部落格文章。 

一. 在校大學生最好積累些商業專案的經驗,這樣就能形成代差優勢

公司一般會錄用哪類人?我們把各種答案歸納成一句:需要技術匹配而且有相關專案經驗的人,再簡化一下,做過相關經驗(一般是指商業專案經驗,說再直白點就能掙錢的專案),那麼用到的技術大多和公司要求匹配,也就是說,如果你有相關經驗,那麼和那些光有理論經驗的候選人相比,就有代差優勢,所以我在面試候選人時,經常會見到二本甚至三本大學生逆襲的場景。

如何積累商業專案經驗?儘快開始實習,如果可以,大二暑假就可以找個軟體公司打工了,如果你有老師在外有專案,那最好也一起做,如果學校安排實習,那更得去。如果實在找不到實習公司,或者也可以去一些網站接些商業專案的兼職活。

這裡請注意,一般畢業設計的分量沒商業專案的分量重,那如果你就只有畢業設計的經驗,那隻能和同樣沒商業專案的這群人一起競爭了。

代差優勢能給你帶來什麼樣的好處?

1. 在校招時,大多數人沒商業專案經驗,但你有,你的簡歷通過初審的可能性就非常大,而且在實際面試時,哪怕你演算法基礎知識等問題沒回答好,但只要讓面試官確信你做過商業專案,通過面試的可能性也比無商業專案的人群要高很多。

2. 在通過網站等形式投簡歷時,很多公司實際上是要有商業專案經驗的,如果你沒,甚至連面試的機會都沒有,但如果你有實習等的商業專案經驗,那至少你通過初選的可能性就大大提升了。    

二. 走上社會後,在初級階段,選定一個目標,這樣專案經驗就有積累

我在面試畢業生乃至初級程式設計師時,感覺有過實際專案經驗的人非常少,(這就更驗證了有經驗的人相當有利),而且,這批人通過面試的可能性比3年左右的程式設計師要小很多。下面我來分析下這群人的普遍問題。

問題1:商業專案經驗很少,所以簡歷甚至無法通過篩選,這樣根本得不到面試的機會。

問題2:即使有些專案組因為著急要人,從而讓一些初級程式設計師得到面試機會,但在面試過程中,這些人往往無法證明自己真的在專案中用過相關技巧,這些僅有理論經驗的人通過面試的可能性非常小。

問題3:大多數初級程式設計師往往能通過準備,能知道演算法、邏輯題和一些簡單的說辭,無法證明自己掌握一些工作中必要的技能點,從而無法證明自己勝任這份工作。

上述問題的結果就是:在我手上通過面試的程式設計師,八成以上具有3年之上經驗的,其實面試要求不難,能幹活就行,但大多數的初級程式設計師就是沒法證明這點。

針對上述問題,給出的建議是:學習和積累。 

     640

1. 給自己制定一個明確的目標,工作後3年內儘量少換,否則就得從頭開始積累。

2. 比如目標方向是Java後端開發,那麼在工作中,別得過且過,多跟組裡的前輩學,多掌握些知識點。

3. 一定得圍繞“效能優化”這個主題,比如記憶體效能優化,資料庫優化,多掌握些專案中能用到的優化技能點。

4. 哪怕你最近不準備面試,但也得邊工作邊看面試題,最好定期出去面試下。畢竟每個人在學習過程中都會走彎路,用句比較流行的話來講就是試錯,通過不斷的面試,能不斷修正自己的學習方向。

三. 來點乾貨,在Java Core,java Web和資料庫方面,一般公司的最近標準是什麼

這些也是能找到工作的最低標準,Java Core的標準如下:

方面

合格程式設計師的標準

集合

1 對於各線性表類物件(比如Array, LinketList, ArrayList, Stack, Set等)和鍵值對類物件(比如HashMap等),會基本的遍歷和增刪改操作

2 會使用Iterator,泛型,比較器等常用物件

異常處理

1會用try…catch…finally框架

2 瞭解各種異常的型別,比如執行期異常,資料庫或者IO等異常。

IO

能完成基本的IO操作,比如讀寫檔案,讀寫記憶體,讀寫壓縮包等

JDBC

會基本的連線,增刪改查預處理批處理操作

多執行緒

1會建立多執行緒,而且能通過notify, wait,sleep等的關鍵字,讓多執行緒協調地完成專案裡的任務。

2 會用synchronized等常用關鍵字,在多執行緒讀寫情況下不會產生衝突問題。

3 最好會用執行緒池。

面向物件和設計模式

能知道基本的概念和諸如繼承,抽象類和介面等的語法

垃圾回收和記憶體效能管理

知道基本的概念,知道基本的System.gc等的語法,知道通過java –xms等基本的配置記憶體的操作。

Java Web方面的要求點大致如下:

方面

合格程式設計師的標準

JSP+Servlet

+JavaBean

(簡單的MVC框架)

1 會用JSP+Servlet+JavaBean這套框架程式設計,知道基本的MVC流程。

2 最好了解些簡單的JS,DIV,CSS等前端技術。

3 知道怎麼把Web程式釋出到伺服器上。

Struts方面

可以不用瞭解,因為用得比較少

Spring方面

1知道IOC和AOP的概念,知道如何使用這些技術。

2 知道Spring MVC的開發流程,能在專案經理帶領下開發基於Spring的Web專案。

3 最好能瞭解下Spring MVC方面的一些元件。

Hibernate

(或者ORM)

1 可以只掌握一種ORM技術。

2能用Hibernate幹些基本的增刪改查等操作。

2 熟悉一些基本元件,比如SesionFactory,Criteria和Session等的用法。

3 知道一對一,一對多,多對多的基本用法。

4 知道快取概念,最好了解下效能優化等技能。

Spring和Hibernate整合

這點上合格和高階程式設計師的差別不大,要求是,能整合,能配置連線池。

而在資料庫方面,最低的要求體現在如下三方面的需求。

第一:針對一類資料庫(比如MYSQL,Oracle,SQL Server等),會基本的增刪改查操作,會用一些基本的函式,會編寫儲存過程觸發器索引等工具。

第二:知道一些基本的對專案開發有幫助的概念,比如正規化,索引,分割槽等。

第三:能編寫一些相對複雜的SQL語句,比如帶連線,帶子查詢,巢狀查詢等。

我知道,其實大多數的初級程式設計師都知道上述知識點,但無法有效地在專案中證明這點,而且,我之前也說了,上述僅僅是最低要求,接下來給出的要點將大大提升各位的面試成率。    

四.  通過簡歷證明自己在專案中用過相關知識點,面試時儘量找機會說出來

這裡給出些準備簡歷時的注意要點。

1. 針對每份工作微調簡歷,在發給目標公司的簡歷中,多寫些在該公司職位介紹時出現的關鍵字。

2. 少寫不相干的工作經驗,任何經驗都往目標公司的職位要求上靠,比如目標公司的職位是java後端開發,你寫一些linux上專案維護的經驗或資料庫DBA的相關經驗尚屬搭邊,但如果寫上測試或實施等經驗,就屬於不相干了。

3. 少寫關於專案業務介紹的內容,因為目標公司不關心。

4. 這個是關鍵,一定得結合業務實際,寫上自己有過相關技能的經驗。

比如目標公司要求有資料庫優化的經驗,那你就可以寫,在xx專案裡,對sql的執行時間有要求,所以在訂單管理模組裡,我用到了xx技術,實現了sql優化效果。

類似的文字要多,涉及到的專案年限也請儘可能地長。這樣當篩選簡歷的人和麵試官看到你的簡歷時,不由得不信你第一有實踐專案經驗,第二在實踐經驗中用過相關技術。

而在面試時,技術面試官一定會問到職位要求裡的相關技能,你事先得準備。如果你能在面試過程中有條理地說出你是如何在專案裡用到相關技術的,那麼這樣的說服力要比你單純說“你知道“要強很多,甚至有些面試官聽到你的這些敘述後,會少問或不問相關問題。

    640

五. 多準備些“你優於別人”的證據

這些證據可以出現在簡歷中,當然你更應該在面試中說出來。

我在面試中,往往會不得不從10個人符合要求的人裡挑選出3人。(按我說10個人全要算了,但不行,預算不夠)。這樣如果某個候選人表現出優於別人的技能,那麼這個人就一定是在同等條件裡優先考慮的。

如下是Java Core方面可以準備的亮點。

技術方面

可以說的亮點

Java集合物件

1 能根據專案的需求選用合適的集合物件,比如知道ArrayList和LinkedList的差異,並能合理選用。

2 能在合適的場合選用WeakHashMap。

3 可以適當講一些集合的JDK底層實現程式碼。

異常處理方面

能在finally從句裡寫釋放資源的程式碼

JDBC方面

1 能通過PreparedStatement的預處理方法來防止SQL注入。

2 能通過批處理來提升操作效能。

3 能通過例項講述事務隔離級別的含義

多執行緒方面

1 會使用執行緒池

2 能通過鎖或訊號量等手段正確地處理多執行緒併發時的資料一致性。

在下表裡,我們列了些在資料庫方面可以準備的亮點。

技術方面

可以說的亮點

建表

建表時需要根據專案的資料情況,考慮是採用三正規化或是反正規化。

SQL調優

1 可以通過檢視日誌等方式看哪些SQL需要調優。

2 可以通過執行計劃檢視SQL的所消耗的代價,並據此調優。

3 可以通過建索引,建分割槽等手段來優化SQL效能。

事務

1 可以說下JDBC或Spring裡是如何管理事務的。

2 可以說下Spring裡的宣告式事務的做法和優點。

3 可以舉例說明事務隔離級別和事務傳播機制的用法。

分散式資料庫

1 可以通過水平或豎直等方式的方式來拆分資料庫,從而減輕對單表訪問所需要的代價。

2 可以通過叢集等方式來承擔對資料庫的過量的訪問請求。

NoSQL和Hadoop

這兩個本身就是個亮點,如果大家用過,可以結合專案來說明。

下面列了Java Web方面可以準備的亮點。

技術方面

可以說的亮點

Spring MVC架構

1 可以說下Spring的IOC和AOP是如何優化專案結構的。

2 可以說下攔截器等Spring元件對專案的幫助。

ORM,比如Hibernte或Mybatis

使用這種ORM技術時,如何優化訪問和操作資料庫的效能。

Spring和Mybatis等的整合

可以講下整合框架的細節,並可以舉例說明整合後的框架能很好地適應需求的變更。

此外,大家還可以在Linux使用技能以及專案管理軟體的使用經驗方面展示自己的亮點。這裡請注意,一定找合適的機會“順帶”地說,如果沒機會寧可別說,更不能仗著有所準備就直接自說自話地說。否則的話,反倒可能會得到“表達能力不清晰”或“敘述條理混亂”等的不良評價。

    640

六. 總結

本文涉及到的點有些廣,這裡來總結下本文中提到的觀點。

1. 在校生儘可能早地積累些商業專案的經驗。

2. 工作後找準發展方向,然後通過不斷的面試來調整自己的學習路線。

3. 簡歷中的專案描述應該儘量與目標公司的需求一致,在面試中也應當儘量證明這點。

4. 多積累些優於別人的優勢。

  • 原文:cnblogs.com/JavaArchitect/p/8900508.html

640?

Java團長

每日分享Java乾貨

微訊號:javatuanzhang

640?

長按識別二維碼