想要成為合格的Java程式員或工程師到底需要具備哪些專業技能,在面試之前到底需要準備哪些東西呢?面試時面試官想了解你的什麼專業技能,以下都是一個合格JAVA軟體工程師所要具備的。
一、專業技能
1、熟練的使用Java語言進行面向對象程式設計,有良好的程式設計習慣,熟悉常用的Java API,包括集合架構、多線程(并發程式設計)、I/O(NIO)、Socket、JDBC、XML、反射等。
2、熟悉基于JSP和Servlet的Java Web開發,對Servlet和JSP的工作原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動态頁面,有使用監聽器、過濾器等Web元件以及MVC架構模式進行Java Web項目開發經驗。
3、對Spring的IoC容器和AOP原理有深入了解,熟練的運用Spring架構管理各種Web元件及其依賴關系,熟練的使用Spring進行事務、日志、安全性等的管理,有使用SpringMVC作為表示層技術以及使用Spring提供的持久化支援進行Web項目開發的經驗,熟悉Spring對其他架構的整合。
4、熟練的使用Hibernate、MyBatis等ORM架構,熟悉Hibernate和MyBatis的核心API,對Hibernate的關聯映射、繼承映射、元件映射、緩存機制、事務管理以及性能調優等有深入的了解。
5、熟練的使用HTML、CSS和JavaScript進行Web前端開發,熟悉jQuery和Bootstrap,對Ajax技術在Web項目中的應用有深入了解,有使用前端MVC架構(AngularJS)和JavaScript模闆引擎(HandleBars)進行項目開發的經驗。
6、熟悉常用的關系型資料庫産品(MySQL、Oracle),熟練的使用SQL和PL/SQL進行資料庫程式設計。
7、熟悉面向對象的設計原則,對GoF設計模式和企業應用架構模式有深入的了解和實際開發的相關經驗,熟練的使用UML進行面向對象的分析和設計,有TDD(測試驅動開發)和DDD(領域驅動設計)的經驗。
8、熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web伺服器和應用伺服器的使用,熟悉多種伺服器整合、叢集和負載均衡的配置。
9、熟練的使用産品原型工具Axure,熟練的使用設計模組化工具PowerDesigner和Enterprise Architect,熟練的使用Java開發環境Eclipse和IntelliJ,熟練的使用前端開發環境WebStorm,熟練的使用軟體版本控制工具SVN和Git,熟練的使用項目建構和管理工具Maven和Gradle。說明:上面羅列的這些東西并不是每一項你都要爛熟于心,根據企業招聘的具體要求可以做相應的有針對性的準備。但是前6項應該是最低要求,是作為一個Java軟體工程師必須要具備的專業技能。
二、項目經驗
項目介紹
本系統是X委托Y開發的用于Z的系統,系統包括A、B、C、D等子產品。系統使用了Java企業級開發的開源架構E以及前端技術F。表示層運用了G架構,使用H作為視圖I作為控制器并實作了REST風格的請求;業務邏輯層運用了J模式,并通過K實作事務、日志和安全性等功能,通過L實作緩存服務;持久層使用了M封裝CRUD操作,底層使用N實作資料存取。整個項目采用了P開發模型。
說明:
E通常指Spring(Java企業級開發的一站式選擇);
F最有可能是jQuery庫及其插件或者是Bootstrap架構,當然如果要建構單頁應用(SPA)最佳的方案是前端MVC架構(如AngularJS)和JavaScript模闆引擎(如HandleBars);G顯然是MVC(模型-視圖-控制),最有可能的實作架構是Spring MVC,除此之外還有Struts 2、JSF以及Apache為JSF提供的MyFaces實作。
H是JSP,JSP作為MVC中的V,也可使用模闆引擎(如Freemarker和Velocity)來生成視圖
還可以是各種文檔或報表(如Excel和PDF等)。
I是Servlet或者自定義的控制器,他們是MVC中的C,當然Spring MVC中提供了作為前端控制器的DispatcherServlet;
J通常是事務腳本,
K應該是AOP(面向切面程式設計)技術,
L目前廣泛使用的有memcached和Redis;
M的選擇方案很多,最有可能的是Hibernate和MyBatis,也可以兩種技術同時運用,但通常是将增删改交給Hibernate來處理,而複雜的查詢則由MyBatis完成,此外TopLink、jOOQ也是優秀的持久層解決方案;
N底層的資料存取傳統上是使用關系型資料庫,可以是MySQL、Oracle、SQLServer、DB2等,随着大資料時代的來臨,也可以采用NoSQL(如MongoDB、MemBase、BigTable等)和其他大資料存取方案(如GFS、HDFS等);
P是項目的開發模型,可以是瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型、RAD模型等。
項目開發流程
1、可行性分析:可行性分析報告、項目開發計劃書
2、需求分析:需求規格說明書
OOAD(用例圖、時序圖、活動圖)
界面原型:幫助了解需求、業務層設計時推導事務腳本
3、設計:概要設計說明書、詳細設計說明書
抽取業務實體(領域對象):類圖、E-R圖(概念設計階段)
分層架構:确定各層的技術實作方案(具體到使用的架構、資料庫伺服器、應用伺服器等)。
業務層設計:事務腳本模式(事務:使用者發送一次請求就是一個事務;腳本:一個方法或一個函數;事務腳本:把一次請求封裝為一個方法或一個函數;事務腳本模式:一個事務開始于腳本的打開,終止于腳本的關閉)。
業務層涉及的對象有三種類型:事務腳本類(封裝了業務的流程)、資料通路對象(DAO,封裝了持久化操作)、資料傳輸對象(DTO,封裝了失血/貧血領域對象),三者之間的關系是事務腳本類組合(聚合)資料通路對象,這二者都依賴了資料傳輸對象
正向工程(UML類圖生成Java代碼)和逆向工程(Java代碼生成UML類圖)資料庫實體設計(ER圖轉換成表間關系圖、建庫和建表、使用工具插入測試資料)
3、編碼
4、測試:測試報告、缺陷報告
單元測試:對軟體中的最小可測試單元進行檢查和驗證,在Java中是對類中的方法進行測試,可以使用JUnit工具來實施。
內建測試:內建測試也叫組裝測試或聯合測試。在單元測試的基礎上,将所有子產品按照設計要求組裝成為子系統進行測試。
系統測試:将已經确認的軟體、硬體、外設、網絡等元素結合在一起,進行資訊系統的各種組裝測試和确認測試,系統測試是針對整個産品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出與需求規格不符或與之沖突的地方,進而提出更加完善的方案。驗收測試:在軟體産品完成了單元測試、內建測試和系統測試之後,産品釋出之前所進行的軟體測試活動。它是技術測試的最後一個階段,也稱為傳遞測試。驗收測試的目的是確定軟體準備就緒,并且可以讓最終使用者将其用于執行軟體的既定功能和任務。
5、傳遞和維護:使用者手冊、操作手冊
三、項目管理
1、版本控制:CVS/SVN/Git
2、自動建構:Ant/Maven/Ivy/Gradle
3、持續內建:Hudson/Jenkins
四、系統架構
1、負載均衡伺服器:F5、A10
2、應用伺服器:
HTTP伺服器:Apache、NginX(HTTP、反向代理、郵件代理伺服器)
Servlet容器:Tomcat、Resin
EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere
3、資料庫伺服器:MySQL、Eclipse、Oracle
五、第三方工具(插件)應用
1、圖表工具:基于jQuery的圖表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。
2、報表工具:Pentaho Reporting、iReport、DynamicReports等。
3、文檔處理:POI、iText等。
4、工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
5、作業排程:Quartz、JobServer、Oddjob等。
6、緩存服務:EhCache、memcached、SwarmCache等。
7、消息隊列:Open-MQ、ZeroMQ等。
8、安全架構:Shiro、PicketBox等。
9、搜尋引擎:IndexTank、Lucene、ElasticSearch等。
10、Ajax架構:jQuery、ExtJS、DWR等。
11、UI插件:EasyUI、MiniUI等。
12、富文本框:UEditor、CKEditor等。
六、面試提問
1、項目是為哪個公司開發的?項目的投入是多少?
2、有多少人參與了項目開發?整個團隊中,測試人員、開發人員、項目經理比例是多少?
3、項目開發了多長時間?項目總的代碼量有多少?你的代碼量有多少?
4、項目采用了怎樣的開發模型或開發流程?項目的架構是怎樣的?項目的技術選型是怎樣的?
5、你在項目中擔了怎樣的職責?是否經常開會或加班?項目完成後有哪些收獲或是經驗教訓?
6、項目中最困難的部分是什麼?如何解決團隊開發時遇到的各種沖突?
七、面試時可以反問面試官的問題
1、我注意到你們使用了X技術,請問你們是如何解決Y問題的?
2、為什麼你們的産品使用了X技術而不是Y技術?據我所知,X技術雖然有A、B、C等好處,但也存在D和E問題,而Y技術可以解決D和E問題。
3、我對您說的X技術不是太熟悉,但我感覺它是一個不錯的解決方案,您能多講講它的工作原理嗎?
4、你們團隊是如何進行項目規劃的?一周會有幾次例會?每周的代碼量大概是多少?
5、就X問題我能想到的解決方案目前就隻有Y了,請問您會怎麼解決這個問題?
八、S.A.R.法則
S.A.R法則是指先描述問題的場景,然後解釋你采取的行動,最後陳述結果。
九、面談原則
1、聲音适中、口齒清楚、面帶微笑、個人形象精神,講禮貌。
2、主動跟面試官聊他感興趣的話題,讓面試官滿意。
3、主動的大膽的跟面試官聊自己熟悉有經驗的内容:項目、技術點等,做到揚長避短。
4、一定要表達自己非常想得到這個崗位,自己很願意學習不懂的技術。
5、根據自己的實際水準提出合理的待遇要求。
十、自我評價
1、學習能力(搞IT行業的人需要不斷的了解新的技術、工具和方法)
2、團隊意識(相比個人英雄主義,IT行業更倡導團隊合作)
3、抗壓能力(很多IT企業的工作強度相對來說還是比較大的)