想要成為合格的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中文網其他相關文章!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。