xsteam:java對象和xml之間相互轉換
xsteam:java對象和xml之間相互轉換
1、如果按字符截取會導致中英文顯示的長度不一
2、如果按字節截取可能會導致最后一個中文截成兩部分
以下代碼是在網上獲取并經過改造而成,能夠很好的解決上面兩個問題
/**
* 根據指定字節數截取字符串,當指定處為中文第一個字節時少截取一個字符,當長度大于指定截取長度時,截取后在字符串末尾追加指定字符串<br/>
* 這里添加了字符串的編碼,因為頁面的編碼不同,字符串所占字節也不同
*
* @param str 待截取字符串,如果為null或者"",則立即返回str
* @param length 需要截取的長度
* @param endStr 截取后末尾追加的字符串
* @param charset 待截取字符串的編碼
* @return
*/
public String subStringByByte(String str, int length, String endStr, String charset) {
if (str == null || "".equals(str.trim()) || length <= 0) {
return str;
}
try {
int strlen = str.getBytes(charset).length;// 這里要和頁面的編碼相關
if (strlen < length) return str;
Pattern p = Pattern.compile("^[""u4e00-""u9fa5]$");
int i = 0, j = 0;
int sublength = length - ((endStr == null) ? 0 : endStr.getBytes(charset).length);
for (char c : str.toCharArray()) {
Matcher m = p.matcher(String.valueOf(c));
i += m.find() ? 2 : 1;
++j;
if (i == sublength) break;
if (i > sublength) {
--j;
break;
}
}
return str.substring(0, j) + endStr;
} catch (UnsupportedEncodingException e) {
return str;
}
}
英文不太好,經常忘記,所以現在寫下來:
1,transient:在序列化一個類時,如果類中某個字段不想被序列化,則使用此關鍵字
2、volatile:用于線程同步時
JVM生成的所有新對象放在新域中。一旦對象經歷了一定數量的垃圾收集循環后,便進入舊域。而在永久域中是用來存儲JVM自己的反射對象的,如class 和method對象,而且GC(Garbage Collection)不會在主程序運行期對永久域進行清理。其中新域和舊域屬于堆,永久域是一個獨立域并且不認為是堆的一部分
一、java.lang.OutOfMemoryError: PermGen space
PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,
這塊內存主要是被
JVM存放Class和Method信息的,Class在被Loader時就會被放到PermGen space中,
它和存放類實例
(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對
PermGen
space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,
這種錯誤常見在web服務器對
JSP進行pre compile(預編譯)的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超過了jvm默認的大小(4M)那么就會
產生此錯誤信息了。
解決方法: 手動設置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:
$CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M
-XX:MaxPermSize=128m
建議:將相同的第三方jar文件移置到tomcat/shared/lib目錄下,這樣可以達到減少
jar 文檔重復占用內存的目的。
二、java.lang.OutOfMemoryError: Java heap space
Heap size 設置
JVM堆
的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.JVM在啟動的時候會自動設置Heap size的值,
其初始空間(即
-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可
進行設
置。Heap size 的大小是Young Generation 和Tenured Generaion 之和(新域和舊域之和)。
提示:在JVM中如果98%
的時間是用于GC且可用的Heap size 不足2%的時候將拋出此異常信息。
提示:Heap Size
最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。
解決方法:手動設置
Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using
CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m
-Xmx800m -XX:MaxNewSize=256m"
動態應用,是相對于網站靜態內容而言, 是指以c/c++、php、Java、perl、.net等 服務器端語言開發的網絡應用軟件,比如論壇、網絡相冊、交友、BLOG等常見應用。動態應用系統通 常與數據庫系統、緩存系統、分布式存儲系統等密不可分。
大型動態應用系統平臺主要是針對于大流 量、高并發網站建立的底層系統架構。大型網站的運行需要一個可靠、安全、可擴展、易維護的應用系統平臺做為支撐,以保證網站應用的平穩運行。
大型動態應用系統又可分為幾個子系統:
l Web前端系統
l 負載均衡系統
l 數據庫集群系統
l 緩存系統
l 分布式存儲系統
l 分布式服務器管理系統
l 代碼分發系統
Web前端系統
結構圖:

為了達到不同應用的服務器共享、避免單點故障、集中管理、統一配置等目的,不以應用劃分服 務器,而是將所有服務器做統一使用,每臺服務器都可以對多個應用提供服務,當某些應用訪問量升高時,通過增加服務器節點達到整個服務器集群的性能提高,同 時使他應用也會受益。該Web前端系統基于Apache/Lighttpd/Eginx等 的虛擬主機平臺,提供PHP程序運行環境。服務器對開發人員是透明的,不需要開發人員介入服務器管理
負載均衡系統

負載均衡系統分為硬件和軟件兩種。硬件負載均衡效率高,但是價格貴,比如F5等。軟件負載均衡系統價格較低或者免費,效率較硬件負載均衡系統 低,不過對于流量一般或稍大些網站來講也足夠使用,比如lvs,nginx。大多數網站都是硬件、軟件負載均衡系統并用。
數據庫集群系統
結構圖:

由于Web前端采用了負載均衡集群結構提高了服務的有效性和擴展性,因此數據庫必須也是高可靠的才能保證整個服務體系的高可靠性,如何構建一個高可靠的、可以提供大規模并發處理的數據庫體系?
我們可以采用如上圖所示的方案:
1) 使用 MySQL 數據庫,考慮到Web應用的數據庫讀多寫少的特點,我們主要對讀數據庫做了優化,提供專用的讀數據庫和寫數據庫,在應用程序中實現讀操作和寫操作分別訪問不同的數據庫。
2) 使用 MySQL Replication 機制實現快速將主庫(寫庫)的數據庫復制到從庫(讀庫)。一個主庫對應多個從庫,主庫數據實時同步到從庫。
3) 寫數據庫有多臺,每臺都可以提供多個應用共同使用,這樣可以解決寫庫的性能瓶頸問題和單點故障問題。
4) 讀數據庫有多臺,通過負載均衡設備實現負載均衡,從而達到讀數據庫的高性能、高可靠和高可擴展性。
5) 數據庫服務器和應用服務器分離。
6) 從數據庫使用BigIP做負載均衡。
緩存系統

緩存分為文件緩存、內存緩存、數據庫緩存。在大型Web應用中使用最多且效率最高的是內存緩存。最常用的內存緩存工具是Memcachd。使用正確的緩存系統可以達到實現以下目標:
1、 使用緩存系統可以提高訪問效率,提高服務器吞吐能力,改善用戶體驗。
2、 減輕對數據庫及存儲集服務器的訪問壓力
3、Memcached服務器有多臺,避免單點故障,提供高可靠性和可擴展性,提高性能。
分布式存儲系統
結構圖:

WEB系統平臺中的存儲需求有下面兩個特點:
1) 存儲量很大,經常會達到單臺服務器無法提供的規模,比如相冊、視頻等應用。因此需要專業的大規模存儲系統。
2) 負載均衡cluster中的每個節點都有可能訪問任何一個數據對象,每個節點對數據的處理也能被其他節點共享,因此這些節點要操作的數據從邏輯上看只能是一個整體,不是各自獨立的數據資源。
因此高性能的分布式存儲系統對于大型網站應用來說是非常重要的一環。(這個地方需要加入對某個分布式存儲系統的簡單介紹。)
分布式服務器管理系統
結構圖:

隨著網站訪問流量的不斷增加,大多的網絡服務都是以負載均衡集群的方式對外提供服務,隨之集群規模的擴大,原來基于單機的服務器管理模式已經不能夠滿足我們的需求,新的需求必須能夠集中式的、分組的、批量的、自動化的對服務器進行管理,能夠批量化的執行計劃任務。
在分布式服務器管理系統軟件中有一些比較優秀的軟件,其中比較理想的一個是 Cfengine。它可以對服務器進行分組,不同的分組可以分別定制系統配置文件、計劃任務等配置。它是基于C/S 結構的,所有的服務器配置和管理腳本程序都保存在Cfengine Server上,而被管理的服務器運行著 Cfengine Client 程序,Cfengine Client通過SSL加密的連接定期的向服務器端發送請求以獲取最新的配置文件和管理命令、腳本程序、補丁安裝等任務。
有了Cfengine 這種集中式的服務器管理工具,我們就可以高效的實現大規模的服務器集群管理,被管理服務器和 Cfengine Server 可以分布在任何位置,只要網絡可以連通就能實現快速自動化的管理。
代碼發布系統
結構圖:

隨著網站訪問流量的不斷增加,大多的網絡服務都是以負載均衡集群的方式對外提供服務,隨之集群規模的擴大,為了滿足集群環境下程序代碼的批量分發和更新,我們還需要一個程序代碼發布系統。
這個發布系統可以幫我們實現下面的目標:
1) 生產環境的服務器以虛擬主機方式提供服務,不需要開發人員介入維護和直接操作,提供發布系統可以實現不需要登陸服務器就能把程序分發到目標服務器。
2) 我們要實現內部開發、內部測試、生產環境測試、生產環境發布的4個開發階段的管理,發布系統可以介入各個階段的代碼發布。
3) 我們需要實現源代碼管理和版本控制,SVN可以實現該需求。
這里面可以使用常用的工具Rsync,通過開發相應的腳本工具實現服務器集群間代碼同步分發。
將一個命令的輸出作為下一個命令的輸入
例:ls | grep text --這個命令將查找當前目錄下名稱中包含text的目錄或者文件
xargs:
將一個命令的輸入作為下一個命令的參數
例:ls | xargs grep -i text --這個命令將當前目下的所有文件作為參數傳遞給grep來查找文件中是否包含"text"
find . | xargs grep "user" --查詢當前目錄及其子目錄下所有內容中包含"user"的文件
sql server:select top 10 * from 表名 order by newid();
oracle:select * from(select * from 表名 order by dbms_random.value) where rownum<=20;
access:select top 10 * from 表名 order by rnd(ID)
html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }
需要最新網頁標準支持:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
Flash要在object標簽中加入如下代碼:
<param value="false" name="menu"/>
<param value="opaque" name="wmode"/>
1、下載wamp5,安裝wamp5,如需更改端口請修改Apache配置文件,更改端口(如:8888)后還需要更改wamp根目錄wampmanager.ini文件中的以下地方
Type: item; Caption: "Localhost"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/"; Glyph: 5
Type: item; Caption: "phpMyAdmin"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/phpmyadmin/"; Glyph: 5
Type: item; Caption: "SQLiteManager"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/sqlitemanager/"; Glyph: 5
2、安裝后訪問首頁http://localhost:8888,點擊phpinfo()查看php信息,如果只顯示如下信息:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
查看php目錄下的php.ini文件,沒有[Zend]塊,表明ZendOptimizer沒有安裝
3、下載ZendOptimizer,安裝路徑選擇D:\Program Files\Zend,選擇apache2.x及php.ini的位置,安裝完成后php.ini最后會添加以下內容:
[Zend]
zend_extension_manager.optimizer_ts="D:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
zend_extension_ts="D:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
4、訪問http://loalhost:8888/ppframe進行ppframe的安裝,安裝成功后登陸后臺,如果沒有安裝ZendOptimizer,左側的exam是打不開的,但是passport可以打開。
1、如果頁面有<base/>標簽的則要在js引入后再添加<base target="_self" />;
2、在<script/>中添加屬性defer="defer";