web開發(fā)
摘要: 其實(shí)為什么javascript的定時器會出現(xiàn)所謂的不可靠或偏差的情況,這是可以理解的,最主要的問題是它們并不是所謂的線程,其實(shí)
javascript是運(yùn)行于單線程的環(huán)境中,而定時器只是計劃代碼在未來某個執(zhí)行的時間,執(zhí)行的時間點(diǎn)是不能被保證的,因?yàn)樵陧撁娴纳芷谥校煌瑫r間可能存在其他代碼,或各個瀏覽器的內(nèi)核控制住javascript進(jìn)程。 閱讀全文
javascript是運(yùn)行于單線程的環(huán)境中,而定時器只是計劃代碼在未來某個執(zhí)行的時間,執(zhí)行的時間點(diǎn)是不能被保證的,因?yàn)樵陧撁娴纳芷谥校煌瑫r間可能存在其他代碼,或各個瀏覽器的內(nèi)核控制住javascript進(jìn)程。 閱讀全文
摘要: google map測距的實(shí)現(xiàn)和分析
不斷有傳聞google map在今年的7月1號之后在大陸停止運(yùn)營,具體原因是因?yàn)樘斐呐普諉栴},這個就不多講了,可以發(fā)現(xiàn)現(xiàn)在搜房網(wǎng)的地圖,和安居客等的地圖紛紛都撤下 google map,而重新選擇了mapabc或baidu,當(dāng)然網(wǎng)易房產(chǎn)地圖也不例外,現(xiàn)在也在使用mapabc作為網(wǎng)易房產(chǎn)地圖的開發(fā),預(yù)計將在6月底前上線,到 時再跟大家分享一下mapabc的一些開發(fā)實(shí)踐。
還是說回google map的開發(fā),自從上次建了個qq群就有不少人在問測距怎么實(shí)現(xiàn),當(dāng)然很多人想的是拿來主義的,當(dāng)時是拿http://xf.house.163.com /gz/map/000B.html的例子出來,但確實(shí)頁面上進(jìn)行了封裝也寫得比較亂,所以還是比較難以抽離,先給個簡單實(shí)現(xiàn)的例子: 閱讀全文
不斷有傳聞google map在今年的7月1號之后在大陸停止運(yùn)營,具體原因是因?yàn)樘斐呐普諉栴},這個就不多講了,可以發(fā)現(xiàn)現(xiàn)在搜房網(wǎng)的地圖,和安居客等的地圖紛紛都撤下 google map,而重新選擇了mapabc或baidu,當(dāng)然網(wǎng)易房產(chǎn)地圖也不例外,現(xiàn)在也在使用mapabc作為網(wǎng)易房產(chǎn)地圖的開發(fā),預(yù)計將在6月底前上線,到 時再跟大家分享一下mapabc的一些開發(fā)實(shí)踐。
還是說回google map的開發(fā),自從上次建了個qq群就有不少人在問測距怎么實(shí)現(xiàn),當(dāng)然很多人想的是拿來主義的,當(dāng)時是拿http://xf.house.163.com /gz/map/000B.html的例子出來,但確實(shí)頁面上進(jìn)行了封裝也寫得比較亂,所以還是比較難以抽離,先給個簡單實(shí)現(xiàn)的例子: 閱讀全文
摘要: 有朋友去一家大型的互聯(lián)網(wǎng)公司參加了java程序員的筆試,抄下了一些筆試題,可能有的抄的并不全,試了解答一下,有些還真的答不出來
1.cookie和session的作用以及他們的應(yīng)用場合
2.怎樣讓jvm加載一個Class的同時執(zhí)行一段代碼
3.post和get區(qū)別
4.事務(wù)的屬性有哪些?寫出spring或jdbc管理事務(wù)的例子
5.實(shí)現(xiàn)一個高并發(fā)、高性能的hashmap。寫出偽代碼
6.解析一段xml,拼接成一個url。 閱讀全文
1.cookie和session的作用以及他們的應(yīng)用場合
2.怎樣讓jvm加載一個Class的同時執(zhí)行一段代碼
3.post和get區(qū)別
4.事務(wù)的屬性有哪些?寫出spring或jdbc管理事務(wù)的例子
5.實(shí)現(xiàn)一個高并發(fā)、高性能的hashmap。寫出偽代碼
6.解析一段xml,拼接成一個url。 閱讀全文
摘要: google Map的交互基本都是事件驅(qū)動的,這表示js是通過生成時間來響應(yīng)交互的,并且處于監(jiān)聽我們設(shè)定的事件,每個 Google Maps API 對象都可導(dǎo)出大量已命名的事件。如果程序想要實(shí)現(xiàn)某些事件,則會為這些事件注冊 Javascript 事件偵聽器,并會在通過在 google.maps.event 命名空間中注冊 addListener() 事件處理程序接收這些事件時執(zhí)行相應(yīng)的代碼。
初步的事件響應(yīng)
google map中的所有對象都可以對用戶事件監(jiān)聽并作出響應(yīng),用戶的事件可以包括鼠標(biāo)或鍵盤,對象可以監(jiān)聽以下這幾種事件:
'click','dblclick','mouseup','mousedown','mouseover','mouseout'
這些事件看上去很像標(biāo)準(zhǔn)的DOM事件,但這些時間可以在不同的瀏覽器實(shí)現(xiàn)不同的DOM事件模型。 閱讀全文
初步的事件響應(yīng)
google map中的所有對象都可以對用戶事件監(jiān)聽并作出響應(yīng),用戶的事件可以包括鼠標(biāo)或鍵盤,對象可以監(jiān)聽以下這幾種事件:
'click','dblclick','mouseup','mousedown','mouseover','mouseout'
這些事件看上去很像標(biāo)準(zhǔn)的DOM事件,但這些時間可以在不同的瀏覽器實(shí)現(xiàn)不同的DOM事件模型。 閱讀全文
摘要: 本來是想將房產(chǎn)地圖google map的應(yīng)用記錄一個系列,但繼1)記錄完之后總找不到時間繼續(xù)記錄下去,1)中主要解決了Google Maps JavaScript API V3 與 Google Local Search API兩者由于版本問題帶來的一系列麻煩,思路是使用一個iframe作為兼容的跳板,子頁面應(yīng)用Local Search API獲得查詢的result后返回給父頁面,下面再記錄一些地圖坐標(biāo)的定位和一些UI的組成。
可參考 http://xf.house.163.com/gz/map/00Xa.html 閱讀全文
可參考 http://xf.house.163.com/gz/map/00Xa.html 閱讀全文
摘要: 以前的房產(chǎn)地圖一直都是使用有道地圖,雖然有道地圖是很好,但是為了更好,還是決定使用google地圖來重新開發(fā)^_^,下面是一個開發(fā)完畢的簡單應(yīng)用http://xf.house.163.com/gz/map/000B.html
1)整合Google Maps JavaScript API V3 與 Google Local Search API
Google Maps JavaScript API V3
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/
Google Maps JavaScript API V3 文檔讀起來真的是很清晰,各種demo也很齊全,并且論壇的擁有巨大的論壇支持,對比了一下Google Maps JavaScript API V3 和 V2 的版本,雖然第3版的 Google Maps API 看上去跟第2版挺相識,但在內(nèi)在機(jī)制上有了較大的變化,尤其在對移動瀏覽器的支持上,專門針對iphone和android 閱讀全文
1)整合Google Maps JavaScript API V3 與 Google Local Search API
Google Maps JavaScript API V3
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/
Google Maps JavaScript API V3 文檔讀起來真的是很清晰,各種demo也很齊全,并且論壇的擁有巨大的論壇支持,對比了一下Google Maps JavaScript API V3 和 V2 的版本,雖然第3版的 Google Maps API 看上去跟第2版挺相識,但在內(nèi)在機(jī)制上有了較大的變化,尤其在對移動瀏覽器的支持上,專門針對iphone和android 閱讀全文
摘要: The minimum requirement for a POM are the following:
project root
modelVersion - should be set to 4.0.0
groupId - the id of the project's group.
artifactId - the id of the artifact (project)
version - the version of the artifact under the specified group
Here's an example: 閱讀全文
project root
modelVersion - should be set to 4.0.0
groupId - the id of the project's group.
artifactId - the id of the artifact (project)
version - the version of the artifact under the specified group
Here's an example: 閱讀全文
摘要: 目前幾套系統(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請求連接webservice服務(wù)并沒有對連接超時進(jìn)行相關(guān)的參數(shù)設(shè)置,所以當(dāng)網(wǎng)絡(luò)出現(xiàn)問題就會造成整個hessian處理的阻塞,進(jìn)而阻塞整個線程后續(xù)的處理
以下是HessianProxyFactory對連接處理的源碼
protected URLConnection openConnection(URL url)
throws IOException
{
URL 閱讀全文
1.HessianProxyFactory
查看HessianProxyFactory源碼后發(fā)現(xiàn),hessian在創(chuàng)建http請求連接webservice服務(wù)并沒有對連接超時進(jìn)行相關(guān)的參數(shù)設(shè)置,所以當(dāng)網(wǎng)絡(luò)出現(xiàn)問題就會造成整個hessian處理的阻塞,進(jìn)而阻塞整個線程后續(xù)的處理
以下是HessianProxyFactory對連接處理的源碼
protected URLConnection openConnection(URL url)
throws IOException
{
URL 閱讀全文
摘要: 對很久以前的一個bug進(jìn)行分析和總結(jié)
function parsePost(data, action) {
try {
var postData = eval("(" + data + ")");
// TO DO1
} catch (e) {
// TO DO2
}
}
這是一段頁面的老代碼,data是數(shù)據(jù)庫body字段,既是用戶錄入并取出的數(shù)據(jù),由于業(yè)務(wù)的關(guān)系,data是以json格式保存的,為了使數(shù)據(jù)能實(shí)現(xiàn)兼容,這里使用try...catch...方式處理,如果變量data能被轉(zhuǎn)換成對象,則執(zhí)行TO DO1,否則執(zhí)行TO DO2.
我們知道eval的作用很簡單,就是把一段字符串傳遞給js解析器,由javascript解析器將這段字符串解釋成為 閱讀全文
function parsePost(data, action) {
try {
var postData = eval("(" + data + ")");
// TO DO1
} catch (e) {
// TO DO2
}
}
這是一段頁面的老代碼,data是數(shù)據(jù)庫body字段,既是用戶錄入并取出的數(shù)據(jù),由于業(yè)務(wù)的關(guān)系,data是以json格式保存的,為了使數(shù)據(jù)能實(shí)現(xiàn)兼容,這里使用try...catch...方式處理,如果變量data能被轉(zhuǎn)換成對象,則執(zhí)行TO DO1,否則執(zhí)行TO DO2.
我們知道eval的作用很簡單,就是把一段字符串傳遞給js解析器,由javascript解析器將這段字符串解釋成為 閱讀全文
摘要: 大名鼎鼎的分布式緩存系統(tǒng)memcached,在開源社區(qū)中可謂是無人不知無人不曉,memcached支持分布式的橫向擴(kuò)展,但memcached的服務(wù)端卻是單實(shí)例,并無"分布式"的功能,所謂的分布式只是客戶端在存儲的主鍵做分布的存儲;還有memcached組件緩存對象,如果組件無進(jìn)行序列化必定無法正確取得數(shù)據(jù);如何使用memcached的java組件來監(jiān)控memcached的運(yùn)行狀態(tài);以上等等的問題是我在日常的工作中碰到并解決的,拿出來跟大家做個分享^_^
對象的序列化
首先memcached是獨(dú)立的服務(wù)器組件,獨(dú)立于應(yīng)用系統(tǒng),從客戶端保存和讀取對象到memcached是必須通過網(wǎng)絡(luò)傳輸,因?yàn)榫W(wǎng)絡(luò)傳輸都是二進(jìn)制的數(shù)據(jù),所以所有的對象都必須經(jīng)過序列化,否則無法存儲到memcahced的服務(wù)器端.
正如我們以往在集群中應(yīng)用的序列化一樣,memcached的序列化的性能也是往往讓大家頭疼,如果我們對我們的domain類進(jìn)行對象的序列化,第一次序列化時間會比較長,但后續(xù)會優(yōu)化,也就是說序列化最大的消耗不是對象的序列化,而是類的序列化,如果存儲的只是一個String 閱讀全文
對象的序列化
首先memcached是獨(dú)立的服務(wù)器組件,獨(dú)立于應(yīng)用系統(tǒng),從客戶端保存和讀取對象到memcached是必須通過網(wǎng)絡(luò)傳輸,因?yàn)榫W(wǎng)絡(luò)傳輸都是二進(jìn)制的數(shù)據(jù),所以所有的對象都必須經(jīng)過序列化,否則無法存儲到memcahced的服務(wù)器端.
正如我們以往在集群中應(yīng)用的序列化一樣,memcached的序列化的性能也是往往讓大家頭疼,如果我們對我們的domain類進(jìn)行對象的序列化,第一次序列化時間會比較長,但后續(xù)會優(yōu)化,也就是說序列化最大的消耗不是對象的序列化,而是類的序列化,如果存儲的只是一個String 閱讀全文
摘要: 很久以前就見過這本1000頁的書<代碼大全>,覺得應(yīng)該是說些寫代碼的東西,沒怎么又興趣去讀它,一次偶然的機(jī)會,發(fā)現(xiàn)自己是誤解了它,<代碼大全>覺得應(yīng)該叫軟件百科好像更合適一點(diǎn),因?yàn)樗锩婧w了架構(gòu),分析,設(shè)計,編程,測試,重構(gòu),面向?qū)ο?調(diào)試,規(guī)范,管理,軟件質(zhì)量控制,協(xié)作,優(yōu)化,開發(fā)工具,注釋,甚至個性,開發(fā)藝術(shù)等等等,讓人感覺就是一本軟件百科全書.
書讀的不多,不過剛開始讀了100多頁有一點(diǎn)感悟,所以做了一點(diǎn)記錄,叫讀<代碼大全>的一點(diǎn)記錄之1.
利用隱喻
隱喻通過把軟件開發(fā)與你所熟知的事情聯(lián)系在一起,從而使你對其更有深刻的理解,正是因?yàn)槿绱嗽谟嬎銠C(jī)中的發(fā)展不過僅有數(shù)十年的歷史,卻擁有著所有科學(xué)最為豐富多彩的語言
蓋房子的隱喻
狗屋
霹靂啪啦,木材加鐵釘,犯錯了怎么辦?無所謂,拆了再來過 閱讀全文
書讀的不多,不過剛開始讀了100多頁有一點(diǎn)感悟,所以做了一點(diǎn)記錄,叫讀<代碼大全>的一點(diǎn)記錄之1.
利用隱喻
隱喻通過把軟件開發(fā)與你所熟知的事情聯(lián)系在一起,從而使你對其更有深刻的理解,正是因?yàn)槿绱嗽谟嬎銠C(jī)中的發(fā)展不過僅有數(shù)十年的歷史,卻擁有著所有科學(xué)最為豐富多彩的語言
蓋房子的隱喻
狗屋
霹靂啪啦,木材加鐵釘,犯錯了怎么辦?無所謂,拆了再來過 閱讀全文
摘要: 上個月參加的網(wǎng)易游戲部QA組的黑盒測試培訓(xùn),覺得挺有意思的,不過最讓我感興趣的是,能和真正專業(yè)的測試人員做了一點(diǎn)討論,發(fā)現(xiàn)站在開發(fā)人員的角度看待測試和站在測試人員看待測試時完全不同的一種東西.
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對自己的程序測試完沒發(fā)現(xiàn)錯誤,就會說"這是一個成功的測試",如果發(fā)現(xiàn)某些新的錯誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài) 閱讀全文
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對自己的程序測試完沒發(fā)現(xiàn)錯誤,就會說"這是一個成功的測試",如果發(fā)現(xiàn)某些新的錯誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài) 閱讀全文
摘要: 把我上次的工程所用到的jar包做了一個整理,也加了一些簡單的描述,下面圖是上次工程用到的所有jar吧
JAR包與描述對照表 注:jar包尾后的版本號不代表當(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是一個輕量級字節(jié)碼處理和分析框架
alveole-struts2.jar
alveole-tools.jar
aspectjtools-1.5.3.jar
Aspect提供的注釋類庫和相應(yīng)的解析類庫
atomikos-util.jar
數(shù)據(jù)庫提供分布式事務(wù)支持
閱讀全文
JAR包與描述對照表 注:jar包尾后的版本號不代表當(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是一個輕量級字節(jié)碼處理和分析框架
alveole-struts2.jar
alveole-tools.jar
aspectjtools-1.5.3.jar
Aspect提供的注釋類庫和相應(yīng)的解析類庫
atomikos-util.jar
數(shù)據(jù)庫提供分布式事務(wù)支持
閱讀全文
摘要: 記得問過身邊的一些開發(fā)工程師(非前端)緩存要分幾個層次,從哪里做起,答案很多,比如反向代理緩存,DNS緩存,memcached,數(shù)據(jù)庫緩存等等,確實(shí)很完整,不過好像漏掉了我們用戶跟我們聯(lián)通的最根本的工具瀏覽器,確實(shí)好似很少有人把用戶的瀏覽器當(dāng)作是web站點(diǎn)的組成部分來看待
緩存協(xié)商
現(xiàn)在我們需要將用戶的瀏覽器也納入我們構(gòu)建網(wǎng)站各個緩存層次中的其中一個重要層次,網(wǎng)站信息和內(nèi)容在由web服務(wù)器生成,而將這些信息和內(nèi)容作為一段二進(jìn)制的文件作為本地緩存文件存放在用戶的瀏覽器,是兩個獨(dú)立個體共同完成的任務(wù),所以兩者之間需要一種溝通的機(jī)制,也就是HTTP的緩存協(xié)商
Last-Modified和If-Modified-Since協(xié)商
Last-Modified和If-Modified-Since分別位于響應(yīng)頭信息和請求頭信息中,都是記錄請求的頁面最后的修改時間
在第一次訪問web服務(wù)器會返回200狀態(tài),并在瀏覽器的響應(yīng)頭Last-Modified上寫上此頁面最后修改的時間戳
使用firebug進(jìn)行查看
閱讀全文
緩存協(xié)商
現(xiàn)在我們需要將用戶的瀏覽器也納入我們構(gòu)建網(wǎng)站各個緩存層次中的其中一個重要層次,網(wǎng)站信息和內(nèi)容在由web服務(wù)器生成,而將這些信息和內(nèi)容作為一段二進(jìn)制的文件作為本地緩存文件存放在用戶的瀏覽器,是兩個獨(dú)立個體共同完成的任務(wù),所以兩者之間需要一種溝通的機(jī)制,也就是HTTP的緩存協(xié)商
Last-Modified和If-Modified-Since協(xié)商
Last-Modified和If-Modified-Since分別位于響應(yīng)頭信息和請求頭信息中,都是記錄請求的頁面最后的修改時間
在第一次訪問web服務(wù)器會返回200狀態(tài),并在瀏覽器的響應(yīng)頭Last-Modified上寫上此頁面最后修改的時間戳
使用firebug進(jìn)行查看
閱讀全文