Java程式設計師需要具備哪些專業技能?
想要成為合格的Java程式設計師或工程師到底需要具備哪些專業技能,面試者在面試前到底需要準備哪些東西呢?本文陳列的這些內容既可以作為個人簡歷中的內容,也可以作為面試的時候跟面試官聊的東西,你可以把這些內容寫到你的簡歷中,當然更需要的是你在面試的時候向面試官展現這些專業技能。相信此文對正在尋找Java程式設計師(Java工程師)職位的freshman以及希望成為中高階Java開發者的junior都會有所幫助。
專業技能
熟練的使用Java語言進行物件導向程式設計,有良好的程式設計習慣,熟悉常用的Java API,包括集合框架、多執行緒(並發程式設計)、I/O(NIO)、Socket、JDBC、XML、反射等。
熟悉基於JSP和Servlet的Java Web開發,對Servlet和JSP的工作原理和生命週期有深入了解,熟練的使用JSTL和EL編寫無腳本動態頁面,有使用監聽器、過濾器等Web元件以及MVC架構模式進行Java Web專案開發的經驗。
對Spring的IoC容器和AOP原理有深入了解,熟練的運用Spring框架管理各種Web元件及其依賴關係,熟練的使用Spring進行事務、日誌、安全性等的管理,有使用Spring MVC作為表示層技術以及使用Spring提供的持久化支持進行Web專案開發的經驗,熟悉Spring對其他框架的整合。
熟練的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,對Hibernate的關聯映射、繼承映射、組件映射、緩存機制、事務管理以及性能調優等有深入的理解。
熟練的使用HTML、CSS和JavaScript進行Web前端開發,熟悉jQuery和Bootstrap,對Ajax技術在Web專案中的應用有深入理解,有使用前端MVC框架(AngularJS )和JavaScript模板引擎(HandleBars)進行專案開發的經驗。
熟悉常用的關聯式資料庫產品(MySQL、Oracle),熟練的使用SQL和PL/SQL進行資料庫程式設計。
熟悉物件導向的設計原則,對GoF設計模式和企業應用架構模式有深入的了解和實際開發的相關經驗,熟練的使用UML進行物件導向的分析和設計,有TDD(測試驅動開發)和DDD(領域驅動設計)的經驗。
熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web伺服器和應用伺服器的使用,熟悉多種伺服器整合、叢集和負載平衡的配置。
熟練的使用產品原型工具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實現,可以使用JSP作為MVC中的V,也可使用模板引擎(如Freemarker和Velocity)來產生視圖,還可以是各種文件或報表(如Excel和PDF等),而Servlet和自訂的控制器是MVC中的C,當然Spring MVC中提供了作為前端控制器的DispatcherServlet;J通常是事務腳本,K應該是AOP(面向切面程式設計)技術,L目前廣泛使用的有memcached和Redis;M的選擇方案很多,最有可能的是Hibernate和MyBatis,也可以兩種技術同時運用,但通常是將增刪改交給Hibernate來處理,而複雜的查詢則由MyBatis完成,此外TopLink、jOOQ也是優秀的持久層解決方案;底層的資料存取傳統上是使用關係型資料庫,可以是MySQL、Oracle、SQLServer、DB2等,隨著大數據時代的來臨,也可以採用NoSQL(如MongoDB、MemBase、BigTable等)和其他大數據存取方案(如GFS、HDFS等);專案的開發模型P可以是瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型、RAD模型等。
專案開發流程
可行性分析>>> 可行性分析報告/ 專案開發計畫書
需求分析>>> 需求規格說明書
-
#OOAD(使用案例圖、時序圖、活動圖)
介面原型:幫助理解需求、業務層設計時推導交易腳本
#設計>>> 摘要設計說明書/詳細設計說明書
擷取業務實體(領域物件):類別圖、E-R圖(概念設計階段)
分層架構:確定各層的技術實現方案(具體到使用的框架、資料庫伺服器、應用程式伺服器等)。業務層設計:事務腳本模式(事務:使用者傳送一次請求就是一個事務;腳本:一個方法或一個函數;事務腳本:把一次請求封裝為一個方法或一個函數;事務腳本模式:一個事務開始於腳本的打開,終止於腳本的關閉)。業務層涉及的物件有三種類型:事務腳本類別(封裝了業務的流程)、資料存取物件(DAO,封裝了持久化操作)、資料傳輸物件(DTO,封裝了失血/貧血領域物件),三者之間的關係是交易腳本類別組合(聚合)資料存取對象,這二者都依賴了資料傳輸對象
正向工程(UML類別圖產生Java程式碼)和逆向工程(Java程式碼產生UML類別圖)
資料庫物理設計(ER圖轉換成表間關係圖、建庫與建表、使用工具插入測試資料)
編碼
#測試>>> 測試報告/ 缺陷報告
單元測試:對軟體中的最小可測試單元進行檢查和驗證,在Java中是對類別中的方法進行測試,可以使用JUnit工具來實施。
整合測試:整合測試也叫組裝測試或聯合測試。在單元測試的基礎上,將所有模組依照設計要求組裝成為子系統進行測試。
系統測試:將已經確認的軟體、硬體、週邊、網路等元素結合在一起,進行資訊系統的各種組裝測試和確認測試,系統測試是針對整個產品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出與需求規格不符或與之矛盾的地方,從而提出更完善的方案。
驗收測試:在軟體產品完成了單元測試、整合測試和系統測試之後,產品發布之前所進行的軟體測試活動。它是技術測試的最後一個階段,也稱為交付測試。驗收測試的目的是確保軟體準備就緒,並且可以讓最終用戶將其用於執行軟體的既定功能和任務。
交付與維護>>> 使用手冊/ 操作手冊
專案管理
版本控制:CVS/SVN/Git
#自動建置:Ant/Maven/Ivy/Gradle
#持續整合:Hudson/Jenkins
系統架構
#負載平衡伺服器:F5、A10
應用程式伺服器:
HTTP伺服器:Apache、NginX(HTTP、反向代理、郵件代理伺服器)
-
Servlet容器:Tomcat、Resin
EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere
#資料庫伺服器:MySQL、Oracle
第三方工具(外掛程式)應用程式
#圖表工具:基於jQuery的圖表外掛程式(如jQchart、Flot、Charted等)、 Chart.js、Highcharts等。
報表工具:Pentaho Reporting、iReport、DynamicReports等。
文件處理:POI、iText等。
工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
作業排程:Quartz、JobServer、Oddjob等。
快取服務:EhCache、memcached、SwarmCache等。
訊息佇列:Open-MQ、ZeroMQ等。
安全框架:Shiro、PicketBox等。
搜尋引擎:IndexTank、Lucene、ElasticSearch等。
Ajax框架:jQuery、ExtJS、DWR等。
UI外掛:EasyUI、MiniUI等。
富文本方塊:UEditor、CKEditor等。
面試提問
#專案是為哪個公司開發的?專案的投入是多少?
有多少人參與了專案開發?整個團隊中,測試人員、開發人員、專案經理比例是多少?
專案開發了多久?專案總的程式碼量有多少?你的程式碼量有多少?
專案採用了怎樣的開發模型或開發流程?專案的架構是怎樣的?專案的技術選型是怎樣的?
你在專案中承擔了怎樣的責任?是否經常開會或加班?專案完成後有哪些收穫或是經驗教訓?
專案中最困難的部分是什麼?如何解決團隊開發時所遇到的各種衝突?
說明:對於沒有實際專案經驗的,可以在前程無憂、智聯招募、拉勾網等網站上搜尋招募Java程式設計師的公司,找到他們的官方網站了解他們所做的項目,查看項目的詳細介紹,然後嘗試完成其中一部分功能,最好請教一下高人看看自己的設計和代碼是否恰當,這樣相當於積累了一定的專案經驗。
面試題
Java常見的面試題目已經總結成《Java面試題集》、《Java面試題全集》以及《面試程式設計題拾遺》等文章陸續發佈在我的博客,各大公司的面試題我會繼續整理發布。
其他
常見錯誤
#只在電腦上練習
不做行為面試題演練
不做模擬面試訓練
#試著死記硬背答案
不大聲說出你的解題思路
代碼不夠嚴謹
不寫測試程式碼
輕言放棄
- 面試時可以反問面試官的問題
- 我注意到你們使用了X技術,請問你們是如何解決Y問題的?
- 為什麼你們的產品使用了X技術而不是Y技術?據我所知,X技術雖然有A、B、C等好處,但也有D和E問題,而Y技術可以解決D和E問題。
- 我對您說的X技術不是太熟悉,但我感覺它是一個不錯的解決方案,您能多講講它的工作原理嗎?
- 你們團隊是如何進行專案規劃的?一週會有幾次例會?每週的程式碼量大概是多少?
就X問題我能想到的解決方案目前就只有Y了,請問您會怎麼解決這個問題?
S.A.R.法則
- S.A.R法則是指先描述問題的場景,然後解釋你採取的行動,最後陳述結果。
-
演算法題的五種解法
舉例法:透過舉例發現其中的一般規則。
-
範例:
圓內接三角形是銳角三角形的機率是多少?這是搜狗的一個面試題,可以在圓上隨意畫三個點連接成三角形就可以知道答案了。模式匹配法
-
範例:
一個有序數組的元素經過循環移動,元素的順序變成"3 4 5 6 1 2"。怎麼找到數組中最小的那個元素,假設數組中的元素各不相同。這個題目和折半查找看起來是那麼相似,因此可以藉鏡折半查找的演算法,最小元素顯然出現在"mid > right"的轉折點。簡化推廣法############說明:###簡化問題規模和資料類型,然後再發現通用的解法。 ###
-
簡單建構法
#範例:找出"abcde"的所有可能的排列組合。先考慮只有"a"的情況,再考慮"ab"的情況,以此類推。最終你可能會得到一個遞歸公式。這種方法往往演變成遞歸法。
-
資料結構腦力激盪法
#範例:隨機產生一些數字,並找出其中位數。這種問題可以在腦中將你了解的資料結構過一遍,看看哪一個是最適合的資料結構。上面的題目可以建立兩個堆,一個大根堆和一個小根堆,較小的元素放在大根堆,較大的元素放在小根堆,如果兩個堆不平衡,可以從其中一個堆取出元素放入另一個堆即可。最後中位數應該是兩個堆的根之一。
錄用協商
#要理直氣壯的提出具體的待遇要求
開出比預期稍高的價碼
不要只盯著薪水(很多公司更願意就薪水之外的條件做出讓步)
#使用最合適的方法(可以嘗試在電話或E-mail中談判待遇)
#自我評價
抗壓能力(許多IT企業的工作強度相對來說還是比較大的)############### ######學習Java的同學注意了! ! ! ############團隊意識(比起個人英雄主義,IT產業更倡議團隊合作)
以上是Java程式設計師需要具備哪些專業技能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。
