這里使用到的各種軟件包括:
- Ubuntu
- Virtual Box
- Vagrant
- RVM
- Capistrano
- Passenger
- Nginx
- MySQL
- PostgreSQL
還涉及到Git、GitHub、SSH等技術(shù) 閱讀全文 摘要: 閱讀全文 終于花了將近4個月的時間,把《Learn Rails3 by example》的E文版看完了,心中那個成就感和滿足感啊~~
繼續(xù)下一輪的針對性學(xué)習(xí)計劃,計劃包括:
1. Rails應(yīng)用的部署和性能監(jiān)控
2. Rails的MVC架構(gòu)和Cache
3. JS和JS與Rails的結(jié)合使用
4. Ruby的語法和特性
5. MySQL配置和調(diào)優(yōu)
6. 搜索引擎和推薦引擎的學(xué)習(xí)
7. NoSQL專題
關(guān)于RVM + REE + Ngix + Passenger + Capistrano的安裝配置,非常詳細(xì)!強烈推薦
在上一篇《自動化測試狂人的Rails測試優(yōu)化之路》中,我演示了如何使用Guard-spork, Guard-rspec和Spork, Rspec來進行自動化測試和集成測試。
今天發(fā)現(xiàn)存在一個bug,那就是當(dāng)model文件被修改后,雖然會重新啟動rspec執(zhí)行測試。但是測試的代碼不是最新的,而是繼續(xù)沿用已經(jīng)加載到內(nèi)存的model文件。網(wǎng)上搜索一番后,發(fā)現(xiàn)問題的原因是spork的預(yù)加載問題。于是在spork的spork.each_run方法中加入如下代碼,重啟sprok,解決問題




假如我們把attr_accessible設(shè)置成只有name是可以訪問的,然后在Console中執(zhí)行如下命令:














不是not accessible 嗎?怎么email還是能夠改變?
摘要: 我們要修改的文件會涉及到4個:A. Gemfile
B. .rspec
C. Guardfile
D. rspec_helper.rb 閱讀全文 摘要: 從RailsCast.com篩選出來的視頻 閱讀全文 摘要: NERDTree.vim:顯示目錄樹和標(biāo)簽(特別有用)
Rails.vim:這個不說了,Rails開發(fā)必備
Snipmate.vim:代碼片段自動完成,Rails開發(fā)神器之一
FuzzyFinder.vim:模糊查找,使用頻率最高的插件之一
TabBar:BufferExpoloer的增強版,用來標(biāo)識打開的文件的
Supertab.vim:文本自動完成
Rubytest.vim:vim下的集成測試工具 閱讀全文 BDD style unit testing video and slides@RubyKaigi 2011
How I Test
watchr 靈活的Continuous Testing測試工具可替代autotest...
不要盲目的 BDD / TDD,我對寫測試的看法 摘要: 針對這種情況,我們可以使用一個名為Guard的gem,來自動監(jiān)控spork中預(yù)加載的文件發(fā)生變化后,自動重啟spork
1).在Gemfile中增加gem 'guard-spork'
2).在shell中g(shù)em install libnotify / gem install inotify
3).bundle install
4).guard init spork
5).guard start 閱讀全文 摘要: 首先我們來理解Autotest的觸發(fā)機制:
1. 要有一套測試的框架和工具(Console,GUI)
2. 要有可以感知被測試對象發(fā)生變化的機制
3. 要有自動加載被測試對象和環(huán)境數(shù)據(jù)的機制
4. 要有將測試結(jié)果展示給用戶的機制 閱讀全文 摘要: 網(wǎng)上google了一下,發(fā)覺又是一個Rails和其他gem不兼容的問題,只要把rake的版本設(shè)置為0.8.7就可以了。 閱讀全文 摘要: ....
甲:嗯....可是這樣看起來,我完全看不到敏捷的任何好處啊
乙:嗯。實際上,我更喜歡RUP,雖然麻煩但很清楚
.... 閱讀全文 摘要: 來自JE上的一篇Rails實戰(zhàn)文章,很不錯! 閱讀全文 QCon 2011大會的PPT下載。其中有我最感興趣的架構(gòu)設(shè)計和NoSQL技術(shù):
企業(yè)敏捷轉(zhuǎn)型之路
http://www.everbox.com/f/Rgo5syChjzuLeS6wJEAQZwvkje
深入淺出NoSQL
http://www.everbox.com/f/TQMXMI6asloYQFJLIxGy2WIIyo
設(shè)計優(yōu)良的架構(gòu)
http://www.everbox.com/f/XCZvXDTbft6ZlK8TsUlMWfVBjO
Web性能與擴展
http://t.sina.com.cn/1746173800/wr4mQk5Iwn
來自一線項目的實戰(zhàn)經(jīng)驗
http://www.everbox.com/f/FZHFfXanIGZOasZsqSZpFuSSFk
HTML5開發(fā)平臺
http://www.everbox.com/f/qeD2qvae9LVRXCA3HsNq2ztiBY 摘要: 閱讀全文
原文:http://www.javaeye.com/news/20399
大多數(shù)管理者都會陷入放權(quán)的困境。你很忙,每件事都要親力親為。你很清楚自己需要別人幫忙,但你沒有足夠的時間尋找并培訓(xùn)別人來幫你。所以,你更加努力地工作,直到自己崩潰。
下面這個故事講述了我如何放權(quán)。
2001年,CD Baby成立三周年。我已有8名員工,但所有其他事情仍然需要我自己做。每周7天,從上午7點工作到晚上10點,自己仍然要經(jīng)手每件事情。
每隔5分鐘,就會有員工向我請示:
- “Derek,有個家伙想修改網(wǎng)站上已經(jīng)存在的相冊,我該怎么跟他說呢?”
- “Derek,我們可以接受電匯作為一種支付方式嗎?”
- “Derek,有個人今天下了兩個訂單,他想知道我們可不可以給他一起郵寄過去,并且把節(jié)省的郵費給他退回去?”
如果整天不停地回答問題,那么什么事也做不成。我感覺我好像是每天去上班,然后在過道里坐著,全職回答員工的問題。
我的忍耐已經(jīng)到了極限,我不再去辦公室,并且關(guān)掉了手機。隨即,我意識到自己正在逃避問題,而不是去解決問題。我必須解決這個問題,要不然就壞了。
經(jīng)過一夜的反思,我最終在思想上接受放權(quán)。
我必須放權(quán),我不是我公司的必需品,沒有我,我的團隊照樣也可以經(jīng)營公司。
第二天,我一進門,有人就請示我,“Derek,我們昨天收到了一個客戶送來的CD,但他今天改變了主意,他想讓我們退回他的CD。我們給他郵寄了回去,但他又問我們能不能退還他的安裝費用,因為他從未登錄過網(wǎng)站。”
這一次,我并沒有僅僅回答了他的問題,而是把大家都召集起來。
我給大家解釋了事情的經(jīng)過,和需要解決的問題。我回答了問題,但更重要的是,我解釋了自己思考的過程和回答背后的理念。
“是的,我給他全額退款了。這樣,我們會受到一點損失。但是,最重要的是經(jīng)常做一些能讓顧客高興的事,只要不過分就行。像這樣一個小小的表示對我們大有裨益,他可能會因此告訴他的朋友們,我們是一家不錯的公司。每個人都要記住,幫助音樂愛好者是我們的首要目標(biāo),利潤是其次。你們將來可以根據(jù)這條準(zhǔn)則來自己做決定,我會完全同意。做那些能讓他們高興的事。要確保每個跟我們做生意的人都會滿意而歸。”
我一一問了每個人,確保他們都理解我的回答。
我讓一位員工起草一本手冊,把這種情況的處理方式記錄下來,并附上解決這種問題的理念。
然后,每個人都回去工作了。
十分鐘之后,新的問題,相同的過程:
- 1. 召集所有人
- 2. 回答問題,解釋理念
- 3. 確保每個人都理解整個過程
- 4. 讓一名員工把這條記錄在冊
- 5. 讓他們知道,下次沒有我他們也可以這樣處理問題
2個月之后,沒有員工請示了。
然后我想員工們展示了事情的最后一部分,也就是我自己的工作。作為學(xué)習(xí)的一部分,他們也需要把這個記錄在冊,然后給其他人看(由教而學(xué))。
現(xiàn)在,公司完全不需要我了。我開始在家里工作,不再去辦公室了。我甚至教過他們我關(guān)于雇傭新員工的思考過程和理念。所以,有兩個新員工是完全由他們發(fā)現(xiàn)、面試、雇傭以及培訓(xùn)的。他們用那本手冊來讓每個新員工理解這種理念以及它的歷史,并且知道怎么自己做決定。我每周去視察一次,確保一切正常。確實一切正常,他們甚至都沒有什么事情向我請示。
因為業(yè)務(wù)由我的團隊負(fù)責(zé)運作,我可以心無旁騖地改進業(yè)務(wù)。我去了加利福尼亞,只是弄清楚事情由他們運作。
我現(xiàn)在仍然每天工作12個小時,但是,我把所有時間都花在業(yè)務(wù)改進、優(yōu)化以及創(chuàng)新上。對我來說,這才是最有趣的事情。這是在玩,不是工作。
我放權(quán)之后,公司市值在四年里從一百萬增長到兩千萬。管理者和企業(yè)家之間有很大的不同。作為管理者你會感覺很自由,直到你意識到如果自己不工作,公司就會倒閉。
要成為一名真正的企業(yè)家,你要確保自己能夠離開一年,而當(dāng)你回來時,你的公司比你離開時運營得更好。
第2篇:關(guān)系數(shù)據(jù)庫還是NoSQL數(shù)據(jù)庫
第3篇:NoSQL架構(gòu)實踐(一)——以NoSQL為輔
第4篇:NoSQL架構(gòu)實踐(二)——以NoSQL為主
下載:NoSQL實戰(zhàn)
重點推薦第3篇的最后一種架構(gòu):
特別適合SNS的業(yè)務(wù)架構(gòu):把某些關(guān)系key存儲在MySQL中,用于后續(xù)的業(yè)務(wù)數(shù)據(jù)分析和挖掘,而把大量的文本和圖片存儲在類似MongoDB這樣的文檔型NoSQL。可以利用關(guān)系型數(shù)據(jù)庫的強有力的計算能力專注于數(shù)據(jù)分析和挖掘,而用NoSQL解決數(shù)據(jù)的讀寫和存儲瓶頸。
由于NoSQL在線性擴展,分布式部署方面有先天優(yōu)勢,可以有效地改善由于數(shù)據(jù)規(guī)模擴大時壓力問題,同時關(guān)系型數(shù)據(jù)庫存儲的數(shù)據(jù)大大減少,也有利于數(shù)據(jù)的備份和同步。 http://www.slideshare.net/mongodb/mongodb-at-the-silicon-valley-iphone-and-ipad-developers-meetup?from=ss_embed
http://my.safaribooksonline.com/book/web-development/ruby/9780132480345
很不錯,居然全部都可以免費看。
摘要: 在本節(jié),你將學(xué)到如何撰寫合乎邏輯的、緊湊的標(biāo)記,使得你有能力將帶寬流量降低50%左右,在減少服務(wù)器負(fù)擔(dān)和壓力的同時,減少網(wǎng)站的加載時間。通過去除那些表現(xiàn)元素,并改掉那些沒有任何好處的壞習(xí)慣,我們就可以達(dá)到上述的目的。
這些壞習(xí)慣折磨著網(wǎng)絡(luò)中的許多站點,特別是那些將 CSS 代碼與主要基于表格的布局混合在一起的站點。這種做法笨拙且不經(jīng)濟,即使是對于那些在其他領(lǐng)域很有經(jīng)驗的設(shè)計師來說。同時,出現(xiàn)這個問題的幾率是均等的,不論是那些手寫代碼的站點,還是利用可見編輯工具,比如 Dreamweaver 和 GoLive,來創(chuàng)建的站點。
本節(jié)會提出這些常見的錯誤,這樣你就可以識別和防范它們,并且學(xué)會如何改正錯誤。我們詳細(xì)闡述唯一標(biāo)識符屬性 (id) - ,并展示它如何使你可以編寫極其緊湊的 XHTML 代碼,不論你創(chuàng)建的是混合布局還是純粹的 CSS 布局。 閱讀全文 摘要: 我確實希望本節(jié)的內(nèi)容可以激發(fā)你的興趣,并鼓勵你去嘗試。為什么這么說呢?因為一旦你掌握了本章包含的簡單容易的理念,你就會重新思考網(wǎng)頁運作的方式,并開始改變建造它們的方法。然而我并不希望你只是將代碼重新改寫一遍。我希望你可以實實在在地以另一種方式思考和工作。
另一方面,重構(gòu)才是 XHTML 真正的意義。 閱讀全文 1. 詳解CSS選擇器、優(yōu)先級與匹配原理
2. 5步讓你的CSS樣式表成功減肥
3. 10個CSS簡寫技巧讓你永遠(yuǎn)受用
4. CSS的聲明中,對于選擇器的描述方式有多種不同的寫法和適用范圍:
A. 標(biāo)簽名選擇器聲明方式:p {color: red;} --- 選中某種元素
B. 分組選擇器聲明方式:h1, h2, h3 {color: red;} --- 選中固定數(shù)目的多種元素
C. 派生選擇器聲明方式:li td {color: red;} --- 選中某種上下文關(guān)系元素
D. ID選擇器聲明方式: #title {color: red;} --- 選中指定id元素
E. Class選擇器聲明方式: .title {color: red;} --- 選中不定數(shù)目的多種元素
F. ID派生選擇器聲明方式: #title table {color: red;} --- 選中指定id下特定上下文關(guān)系元素
G. Class派生選擇器聲明方式: .title table {color: red;} --- 選中多種類型下特定上下文關(guān)系元素
H. 類型選擇器聲明方式:table.title {color: red;} --- 選中某種元素的某種類型
I. 偽類選擇器聲明方式:a:visited {color: red;} --- 選中某種狀態(tài)下元素
J. 類型偽類選擇器聲明方式:a.news:visited {color: blue;} --- 選中某種元素的某種狀態(tài)下的類型
摘要: 閱讀全文http://www.theserverside.com/news/1363955/Taking-the-load-off-OSCache-helps-databases-cope
摘要: OSCache是一套用Java編寫的緩存框架(或者說解決方案),它主要用于頁面緩存,Servlet緩存,或者其它任意的對象。OSCache使用基于內(nèi)存或者磁盤的緩存策略。不同的策略有不同的適用場合:基于內(nèi)存的緩存非常快,但是不能持久化,而且不能存儲大量數(shù)據(jù),適合頻繁訪問的數(shù)據(jù)。基于磁盤的緩存可以分為使用文件和數(shù)據(jù)庫緩存,它的速度比內(nèi)存緩存慢,但可以被持久化,可以在服務(wù)器重啟重啟,數(shù)據(jù)庫奔潰時仍然運作,而且可以存儲較多的數(shù)據(jù)。適合于大量非頻繁訪問的數(shù)據(jù),或者復(fù)雜計算結(jié)果的緩存。 閱讀全文 最近由于工作學(xué)習(xí)需要,開始研究緩存技術(shù)。從網(wǎng)上找到了不少的資料,按照時間的順序排列,也可以從中看出緩存技術(shù),框架已經(jīng)工具的演變歷史。基本知識:《緩存技術(shù)》: http://blog.csdn.net/fanweiwei/archive/2007/01/07/1476131.aspx
《緩存漫談》: http://www.aygfsteel.com/BlueDavy/archive/2006/06/02/50076.html
《網(wǎng)站緩存技術(shù)》:http://dcross.javaeye.com/blog/721468
《緩存技術(shù)淺談》:http://robbin.javaeye.com/blog/770553
摘要: 介紹緩存的基本概念和常用的緩存技術(shù),給出了各種技術(shù)的實現(xiàn)機制的簡單介紹和適用范圍說明,以及設(shè)計緩存方案應(yīng)該考慮的問題 閱讀全文 摘要: InfoQ上有一篇《深入淺出REST》的文章:http://www.infoq.com/cn/articles/rest-introduction
看完后有如下疑問:
A. 觀點1中這個“ID”如何定義?
B. 要為那些“事物”定義ID?
C. 使用鏈接指向任何可以標(biāo)識的事物
D. “標(biāo)準(zhǔn)方法”是否夠用?
E. 無狀態(tài)通信如何實現(xiàn) 閱讀全文 摘要: 原文鏈接:http://www.javaeye.com/topic/698774
這篇文章放到這個版面,因為我認(rèn)為它屬于管理的范疇:個人管理(時間管理、知識管理)。
是不是大家也有這種體會:
網(wǎng)站注冊越來越?jīng)]耐心,看到頁面全是文本框、下拉框,就心煩,咔一下關(guān)了。
文章超過兩屏的,就沒勇氣往下看。
看到文章的相關(guān)鏈接,沒完沒了,兩小時后,腦袋一片混亂,真想涼水沖沖。
Google Reader的未讀項又是1000+了,看吧,壓力太大,不看吧,有種挫敗感,干脆,全部設(shè)置為已讀。
焦慮、挫敗、恐懼,什么感覺都來了,唯獨沒有愉悅感。
...... 閱讀全文 ①gem install
install命令用于安裝指定的gem包,常用的方式是:gem install rails。我們也可以指定版本:gem install rails --version=2.3.5
②gem uninstall
uninstall命令用于反安裝gem包,不過要注意的是這個命令并不會刪除你之前安裝的gem包,而只是把它從path中刪除而已。如果我執(zhí)行以下的命令
gem install rails --version=2.3.4
gem uninstall rails --version=2.3.4
gem install rails --version=2.3.5
實際上rails 2.3.4版本依然還在,只不過你在命令行下執(zhí)行rails -v的時候是顯示rails 2.3.5而已。
③gem cleanup
這個命令配合gem uninstall使用的話可以完全刪除舊版本的gem包,所以在上面的例子中如果我需要完全卸載rails 2.3.4的話,只需要再執(zhí)行
gem cleanup就可以了
④使用指定的rails版本編譯運行
rails _版本號_ 項目名稱 摘要: 所以我們一定要記住:options={}是用來傳遞請求參數(shù)的,而html_options={}是用來設(shè)置請求報頭的,不能搞混! 閱讀全文 摘要: 下面我們來回憶一下整個過程,我們會發(fā)現(xiàn)使用RoR創(chuàng)建Web應(yīng)用真是如此簡單而充滿樂趣!
●命令:
A.rails 項目名稱
B.rake db:create RAILS_VERSION='數(shù)據(jù)庫模式'
C.ruby script/generate scaffold 表名 字段名:字段類型
D.rake db:migrate
E.ruby script/server WEBrick
●代碼:
validates_presence_of :title, :description, :image_url, :price
validates_length_of :title, :minimum => 10
validates_numericality_of :price
validates_uniqueness_of :title
只需要花你差不多了5分鐘的時間而已~,That's all ! 閱讀全文 摘要: 豆瓣已經(jīng)成為一種文化符號,一種現(xiàn)象,一個被所有有志于Web 2.0創(chuàng)業(yè)的人研究的對象。不過也正如文中所說的,豆瓣的軟肋在于:缺乏原創(chuàng)的內(nèi)容,不過從現(xiàn)在豆瓣的發(fā)展來看已經(jīng)開始布局原創(chuàng)內(nèi)容了。“豆瓣電臺”就是這樣一個理念的產(chǎn)品 閱讀全文 摘要: 總之,長尾理論的提出是互聯(lián)網(wǎng)發(fā)展的一項重要里程碑,也是Web2.0時代很多企業(yè)的盈利模式的重要理論依據(jù),同時也可以解決傳統(tǒng)經(jīng)濟學(xué)意義上的很多約束。這也就為創(chuàng)業(yè)者和企業(yè)家提供了更為廣泛的思路,但在運用長尾理論的過程中我們還要避免把長尾理論與二八理論徹底對立、盲目追求“長尾市場”、過度追求產(chǎn)品或者服務(wù)的個性化等誤區(qū)。本人認(rèn)為長尾理論的理論體系有多么完善并不是最重要的,重要的是運用長尾是一種理念,是指導(dǎo)企業(yè)自身定位以及戰(zhàn)略和戰(zhàn)術(shù)行為的思維運營模式,而如何利用這種長尾理念形成一種盈利模式才是最關(guān)鍵的。 閱讀全文
【暗夜列車】
小成本的“道德教育片”,告訴你“出來混,總是要還的”,“不是不報,時候未到”,還有最重要的一點“死人的東西是不能亂碰的”。
推薦指數(shù):★★★
【荒野生存】
一個理想主義者的傳奇,一個藐視世俗者的精神勝利,一個徒步者的孤獨旅程。為了理想中絕對的自由,為了理想中沒有虛偽的世界,為了理想中的真我,只身踏上旅程。
推薦指數(shù):★★★★
【末日危途】
當(dāng)未來遙不可及,當(dāng)世界已成廢墟,當(dāng)文明已經(jīng)毀滅殆盡 ---- 你是否依然堅信希望在前方,還是選擇麻木地活著?你是否依然堅持著那最后的做人底線,還是為了生存而無所不用其極?你是否堅信這世界依然有人值得信任,還是選擇用槍口對準(zhǔn)每一個試圖接近的陌生人?
絕望~ 絕望~ 還是絕望~,人性 VS 獸性
推薦指數(shù):★★★★
【禁閉島】
如果你看過《穆赫蘭道》,《記憶碎片》,那么你應(yīng)該習(xí)慣了好萊塢導(dǎo)演這種顛倒順序,角色亂入,亦真亦假的手段。
人的精神力量是無比強大的,必要時甚至可以創(chuàng)造出一個虛擬的世界。只為在潛意識中強化自己的邏輯和逃避罪責(zé)
這是一部精神病者的歷險大片,也可以看作是一部關(guān)于如何治療迫害妄想癥的教學(xué)片。
推薦指數(shù):★★★★★
【歲月神偷】
歲月是最高明的小偷,他偷走了我們的容貌,偷走了我們的青春,偷走了我們的親人,模糊了我們的記憶。借助電影的手段,我們又一次找回了被歲月偷走的那份久違的溫馨和感動。
成為一部爛片的原因有很多,但是成為一部優(yōu)秀的電影總是有那么一兩個因素的:它們總是能巧妙地運用聲,光,影,將一切看似平淡的東西像變魔術(shù)般進行組合,準(zhǔn)確地?fù)糁心銉?nèi)心某一處柔軟的地方。
不需太多,有感動則足矣!
推薦指數(shù):★★★★★
摘要: 摘在SUN 的J2EE Tutoria 第33章的第3節(jié)《The JMS API Programming Model 》全面地介紹了JMS的編程模型 閱讀全文 摘要: 我要介紹的內(nèi)容包括以下幾個方面:1、memcached的簡介
2、memcached的應(yīng)用場景
3、memcached的安裝
4、memcached的使用
5、memcached的部署架構(gòu)
6、memcached的局限性
7、memcached的改進
轉(zhuǎn)自:http://wangzebin.blog.51cto.com/653300/128235 原文作者:王澤賓 閱讀全文 摘要: 目前為止見過的對架構(gòu)師責(zé)職分析最深刻的文章
轉(zhuǎn)自:http://wangzebin.blog.51cto.com/653300/135640 原文作者:王澤賓 閱讀全文 摘要: 如果個人或者小公司去做綜合類網(wǎng)站,這是很不靠譜的事。現(xiàn)如今小網(wǎng)站的存活之道一定是垂直的,而且必須要有一個非常顯著的亮點,只有把這個亮點深挖進去,吃透了,而且還能將它做到極致才行。從一開始就想搞一個大而全的網(wǎng)站,設(shè)置那么多的頻道,這不僅對于拉動流量沒有效果,而且還會把你的亮點給淹沒了。如果你要做綜合類網(wǎng)站,那么你需要有實力、不差錢才行,推廣手段就是用錢去砸,小網(wǎng)站絕對不會有這么大的財力去拼。
轉(zhuǎn)自:http://wangzebin.blog.51cto.com/653300/142382 原文作者:王澤賓
閱讀全文 摘要: 相當(dāng)好的文章,后面的評論更加精彩! 閱讀全文 摘要: 這是一個基于C++寫的Java源代碼反編譯工具,界面類似于EClipse,而且反編譯的效果不錯,出錯率比較低。支持整個Jar包的反編譯,支持界面拖放。速度很快,語法高亮顯示!
而且這是一個綠色軟件,不需要任何的安裝,雙擊exe文件運行即可。卸載時只需要把exe和cfg文件刪除即可。 閱讀全文 摘要: Apache commons CLI是一個開源的,用于處理命令行的工具包。這個包目前的穩(wěn)定版本是1.2,他非常簡單只有20個左右的class,但提供了幾乎所以可以用到的命令行功能。它的主頁在這里:Apache commons CLI
根據(jù)CLI的邏輯,每一個命令行的處理都可以分為3個步驟:定義、解析、交互
①定義:定義命令行的各種選項屬性(包括縮寫、全寫、是否必須、是否帶參數(shù)、參數(shù)個數(shù)限制)
②解析:使用解析器對命令行選項列表進行解析
③交互:從解析好的命令行查詢用戶輸入的參數(shù)值并進行處理 閱讀全文 摘要: 1.基本功能過濾器
=============================================
①類型:DirectoryFileFilter、FileFileFilter
②大小:EmptyFileFilter、SizeFileFilter
③時間:AgeFileFilter
④名稱:NameFileFilter、PrefixFileFilter、SuffixFileFilter、RegexFileFilter、WildcardFileFilter
⑤讀寫屬性:CanReadFileFilter、CanWriteFileFilter
⑥隱藏屬性:HiddenFileFilter
2.邏輯關(guān)系過濾器
=============================================
①邏輯與:AndFileFilter
②邏輯或:OrFileFilter
③邏輯非:NotFileFilter
④永真/假:TrueFileFilter、FalseFil 閱讀全文 摘要: Apache commons IO包中提供了一個可以遍歷目錄下資源的DirectoryWalker,還有很多的IOFileFilter用于過濾文件目錄。下面的例子分別演示了這個功能。
這兩個搜索類都是以內(nèi)部類的方式嵌入客戶端的,客戶端接收客戶的參數(shù),然后通過一個后臺線程來進行搜索,等待子線程完成搜索后(join方法),再打印搜索結(jié)果。
注意這個過程是可以被cancel的。cancel主要有2種情況。外部cancel:外部線程通過調(diào)用內(nèi)部類的cancel()方法。內(nèi)部cancel:在handleDirectory、handleFile中主動拋出CancelException。
walk方法在每次執(zhí)行前、后都會檢查當(dāng)前是否有cancel指令發(fā)出(checkIfCancelled ---> handleIsCancelled),如果有那么默認(rèn)立刻拋出CancelException,然后調(diào)用handleCancelled方法。 閱讀全文
從
同一個源文件(15M左右)使用不同的方式讀入,一種是讀入后構(gòu)造成一個String,另外一個是讀入后構(gòu)造成一個List。然后再調(diào)用
writeLines(File, String)和writeLines(File, Collection)寫入。下面是測試比較的結(jié)果:
Read and write by string format
File sizes(bytes): 15661680
Content read(bytes): 15661680
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 1016
Read and write by collection format
File sizes(bytes): 15661680
File read(lines): 1782615
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 533437
效率相差之多! 我的測試環(huán)境如下:
OS:Win XP SP4
CPU:Intel Core(TM) 2 Duo CPU
內(nèi)存:800M(虛擬機分配)
JDK:JDK 5.0 (JVM內(nèi)存分配:-Xms64m -Xmx512m)
測試文件:15.295M (是一個IP地址文件,總共1782615行)
在讀方面時間居然相當(dāng)(這里面應(yīng)該有操作系統(tǒng)層面的緩沖作用,我單獨地測試時第2個方式總比第一個慢1/3左右)。而在寫方面性能簡直是天壤之別啊:533437/1016 ≈525倍。
雖然我這個測試還是不嚴(yán)謹(jǐn)?shù)模菑姆椒▽崿F(xiàn)過程和原理來看,兩者性能差異存在必然的因素:
①以Collection方式去構(gòu)造的,在讀取的過程中生成多個小String,而生成String是一項耗時的工作
②以Collection方式去寫的,首先要迭代這個Collection,然后每次調(diào)用Collection中的元素的toString()方法,造成多次的堆棧操作
悲觀鎖定(Pessimistic locking)會采用基于數(shù)據(jù)庫提供的鎖機制來進行鎖定。它會在物理層對行甚至表進行鎖定。使得應(yīng)用的并發(fā)性變差。 閱讀全文 摘要: READ COMMITITED:不允許讀取未提交的數(shù)據(jù),但可以讀取已提交的數(shù)據(jù)。所以可能出現(xiàn)不可重復(fù)讀、和幻像讀(讀的過程依然可以被修改、增加、刪除)
REPEATABLE READ:通過行鎖定,在讀的數(shù)據(jù)不允許其它進程修改。確保已讀取的數(shù)據(jù)不被修改、刪除(不可重復(fù)讀)但無法阻止其它進程寫入新數(shù)據(jù),所以不能確保讀取到新的數(shù)據(jù)(幻像讀)
SERIALIZABLE:通過表鎖定,徹底禁止讀取期間其它進程的修改、刪除(屏蔽不可重復(fù)讀)和增加(屏蔽幻像讀)
但是不管是那種隔離級別,對第一類丟失更新都是不能接收的 閱讀全文 摘要: 一級、二級緩存使用的key均為po的主鍵ID,value即為po實例對象,查詢緩存使用的則為查詢的條件(hql轉(zhuǎn)化而成的sql語句)、查詢的參數(shù)、查詢的頁數(shù),value有兩種情況,如果采用的是select po.property這樣的方式那么value為整個結(jié)果集,如采用的是from這樣的方式那么value為獲取的結(jié)果集中各po對象的主鍵ID,這樣的作用很明顯,節(jié)省內(nèi)存。 閱讀全文 摘要: 關(guān)于Memcached入門知識點 閱讀全文 摘要: ①同步的操作,如果在等待的過程不能做別的事情,它是同步+阻塞的。這個也是最常見的
②同步的操作,如果在等待的過程可以做別的事情,它是同步+非阻塞的。
③異步的操作,如果在等待的過程不能做別的事情,它是異步+阻塞的。
④異步的操作,如果在等待的過程可以做別的事情,它是異步+非阻塞的。這個也是最常見的 閱讀全文 摘要: 同步/異步:消息通知機制。是自己主動關(guān)注消息還是靠別人通知
阻塞/非阻塞:消息處理機制。等待消息處理完成的過程能否做別的事情 閱讀全文 摘要: 要使用DirectoryWalker來遍歷一個目錄并進行相應(yīng)的操作,步驟如下:
①創(chuàng)建一個繼續(xù)于DirectoryWalker的類,并在構(gòu)造方法中調(diào)用super();
②定義一個業(yè)務(wù)入口方法,例如clean。在這個方法中調(diào)用walk方法
③覆蓋DirectoryWalker類的handleDirectory方法,提供相應(yīng)的處理邏輯
④覆蓋DirectoryWalker類的handleFile方法,提供相應(yīng)的處理邏輯 閱讀全文 摘要: 它們可以分為兩大類:
①實質(zhì)性過濾器:例如針對文件的類型,屬性,名稱,大小進行過濾的過濾器
②過濾器連接器:典型的包括AndFileFilter、OrFileFilter。用于邏輯連接多個過濾器 閱讀全文 摘要: 對IOUtils類的剖析 閱讀全文 摘要: FileUtils總體上來說,主要功能有:
※ 資源的創(chuàng)建、刪除
※ 資源的復(fù)制、移動
※ 資源的讀寫
※ 資源的比較
※ 資源的過濾
※ 資源的轉(zhuǎn)換 閱讀全文 摘要: 使用Apache commons IO包規(guī)范文件名 閱讀全文 摘要: 本文通過對Apache commons io包的input,output子類的源代碼研究,來揭示為什么使用commons IO包會在性能上由于JDK自帶的IO類。
特別是輸出流方面 閱讀全文 摘要: 使用圖例全面展示Java中IO的架構(gòu),特別是節(jié)點流和過濾流及其之間的轉(zhuǎn)換 閱讀全文 摘要: 良好的編程習(xí)慣,對編碼和數(shù)據(jù)傳輸流程的清晰認(rèn)識,規(guī)范的配置是確保JavaEE應(yīng)用不會出現(xiàn)亂碼的三大法寶 閱讀全文 摘要: 可以看到該命令對于英文字符,數(shù)字不會轉(zhuǎn)換而是直接輸出,而對于每個中文字符則轉(zhuǎn)換成以\u開頭的4個16進制數(shù)字。
通常情況下,如果要進行字符的逆轉(zhuǎn)換,-encoding encoding_name這個參數(shù)都會配合-reverse出現(xiàn)。在上面的例子中因為本地系統(tǒng)是中文操作系統(tǒng),所以即便沒有指定-encoding也可以正確地從unicode ---》GBK。如果是在英文平臺下由于默認(rèn)字符集是ISO-8859-1,那么這個時候如果不指定則轉(zhuǎn)換出來的將是?了。 閱讀全文 摘要: 可以看到在Java中,字符的unicode有兩種表示顯示:一種是10進制形式,一種是16進制形式。它們可以分別通過:int i = (int)(string.charAt(i))和Integer.toHexString(i);獲得。而且在java文件和Web頁面,同一個unicode的表示形式是不同。web頁面需要用進行轉(zhuǎn)義,在java文件中則使用\u進行轉(zhuǎn)義。 閱讀全文 摘要: 在這個專題的第一篇文章【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ) 開頭,我們就已經(jīng)介紹了這個規(guī)則:
①得到每個字符的2進制GBK編碼
②將該16進制的GBK編碼轉(zhuǎn)換成2進制的字符串(2個字節(jié))
③分別在字符串的首位插入110,在第9位插入10,在第17位插入10三個字符串,得到3個字節(jié)
④將這3個字節(jié)分別轉(zhuǎn)換成16進制編碼,得到最終的UTF-8編碼。 閱讀全文 摘要: 謹(jǐn)慎地使用getBytes(NAME_OF_CHARSET)和new String(bytes, NAME_OF_CHARSET),除非你很清楚的知道原始的字符編碼和傳輸協(xié)議使用的編碼。
推薦使用基于服務(wù)器的配置、過濾器設(shè)置request/response的characterEncoding、content type屬性。還有就是JSP頁面的pageEncoding屬性、HTML meta元素的content type屬性。盡量避免頻繁的在代碼中進行字符串轉(zhuǎn)碼,即降低了效率又增加了風(fēng)險 閱讀全文 摘要: 這個方法再次證明了String的getBytes()方法的危險性,如果我們使用new String(str.getBytes(), encoding)對字符串進行重新編碼解碼時,我們一定要清楚str.getBytes()方法返回的字節(jié)數(shù)組的長度、內(nèi)容到底是什么,因為在接下來使用新的encoding進行編碼解碼時,Java并不會自動地對字節(jié)數(shù)組進行擴展以適應(yīng)新的encoding。而是按照新的編碼方法直接對該字節(jié)數(shù)組進行解析。
于是結(jié)果就像上面的例子一樣,同樣是4個原始字節(jié),有些每2個一組進行解析,有些每個一組進行解析,有些每3個一組進行解析。其結(jié)果就只能看那種編碼方式合適了。 閱讀全文 摘要: 不要輕易地使用或濫用String類的getBytes(encoding)方法,更要盡量避免使用getBytes()方法。因為這個方法是平臺依賴的,在平臺不可預(yù)知的情況下完全可能得到不同的結(jié)果。如果一定要進行字節(jié)編碼,則用戶要確保encoding的方法就是當(dāng)初字符串輸入時的encoding。 閱讀全文 摘要: Unicode到UTF-8的轉(zhuǎn)換:Unicode的16進制編碼<-->對應(yīng)的2進制編碼<-->UTF-8規(guī)范的2進制編碼<-->UTF-8規(guī)范的16進制編碼
也就是說,假如我們需要從磁盤文件、數(shù)據(jù)庫記錄、網(wǎng)絡(luò)傳輸一些字符,保存到Java的變量中,要經(jīng)歷由bytes-->encode字符-->Unicode字符的轉(zhuǎn)換(例如new String(bytes, encode));而要把Java變量保存到文件、數(shù)據(jù)庫或者通過網(wǎng)絡(luò)傳輸,系統(tǒng)要做一個Unicode字符-->encode字符-->bytes的轉(zhuǎn)換(例如String.getBytes([encode])) 閱讀全文
在天涯論壇搞到的,要感謝提供這個攻略的網(wǎng)友“海南小椰妹”,不過話說回來,不知道看完這篇攻略,你還有沒有興趣去海南三亞了。有時候旅游就是沖著未知的前方而去的,如果什么都攻略了那就感覺沒有啥意外和驚喜了。
再次感謝一下這個海南小椰妹!
海南三亞旅游攻略
一個文件分享出去。 閱讀全文 摘要: 可以看到,對于這個解析過程,一般的步驟就是:
A.獲取channnel下的某個子節(jié)點元素
B.如果該子節(jié)點元素有子元素或?qū)傩裕瑒t繼續(xù)遞歸訪問
C.調(diào)用該channnel子元素的createXxx方法加載或創(chuàng)建該子元素
D.調(diào)用Channel的setXxx方法添加該子元素到channel實例中 閱讀全文 摘要: FeedParser是一個facade類,這個類的工作就是根據(jù)讀入的RSS Feed的協(xié)議系和版本“委托(delegate)”給已經(jīng)硬編碼的規(guī)則(concrete rules)指定的解析器,而且這些解析器是私有的。這意味著:用戶不能直接調(diào)用一個RSS_0_91_Parser類的實例來進行解析工作。 閱讀全文 摘要: ChannelBuilder對channel object的創(chuàng)建原則就是:
A.如果能夠從持久層中找到對應(yīng)的記錄,那么從持久層返回
B.如果找不到,則創(chuàng)建它并持久化它,然后返回該對象(已持久化)
只要記得的一點就是:從ChannelBuilder返回的對象都是已經(jīng)持久化的。 閱讀全文 摘要: 經(jīng)過和impl.basic包中Channel的比較,發(fā)現(xiàn)兩者的實現(xiàn)有如下的不同:
A.構(gòu)造方法中多了3個方法,其中兩個是使用title和location來構(gòu)造的,最后一個是使用Element,title,location來構(gòu)造的
B.從Hibernate中檢索出來的是不用設(shè)置ID的,而從內(nèi)存中生成的必須使用IdGenerator產(chǎn)生唯一ID
C.basic實現(xiàn)中沒有g(shù)etLocationString方法和setLocationString方法
D.basic實現(xiàn)中沒有g(shù)etSiteString方法和setSiteString方法
E.basic實現(xiàn)中沒有g(shù)etGroup方法和setGroup方法
F.basic實現(xiàn)中沒有g(shù)etFormatString和setFormatString方法
G.basic中沒有setItems方法,而且getItems方法中的實現(xiàn)不同(basic采用了同步的hashset,而hibernate沒有)
H.basic中的addItem方法是添加到hashmap,而hib 閱讀全文 摘要: 其中dbscheme是關(guān)鍵,它的主要工作包括:
A.創(chuàng)建用于保存DDL輸出結(jié)果的scripts目錄
B.定義一個名為schemaexport的Ant task,用于把hbm文件導(dǎo)出為ddl文件
C.執(zhí)行schemaexport任務(wù),把classes目錄下的hbm文件export成DDL,并輸出到指定的位置
D.輸出執(zhí)行結(jié)果信息 閱讀全文 摘要: 這個ID生成類采用了系統(tǒng)當(dāng)前時間作為隨即數(shù)產(chǎn)生的種子,這個并不難理解。但是有一個地方需要我們注意的就是關(guān)鍵字transient的使用。這個關(guān)鍵的作用是告訴編譯器假設(shè)該類的對象被序列化了,這個值不需要被保存。因為它是“瞬時”的。 閱讀全文 摘要: 在ChannelBuilder下有幾種類型的方法:
★構(gòu)造方法和初始化方法:即創(chuàng)建Channel對象的方法及初始化的方法
★元素構(gòu)建方法:即構(gòu)建Channel子元素的方法
★事務(wù)控制方法:即控制構(gòu)建,析構(gòu)過程的方法 閱讀全文 摘要: 總結(jié)起來,channel的創(chuàng)建,更新過程如下:
①接收經(jīng)過ChannelParser解析后的XML Element元素,和其他一系列屬性,調(diào)用構(gòu)造方法
②構(gòu)造方法為channel生成一個全局唯一ID
③構(gòu)造方法創(chuàng)建item列表,觀察者列表,設(shè)置好分類(Category),首次更新時間
④如果有新item到來,則添加到item列表,同時更新item的channel歸屬
⑤如果現(xiàn)有channel更新,則設(shè)置最新更新時間
⑥通知每一個已注冊的觀察者有事件發(fā)生 閱讀全文 摘要: Informa的core包介紹如下:
“This package contains interfaces for the news channel objects, it builds the core API for all news channel storage implementation. ”
從上面這句話來看,core包里面定義的都是關(guān)于“news channel objects”的接口---實際上就是RSS協(xié)議中的channel和item元素。經(jīng)過一個多小時查看源代碼和閱讀API,發(fā)現(xiàn)Informa對core包的設(shè)計有如下特點:
core包中的元素被分為標(biāo)記接口、實體接口、行為接口 閱讀全文 摘要: Informa的API結(jié)構(gòu)如下:
★core包:
核心包。訂閱了RSS中channel,item等一系列元素和元數(shù)據(jù)的接口
★impl.basic包:
基本功能包。使用in-memory模式實現(xiàn)了core包訂閱的接口
★impl.hibernate包:
基于hibernate實現(xiàn)的包,使用關(guān)系型數(shù)據(jù)庫模式實現(xiàn)了core包定義的接口
★parsers包:
定義了永遠(yuǎn)解析channel,item的解析器工具
★exporters包:
定義了一組把channel,item導(dǎo)出成各種協(xié)議格式的工具
★search包:
定義了用于全文搜索channel,item的工具
★utils.manager.memory包:
定義了一組用于管理“in-memory”模式持久化的工具
★utils.manager.hibernate包: 閱讀全文 摘要: 選擇一個開源框架,我的標(biāo)準(zhǔn)有幾條:
★良好的文檔和源代碼管理:這是最基本的一條,想RSSLibJ這種連文檔、官網(wǎng)都沒有的一律pass掉
★持續(xù)的改進:這是第二個重要的,像上面某些工具從02年后就不再更新了,出了問題你找誰訴苦去
★簡單和易上手:在短時間內(nèi)可以迅速依樣畫葫蘆
★活躍的社區(qū):參與的人越多軟件成長得越多。我不是特別在乎軟件目前的使用率,因為好的軟件都是慢慢出名的 閱讀全文
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | |||
6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
27 | 28 | 29 | 30 | 31 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
常用鏈接
留言簿(21)
隨筆分類
- J2EE 框架(9)
- J2EE基礎(chǔ)(4)
- J2SE(43)
- Java 工具(5)
- Oracle Concept(4)
- Oracle SQL/PLSQL(9)
- Oracle 開發(fā)(13)
- Oracle 管理(4)
- Oracle 調(diào)優(yōu)
- Oracle 錯誤診斷
- RoR(19)
- UML(3)
- Unix / Linux(13)
- Web基礎(chǔ)(19)
- 其它技術(shù)(7)
- 感悟(3)
- 雜項(7)
- 架構(gòu)與性能(8)
- 模式與重構(gòu)(19)
- 灌水(8)
- 電影與音樂(16)
- 走過的路(1)
- 軟件過程與軟件方法(3)
- 陽光戶外(2)
- 項目管理(36)
隨筆檔案
- 2012年2月 (3)
- 2011年11月 (4)
- 2011年10月 (1)
- 2011年9月 (2)
- 2011年8月 (2)
- 2011年7月 (5)
- 2011年6月 (3)
- 2011年5月 (1)
- 2011年4月 (1)
- 2011年3月 (3)
- 2011年1月 (1)
- 2010年12月 (1)
- 2010年11月 (5)
- 2010年10月 (3)
- 2010年9月 (1)
- 2010年7月 (1)
- 2010年6月 (1)
- 2010年5月 (4)
- 2010年4月 (9)
- 2010年3月 (19)
- 2010年2月 (8)
- 2010年1月 (3)
- 2009年12月 (34)
- 2009年11月 (1)
- 2009年10月 (2)
- 2009年7月 (4)
- 2009年6月 (5)
- 2009年5月 (3)
- 2009年4月 (2)
- 2009年3月 (1)
- 2009年2月 (5)
- 2009年1月 (5)
- 2008年12月 (13)
- 2008年11月 (4)
- 2008年10月 (1)
- 2008年9月 (6)
- 2008年8月 (5)
- 2008年7月 (3)
- 2008年6月 (31)
- 2008年5月 (10)
- 2008年4月 (9)
- 2008年3月 (7)
- 2008年2月 (4)
- 2008年1月 (19)
BlogJava熱點博客
好友博客
搜索
最新評論

- 1.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
- 666666666666666666666這幾天正在做個類似工程編碼出現(xiàn)錯誤
- --李
- 2.?re: 【Java基礎(chǔ)專題】IO與文件讀寫---使用Apache commons IO簡化文件讀寫
- 不錯
- --阿斯蘭
- 3.?re: 【Java基礎(chǔ)專題】編碼與亂碼(03)----String的toCharArray()方法
- 多謝分享
- --thx
- 4.?re: 【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
- 評論內(nèi)容較長,點擊標(biāo)題查看
- --karl
- 5.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
- 謝謝,幫了我大忙!
- --小龍