java
摘要: objectid是一種輕量型的,不同的機(jī)器都能用全局唯一的同種方法輕量的生成它,而不是采用傳統(tǒng)的自增的主鍵策略,因?yàn)樵诙嗯_(tái)服務(wù)器上同步自動(dòng)增加主鍵既費(fèi)力又費(fèi)時(shí),不得不佩服,mongodb從開始設(shè)計(jì)就被定義為分布式數(shù)據(jù)庫。
下面深入一點(diǎn)來翻翻這個(gè)Objectid的底細(xì),在mongodb集合中的每個(gè)document中都必須有一個(gè)"_id"建,這個(gè)鍵的值可以是任何類型的,在默認(rèn)的情況下是個(gè)Objectid對(duì)象。
當(dāng)我們讓一個(gè)collection中插入一條不帶_id的記錄,系統(tǒng)會(huì)自動(dòng)地生成一個(gè)_id的key 閱讀全文
下面深入一點(diǎn)來翻翻這個(gè)Objectid的底細(xì),在mongodb集合中的每個(gè)document中都必須有一個(gè)"_id"建,這個(gè)鍵的值可以是任何類型的,在默認(rèn)的情況下是個(gè)Objectid對(duì)象。
當(dāng)我們讓一個(gè)collection中插入一條不帶_id的記錄,系統(tǒng)會(huì)自動(dòng)地生成一個(gè)_id的key 閱讀全文
摘要: 有朋友去一家大型的互聯(lián)網(wǎng)公司參加了java程序員的筆試,抄下了一些筆試題,可能有的抄的并不全,試了解答一下,有些還真的答不出來
1.cookie和session的作用以及他們的應(yīng)用場合
2.怎樣讓jvm加載一個(gè)Class的同時(shí)執(zhí)行一段代碼
3.post和get區(qū)別
4.事務(wù)的屬性有哪些?寫出spring或jdbc管理事務(wù)的例子
5.實(shí)現(xiàn)一個(gè)高并發(fā)、高性能的hashmap。寫出偽代碼
6.解析一段xml,拼接成一個(gè)url。 閱讀全文
1.cookie和session的作用以及他們的應(yīng)用場合
2.怎樣讓jvm加載一個(gè)Class的同時(shí)執(zhí)行一段代碼
3.post和get區(qū)別
4.事務(wù)的屬性有哪些?寫出spring或jdbc管理事務(wù)的例子
5.實(shí)現(xiàn)一個(gè)高并發(fā)、高性能的hashmap。寫出偽代碼
6.解析一段xml,拼接成一個(gè)url。 閱讀全文
摘要: 由于歷史原因,幾個(gè)項(xiàng)目都選用hessian作為web service的實(shí)現(xiàn)方式,hessian的確是非常輕量級(jí),基于http協(xié)議進(jìn)行傳輸,通過自定義的串行化機(jī)制將請(qǐng)求信息進(jìn)行序列化,以二進(jìn)制傳輸節(jié)省了不少的開銷,速度跟socket差不多.客戶端和服務(wù)器發(fā)起和接收請(qǐng)求都是通過spring提供的hessian api進(jìn)行請(qǐng)求和接收,但是在服務(wù)端中并沒有記錄和控制遠(yuǎn)端ip地址和主機(jī)的信息,所以需要對(duì)源碼進(jìn)行一些重寫
對(duì)org.springframework.remoting.caucho.HessianServiceExporter進(jìn)行重寫
/**
* 重寫HessianServiceExporter.handleRequest(),攔截獲取遠(yuǎn)端調(diào)用信息
* @author chenyz
*
*/
public class HouseHessianServiceExporter extends HessianServiceExporter {
private static S 閱讀全文
對(duì)org.springframework.remoting.caucho.HessianServiceExporter進(jìn)行重寫
/**
* 重寫HessianServiceExporter.handleRequest(),攔截獲取遠(yuǎn)端調(diào)用信息
* @author chenyz
*
*/
public class HouseHessianServiceExporter extends HessianServiceExporter {
private static S 閱讀全文
摘要: 目前幾套系統(tǒng)中主要使用的hessian進(jìn)行遠(yuǎn)程調(diào)用webservice服務(wù)的有hessian的 HessianProxyFactory(com.caucho.hessian.client.HessianProxyFactory)和 spring的 HessianProxyFactoryBean(org.springframework.remoting.caucho.HessianProxyFactoryBean).
1.HessianProxyFactory
查看HessianProxyFactory源碼后發(fā)現(xiàn),hessian在創(chuàng)建http請(qǐng)求連接webservice服務(wù)并沒有對(duì)連接超時(shí)進(jìn)行相關(guān)的參數(shù)設(shè)置,所以當(dāng)網(wǎng)絡(luò)出現(xiàn)問題就會(huì)造成整個(gè)hessian處理的阻塞,進(jìn)而阻塞整個(gè)線程后續(xù)的處理
以下是HessianProxyFactory對(duì)連接處理的源碼
protected URLConnection openConnection(URL url)
throws IOException
{
URL 閱讀全文
1.HessianProxyFactory
查看HessianProxyFactory源碼后發(fā)現(xiàn),hessian在創(chuàng)建http請(qǐng)求連接webservice服務(wù)并沒有對(duì)連接超時(shí)進(jìn)行相關(guān)的參數(shù)設(shè)置,所以當(dāng)網(wǎng)絡(luò)出現(xiàn)問題就會(huì)造成整個(gè)hessian處理的阻塞,進(jìn)而阻塞整個(gè)線程后續(xù)的處理
以下是HessianProxyFactory對(duì)連接處理的源碼
protected URLConnection openConnection(URL url)
throws IOException
{
URL 閱讀全文
摘要: 下面一個(gè)伴隨了好幾個(gè)工程的時(shí)間操作的工具類,提供了一些常用的時(shí)間操作和計(jì)算的方法,每段時(shí)間都會(huì)進(jìn)行一次整理,希望能去冗余和得到好的擴(kuò)展
package com.***.product.util;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DateUtil {
protected static Log logger = LogFa 閱讀全文
package com.***.product.util;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DateUtil {
protected static Log logger = LogFa 閱讀全文
摘要: 大名鼎鼎的分布式緩存系統(tǒng)memcached,在開源社區(qū)中可謂是無人不知無人不曉,memcached支持分布式的橫向擴(kuò)展,但memcached的服務(wù)端卻是單實(shí)例,并無"分布式"的功能,所謂的分布式只是客戶端在存儲(chǔ)的主鍵做分布的存儲(chǔ);還有memcached組件緩存對(duì)象,如果組件無進(jìn)行序列化必定無法正確取得數(shù)據(jù);如何使用memcached的java組件來監(jiān)控memcached的運(yùn)行狀態(tài);以上等等的問題是我在日常的工作中碰到并解決的,拿出來跟大家做個(gè)分享^_^
對(duì)象的序列化
首先memcached是獨(dú)立的服務(wù)器組件,獨(dú)立于應(yīng)用系統(tǒng),從客戶端保存和讀取對(duì)象到memcached是必須通過網(wǎng)絡(luò)傳輸,因?yàn)榫W(wǎng)絡(luò)傳輸都是二進(jìn)制的數(shù)據(jù),所以所有的對(duì)象都必須經(jīng)過序列化,否則無法存儲(chǔ)到memcahced的服務(wù)器端.
正如我們以往在集群中應(yīng)用的序列化一樣,memcached的序列化的性能也是往往讓大家頭疼,如果我們對(duì)我們的domain類進(jìn)行對(duì)象的序列化,第一次序列化時(shí)間會(huì)比較長,但后續(xù)會(huì)優(yōu)化,也就是說序列化最大的消耗不是對(duì)象的序列化,而是類的序列化,如果存儲(chǔ)的只是一個(gè)String 閱讀全文
對(duì)象的序列化
首先memcached是獨(dú)立的服務(wù)器組件,獨(dú)立于應(yīng)用系統(tǒng),從客戶端保存和讀取對(duì)象到memcached是必須通過網(wǎng)絡(luò)傳輸,因?yàn)榫W(wǎng)絡(luò)傳輸都是二進(jìn)制的數(shù)據(jù),所以所有的對(duì)象都必須經(jīng)過序列化,否則無法存儲(chǔ)到memcahced的服務(wù)器端.
正如我們以往在集群中應(yīng)用的序列化一樣,memcached的序列化的性能也是往往讓大家頭疼,如果我們對(duì)我們的domain類進(jìn)行對(duì)象的序列化,第一次序列化時(shí)間會(huì)比較長,但后續(xù)會(huì)優(yōu)化,也就是說序列化最大的消耗不是對(duì)象的序列化,而是類的序列化,如果存儲(chǔ)的只是一個(gè)String 閱讀全文
摘要: 上個(gè)月參加的網(wǎng)易游戲部QA組的黑盒測試培訓(xùn),覺得挺有意思的,不過最讓我感興趣的是,能和真正專業(yè)的測試人員做了一點(diǎn)討論,發(fā)現(xiàn)站在開發(fā)人員的角度看待測試和站在測試人員看待測試時(shí)完全不同的一種東西.
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對(duì)自己的程序測試完沒發(fā)現(xiàn)錯(cuò)誤,就會(huì)說"這是一個(gè)成功的測試",如果發(fā)現(xiàn)某些新的錯(cuò)誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對(duì)測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯(cuò)誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài) 閱讀全文
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對(duì)自己的程序測試完沒發(fā)現(xiàn)錯(cuò)誤,就會(huì)說"這是一個(gè)成功的測試",如果發(fā)現(xiàn)某些新的錯(cuò)誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對(duì)測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯(cuò)誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài) 閱讀全文
摘要: 把我上次的工程所用到的jar包做了一個(gè)整理,也加了一些簡單的描述,下面圖是上次工程用到的所有jar吧
JAR包與描述對(duì)照表 注:jar包尾后的版本號(hào)不代表當(dāng)前最高版本
activation-1.1.jar Sun的JavaBeans Activation Framework(JAF),JavaMail要運(yùn)行必須依賴于它的支持
asm-3.0.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
asm是一個(gè)輕量級(jí)字節(jié)碼處理和分析框架
alveole-struts2.jar
alveole-tools.jar
aspectjtools-1.5.3.jar
Aspect提供的注釋類庫和相應(yīng)的解析類庫
atomikos-util.jar
數(shù)據(jù)庫提供分布式事務(wù)支持
閱讀全文
JAR包與描述對(duì)照表 注:jar包尾后的版本號(hào)不代表當(dāng)前最高版本
activation-1.1.jar Sun的JavaBeans Activation Framework(JAF),JavaMail要運(yùn)行必須依賴于它的支持
asm-3.0.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
asm是一個(gè)輕量級(jí)字節(jié)碼處理和分析框架
alveole-struts2.jar
alveole-tools.jar
aspectjtools-1.5.3.jar
Aspect提供的注釋類庫和相應(yīng)的解析類庫
atomikos-util.jar
數(shù)據(jù)庫提供分布式事務(wù)支持
閱讀全文
摘要: 先感謝同事renial的<解析xml時(shí)遇到的一些問題>技術(shù)分享,下面是一些記錄和實(shí)際操作
1.使用Dom4j解析大文件時(shí)內(nèi)存溢出的問題
問題是這樣的,當(dāng)我用dom4j去解析一個(gè)幾十M的xml時(shí),就出現(xiàn)out of memory.當(dāng)然了,這也是根據(jù)你的機(jī)器性能而定的,我們都知道dom4j在各種DOM解析器中應(yīng)該算是性能最好的,連大名鼎鼎的Hibernate都是用dom4j來解析XML配置文件的
問題出在于使用dom4j的SAXReader是會(huì)把整個(gè)XML文件一次性讀入,如果XML文件過大就會(huì)拋出out of memory,但即使是使用SAXParser批量讀入解析,但它也是一次解析完,假設(shè)XML文件有幾萬條數(shù)據(jù),那么解析后就必須在內(nèi)存放入這幾萬條對(duì)象.
常用的Dom4j文件解析方式:
InputStream is = new FileInputStream(filePath);
SAXReader reader = new SAXReader(); //將整個(gè)XML構(gòu)建為一個(gè)Document
閱讀全文
1.使用Dom4j解析大文件時(shí)內(nèi)存溢出的問題
問題是這樣的,當(dāng)我用dom4j去解析一個(gè)幾十M的xml時(shí),就出現(xiàn)out of memory.當(dāng)然了,這也是根據(jù)你的機(jī)器性能而定的,我們都知道dom4j在各種DOM解析器中應(yīng)該算是性能最好的,連大名鼎鼎的Hibernate都是用dom4j來解析XML配置文件的
問題出在于使用dom4j的SAXReader是會(huì)把整個(gè)XML文件一次性讀入,如果XML文件過大就會(huì)拋出out of memory,但即使是使用SAXParser批量讀入解析,但它也是一次解析完,假設(shè)XML文件有幾萬條數(shù)據(jù),那么解析后就必須在內(nèi)存放入這幾萬條對(duì)象.
常用的Dom4j文件解析方式:
InputStream is = new FileInputStream(filePath);
SAXReader reader = new SAXReader(); //將整個(gè)XML構(gòu)建為一個(gè)Document
閱讀全文