<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    IT神童

    java,net,php技術研究神童

    2012年8月23日

    讓Java代碼跑得更快

    本文簡單介紹一下在寫代碼過程中用到的一些讓JAVA代碼更高效的技巧。

    1,將一些系統(tǒng)資源放在池中,如數(shù)據(jù)庫連接,線程等.在standalone的應用中,數(shù)據(jù)庫連接池可以使用一些開源的連接池實現(xiàn),如C3P0,proxool和DBCP等,在運行在容器中的應用這可以使用服務器提供的DataSource.線程池可以使用JDK本身就提供的java.util.concurrent.ExecutorService.

    1. import java.util.concurrent.Executors;  
    2. import java.util.concurrent.ExecutorService;  
    3. public class JavaThreadPool {  
    4.     public static void main(String[] args) {  
    5.     ExecutorService pool = Executors.newFixedThreadPool(2);  
    6.       
    7.     Thread t1 = new MyThread();  
    8.     Thread t2 = new MyThread();  
    9.     Thread t3 = new MyThread();  
    10.     Thread t4 = new MyThread();  
    11.     Thread t5 = new MyThread();  
    12.  
    13.     pool.execute(t1);  
    14.     pool.execute(t2);  
    15.     pool.execute(t3);  
    16.     pool.execute(t4);  
    17.  
    18.     pool.shutdown();  
    19.     }  
    20. }  
    21.  
    22. class MyThread extends Thread {  
    23.     public void run() {  
    24.     System.out.println(Thread.currentThread().getName() + "running....");  
    25.     }  
    26. }  

    2,減少網(wǎng)絡開銷,在和數(shù)據(jù)庫或者遠程服務交互的時候,盡量將多次調(diào)用合并到一次調(diào)用中。

    3,將經(jīng)常訪問的外部資源cache到內(nèi)存中,簡單的可以使用static的hashmap在應用啟動的時候加載,也可以使用一些開源的cache框架,如OSCache和Ehcache等.和資源的同步可以考慮定期輪詢和外部資源更新時候主動通知.或者在自己寫的代碼中留出接口(命令方式或者界面方式)共手動同步。

    4,優(yōu)化IO操作,JAVA操作文件的時候分InputStream and OutputStream,Reader and Writer兩類,stream的方式要快,后者主要是為了操作字符而用的,在字符僅僅是ASCII的時候可以用stream的方式提高效率.JDK1.4之后的nio比io的效率更好。java教程下載

    1. OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/temp/test.txt")));              
    2. out.write("abcde".getBytes());        
    3. out.flush();  
    4. out.close(); 

    利用BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter減少對磁盤的直接訪問次數(shù)。

    1. FileReader fr = new FileReader(f);  
    2. BufferedReader br = new BufferedReader(fr);  
    3. while (br.readLine() != null) count++; 

    5不要頻繁的new對象,對于在整個應用中只需要存在一個實例的類使用單例模式.對于String的連接操作,使用StringBuffer或者StringBuilder.對于utility類型的類通過靜態(tài)方法來訪問。

    6,避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。

    7,對性能的考慮要在系統(tǒng)分析和設計之初就要考慮。

    總之,一個系統(tǒng)運行時的性能,無非是從CPU,Memory和IO這三個主要方面來考慮優(yōu)化.減少不必要的CPU消耗,減少不必要的IO操作,增加Memory利用效率。

    posted @ 2012-08-23 14:42 IT神童 閱讀(541) | 評論 (0)編輯 收藏

    Java高并發(fā):靜態(tài)頁面生成方案

    提升網(wǎng)站性能的方式有很多,例如有效的使用緩存,生成靜態(tài)頁面等等。今天要說的就是生成靜態(tài)頁面的方式。這個也是我近期一直在搞的一個問題,近期在做使用html + servlet做個人網(wǎng)站,為什么是這2個東西呢?

    1、直接用servlet是為了保證網(wǎng)站能以最快的速度執(zhí)行命令個人總感覺像Struts hibernate spring之類的雖然方便但是效能帶來的損耗不太能接收

    2、使用html同樣是為了保證最快的反應速度,畢竟html 比jsp少了一層服務器執(zhí)行。速度上要快的多

    一、在這里要先說一下什么是頁面靜態(tài)化:

    簡單的說,我們?nèi)绻L問一個鏈接 ,服務器對應的模塊會處理這個請求,轉(zhuǎn)到對應的jsp界面,最后生成我們想要看到的數(shù)據(jù)。這其中的缺點是顯而易見的:因為每次請求服務器都會進行處理,如果有太多的高并發(fā)請求,那么就會加重應用服務器的壓力,弄不好就把服務器 搞down 掉了。那么如何去避免呢?如果我們把對 test.do 請求后的結(jié)果保存成一個 html 文件,然后每次用戶都去訪問 ,這樣應用服務器的壓力不就減少了?

    那么靜態(tài)頁面從哪里來呢?總不能讓我們每個頁面都手動處理吧?這里就牽涉到我們要講解的內(nèi)容了,靜態(tài)頁面生成方案… 我們需要的是自動的生成靜態(tài)頁面,當用戶訪問 ,會自動生成 test.html ,然后顯示給用戶。

    二、下面我們在簡單介紹一下要想掌握頁面靜態(tài)化方案應該掌握的知識點

    1、 基礎- URL Rewrite

    什么是 URL Rewrite 呢 ? URL 重寫。用一個簡單的例子來說明問題:輸入網(wǎng)址 ,但是實際上訪問的卻是 abc.com/test.action,那我們就可以說 URL 被重寫了。這項技術應用廣泛,有許多開源的工具可以實現(xiàn)這個功能。java電子書免費下載2、 基礎- Servlet web.xml

    如果你還不知道 web.xml 中一個請求和一個 servlet 是如何匹配到一起的,那么請搜索一下 servlet 的文檔。這可不是亂說呀,有很多人就認為 /xyz/*.do 這樣的匹配方式能有效。

    如果你還不知道怎么編寫一個 servlet ,那么請搜索一下如何編寫 servlet.這可不是說笑呀,在各種集成工具漫天飛舞的今天,很多人都不會去從零編寫一個 servlet了。

    三、基本的方案介紹

    其中,對于 URL Rewriter的部分,可以使用收費或者開源的工具來實現(xiàn),如果 url不是特別的復雜,可以考慮在 servlet 中實現(xiàn),那么就是下面這個樣子:
     

    posted @ 2012-08-23 14:41 IT神童 閱讀(147) | 評論 (0)編輯 收藏

    公司的Java框架應具備的通用功能

    以前在學校的時候自己以為是不是每個做JAVA開發(fā)的公司每次做項目的時候都要搭建一個SSH框架呢,工作之后才發(fā)現(xiàn)每個公司都有自己的一套框架,要不是在SSH基礎上,要不是在SSI基礎上進行了符合自己公司需求的封裝,并且隨著自己公司的框架被應用到各個實際系統(tǒng)的過程中,這個框架會越來越成熟,會使該公司的開發(fā)效率越來越高。

    根據(jù)筆者接觸過的幾個公司的框架,筆者發(fā)現(xiàn)要想實現(xiàn)高效的開發(fā),每個公司的框架應該具備如下的特點:

    1.具有靈活的分頁功能。

    分頁功能是每個項目中必須要實現(xiàn)的功能,而恰恰這個功能是比較費時費力的,如果在框架中實現(xiàn)這一功能,將在每個項目中大大減少分頁的重復性工作。

    2.可以方便的實現(xiàn)文件的上傳與下載、數(shù)據(jù)的導入和導出的功能。

    文件的上傳于下載、數(shù)據(jù)的導入和導出在大部門項目中也會遇到,但是這兩個功能可能會因為項目的不同導致實現(xiàn)上有一點區(qū)別,我們框架中要做的就是應該抽出其中共有的東西,定義為抽象的東西,以便不同的項目、不同的需求都能很容易的實現(xiàn)該功能。成都java培訓機構(gòu)
    3.方便的事務管理功能。

    事務管理一般來說都定義在業(yè)務邏輯層。我們框架中應該實現(xiàn)對業(yè)務邏輯對象事務的簡單配置甚至是零配置。筆者接觸過的兩個框架中,一個需要在配置完一個業(yè)務邏輯對象時,在事務管理的配置文件中加上一句簡單的配置即可,另一個是框架中實現(xiàn)了幾個基本的業(yè)務邏輯對象,并對這幾個對象實現(xiàn)了事務管理的配置,開發(fā)的時候定義的業(yè)務邏輯對象都是繼承自這幾個基本對象,也就省去了事務管理的配置。

    4.具有異常處理框架。

    基本上每個項目的異常處理都應該可以使用公司的框架定義的異常處理框架,并不會因為項目的不同而要求的異常處理也不一樣。

    5.具有自己的一套頁面組件。

    項目開發(fā)都是團隊的開發(fā),要想保證每個開發(fā)人員的界面風格統(tǒng)一,最好的辦法就是定義一套公司自己的頁面組建。這樣既能保證開發(fā)效率,也能做到界面的統(tǒng)一。freemark就是不錯的選擇,其支持自定義宏,公司框架中可以定義一套自己的頁面組建宏,供開發(fā)人員調(diào)用即可。


     

    6.具有數(shù)據(jù)校驗框架。

    每個項目在數(shù)據(jù)校驗時都可能會用到大量的正則表達式,那么在公司的框架中將這些正則表達式封裝起來,提供統(tǒng)一的調(diào)用接口將是不錯的選擇。

    7.簡單的實現(xiàn)菜單的配置。

    一個好的框架應該提供對菜單、二級菜單等的簡單配置、管理。還是上文提到的兩個框架,一個是通過XML配置文件實現(xiàn)了對系統(tǒng)中一級菜單、二級菜單、三級菜單的管理,而另個框架要實現(xiàn)相同的需求卻要在數(shù)據(jù)庫中進行繁瑣的配置,顯然第一個框架的實現(xiàn)方案更可取、更高效。

    posted @ 2012-08-23 14:40 IT神童 閱讀(270) | 評論 (1)編輯 收藏

    Java中用內(nèi)存映射處理大文件

    在處理大文件時,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 來進行頻繁的讀寫操作,都將導致進程因頻繁讀寫外存而降低速度.如下為一個對比實驗。

    1. package test;  
    2.  
    3. import java.io.BufferedInputStream;  
    4. import java.io.FileInputStream;  
    5. import java.io.FileNotFoundException;  
    6. import java.io.IOException;  
    7. import java.io.RandomAccessFile;  
    8. import java.nio.MappedByteBuffer;  
    9. import java.nio.channels.FileChannel;  
    10.  
    11. public class Test {  
    12.  
    13.       
    14.     public static void main(String[] args) {  
    15.         try {  
    16.             FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt");  
    17.             int sum=0;  
    18.             int n;  
    19.             long t1=System.currentTimeMillis();  
    20.             try {  
    21.                 while((n=fis.read())>=0){  
    22.                     sum+=n;  
    23.                 }  
    24.             } catch (IOException e) {  
    25.                 // TODO Auto-generated catch block  
    26.                 e.printStackTrace();  
    27.             }  
    28.             long t=System.currentTimeMillis()-t1;  
    29.             System.out.println("sum:"+sum+"  time:"+t);  
    30.         } catch (FileNotFoundException e) {  
    31.             // TODO Auto-generated catch block  
    32.             e.printStackTrace();  
    33.         }  
    34.           
    35.         try {  
    36.             FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt");  
    37.             BufferedInputStream bis=new BufferedInputStream(fis);  
    38.             int sum=0;  
    39.             int n;  
    40.             long t1=System.currentTimeMillis();  
    41.             try {  
    42.                 while((n=bis.read())>=0){  
    43.                     sum+=n;  
    44.                 }  
    45.             } catch (IOException e) {  
    46.                 // TODO Auto-generated catch block  
    47.                 e.printStackTrace();  
    48.             }  
    49.             long t=System.currentTimeMillis()-t1;  
    50.             System.out.println("sum:"+sum+"  time:"+t);  
    51.         } catch (FileNotFoundException e) {  
    52.             // TODO Auto-generated catch block  
    53.             e.printStackTrace();  
    54.         }  
    55.           
    56.         MappedByteBuffer buffer=null;  
    57.         try {  
    58.             buffer=new RandomAccessFile("/home/tobacco/test/res.txt","rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 01253244);  
    59.             int sum=0;  
    60.             int n;  
    61.             long t1=System.currentTimeMillis();  
    62.             for(int i=0;i<1253244;i++){  
    63.                 n=0x000000ff&buffer.get(i);  
    64.                 sum+=n;  
    65.             }  
    66.             long t=System.currentTimeMillis()-t1;  
    67.             System.out.println("sum:"+sum+"  time:"+t);  
    68.         } catch (FileNotFoundException e) {  
    69.             // TODO Auto-generated catch block  
    70.             e.printStackTrace();  
    71.         } catch (IOException e) {  
    72.             // TODO Auto-generated catch block  
    73.             e.printStackTrace();  
    74.         }  
    75.  
    76.     }  
    77.  
    78. }  
    java基礎教程
    測試文件為一個大小為1253244字節(jié)的文件。測試結(jié)果:
    1. sum:220152087 time:1464  
    2. sum:220152087 time:72  
    3. sum:220152087 time:25 

    說明讀數(shù)據(jù)無誤。刪去其中的數(shù)據(jù)處理部分。

    1. package test;  
    2.  
    3. import java.io.BufferedInputStream;  
    4. import java.io.FileInputStream;  
    5. import java.io.FileNotFoundException;  
    6. import java.io.IOException;  
    7. import java.io.RandomAccessFile;  
    8. import java.nio.MappedByteBuffer;  
    9. import java.nio.channels.FileChannel;  
    10.  
    11. public class Test {  
    12.  
    13.       
    14.     public static void main(String[] args) {  
    15.         try {  
    16.             FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt");  
    17.             int sum=0;  
    18.             int n;  
    19.             long t1=System.currentTimeMillis();  
    20.             try {  
    21.                 while((n=fis.read())>=0){  
    22.                     //sum+=n;  
    23.                 }  
    24.             } catch (IOException e) {  
    25.                 // TODO Auto-generated catch block  
    26.                 e.printStackTrace();  
    27.             }  
    28.             long t=System.currentTimeMillis()-t1;  
    29.             System.out.println("sum:"+sum+"  time:"+t);  
    30.         } catch (FileNotFoundException e) {  
    31.             // TODO Auto-generated catch block  
    32.             e.printStackTrace();  
    33.         }  
    34.           
    35.         try {  
    36.             FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt");  
    37.             BufferedInputStream bis=new BufferedInputStream(fis);  
    38.             int sum=0;  
    39.             int n;  
    40.             long t1=System.currentTimeMillis();  
    41.             try {  
    42.                 while((n=bis.read())>=0){  
    43.                     //sum+=n;  
    44.                 }  
    45.             } catch (IOException e) {  
    46.                 // TODO Auto-generated catch block  
    47.                 e.printStackTrace();  
    48.             }  
    49.             long t=System.currentTimeMillis()-t1;  
    50.             System.out.println("sum:"+sum+"  time:"+t);  
    51.         } catch (FileNotFoundException e) {  
    52.             // TODO Auto-generated catch block  
    53.             e.printStackTrace();  
    54.         }  
    55.           
    56.         MappedByteBuffer buffer=null;  
    57.         try {  
    58.             buffer=new RandomAccessFile("/home/tobacco/test/res.txt","rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 01253244);  
    59.             int sum=0;  
    60.             int n;  
    61.             long t1=System.currentTimeMillis();  
    62.             for(int i=0;i<1253244;i++){  
    63.                 //n=0x000000ff&buffer.get(i);  
    64.                 //sum+=n;  
    65.             }  
    66.             long t=System.currentTimeMillis()-t1;  
    67.             System.out.println("sum:"+sum+"  time:"+t);  
    68.         } catch (FileNotFoundException e) {  
    69.             // TODO Auto-generated catch block  
    70.             e.printStackTrace();  
    71.         } catch (IOException e) {  
    72.             // TODO Auto-generated catch block  
    73.             e.printStackTrace();  
    74.         }  
    75.  
    76.     }  
    77.  

    測試結(jié)果:

    1. sum:0 time:1458  
    2. sum:0 time:67  
    3. sum:0 time:8 

    由此可見,將文件部分或者全部映射到內(nèi)存后進行讀寫,速度將提高很多。

    這是因為內(nèi)存映射文件首先將外存上的文件映射到內(nèi)存中的一塊連續(xù)區(qū)域,被當成一個字節(jié)數(shù)組進行處理,讀寫操作直接對內(nèi)存進行操作,而后再將內(nèi)存區(qū)域重新映射到外存文件,這就節(jié)省了中間頻繁的對外存進行讀寫的時間,大大降低了讀寫時間。

    posted @ 2012-08-23 14:37 IT神童 閱讀(214) | 評論 (0)編輯 收藏

    2012年8月22日

    淺談Java中的幾種隨機數(shù)

    摘要:眾所周知,隨機數(shù)是任何一種編程語言最基本的特征之一。而生成隨機數(shù)的基本方式也是相同的:產(chǎn)生一個0到1之間的隨機數(shù)。看似簡單,但有時我們也會忽略了一些有趣的功能。

    眾所周知,隨機數(shù)是任何一種編程語言最基本的特征之一。而生成隨機數(shù)的基本方式也是相同的:產(chǎn)生一個0到1之間的隨機數(shù)??此坪唵?,但有時我們也會忽略了一些有趣的功能。

    我們從書本上學到什么?

    最明顯的,也是直觀的方式,在Java中生成隨機數(shù)只要簡單的調(diào)用:

    1. java.lang.Math.random() 

    在所有其他語言中,生成隨機數(shù)就像是使用Math工具類,如abs, pow, floor, sqrt和其他數(shù)學函數(shù)。大多數(shù)人通過書籍、教程和課程來了解這個類。一個簡單的例子:從0.0到1.0之間可以生成一個雙精度浮點數(shù)。那么通過上面的信息,開發(fā)人員要產(chǎn)生0.0和10.0之間的雙精度浮點數(shù)會這樣來寫:

    1. Math.random() * 10 

    而產(chǎn)生0和10之間的整數(shù),則會寫成:

    1. Math.round(Math.random() * 10) 

    進階

    通過閱讀Math.random()的源碼,或者干脆利用IDE的自動完成功能,開發(fā)人員可以很容易發(fā)現(xiàn),java.lang.Math.random()使用一個內(nèi)部的隨機生成對象 - 一個很強大的對象可以靈活的隨機產(chǎn)生:布爾值、所有數(shù)字類型,甚至是高斯分布。例如:

    1. new java.util.Random().nextInt(10) 

    它有一個缺點,就是它是一個對象。它的方法必須是通過一個實例來調(diào)用,這意味著必須先調(diào)用它的構(gòu)造函數(shù)。如果在內(nèi)存充足的情況下,像上面的表達式是可以接受的;但內(nèi)存不足時,就會帶來問題。java教程下載一個簡單的解決方案,可以避免每次需要生成一個隨機數(shù)時創(chuàng)建一個新實例,那就是使用一個靜態(tài)類。猜你可能想到了java.lang.Math,很好,我們就是改良java.lang.Math的初始化。雖然這個工程量低,但你也要做一些簡單的單元測試來確保其不會出錯。

    假設程序需要生成一個隨機數(shù)來存儲,問題就又來了。比如有時需要操作或保護種子(seed),一個內(nèi)部數(shù)用來存儲狀態(tài)和計算下一個隨機數(shù)。在這些特殊情況下,共用隨機生成對象是不合適的。

    并發(fā)

    在Java EE多線程應用程序的環(huán)境中,隨機生成實例對象仍然可以被存儲在類或其他實現(xiàn)類,作為一個靜態(tài)屬性。幸運的是,java.util.Random是線程安全的,所以不存在多個線程調(diào)用會破壞種子(seed)的風險。

    另一個值得考慮的是多線程java.lang.ThreadLocal的實例。偷懶的做法是通過Java本身API實現(xiàn)單一實例,當然你也可以確保每一個線程都有自己的一個實例對象。

    雖然Java沒有提供一個很好的方法來管理java.util.Random的單一實例。但是,期待已久的Java 7提供了一種新的方式來產(chǎn)生隨機數(shù):

    1. java.util.concurrent.ThreadLocalRandom.current().nextInt(10) 

    這個新的API綜合了其他兩種方法的優(yōu)點:單一實例/靜態(tài)訪問,就像Math.random()一樣靈活。ThreadLocalRandom也比其他任何處理高并發(fā)的方法要更快。

    經(jīng)驗

    Chris Marasti-Georg 指出:

    1. Math.round(Math.random() * 10) 

    使分布不平衡,例如:0.0 - 0.499999將四舍五入為0,而0.5至1.499999將四舍五入為1。那么如何使用舊式語法來實現(xiàn)正確的均衡分布,如下:

    1. Math.floor(Math.random() * 11) 

    幸運的是,如果我們使用java.util.Random或java.util.concurrent.ThreadLocalRandom就不用擔心上述問題了。

    Java實戰(zhàn)項目里面介紹了一些不正確使用java.util.Random API的危害。這個教訓告訴我們不要使用:

    1. Math.abs(rnd.nextInt())%n 

    而使用:

    1. rnd.nextInt(n) 

    posted @ 2012-08-22 10:19 IT神童 閱讀(203) | 評論 (0)編輯 收藏

    Java 8的重要新特性以及未來版本的發(fā)展規(guī)劃

    摘要:我們一直在期待著Java 8的新功能,雖然很大一部分是對Java 7的擴展,發(fā)布時間也一推再推。但如今甲骨文終于承諾:新版本將是徹底的變革而不僅僅是Java 7的擴展。那Java 8到底是什么樣的呢?

    我們一直在期待著Java 8的新功能,雖然很大一部分是對Java 7的擴展,發(fā)布時間也一推再推。但如今甲骨文終于承諾:新版本將是徹底的變革而不僅僅是Java 7的擴展。那Java 8到底是什么樣的呢?

    甲骨文的Java總架構(gòu)師馬克•雷納德在2011年JavaOne大會上為大家透露了Java 8的新功能,同時也談到了一些關于Java 9的計劃。他說,Java 7未能實現(xiàn)五個關鍵的功能是非常遺憾的一件事,而且另外兩個功能為了配合發(fā)布日期也只好作罷。馬克認為,Java 7的更新是非常重要的,他還暗示,Java 8將從根本上改變編程語言的功能??赐晗旅娴慕榻B你也許會明白馬克的說法不是天方夜譚。

    Java 8包含兩個主要項目:

    1. Lambda

    Lambda項目中,多核處理器下的Java編程將更高效,Lambda表達式可以幫助開發(fā)人員提高效率,更好地利用多核處理器。Lambda項目還包括一個新的處理系統(tǒng),該系統(tǒng)允許要求代碼建模的編程模式作為數(shù)據(jù)。新功能一覽:

    • Lambda表達式的運用
    • 擴展目標類型化
    • 方法和構(gòu)造函數(shù)參考
    • 默認方法

    2. Jigsaw

    Jigsaw項目的目標是創(chuàng)建一個實用的方式來在JDK上設計和實施一個模塊系統(tǒng),然后將該系統(tǒng)應用于JDK本身。其關鍵是令大塊的代碼更易于管理,并促進應用和大型運算的代碼重用。Jigsaw項目還帶來了許多新的表單功能,涉及封裝、重構(gòu)、版本和模塊集成。

    此外,除了這兩個項目,Java 8 還增加改進了一些其他語言功能,如升級核心Java庫使并行運算的表達更容易;虛擬擴展方法允許對接口增加方法,為默認實現(xiàn)指定參考;增加新的日期/時間API,同時支持傳感器,增加代碼的部署選項。

    Java 9、10的發(fā)展規(guī)劃

    甲骨文對Java 8 的前景很是看好,并已經(jīng)開始討論Java 9發(fā)展的關鍵領域。比如加入一個self-tuning JVM,提高本地集成和大規(guī)模多核的可擴展性;通過新的元對象協(xié)議和資源管理器為云應用添加跨語言支持。java電子書免費下載

    甲骨文也表示,Java9和10將加入大數(shù)據(jù)、多語言的互操作性、云計算和移動,預期分別于2015年和2017年發(fā)布。而關于Java開發(fā)工具包(JDK)10以及之后的版本也正在討論中,比如使Java語言面向?qū)ο螅纬梢粋€統(tǒng)一的類型系統(tǒng),所有原語都將轉(zhuǎn)換為對象和方法。

    隨著使用人數(shù)的增加,Java正逐漸成為最常用的編程語言,令每個使用者都滿意成了它的目標。甲骨文認為Java在將來會成為開發(fā)者們首選的編程語言,因為它可以實現(xiàn)的東西正好符合了開發(fā)者們的期望。 

    posted @ 2012-08-22 10:17 IT神童 閱讀(174) | 評論 (0)編輯 收藏

    java基礎學習--排序算法

    選擇排序:讓第一個跟后面的每個元素比較,如果大于則交換量元素的位置,第二次則讓第二個元素跟后面的元素一次比較(因為第一個元素的位置已經(jīng)定了),一次類推直到最后一個元素.
    代碼:
    public class TestChoose {
    public static void main(String[] args) {
    int[] arr = {8,3,67,43,21,56,78};
    choose(arr);
    printArray(arr);
    }
    public static void choose(int[] arr){
    int temp = 0;
    for(int i = 0;i < arr.length;i ++){
    for(int j = i+1;j < arr.length;j ++){
    if(arr[i]>arr[j]){
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }
    }
    }
    }
    public static void printArray(int[] arr){
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+" ");
    }
    System.out.println();
    }
    }
    當if(arr[i]>arr[j])時:為升序排列
    if(arr[i]<arr[j])時:為降序排列
    冒泡排序:每次相鄰的兩個元素的相比較,每次相比大的放后面,每次比完以后最大的元素就確定 了,然后在從第一個元素開始,每相鄰的兩個元素之間的比較成都java培訓機構(gòu)
    代碼:
    public static void bubbleSort(int[] arr){
    int temp = 0;
    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length -i -1; j++) {
    if(arr[j]>arr[j+1]){
    temp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = temp;
    }
    }
    }
    }
    對上面中arr.length-x-1說明 
    -x  是為了每次少比一次,每次比完以后最后的那個元素位值就確定了,所以沒有必要再比成都java培訓機構(gòu)
    -1  是防止數(shù)組越界,當我i=0的事,j最后一次就是arr.length,如果不減1,則會出現(xiàn)數(shù)組訪問越界

    把上面的代碼中的choose(arr)改成bubbleSort(arr)可以測試冒泡排序的算法

    posted @ 2012-08-22 10:15 IT神童 閱讀(180) | 評論 (0)編輯 收藏

    Java程序員面試中的多線程問題

         摘要:   閱讀全文

    posted @ 2012-08-22 10:07 IT神童 閱讀(188) | 評論 (0)編輯 收藏

    僅列出標題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: AV大片在线无码永久免费| baoyu122.永久免费视频| 在线视频观看免费视频18| 亚洲美女中文字幕| 免费无码毛片一区二区APP| 国产aⅴ无码专区亚洲av| 精品97国产免费人成视频| 在线播放亚洲第一字幕| 免费人成激情视频在线观看冫 | 免费无码又爽又刺激毛片| 亚洲熟女综合色一区二区三区| 成人最新午夜免费视频| 亚洲精品成a人在线观看☆| 国产午夜免费秋霞影院| fc2成年免费共享视频网站| 亚洲色精品88色婷婷七月丁香| 毛片在线播放免费观看| 亚洲国产美女福利直播秀一区二区 | 亚洲第一福利网站在线观看| 成人一级免费视频| 亚洲Av熟妇高潮30p| 日本zzzzwww大片免费| 亚洲AV无码国产剧情| 亚洲综合色婷婷七月丁香| 99久久免费看国产精品| 亚洲中文无码永久免| 亚洲国产婷婷综合在线精品| 可以免费观看的国产视频| 涩涩色中文综合亚洲| 亚洲国产日韩成人综合天堂| 精品无码人妻一区二区免费蜜桃| 亚洲AV无码一区二区三区牛牛| 又粗又大又长又爽免费视频| 在线成人精品国产区免费| 亚洲国产精品综合久久20| 亚洲国产成人爱av在线播放| 亚洲成人免费网址| 免费看黄网站在线看| 亚洲白色白色永久观看| 亚洲成人一区二区| 97免费人妻无码视频|