Time of Update: 2017-02-28
今天一個web伺服器不工作了,查看日誌.tomcat報出如下資訊:Caused by: java.lang.OutOfMemoryError: allocLargeArray - Object size: 80040, Num elements: 40010以上日誌資訊基本的意思是程式要分配一個大小為 80040位元組的數組(在JVM中數組也是對象,也是在heap中分配的),40010是指數組元素的多少。但是分配這個數組的時候,
Time of Update: 2017-02-28
許多應用程式都要求動態產生 PDF 文檔。這些應用程式涵蓋從產生客戶對帳單並通過電子郵件交付的銀行到購買特定的 圖書章節並以 PDF 格式接收這些圖書章節的讀者。這個列表不勝枚舉。在本文中,我們將使用 iText Java 庫產生 PDF 文 檔。我們將向您示範一個範例應用程式,以便您可自行完成它並能更好地理解它。熟悉 iText V5.3.0 版iText 是一個可從 http://itextpdf.com/ 免費擷取的 Java 庫。iText 庫非常強大,且支援產生 HTML、RTF 和
Time of Update: 2017-02-28
探究這些下一代 JVM 語言如何處理操作符重載程式設計語言中的好理念可以延續並擴充到其他語言,就像美酒一樣曆久彌香。因此,不足奇怪的是,Java 下一代語言 — Groovy、Scala 和 Clojure — 具有很多共同的特性。在本期和下一期 Java 下一代 文章中,我將探討每種語言文法中功 能清單的一致性。我從能夠重載操作符這個特性說起 — 克服了Java 語言中長期存在的一個缺點。操作符重 載如果您改造過 Java BigDecimal
Time of Update: 2017-02-28
瞭解Java 下一代語言如何減少樣板代碼和降低複雜性Java 程式設計語言誕生時所面臨的限制與如今的開發人員所面臨的條件有所不同。具體來講,由於上世紀 90 年代中期的硬 件的效能和記憶體限制,Java 語言中存在原語類型。從那時起,Java 語言不斷在演化,通過自動裝箱(autobox)消除了許 多麻煩操作,而下一代語言(Groovy、Scala 和 Clojure)更進一步,消除了每種語言中的不一致性和衝突。在這 一期的文章中,我將展示下一代語言如何消除一些常見的 Java
Time of Update: 2017-02-28
===@Model註解的用途 @Model註解做了如下的事情:使bean擁有request-scoped周期範圍(取代預設的@dependent)給bean一個EL命名建立一個請求範圍並且賦予命名的bean,就像一個標註有@RequestScoped和@Named的類,自從這樣的註解組合頻繁的出現在Web應用中,CDI就提供了內建的註解@Model方便使用。//@Model例子 @Model public class SampleBean { private String
Time of Update: 2017-02-28
本文示範如何使用Collections.frequency和Map來計算重複項出現的次數。(Collections.frequency在JDK 1.5版本以後支援)package com.qiyadeng.core; import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.List;import
Time of Update: 2017-02-28
本文中示範如何通過URLConnection擷取Http響應Header資訊1.從響應中獲得Header資訊URL obj = new URL("http://www.bianceng.cn");URLConnection conn = obj.openConnection();Map<String, List<String>> map = conn.getHeaderFields();2.從響應Header中擷取Server資訊Map<String,
Time of Update: 2017-02-28
null 指標異常(Null Pointer Exception)是我們平時最容易碰到的,也是最令人討厭的異常。本文介紹如何避免出現null 指標異常。首先我們看如下的樣本private Boolean isFinished(String status) { if (status.equalsIgnoreCase("Finish")) { return Boolean.TRUE; } else { return
Time of Update: 2017-02-28
引言系統日誌是應用程式問題診斷及運行維護的重要工具。Logback、Log4j 是常用於 Java 平台的日誌記錄 API. 目前大部分產品只是將系統重要參數、狀態的變化及異常資訊通過日誌輸出。本文將要介紹的 Perf4j 是一款專門用 於 Java 伺服器端代碼計時、記錄日誌和監控結果的開源工具包。Perf4j 對常用日誌工具包進行了擴充,能夠將得到的原 始效能資料進行統計並發布到可定製的輸出源,如控制台、記錄檔、JMX 等。Perf4j 提供了多種方式與 Java 代碼整合
Time of Update: 2017-02-28
引言隨著資訊系統的結構的日益複雜和規模的不斷擴大,交易中介軟體在複雜系統的應用也越來越廣。交易中介軟體 作為一個中介層的系統,在接收用戶端請求時,通常需要做一些負載控制和使用者緩衝的一些功能。對於軟體測試人員來說, 測試交易中介軟體時,避免不了類比用戶端在高負載情況下的一些有規律或隨機的行為。這些測試有時是功能性驗證測試 (Functional Verification Test),有時也涉及到效能測試 (Performance Test)。本文將介紹如何使用 Java 語言
Time of Update: 2017-02-28
作為一種誕生於互連網興起時代的語言,Java 從一開始就帶有安全上的考慮,如何保證通過互連網下載到本地的 Java 程式是安全的,如何對 Java 程式訪問本地資源許可權進行有限授權,這些安全形度的考慮一開始就影響到 Java 語言的設計 與實現。可以說 Java 在這些方面的探索與經驗,對後來的一些語言與產品都帶來了積極影響。本篇文章中將介紹 Java 中安全模型,以及如何利用安全存取控制機制來實現一些特定目的。Java 中的安全模型在 Java
Time of Update: 2017-02-28
惰性計算(儘可能延遲運算式求值)是許多函數式程式設計語言的特性。惰性集合在需要時提供其元素,無需預先計算它們 ,這帶來了一些好處。首先,您可以將耗時的計算延遲到絕對需要的時候。其次,您可以創造無限個集合,只要它們繼續收 到請求,就會繼續提供元素。第三,map 和 filter 等函數的惰性使用讓您能夠得到更高效的代碼。Java 並沒有為惰性提 供原生支援,但一些架構和後繼語言支援這種惰性,我會在本期和下期文章中探討它們。假定使用此虛擬碼片段來 列印列表的長度:print length([2+1,
Time of Update: 2017-02-28
如今,許多公司專屬應用程式程式都由一組合作的分布式進程和伺服器交付。例如,可向幾乎所有流行的 Java 企業伺服器的 Web 請求提供伺服器叢集功能,這些伺服器還可以提供有限的配置選項,如伺服器權重和配置重新載入。雖然大多 數 Java 企業伺服器具有叢集的內建支援,但對於自訂用例來說,在應用程式級並沒有現成提供這種支援。作為軟體開發 人員,我們應該如何管理涉及分布式任務協調或支援多租戶應用程式的用例?(多租戶應用程式 是要求執行個體在整體伺服器
Time of Update: 2017-02-28
引言在前端最佳化的第一部分中,主要講解了對靜態資源的一些最佳化措施,包括圖片壓縮、CSS Sprites 技術、 GZIP 壓縮等。這一部分,本文將講解前端最佳化裡重要的 Flush 機制、動靜分離、HTTP 持久串連、HTTP 協議靈活應用、 CDN 等。結合這些技術或思想,相信會使 Java Web 應用程式的效能更上一層樓。Flush 機制的使用實際上 在 Web 技術中,Flush 機制並不新鮮,它的思想是無需等到網頁內容全部載入完畢,一次性寫回用戶端,而是可以部分逐
Time of Update: 2017-02-28
衡配量序的標準衡量一個程式是否優質,可以從多個角度進行分析。其中,最常見的衡量標準是程式的時間複雜 度、空間複雜度,以及代碼的可讀性、可擴充性。針對程式的時間複雜度和空間複雜度,想要最佳化程式碼,需要對資料結 構與演算法有深入的理解,並且熟悉電腦系統的基本概念和原理;而針對代碼的可讀性和可擴充性,想要最佳化程式碼,需 要深入理解軟體架構設計,熟知並會應用合適的設計模式。首先,如今電腦系統的儲存空間已經足夠大了,達到 了 TB
Time of Update: 2017-02-28
在我們編寫代碼的時候,常常會有這樣的情形:一部分代碼是可以根據另一部分代碼按照某種特定的模式變化而來的; 有時,隨著那一部分被依賴的代碼發生變化,依賴的代碼不得不跟著修改;有時,這樣的代碼會隨著項目的推進,不止一次 的出現。很典型的一個例子就是,當需要自己實現資料訪問層時,通常每個實體類會對應一個 DAO(Data Access Objects)類,並 且一般來講 DAO 類的代碼編寫是很機械的。這時,我們就需要使用“代碼產生”來提高我們的開發效率以及提高代碼的可
Time of Update: 2017-02-28
在人類建立了通訊系統之後,如何保證通訊的安全始終是一個重要的問題。伴隨著現代化通訊系統的建立,人們利用數 學理論找到了一些行之有效方法來保證數字通訊的安全。簡單來說就是把兩方通訊的過程進行保密處理,比如對雙方通訊 的內容進行加密,這樣就可以有效防止偷聽者輕易截獲通訊的內容。目前 SSL(Secure Sockets Layer) 及其後續版本 TLS(Transport Layer Security)是比較成熟的通訊加密協議,它們常被用於在用戶端和伺服器之間建立加密通訊通道。
Time of Update: 2017-02-28
概述進程與線程,本質意義上說, 是作業系統的調度單位,可以看成是一種作業系統 “資源” 。Java 作為與 平台無關的程式設計語言,必然會對底層(作業系統)提供的功能進行進一步的封裝,以平台無關的編程介面供程式員使用,進 程與線程作為作業系統核心概念的一部分無疑亦是如此。在 Java 語言中,對進程和線程的封裝,分別提供了 Process 和 Thread 相關的一些類。本文首先簡單的介紹如何使用這些類來建立進程和線程,然後著重介紹這些類是如何和作業系統本
Time of Update: 2017-02-28
Apache Crunch(孵化器項目)是基於Google的FlumeJava庫編寫的Java庫,用於建立MapReduce流水線。與其他用來建立 MapReduce作業的高層工具(如Apache Hive、Apache Pig和Cascading等)類似,Crunch提供了用於實現如串連資料、執行 彙總和排序記錄等常見任務的模式庫。而與其他工具不同的是,Crunch並不強制所有輸入遵循同一資料類型。相反,Crunch
Time of Update: 2017-02-28
1. 引言當我們點擊某個殺毒軟體的取消按鈕來停止查殺病毒時,當我們在控制台敲入quit命令以結束某個後台 服務時……都需要通過一個線程去取消另一個線程正在執行的任務。Java沒有提供一種安全直接的方法來停止某個線程,但 是Java提供了中斷機制。如果對Java中斷沒有一個全面的瞭解,可能會誤以為被中斷的線程將立馬退出運行,但事 實並非如此。中斷機制是如何工作的?捕獲或檢測到中斷後,是拋出InterruptedException還是重設中斷狀態以及在方法中