原本想分享畢業生和初級程序員如何進大公司的經驗,但後來一想,人各有志,有程序員或許想進成長型或創業型公司或其它類型的公司,因此就乾脆來分享些提高技能和經過面試的技巧,技巧我講,公司你選,兩廂便利。前端
畢業生和初級程序員(通常是工做經驗3年如下)大多處於事業的青黃不接的階段,在找工做時每每會遇到缺少實際項目經驗的瓶頸,做爲技術面試官,我也常常在面試過程當中感覺到這些候選人缺少實際經驗的缺陷。不過本人以前作過java兼職培訓老師,也總結了些這批人羣提高實際技能和麪試技能的技巧,最近也老有人來問我這個,因此我就乾脆把這寫成博客文章。 java
公司通常會錄用哪類人?咱們把各類答案概括成一句:須要技術匹配並且有相關項目經驗的人,再簡化一下,作過相關經驗(通常是指商業項目經驗,說再直白點就能掙錢的項目),那麼用到的技術大多和公司要求匹配,也就是說,若是你有相關經驗,那麼和那些光有理論經驗的候選人相比,就有代差優點,因此我在面試候選人時,常常會見到二本甚至三本大學生逆襲的場景。linux
如何積累商業項目經驗?儘快開始實習,若是能夠,大二暑假就能夠找個軟件公司打工了,若是你有老師在外有項目,那最好也一塊兒作,若是學校安排實習,那更得去。若是實在找不到實習公司,或者也能夠去一些網站接些商業項目的兼職活。程序員
這裏請注意,通常畢業設計的份量沒商業項目的份量重,那若是你就只有畢業設計的經驗,那隻能和一樣沒商業項目的這羣人一塊兒競爭了。web
代差優點能給你帶來什麼樣的好處?面試
1 在校招時,大多數人沒商業項目經驗,但你有,你的簡歷經過初審的可能性就很是大,並且在實際面試時,哪怕你算法基礎知識等問題沒回答好,但只要讓面試官確信你作過商業項目,經過面試的可能性也比無商業項目的人羣要高不少。算法
2 在經過網站等形式投簡歷時,不少公司其實是要有商業項目經驗的,若是你沒,甚至連面試的機會都沒有,但若是你有實習等的商業項目經驗,那至少你經過初選的可能性就大大提高了。 sql
我在面試畢業生乃至初級程序員時,感受有過實際項目經驗的人很是少,(這就更驗證了有經驗的人至關有利),並且,這批人經過面試的可能性比3年左右的程序員要小不少。下面我來分析下這羣人的廣泛問題。數據庫
問題1,商業項目經驗不多,因此簡歷甚至沒法經過篩選,這樣根本得不到面試的機會。編程
問題2,即便有些項目組由於着急要人,從而讓一些初級程序員獲得面試機會,但在面試過程當中,這些人每每沒法證實本身真的在項目中用過相關技巧,這些僅有理論經驗的人經過面試的可能性很是小。
問題3:大多數初級程序員每每能經過準備,能知道算法、邏輯題和一些簡單的說辭,沒法證實本身掌握一些工做中必要的技能點,從而沒法證實本身勝任這份工做。
上述問題的結果就是:在我手上經過面試的程序員,八成以上具備3年之上經驗的,其實面試要求不難,能幹活就行,但大多數的初級程序員就是無法證實這點。
針對上述問題,給出的建議是:學習和積累。
1 給本身制定一個明確的目標,工做後3年內儘可能少換,不然就得從頭開始積累。
2 好比目標方向是Java後端開發,那麼在工做中,別得過且過,多跟組裏的前輩學,多掌握些知識點。
3 必定得圍繞「性能優化」這個主題,好比內存性能優化,數據庫優化,多掌握些項目中能用到的優化技能點。
4 哪怕你最近不許備面試,但也得邊工做邊看面試題,最好按期出去面試下。畢竟每一個人在學習過程當中都會走彎路,用句比較流行的話來說就是試錯,經過不斷的面試,能不斷修正本身的學習方向。
這些也是能找到工做的最低標準,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語句,好比帶鏈接,帶子查詢,嵌套查詢等。
在java web輕量級開發面試教程這本書裏,我對此作了詳細的說明。
我知道,其實大多數的初級程序員都知道上述知識點,但沒法有效地在項目中證實這點,並且,我以前也說了,上述僅僅是最低要求,接下來給出的要點將大大提高各位的面試成率。
這裏給出些準備簡歷時的注意要點。
1 針對每份工做微調簡歷,在發給目標公司的簡歷中,多寫些在該公司職位介紹時出現的關鍵字。
2 少寫不相干的工做經驗,任何經驗都往目標公司的職位要求上靠,好比目標公司的職位是java後端開發,你寫一些linux上項目維護的經驗或數據庫DBA的相關經驗尚屬搭邊,但若是寫上測試或實施等經驗,就屬於不相干了。
3 少寫關於項目業務介紹的內容,由於目標公司不關心。
4 這個是關鍵,必定得結合業務實際,寫上本身有過相關技能的經驗。
好比目標公司要求有數據庫優化的經驗,那你就能夠寫,在xx項目裏,對sql的執行時間有要求,因此在訂單管理模塊裏,我用到了xx技術,實現了sql優化效果。
相似的文字要多,涉及到的項目年限也請儘量地長。這樣當篩選簡歷的人和麪試官看到你的簡歷時,不禁得不信你第一有實踐項目經驗,第二在實踐經驗中用過相關技術。
而在面試時,技術面試官必定會問到職位要求裏的相關技能,你事先得準備。若是你能在面試過程當中有條理地說出你是如何在項目裏用到相關技術的,那麼這樣的說服力要比你單純說「你知道「要強不少,甚至有些面試官聽到你的這些敘述後,會少問或不問相關問題。
這些證據能夠出如今簡歷中,固然你更應該在面試中說出來。
我在面試中,每每會不得不從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使用技能以及項目管理軟件的使用經驗方面展現本身的亮點。這裏請注意,必定找合適的機會「順帶」地說,若是沒機會寧肯別說,更不能仗着有所準備就直接自說自話地說。不然的話,反倒可能會獲得「表達能力不清晰」或「敘述條理混亂」等的不良評價。
本文涉及到的點有些廣,這裏來總結下本文中提到的觀點。
1 在校生儘量早地積累些商業項目的經驗。
2 工做後找準發展方向,而後經過不斷的面試來調整本身的學習路線。
3 簡歷中的項目描述應該儘可能與目標公司的需求一致,在面試中也應當儘可能證實這點。
4 多積累些優於別人的優點。