第一篇:優(yōu)秀的java程序員必須掌握的十項技能
西安尚學堂
一個優(yōu)秀的Java程序員必須掌握的10項技能
3G時代迫使IT從業(yè)者中的技術(shù)人員掌握越來越多的實用技能,作為IT行業(yè)的技術(shù)創(chuàng)造者,一個優(yōu)秀的java程序員必須掌握以下的10項技能,方能勝任java程序員的崗位。
1、語法:必須比較熟悉,在寫代碼的時候的編輯器對某一行報錯應(yīng)該能夠根據(jù)報錯信息知道是什么樣的語法錯誤并且知道如何修正。
2、命令:必須熟悉自帶的常用命令及其常用選項,需要熟悉的命令:appletviewer、Htmlonverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。
4、API:的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用。
◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer.◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。
◆java.math包下的100%的內(nèi)容。
◆java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。
◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類。
◆熟練運用JDBC.8)、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java.◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。◆Swing的基本內(nèi)容,和AWT的要求類似。
◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。
5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用ant完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應(yīng)該可以根據(jù)信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
10、博學:掌握、Oracle、WebLogic、Jboss、、Struts、Hibernate 等流行技術(shù),掌握軟件架構(gòu)設(shè)計思想、搜索引擎優(yōu)化、緩存系統(tǒng)設(shè)計、網(wǎng)站負載均衡、系統(tǒng)性能調(diào)優(yōu)等實用技術(shù)。
第二篇:java程序員應(yīng)掌握的十項技能
一個熟練的Java程序員應(yīng)該掌握的十項技術(shù)
1、語法:Java程序員必須比較熟悉語法,在寫代碼的時候IDE的編輯器對某一行報錯應(yīng)該能夠根據(jù)報錯信息 知道是什么樣的語法錯誤并且知道任何修正。
2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java 實際上還很不了解。
3、工具 :必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。
4、API:Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是Java程序員必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用。
◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則 表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer.◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。
◆java.math包下的100%的內(nèi)容。
◆java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。
◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類。
◆熟練運用JDBC.8)、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java.◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。
◆Swing的基本內(nèi)容,和AWT的要求類似。
◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。
5、測試 :必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:Java程序員必須熟悉使用ant完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應(yīng)該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
10、博學:Java程序員除了精通Java意外,還要掌握J2EE、Oracle、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技術(shù),掌握軟件架構(gòu)設(shè)計思想、搜索 引擎優(yōu)化、緩存系統(tǒng)設(shè)計、網(wǎng)站負載均衡、系統(tǒng)性能調(diào)優(yōu)等實用技術(shù)。
第三篇:Java程序員必須掌握的開發(fā)工具
Java程序員必須掌握的開發(fā)工具
以下的開發(fā)工具,能幫助你成為一名高級java程序開發(fā)人員。
1.Eclipse
盡管IntelliJ IDEA、NetBeans和一些其他的IDE正在日益普及,但是有調(diào)查表明,Eclipse仍然是幾乎半數(shù)Java開發(fā)人員首選的開發(fā)環(huán)境。Eclipse是IDE領(lǐng)域的瑞士軍刀,有著大量定制的接口和無數(shù)的插件。它無處不在,后面本文將推薦的其他所有工具都提供Eclipse插件。這也是八維必講的開發(fā)工具。
Eclipse的工作流程可分為三個方面:工作臺,工作空間和視角。工作臺作為到IDE的出發(fā)點。工作空間將項目、文件和配置設(shè)置組合在一個單獨的 目錄下。視角定義工具、視圖和有效設(shè)置。雖然新手開發(fā)人員可能會覺得相比Netbeans和IntelliJ IDEA,Eclipse使用起來更難,但Eclipse的靈活性,使其成為企業(yè)開發(fā)的首選IDE。
Luna,Eclipse的最新版本,支持Java
8、分屏編輯、新的黑色主題,以及一個功能齊全的命令行終端。
2.Gradle
Gradle是一個自動化項目工具,建立在Apache Maven和Apache Ant的功能上。雖然Gradle并不是最流行的構(gòu)建工具(最流行的是Maven,64%的Java開發(fā)人員會選擇它),但它的普及速度很快。它也可作為默認的Android構(gòu)建工具。
Gradle引以為傲的是它的簡單。Gradle使用Groovy編程語言,與Maven和Ant使用XML語法截然相反。
3.Javadoc
Javadoc是Oracle提供的文檔生成器。它可以將特殊格式的注釋解析為HTML文檔。
Javadoc注釋使用開放標簽、關(guān)閉標簽,以及一個或多個描述性標簽的格式。開放式標簽類似于標準Java多行注釋標記,使用兩個星號的除外。Javadoc也解析普通的HTML標簽。
Javadoc自動格式化標簽和關(guān)鍵字,除非另有規(guī)定。Javadoc廣泛使用超鏈接,允許你參考和鏈接到代碼的不同區(qū)域。許多IDE--包括 Eclipse--可以自動添加Javadoc注釋模塊到變量、類和方法中。支持Maven、Gradle和Ant的插件在編譯代碼的同時也可以構(gòu)建 Javadoc HTML。
4.JUnit
JUnit是用于編寫和運行單元測試的開源框架。一個基本的JUnit測試包括測試類、測試方法、以及執(zhí)行測試的功能。JUnit使用標注來確定測試如何構(gòu)造和運行。例如,如果你的程序有一個類叫做MathClass,具有乘法和除法的方法,你可以創(chuàng)建JUnit測試來檢 查不符合預期的值。輸入數(shù)字2和5到乘法方法,你希望得到的結(jié)果為10。當輸入0作為除法方法的第二個參數(shù)時,你會期望給出一個數(shù)字計算異常的警告因為除 數(shù)不能為0:
@Test標注規(guī)定,MathClass方法是一個測試用例。在JUnit提供額外的標注,比如@Before,這樣你就可以在測試運行之前設(shè)置環(huán)境。JUnit還可以設(shè)置規(guī)則用于定義測試方法的行為。例如,TemporaryFolder規(guī)則使得一旦測試完成,由測試創(chuàng)建的文件或文件夾就會被刪除。
5.Cobertura
Cobertura可用于分析Java代碼的測試覆蓋率。Cobertura根據(jù)沒有被測試覆蓋的代碼生成基于HTML的報告。
Cobertura提供可用于插裝、檢查和測試代碼的工具。通過監(jiān)控可測試的代碼,Cobertura允許你使用你選擇的測試框架,甚至不需要測試框架就可以運行程序。
Cobertura根據(jù)行、分支和程序包三個方面給出代碼覆蓋報告。每個類別都有一個可自定義的閾值,如果覆蓋面低于閾值,就會觸發(fā)警告。Cobertura還集成了Maven和Gradle 的自動檢測功能。
6.FindBugs
FindBugs是一個匹配編譯代碼模式,而非使用bug數(shù)據(jù)庫的工具。當提供源代碼時,F(xiàn)indBugs還可高亮顯示檢測出bug的代碼行。
在它的3.0.1版本中,F(xiàn)indBugs繼續(xù)保持著數(shù)以百計的bug描述。根據(jù)bug的嚴重程度,F(xiàn)indBugs將bug分為四個水平:相關(guān) 的,令人困擾的,可怕的,以及最可怕的。除了圖形用戶界面,F(xiàn)indBugs還提供一個命令行界面,Ant任務(wù),以及Eclipse插件。
7.VisualVM
包含在JDK中的VisualVM是監(jiān)控和審查Java應(yīng)用程序性能的工具。VisualVM檢測并重視活躍的JVM實例來檢索有關(guān)進程的診斷信息。
VisualVM可以很容易地實時診斷性能問題。它提供了全套的分析工具,包括JConsole、jstack、jmap、jinfo和jstat等。此外,你還可以對JVM做一個快照,這樣以后在任何時都能審查。
8.Groovy
Groovy是一種編程語言,通過添加新的關(guān)鍵字,自動導入常用的類,以及可選類型變量聲明,既簡化又擴展了Java。
Groovy的核心優(yōu)勢之一是它的腳本功能。類可以被編譯為Java字節(jié)碼或使用Groovy Shell動態(tài)執(zhí)行。Groovy的Java基礎(chǔ)使得它相較于Jython和JRuby更容易為Java開發(fā)人員所接受。
第四篇:JAVA程序員應(yīng)該掌握的10項技能
www.tmdps.cn JAVA程序員應(yīng)該掌握的10項技能
作為一個Java程序員,應(yīng)該掌握的一些技能:
1、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應(yīng)該能夠根據(jù)報錯信息知道是什么樣的語法錯誤并且知道任何修正。
2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
3、工具:必須至少熟練使用一種IDE的開發(fā)工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設(shè)置、插件的安裝配置以及進行調(diào)試。
4、API:Java的核心API是非常龐大的,但是有一些內(nèi)容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用。
◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規(guī)則表達式、zip、以及時間、隨機數(shù)、屬性、資源和Timer.◆java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。
◆java.math包下的100%的內(nèi)容。
◆java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。
◆java.text包下的60%以上的內(nèi)容,特別是各種格式化類。
◆熟練運用JDBC.8)、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java.◆AWT的基本內(nèi)容,包括各種組件事件、監(jiān) 聽器、布局管理器、常用組件、打印。
◆Swing的基本內(nèi)容,和AWT的要求類似。
◆XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理。
www.tmdps.cn
5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
6、管理:必須熟悉使用ant完成工程管理的常用任務(wù),例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。
7、排錯:應(yīng)該可以根據(jù)異常信息比較快速的定位問題的原因和大致位置。
8、思想:必須掌握OOP的主要要求,這樣使用Java開發(fā)的系統(tǒng)才能是真正的Java系統(tǒng)。
9、規(guī)范:編寫的代碼必須符合流行的編碼規(guī)范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
(ps:本文章由北大青鳥廣安門校區(qū)搜集自互聯(lián)網(wǎng))
第五篇:Java程序員必須掌握的線程知識
Java程序員必須掌握的線程知識 Callable和Future Callable和Future出現(xiàn)的原因
創(chuàng)建線程的2種方式,一種是直接繼承Thread,另外一種就是實現(xiàn)Runnable接口。
這2種方式都有一個缺陷就是:在執(zhí)行完任務(wù)之后無法獲取執(zhí)行結(jié)果。如果需要獲取執(zhí)行結(jié)果,就必須通過共享變量或者使用線程通信的方式來達到效果,這樣使用起來就比較麻煩。
而自從Java 1.5開始,就提供了Callable和Future,通過它們可以在任務(wù)執(zhí)行完畢之后得到任務(wù)執(zhí)行結(jié)果。
Callable和Future介紹
Callable接口代表一段可以調(diào)用并返回結(jié)果的代碼;Future接口表示異步任務(wù),是還沒有完成的任務(wù)給出的未來結(jié)果。所以說Callable用于產(chǎn)生結(jié)果,F(xiàn)uture用于獲取結(jié)果。
Callable接口使用泛型去定義它的返回類型。Executors類提供了一些有用的方法在線程池中執(zhí)行Callable內(nèi)的任務(wù)。由于Callable任務(wù)是并行的(并行就是整體看上去是并行的,其實在某個時間點只有一個線程在執(zhí)行),我們必須等待它返回的結(jié)果。
java.util.concurrent.Future對象為我們解決了這個問題。在線程池提交Callable任務(wù)后返回了一個Future對象,使用它可以知道Callable任務(wù)的狀態(tài)和得到Callable返回的執(zhí)行結(jié)果。Future提供了get()方法讓我們可以等待Callable結(jié)束并獲取它的執(zhí)行結(jié)果。
Callable與Runnable
java.lang.Runnable吧,它是一個接口,在它里面只聲明了一個run()方法:
publicinterfaceRunnable{
publicabstractvoid run();}
由于run()方法返回值為void類型,所以在執(zhí)行完任務(wù)之后無法返回任何結(jié)果。
Callable位于java.util.concurrent包下,它也是一個接口,在它里面也只聲明了一個方法,只不過這個方法叫做call():
publicinterfaceCallable
/**
* Computes a result, or throws an exception if unable to do so.*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call()throwsException;}
可以看到,這是一個泛型接口,call()函數(shù)返回的類型就是傳遞進來的V類型。
那么怎么使用Callable呢?
一般情況下是配合ExecutorService來使用的,在ExecutorService接口中聲明了若干個submit方法的重載版本:
第一個submit方法里面的參數(shù)類型就是Callable。
暫時只需要知道Callable一般是和ExecutorService配合來使用的,具體的使用方法講在后面講述。
一般情況下我們使用第一個submit方法和第三個submit方法,第二個submit方法很少使用。
Future
Future就是對于具體的Runnable或者Callable任務(wù)的執(zhí)行結(jié)果進行取消、查詢是否完成、獲取結(jié)果。必要時可以通過get方法獲取執(zhí)行結(jié)果,該方法會阻塞直到任務(wù)返回結(jié)果。
Future類位于java.util.concurrent包下,它是一個接口:
publicinterfaceFuture
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get()throwsInterruptedException,ExecutionException;
V get(long timeout,TimeUnit unit)
throwsInterruptedException,ExecutionException,TimeoutException;}
在Future接口中聲明了5個方法,下面依次解釋每個方法的作用:
cancel方法用來取消任務(wù),如果取消任務(wù)成功則返回true,如果取消任務(wù)失敗則返回false。參數(shù)mayInterruptIfRunning表示是否允許取消正在執(zhí)行卻沒有執(zhí)行完畢的任務(wù),如果設(shè)置true,則表示可以取消正在執(zhí)行過程中的任務(wù)。如果任務(wù)已經(jīng)完成,則無論mayInterruptIfRunning為true還是false,此方法肯定返回false,即如果取消已經(jīng)完成的任務(wù)會返回false;如果任務(wù)正在執(zhí)行,若mayInterruptIfRunning設(shè)置為true,則返回true,若mayInterruptIfRunning設(shè)置為false,則返回false;如果任務(wù)還沒有執(zhí)行,則無論mayInterruptIfRunning為true還是false,肯定返回true。isCancelled方法表示任務(wù)是否被取消成功,如果在任務(wù)正常完成前被取消成功,則返回 true。
isDone方法表示任務(wù)是否已經(jīng)完成,若任務(wù)完成,則返回true;
get()方法用來獲取執(zhí)行結(jié)果,這個方法會產(chǎn)生阻塞,會一直等到任務(wù)執(zhí)行完畢才返回;
get(long timeout, TimeUnit unit)用來獲取執(zhí)行結(jié)果,如果在指定時間內(nèi),還沒獲取到結(jié)果,就直接返回null。
也就是說Future提供了三種功能:
1)判斷任務(wù)是否完成;
2)能夠中斷任務(wù);
3)能夠獲取任務(wù)執(zhí)行結(jié)果。
因為Future只是一個接口,所以是無法直接用來創(chuàng)建對象使用的,因此就有了下面的FutureTask。FutureTask
FutureTask實現(xiàn)了RunnableFuture接口,這個接口的定義如下:
publicinterfaceRunnableFuture
void run();}
可以看到這個接口實現(xiàn)了Runnable和Future接口,接口中的具體實現(xiàn)由FutureTask來實現(xiàn)。這個類的兩個構(gòu)造方法如下 :
publicFutureTask(Callable
if(callable ==null)
thrownewNullPointerException();
sync =newSync(callable);
}
publicFutureTask(Runnable runnable, V result){
sync =newSync(Executors.callable(runnable, result));
} 如上提供了兩個構(gòu)造函數(shù),一個以Callable為參數(shù),另外一個以Runnable為參數(shù)。這些類之間的關(guān)聯(lián)對于任務(wù)建模的辦法非常靈活,允許你基于FutureTask的Runnable特性(因為它實現(xiàn)了Runnable接口),把任務(wù)寫成Callable,然后封裝進一個由執(zhí)行者調(diào)度并在必要時可以取消的FutureTask。
FutureTask可以由執(zhí)行者調(diào)度,這一點很關(guān)鍵。它對外提供的方法基本上就是Future和Runnable接口的組合:get()、cancel、isDone()、isCancelled()和run(),而run()方法通常都是由執(zhí)行者調(diào)用,我們基本上不需要直接調(diào)用它。
一個FutureTask的例子
publicclassMyCallableimplementsCallable
privatelong waitTime;
publicMyCallable(int timeInMillis){
this.waitTime=timeInMillis;
}
@Override
publicString call()throwsException{ Thread.sleep(waitTime);
//return the thread name executing this callable task
returnThread.currentThread().getName();
}
}
publicclassFutureTaskExample{
publicstaticvoid main(String[] args){
MyCallable callable1 =newMyCallable(1000);// 要執(zhí)行的任務(wù)
MyCallable callable2 =newMyCallable(2000);
FutureTask
FutureTask
ExecutorService executor =Executors.newFixedThreadPool(2);// 創(chuàng)建線程池并返回ExecutorService實例
executor.execute(futureTask1);// 執(zhí)行任務(wù)
executor.execute(futureTask2);
while(true){
try{
if(futureTask1.isDone()&& futureTask2.isDone()){// 兩個任務(wù)都完成System.out.println(“Done”);
executor.shutdown();// 關(guān)閉線程池和服務(wù)
return;
}
if(!futureTask1.isDone()){// 任務(wù)1沒有完成,會等待,直到任務(wù)完成 System.out.println(“FutureTask1 output=”+futureTask1.get());
}
System.out.println(“Waiting for FutureTask2 to complete”);
String s = futureTask2.get(200L,TimeUnit.MILLISECONDS);
if(s!=null){
System.out.println(“FutureTask2 output=”+s);
}
}catch(InterruptedException|ExecutionException e){
e.printStackTrace();
}catch(TimeoutException e){
//do nothing
}
} }}
運行如上程序后,可以看到一段時間內(nèi)沒有輸出,因為get()方法等待任務(wù)執(zhí)行完成然后才輸出內(nèi)容.輸出結(jié)果如下:
FutureTask1 output=pool-1-thread-1WaitingforFutureTask2 to completeWaitingforFutureTask2 to completeWaitingforFutureTask2 to completeWaitingforFutureTask2 to completeWaitingforFutureTask2 to completeFutureTask2 output=pool-1-thread-2Done