
2005年12月27日
兒子:謝謝你!昨天過母親節(jié)請我吃飯。還送了我那么貴的u盤。這是我好久以來最開心的一回了!
今天上午我在電腦上看電視劇《盛夏晚晴天》的45集,夏正朗的話我很認(rèn)可,有道理。說給你看一下:一個(gè)男人在30歲之前,能有一次徹底的失敗,讓他一無所有,那將是一個(gè)很幸運(yùn)的事情。
因?yàn)樗芸梢詮氖≈校J(rèn)識失敗,戰(zhàn)勝失敗,卷土重來。他可以以自己的魅力,銳不可擋的干勁來改變。
在這個(gè)世界上,只有想不到的事,沒有做不到的事。要敢愛、敢恨、敢錯(cuò)、敢當(dāng)!希望你幸福、快樂、健康!
我的兒子是一個(gè)誠實(shí)、善良、靠得住的好孩子。希望你在社會這所深凹的大學(xué)里,經(jīng)得起風(fēng)吹浪打,經(jīng)得起考驗(yàn)。有一句話,很有哲理。就是激勵(lì)自己的不是鮮花和掌聲,而是挫折、失敗和教訓(xùn)!
我和你爸都是在這個(gè)世界里,最愛你的人,我們也在期盼你能照顧我們一輩子。嘿嘿、、、謝謝你,為我們奉獻(xiàn)了很多。、
posted @
2013-06-07 22:06 Stephen 閱讀(185) |
評論 (0) |
編輯 收藏
海爾總裁張瑞敏在序言中寫到:“看德魯克的書是一種享受,因?yàn)槌3J谷擞忻┤D開之感。” 的確,德魯克的書沒有任何故弄玄虛,都是實(shí)實(shí)在在的道理,尤其是這本經(jīng)典中的經(jīng)典,每次讀過以后都有不同的感受。
管理是一門學(xué)問,如何讓管理變得卓有成效的確是一個(gè)很大的問題。很多人從做具體的事情開始走向管理崗位的時(shí)候,都會覺得有點(diǎn)無所適從:有些人開始抱怨時(shí)間變得不可控,尤其是可能沒有機(jī)會做一些曾經(jīng)讓自己很有“成就感”的工作;有些人不知道如何與下屬和上級打交道,不知道怎樣讓團(tuán)隊(duì)變得有效率;有些人不知道如何做決策,每次做決策不是瞻前顧后,就是武斷決策。《卓有成效的管理者》這本書,恰恰給了這些人最好的答案,最佳的實(shí)踐經(jīng)驗(yàn),這本薄薄的書,沒有大費(fèi)周折的闡述什么講大道理,沒有長篇累牘的講故事,只是把這種好像很明顯但又往往讓我們經(jīng)常想不到的道理娓娓道來。其實(shí)卓有成效的管理很簡單:管理好自己的時(shí)間、學(xué)會用人和讓團(tuán)隊(duì)有成效、做好決策。
一、管理好自己的時(shí)間
作為一個(gè)卓有成效的管理者要會掌握自己的時(shí)間,要合理的利用自己的時(shí)間,時(shí)間用在能產(chǎn)生效益的事情上。管理者必須面對四個(gè)無法避免的難題:時(shí)間往往只屬于別人,而不屬于自己;管理者往往被迫忙于“日常運(yùn)作”,除非他們敢于采取行動來改變周圍的一切;本身處于一個(gè)組織中,受組織的局限。要成為有效管理者,首先,必須知道自己的時(shí)間用在什么地方上;其次,要學(xué)會將時(shí)間整塊運(yùn)用;再次,管理好自己的時(shí)間,消除浪費(fèi)時(shí)間的活動,統(tǒng)一安排可以自由支配的時(shí)間。
二、學(xué)會用人和讓團(tuán)隊(duì)有效率
管理者的作用不僅是自己如何可以高效率的工作,而更重要的是如何讓團(tuán)隊(duì)有效的工作,因?yàn)橐粋€(gè)人再優(yōu)秀也只是一個(gè)人,而一個(gè)優(yōu)秀的團(tuán)隊(duì)的作用更是遠(yuǎn)遠(yuǎn)大于把這些人的單產(chǎn)累加起來,這就是為什么很多人說1+1>2的道理。從德魯克的書中,我們明白了,讓團(tuán)隊(duì)有效率其實(shí)很簡單,就是正確的用人并發(fā)揮他們長處,然后學(xué)會自己可為團(tuán)隊(duì)做些什么。
漢高祖劉邦說:“夫運(yùn)籌帷帳之中,決勝千里之外,吾不如子房(即張良)。鎮(zhèn)國家,撫百姓,給饋餉,不絕糧道,吾不如蕭何。連百萬之軍,戰(zhàn)必勝,攻必取,吾不如韓信。此三者,皆人杰也,吾能用之,此吾所以取天下也。”有效的管理者在用人時(shí),不在于如何克服人的短處,而在于如何發(fā)揮人的長處。
同時(shí),作為一個(gè)有成效的管理者要知道自己能做些什么貢獻(xiàn),并且要知道能為下屬做些什么貢獻(xiàn),才能讓這些知識工作者有效的工作。重視貢獻(xiàn),才能使管理者的注意力不為自己的專長所限,不為其本身的技術(shù)所限,不為其本身所在的部門所限,才能看到整體的績效,同時(shí),也能使其更加重視團(tuán)隊(duì),只有團(tuán)隊(duì)才是真正產(chǎn)生成果的地方。
三、做好決策
決策是非常具有風(fēng)險(xiǎn)的舉動,但是如何一個(gè)管理人都需要做出各種決策,你的決策可能會影響到公司的利益和伙伴的利益、績效及成果,這就是管理者存在的最重要的一項(xiàng)功能。
卓有成效的管理者必須善于做出正確的決策,要做出決策就要有明確目標(biāo)、權(quán)衡現(xiàn)有資源、反復(fù)推敲,反復(fù)的斟酌、落實(shí)行動、實(shí)時(shí)反饋,衡量你的決策是否正確,給你的決策留更多的調(diào)整空間和機(jī)會。
在做決策之前要善于聽取各方意見,善于使用發(fā)散性思維和收斂性思維來搜集聽取各方信息;要進(jìn)行大量的風(fēng)險(xiǎn)評估如果收益大于支出那么就立即執(zhí)行;一旦執(zhí)行就要頂住壓力,處理好時(shí)間問題、處理好人際問題;重視反饋學(xué)會聽取各方意見擠反饋的信息,信息中有好有壞要通盤分析,驗(yàn)證決策的正確性。
posted @
2010-04-18 21:42 Stephen 閱讀(314) |
評論 (0) |
編輯 收藏
最近同事推薦office 2007比較好用,于是裝了一個(gè),
但是在用outlook時(shí)比較麻煩,我其中的一個(gè)郵箱沒辦法收pop3的郵件,總提示密碼錯(cuò)誤,要求輸入密碼,
但是我用2003的時(shí)候是可以的,
于是我在嘗試各種組合,發(fā)現(xiàn)outlook 2003 、foxmail,都可以從這個(gè)pop3收到郵件,
但是outlook 2007就是不可以,
于是嘗試用office 2007+outlook2003來用,
結(jié)果出現(xiàn)的新的問題,outlook不能使用word作為郵件編輯器了,
經(jīng)過嘗試:
1、office 2003 與office 2007 不能在同系統(tǒng)共存;
2、outlook 2003 與 outlook 2007 也是同樣;
3、office 2007 與 outlook 2003可以共存,但是問題是outlook2003只能使用word2003作為編輯器,而不能使用2007的;
麻煩呢,目前我暫時(shí)用的第三種方案,
關(guān)于不能收郵件的原因,目前估計(jì)是端口的問題,因?yàn)楣镜木W(wǎng)絡(luò)環(huán)境比較嚴(yán)格,需要申請開通端口,
估計(jì)是2007驗(yàn)證時(shí)使用了什么不知道的端口,等有時(shí)間再網(wǎng)絡(luò)工程師調(diào)試一下。
posted @
2009-04-13 22:54 Stephen 閱讀(831) |
評論 (0) |
編輯 收藏
最近總感覺事情太多,要做的事情很多,要學(xué)習(xí)的東西很多,要看的書很多,
然后準(zhǔn)備好了以后,又沒毅力做下去了,
還是執(zhí)行力不夠,
目標(biāo)太多,就沒有了方向,
要減少目標(biāo):
1、職業(yè)發(fā)展方向要確定,不能每個(gè)方面都兼顧,可以關(guān)注,但要確定一個(gè)主要的方向;
2、不能每本書都精讀,沒有那么多時(shí)間,計(jì)劃的十本書,選兩本到三本精讀;
3、計(jì)劃時(shí)間不能定的太長,沒有約束力,要短、可達(dá)到。
工作上目標(biāo)確定要少,上半年只有兩個(gè)月了,如果想看到成效,必須精力集中關(guān)鍵項(xiàng)上面:
1、完成配置管理與問題管理的優(yōu)化;
2、平穩(wěn)接手項(xiàng)目組的工作,融入到項(xiàng)目環(huán)境中;
3、初步了解項(xiàng)目的業(yè)務(wù)、背景;
posted @
2009-04-13 22:39 Stephen 閱讀(220) |
評論 (0) |
編輯 收藏
一、學(xué)習(xí)英語
二、讀十本書,完成讀書筆記
圖書目錄:
《走出軟件作坊》
《Scrum敏捷項(xiàng)目管理》
《IT管理知識體系》
《Head First 設(shè)計(jì)模式》
《UML寶典》
《人件》
《哲學(xué)與人生》
《web信息架構(gòu)》
兩本待定
三、讀兩個(gè)開源框架代碼
四、寫十篇文章(項(xiàng)目管理、IT管理方面)
posted @
2009-02-15 21:29 Stephen 閱讀(231) |
評論 (0) |
編輯 收藏
安裝RAR:
sudo apt-get install rar
sudo ln -fs /usr/bin/rar /usr/bin/unrar
posted @
2009-01-23 23:35 Stephen 閱讀(203) |
評論 (0) |
編輯 收藏
進(jìn)入vi的命令
vi filename: 打開或新建文件,并將光標(biāo)置于第一行首
vi +n filename: 打開文件,并將光標(biāo)置于第n行首
vi + filename: 打開文件,并將光標(biāo)置于最后一行首
vi +/pattern filename: 打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的串處
vi -r filename: 在上次正用vi編輯時(shí)發(fā)生系統(tǒng)崩潰,恢復(fù)filename
vi filename....filename: 打開多個(gè)文件,依次進(jìn)行編輯
移動光標(biāo)類命令
h: 光標(biāo)左移一個(gè)字符
l: 光標(biāo)右移一個(gè)字符
space: 光標(biāo)右移一個(gè)字符
Backspace: 光標(biāo)左移一個(gè)字符
k或Ctrl+p: 光標(biāo)上移一行
j或Ctrl+n: 光標(biāo)下移一行
Enter: 光標(biāo)下移一行
w或W : 光標(biāo)右移一個(gè)字至字首
b或B : 光標(biāo)左移一個(gè)字至字首
e或E : 光標(biāo)右移一個(gè)字至字尾
): 光標(biāo)移至句尾
(: 光標(biāo)移至句首
}: 光標(biāo)移至段落開頭
{: 光標(biāo)移至段落結(jié)尾
nG: 光標(biāo)移至第n行首
n+: 光標(biāo)下移n行
n-: 光標(biāo)上移n行
n$: 光標(biāo)移至第n行尾
H: 光標(biāo)移至屏幕頂行
M: 光標(biāo)移至屏幕中間行
L: 光標(biāo)移至屏幕最后行
0: 光標(biāo)移至當(dāng)前行首
$: 光標(biāo)移至當(dāng)前行尾
屏幕翻滾類命令
Ctrl+u: 向文件首翻半屏
Ctrl+d: 向文件尾翻半屏
Ctrl+f: 向文件尾翻一屏
Ctrl+b: 向文件首翻一屏
nz: 將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部。
插入文本類命令
i: 在光標(biāo)前
I: 在當(dāng)前行首
a: 光標(biāo)后
A: 在當(dāng)前行尾
o: 在當(dāng)前行之下新開一行
O: 在當(dāng)前行之上新開一行
r: 替換當(dāng)前字符
R: 替換當(dāng)前字符及其后的字符,直至按ESC鍵
s: 從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符
S: 刪除指定數(shù)目的行,并以所輸入文本代替之
ncw或nCW: 修改指定數(shù)目的字
nCC: 修改指定數(shù)目的行
刪除命令
ndw或ndW: 刪除光標(biāo)處開始及其后的n-1個(gè)字
do: 刪至行首
d$: 刪至行尾
ndd: 刪除當(dāng)前行及其后n-1行
x或X: 刪除一個(gè)字符,x刪除光標(biāo)后的,而X刪除光標(biāo)前的
Ctrl+u: 刪除輸入方式下所輸入的文本
搜索及替換命令
/pattern: 從光標(biāo)開始處向文件尾搜索pattern
?pattern: 從光標(biāo)開始處向文件首搜索pattern
n: 在同一方向重復(fù)上一次搜索命令
N: 在反方向上重復(fù)上一次搜索命令
:s/p1/p2/g: 將當(dāng)前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 將文件中所有p1均用p2替換
選項(xiàng)設(shè)置
all: 列出所有選項(xiàng)設(shè)置情況
term: 設(shè)置終端類型
ignorance: 在搜索中忽略大小寫
list: 顯示制表位(Ctrl+I)和行尾標(biāo)志($)
number: 顯示行號
report: 顯示由面向行的命令修改過的數(shù)目
terse: 顯示簡短的警告信息
warn: 在轉(zhuǎn)到別的文件時(shí)若沒保存當(dāng)前文件則顯示NO write信息
nomagic: 允許在搜索模式中,使用前面不帶“\”的特殊字符
nowrapscan: 禁止vi在搜索到達(dá)文件兩端時(shí),又從另一端開始
mesg: 允許vi顯示其他用戶用write寫到自己終端上的信息
最后行方式命令
:n1,n2 co n3: 將n1行到n2行之間的內(nèi)容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內(nèi)容移至到第n3行下
:n1,n2 d: 將 n1行到n2行之間的內(nèi)容刪除
:w: 保存當(dāng)前文件
:e filename: 打開文件filename進(jìn)行編輯
:x: 保存當(dāng)前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:!command: 執(zhí)行shell命令command
:n1,n2 w!command: 將文件中n1行至n2行的內(nèi)容作為command的輸入并執(zhí)行之,
若不指定n1,n2,則表示將整個(gè)文件內(nèi)容作為command的輸入
:r!command: 將命令command的輸出結(jié)果放到當(dāng)前行
寄存器操作
"?nyy: 將當(dāng)前行及其下n行的內(nèi)容保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyw: 將當(dāng)前行及其下n個(gè)字保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyl: 將當(dāng)前行及其下n個(gè)字符保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?p: 取出寄存器?中的內(nèi)容并將其放到光標(biāo)位置處。這里?可以是一個(gè)字母,也可以是一個(gè)數(shù)字
ndd: 將當(dāng)前行及其下共n行文本刪除,并將所刪內(nèi)容放到1號刪除寄存器中
posted @
2009-01-21 21:40 Stephen 閱讀(274) |
評論 (0) |
編輯 收藏
1. 先從網(wǎng)上下載jdk(jdk-1_5_0_02-linux-i586.rpm) ,推薦SUN的官方網(wǎng)站www.sun.com,下載后放在/home目錄中,當(dāng)然其它地方也行。
進(jìn)入安裝目錄
#cd /home
#cp jdk-1_5_0_02-linux-i586.rpm /usr/local
#cd /usr/local
給所有用戶添加可執(zhí)行的權(quán)限
#chmod +x jdk-1_5_0_02-linux-i586.rpm.bin
#./jdk-1_5_0_02-linux-i586.rpm.bin
此時(shí)會生成文件jdk-1_5_0_02-linux-i586.rpm,同樣給所有用戶添加可執(zhí)行的權(quán)限
#chmod +x jdk-1_5_0_02-linux-i586.rpm
安裝程序
#rpm -ivh jdk-1_5_0_02-linux-i586.rpm
出現(xiàn)安裝協(xié)議等,按接受即可。
2.設(shè)置環(huán)境變量。
#vi /etc/profile
在最后面加入
#set java environment
JAVA_HOME=/usr/java/jdk-1_5_0_02
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出。
要使JDK在所有的用戶中使用,可以這樣:
vi /etc/profile.d/java.sh
在新的java.sh中輸入以下內(nèi)容:
#set java environment
JAVA_HOME=/usr/java/jdk-1_5_0_02
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出,然后給java.sh分配權(quán)限:chmod 755 /etc/profile.d/java.sh
3.在終端使用echo命令檢查環(huán)境變量設(shè)置情況。
#echo $JAVA_HOME
#echo $CLASSPATH
#echo $PATH
4.檢查JDK是否安裝成功。
#java -version
如果看到JVM版本及相關(guān)信息,即安裝成功!
posted @
2009-01-21 21:33 Stephen 閱讀(607) |
評論 (0) |
編輯 收藏
tar命令
語法:
tar [主選項(xiàng)+輔選項(xiàng)] 文件或者目錄
使用該命令時(shí),主選項(xiàng)是必須要有的,它告訴
tar要做什么事情,輔選項(xiàng)是輔助使用的,可以選用。
主選項(xiàng):
c 創(chuàng)建新的檔案文件。如果用戶想備份一個(gè)目錄或是一些文件,就要選擇這個(gè)選項(xiàng)。
r 把要存檔的文件追加到檔案文件的未尾。例如用戶已經(jīng)作好備份文件,又發(fā)現(xiàn)還有一個(gè)目錄或是一些文件忘記備份了,這時(shí)可以使用該選項(xiàng),將忘記的目錄或文件追加到備份文件中。
t 列出檔案文件的內(nèi)容,查看已經(jīng)備份了哪些文件。
u 更新文件。就是說,用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最后。
x 從檔案文件中釋放文件。
輔助選項(xiàng):
b 該選項(xiàng)是為磁帶機(jī)設(shè)定的。其后跟一數(shù)字,用來說明區(qū)塊的大小,系統(tǒng)預(yù)設(shè)值為20(20*512 bytes)。
f 使用檔案文件或設(shè)備,這個(gè)選項(xiàng)通常是必選的。
k 保存已經(jīng)存在的文件。例如我們把某個(gè)文件還原,在還原的過程中,遇到相同的文件,不會進(jìn)行覆蓋。
m 在還原文件時(shí),把所有文件的修改時(shí)間設(shè)定為現(xiàn)在。
M 創(chuàng)建多卷的檔案文件,以便在幾個(gè)磁盤中存放。
v 詳細(xì)報(bào)告
tar處理的文件信息。如無此選項(xiàng),
tar不報(bào)告文件信息。
w 每一步都要求確認(rèn)。
z 用gzip來壓縮/解壓縮文件,加上該選項(xiàng)后可以將檔案文件進(jìn)行壓縮,但還原時(shí)也一定要使用該選項(xiàng)進(jìn)行解壓縮。
Linux下的壓縮文件剖析
對于剛剛接觸Linux的人來說,一定會給Linux下一大堆各式各樣的文件名給搞暈。別個(gè)不說,單單就壓縮文件為例,我們知道在Windows下最常見的壓縮文件就只有兩種,一是,zip,另一個(gè)是.rap。可是Linux就不同了,它有.gz、.
tar.gz、tgz、bz2、.Z、.
tar等眾多的壓縮文件名,此外windows下的.zip和.rar也可以在Linux下使用,不過在Linux使用.zip和.rar的人就太少了。本文就來對這些常見的壓縮文件進(jìn)行一番小結(jié),希望你下次遇到這些文件時(shí)不至于被搞暈:)
在具體總結(jié)各類壓縮文件之前呢,首先要
弄清兩個(gè)概念:打包和壓縮。打包是指將一大堆文件或目錄什么的變成一個(gè)總的文件,壓縮則是將一個(gè)大的文件通過一些壓縮算法變成一個(gè)小文件。為什么要區(qū)分這
兩個(gè)概念呢?其實(shí)這源于Linux中的很多壓縮程序只能針對一個(gè)文件進(jìn)行壓縮,這樣當(dāng)你想要壓縮一大堆文件時(shí),你就得先借助另它的工具將這一大堆文件先打
成一個(gè)包,然后再就原來的壓縮程序進(jìn)行壓縮。
Linux下最常用的打包程序就是
tar了,使用
tar程序打出來的包我們常稱為
tar包,
tar包文件的命令通常都是以.
tar結(jié)尾的。生成
tar包后,就可以用其它的程序來進(jìn)行壓縮了,所以首先就來講講
tar命令的基本用法:
tar命令的選項(xiàng)有很多(用man
tar可以查看到),但常用的就那么幾個(gè)選項(xiàng),下面來舉例說明一下:
#
tar -cf all.
tar *.jpg
這條命令是將所有.jpg的文件打成一個(gè)名為all.
tar的包。-c是表示產(chǎn)生新的包,-f指定包的文件名。
#
tar -rf all.
tar *.gif
這條命令是將所有.gif的文件增加到all.
tar的包里面去。-r是表示增加文件的意思。
#
tar -uf all.
tar logo.gif
這條命令是更新原來
tar包all.
tar中l(wèi)ogo.gif文件,-u是表示更新文件的意思。
#
tar -tf all.
tar
這條命令是列出all.
tar包中所有文件,-t是列出文件的意思
#
tar -xf all.
tar
這條命令是解出all.
tar包中所有文件,-t是解開的意思
以上就是
tar的最基本的用法。為了方便用戶在打包解包的同時(shí)可以壓縮或解壓文件,
tar提供了一種特殊的功能。這就是
tar可以在打包或解包的同時(shí)調(diào)用其它的壓縮程序,比如調(diào)用gzip、bzip2等。
1)
tar調(diào)用gzip
gzip是GNU組織開發(fā)的一個(gè)壓縮程序,.gz結(jié)尾的文件就是gzip壓縮的結(jié)果。與gzip相對的解壓程序是gunzip。
tar中使用-z這個(gè)參數(shù)來調(diào)用gzip。下面來舉例說明一下:
#
tar -czf all.
tar.gz *.jpg
這條命令是將所有.jpg的文件打成一個(gè)
tar包,并且將其用gzip壓縮,生成一個(gè)gzip壓縮過的包,包名為all.
tar.gz
#
tar -xzf all.
tar.gz
這條命令是將上面產(chǎn)生的包解開。
2)
tar調(diào)用bzip2
bzip2是一個(gè)壓縮能力更強(qiáng)的壓縮程序,.bz2結(jié)尾的文件就是bzip2壓縮的結(jié)果。與bzip2相對的解壓程序是bunzip2。
tar中使用-j這個(gè)參數(shù)來調(diào)用gzip。下面來舉例說明一下:
#
tar -cjf all.
tar.bz2 *.jpg
這條命令是將所有.jpg的文件打成一個(gè)
tar包,并且將其用bzip2壓縮,生成一個(gè)bzip2壓縮過的包,包名為all.
tar.bz2
#
tar -xjf all.
tar.bz2
這條命令是將上面產(chǎn)生的包解開。
3)
tar調(diào)用compress
compress也是一個(gè)壓縮程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z結(jié)尾的文件就是bzip2壓縮的結(jié)果。與compress相對的解壓程序是uncompress。
tar中使用-Z這個(gè)參數(shù)來調(diào)用gzip。下面來舉例說明一下:
#
tar -cZf all.
tar.Z *.jpg
這條命令是將所有.jpg的文件打成一個(gè)
tar包,并且將其用compress壓縮,生成一個(gè)uncompress壓縮過的包,包名為all.
tar.Z
#
tar -xZf all.
tar.Z
這條命令是將上面產(chǎn)生的包解開
有了上面的知識,你應(yīng)該可以解開多種壓縮文件了,下面對于
tar系列的壓縮文件作一個(gè)小結(jié):
1)對于.
tar結(jié)尾的文件
tar -xf all.
tar
2)對于.gz結(jié)尾的文件
gzip -d all.gz
gunzip all.gz
3)對于.tgz或.
tar.gz結(jié)尾的文件
tar -xzf all.
tar.gz
tar -xzf all.tgz
4)對于.bz2結(jié)尾的文件
bzip2 -d all.bz2
bunzip2 all.bz2
5)對于
tar.bz2結(jié)尾的文件
tar -xjf all.
tar.bz2
6)對于.Z結(jié)尾的文件
uncompress all.Z
7)對于.
tar.Z結(jié)尾的文件
tar -xZf all.
tar.z
另外對于Window下的常見壓縮文件.zip和.rar,Linux也有相應(yīng)的方法來解壓它們:
1)對于.zip
linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參數(shù)選項(xiàng)很多,這里只做簡單介紹,依舊舉例說明一下其用法:
# zip all.zip *.jpg
這條命令是將所有.jpg的文件壓縮成一個(gè)zip包
# unzip all.zip
這條命令是將all.zip中的所有文件解壓出來
2)對于.rar
要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網(wǎng)上下載,但要記住,RAR for Linux
不是免費(fèi)的;然后安裝:
#
tar -xzpvf rarlinux-3.2.0.
tar.gz
# cd rar
# make
這樣就安裝好了,安裝后就有了rar和unrar這兩個(gè)程序,rar是壓縮程序,unrar是解壓程序。它們的參數(shù)選項(xiàng)很多,這里只做簡單介紹,依舊舉例說明一下其用法:
# rar a all *.jpg
這條命令是將所有.jpg的文件壓縮成一個(gè)rar包,名為all.rar,該程序會將.rar 擴(kuò)展名將自動附加到包名后。
# unrar e all.rar
這條命令是將all.rar中的所有文件解壓出來
到此為至,我們已經(jīng)介紹過linux下的
tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式,你應(yīng)該已經(jīng)能夠使用它們對.
tar、.gz、.
tar.gz、.tgz、.bz2、.
tar.bz2、.Z、.
tar.Z、.zip、.rar這10種壓縮文件進(jìn)行解壓了,以后應(yīng)該不需要為下載了一個(gè)軟件而不知道如何在Linux下解開而煩惱了。而且以上方法對于Unix也基本有效。
本文介紹了linux下的壓縮程式
tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式,以及如何使用它們對.
tar、.gz、.
tar.gz、.tgz、.bz2、.
tar.bz2、.Z、.
tar.Z、.zip、.rar這10種壓縮文件進(jìn)行操作。
posted @
2009-01-21 20:17 Stephen 閱讀(298) |
評論 (0) |
編輯 收藏
偶用金山毒霸的殺毒套裝,今天無意中發(fā)現(xiàn)金山網(wǎng)鏢中有一個(gè)訪問網(wǎng)絡(luò)的請求是C:\System32\Safeabc.exe請求的,這個(gè)文件根本不是我安裝的,又不認(rèn)識,豪不猶豫的禁止了,上網(wǎng)一查,果然是病毒,而且現(xiàn)在并沒有殺毒工具可以查殺這個(gè)病毒,而且任務(wù)管理器也無法使用了,無論是按ctrl+shift+del還是還是在任務(wù)欄點(diǎn)右鍵,還是運(yùn)行“taskmgr”都沒有辦法掉出任務(wù)管理器,麻煩來了。
上網(wǎng)查相關(guān)資料,這個(gè)病毒好像還會自動下載木馬病毒,很危險(xiǎn)的說,好在金山毒霸還能用,查了一下,內(nèi)存里有三個(gè)木馬,先殺掉。
金山毒霸安全百寶箱里有一個(gè)進(jìn)程管理器,居然還能調(diào)用,運(yùn)行發(fā)現(xiàn)果然有一個(gè)safeabc.exe的進(jìn)程,先結(jié)束掉這個(gè)進(jìn)程,然后去刪除這個(gè)文件,系統(tǒng)提示禁止刪除,找到金山毒霸的文件粉碎器,強(qiáng)行刪除,然后將啟動項(xiàng)里面可疑的啟動項(xiàng)刪掉,好像是叫l(wèi)oveHebeAA的,然后查毒殺毒,
重啟,病毒是沒有了,但是任務(wù)管理器還是不能用,郁悶了,上網(wǎng)找了好多資料,試了都不行,后來病急亂投醫(yī),在金山的修復(fù)工具里檢測一下,居然發(fā)現(xiàn)好多的劫持,如圖:
TNND,修復(fù)之,任務(wù)管理器就可以用了,
阿門,應(yīng)該是解決了,不知道這病毒還有沒有其他的影響。。。
P.S. 此文不是給金山打廣告,別的工具應(yīng)該也可以做到的,比如進(jìn)程管理器,文件粉碎器,劫持修復(fù)等等,很多工具都可以做到,只是本人手頭上恰好有金山而已,:P
posted @
2008-06-24 22:10 Stephen 閱讀(483) |
評論 (0) |
編輯 收藏
使用Windows操作系統(tǒng)的朋友對Excel(電子表格)一定不會陌生,但是要使用Java語言來操縱Excel文件并不是一件容易的事。在Web應(yīng)用日益盛行的今天,通過Web來操作Excel文件的需求越來越強(qiáng)烈,目前較為流行的操作是在JSP或Servlet 中創(chuàng)建一個(gè)CSV (comma separated values)文件,并將這個(gè)文件以MIME,text/csv類型返回給瀏覽器,接著瀏覽器調(diào)用Excel并且顯示CSV文件。這樣只是說可以訪問到Excel文件,但是還不能真正的操縱Excel文件,本文將給大家一個(gè)驚喜,向大家介紹一個(gè)開放源碼項(xiàng)目??Java Excel API,使用它大家就可以方便地操縱Excel文件了。
JAVA EXCEL API簡介
Java Excel是一開放源碼項(xiàng)目,通過它Java開發(fā)人員可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新已經(jīng)存在的Excel文件。使用該API非Windows操作系統(tǒng)也可以通過純Java應(yīng)用來處理Excel數(shù)據(jù)表。因?yàn)槭鞘褂肑ava編寫的,所以我們在Web應(yīng)用中可以通過JSP、Servlet來調(diào)用API實(shí)現(xiàn)對Excel數(shù)據(jù)表的訪問。 現(xiàn)在發(fā)布的穩(wěn)定版本是V2.0,提供以下功能:
? 從Excel 95、97、2000等格式的文件中讀取數(shù)據(jù);
? 讀取Excel公式(可以讀取Excel 97以后的公式);
? 生成Excel數(shù)據(jù)表(格式為Excel 97);
? 支持字體、數(shù)字、日期的格式化;
? 支持單元格的陰影操作,以及顏色操作;
? 修改已經(jīng)存在的數(shù)據(jù)表;
? 現(xiàn)在還不支持以下功能,但不久就會提供了:
? 不能夠讀取圖表信息;
可以讀,但是不能生成公式,任何類型公式最后的計(jì)算值都可以讀出;
應(yīng)用示例
從Excel文件讀取數(shù)據(jù)表
Java Excel API既可以從本地文件系統(tǒng)的一個(gè)文件(.xls),也可以從輸入流中讀取Excel數(shù)據(jù)表。讀取Excel數(shù)據(jù)表的第一步是創(chuàng)建Workbook(術(shù)語:工作薄),下面的代碼片段舉例說明了應(yīng)該如何操作:(完整代碼見ExcelReading.java)
import java.io.*;
import jxl.*;
… … … …
try
{
//構(gòu)建Workbook對象, 只讀Workbook對象
//直接從本地文件創(chuàng)建Workbook
//從輸入流創(chuàng)建Workbook
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{
e.printStackTrace();
}
一旦創(chuàng)建了Workbook,我們就可以通過它來訪問Excel Sheet(術(shù)語:工作表)。參考下面的代碼片段:
//獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
我們既可能通過Sheet的名稱來訪問它,也可以通過下標(biāo)來訪問它。如果通過下標(biāo)來訪問的話,要注意的一點(diǎn)是下標(biāo)從0開始,就像數(shù)組一樣。
一旦得到了Sheet,我們就可以通過它來訪問Excel Cell(術(shù)語:單元格)。參考下面的代碼片段:
//獲取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//獲取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//獲取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11.getType());
如果僅僅是取得Cell的值,我們可以方便地通過getContents()方法,它可以將任何類型的Cell值都作為一個(gè)字符串返回。示例代碼中Cell(0, 0)是文本型,Cell(1, 0)是數(shù)字型,Cell(1,1)是日期型,通過getContents(),三種類型的返回值都是字符型。
如果有需要知道Cell內(nèi)容的確切類型,API也提供了一系列的方法。參考下面的代碼片段:
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NmberCell numc10 = (NumberCell)c10;
strc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11.getType());
在得到Cell對象后,通過getType()方法可以獲得該單元格的類型,然后與API提供的基本類型相匹配,強(qiáng)制轉(zhuǎn)換成相應(yīng)的類型,最后調(diào)用相應(yīng)的取值方法getXXX(),就可以得到確定類型的值。API提供了以下基本類型,與Excel的數(shù)據(jù)格式相對應(yīng)。
每種類型的具體意義,請參見Java Excel API Document。
當(dāng)你完成對Excel電子表格數(shù)據(jù)的處理后,一定要使用close()方法來關(guān)閉先前創(chuàng)建的對象,以釋放讀取數(shù)據(jù)表的過程中所占用的內(nèi)存空間,在讀取大量數(shù)據(jù)時(shí)顯得尤為重要。參考如下代碼片段:
//操作完成時(shí),關(guān)閉對象,釋放占用的內(nèi)存空間
rwb.close();
Java Excel API提供了許多訪問Excel數(shù)據(jù)表的方法,在這里我只簡要地介紹幾個(gè)常用的方法,其它的方法請參考附錄中的Java Excel API Document。
? Workbook類提供的方法
1. int getNumberOfSheets()
獲得工作薄(Workbook)中工作表(Sheet)的個(gè)數(shù),示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
int sheets = rwb.getNumberOfSheets();
2. Sheet[] getSheets()
返回工作薄(Workbook)中工作表(Sheet)對象數(shù)組,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();
3. String getVersion()
返回正在使用的API的版本號,好像是沒什么太大的作用。
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
String apiVersion = rwb.getVersion();
? Sheet接口提供的方法
1. String getName()
獲取Sheet的名稱,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();
2. int getColumns()
獲取Sheet表中所包含的總列數(shù),示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsColumns = rs.getColumns();
3. Cell[] getColumn(int column)
獲取某一列的所有單元格,返回的是單元格對象數(shù)組,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);
4. int getRows()
獲取Sheet表中所包含的總行數(shù),示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();
5. Cell[] getRow(int row)
獲取某一行的所有單元格,返回的是單元格對象數(shù)組,示例子:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);
6. Cell getCell(int column, int row)
獲取指定單元格的對象引用,需要注意的是它的兩個(gè)參數(shù),第一個(gè)是列數(shù),第二個(gè)是行數(shù),這與通常的行、列組合有些不同。
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);
生成新的Excel工作薄
下面的代碼主要是向大家介紹如何生成簡單的Excel工作表,在這里單元格的內(nèi)容是不帶任何修飾的(如:字體,顏色等等),所有的內(nèi)容都作為字符串寫入。(完整代碼見ExcelWriting.java)
與讀取Excel工作表相似,首先要使用Workbook類的工廠方法創(chuàng)建一個(gè)可寫入的工作薄(Workbook)對象,這里要注意的是,只能通過API提供的工廠方法來創(chuàng)建Workbook,而不能使用WritableWorkbook的構(gòu)造函數(shù),因?yàn)轭怶ritableWorkbook的構(gòu)造函數(shù)為protected類型。示例代碼片段如下:
import java.io.*;
import jxl.*;
import jxl.write.*;
… … … …
try
{
//構(gòu)建Workbook對象, 只讀Workbook對象
//Method 1:創(chuàng)建可寫入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
//Method 2:將WritableWorkbook直接寫入到輸出流
/*
OutputStream os = new FileOutputStream(targetfile);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/
}
catch (Exception e)
{
e.printStackTrace();
}
API提供了兩種方式來處理可寫入的輸出流,一種是直接生成本地文件,如果文件名不帶全路徑的話,缺省的文件會定位在當(dāng)前目錄,如果文件名帶有全路徑的話,則生成的Excel文件則會定位在相應(yīng)的目錄;另外一種是將Excel對象直接寫入到輸出流,例如:用戶通過瀏覽器來訪問Web服務(wù)器,如果HTTP頭設(shè)置正確的話,瀏覽器自動調(diào)用客戶端的Excel應(yīng)用程序,來顯示動態(tài)生成的Excel電子表格。
接下來就是要?jiǎng)?chuàng)建工作表,創(chuàng)建工作表的方法與創(chuàng)建工作薄的方法幾乎一樣,同樣是通過工廠模式方法獲得相應(yīng)的對象,該方法需要兩個(gè)參數(shù),一個(gè)是工作表的名稱,另一個(gè)是工作表在工作薄中的位置,參考下面的代碼片段:
file://創(chuàng)建Excel工作表
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
"這鍋也支好了,材料也準(zhǔn)備齊全了,可以開始下鍋了!",現(xiàn)在要做的只是實(shí)例化API所提供的Excel基本數(shù)據(jù)類型,并將它們添加到工作表中就可以了,參考下面的代碼片段:
file://1.添加Label對象
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);
//添加帶有字型Formatting的對象
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18,
WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);
//添加帶有字體顏色Formatting的對象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10,
WritableFont.NO_BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
ws.addCell(labelCF);
//2.添加Number對象
jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
ws.addCell(labelN);
//添加帶有formatting的Number對象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
//3.添加Boolean對象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
//4.添加DateTime對象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
//添加帶有formatting的DateFormat對象
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);
這里有兩點(diǎn)大家要引起大家的注意。第一點(diǎn),在構(gòu)造單元格時(shí),單元格在工作表中的位置就已經(jīng)確定了。一旦創(chuàng)建后,單元格的位置是不能夠變更的,盡管單元格的內(nèi)容是可以改變的。第二點(diǎn),單元格的定位是按照下面這樣的規(guī)律(column, row),而且下標(biāo)都是從0開始,例如,A1被存儲在(0, 0),B1被存儲在(1, 0)。
最后,不要忘記關(guān)閉打開的Excel工作薄對象,以釋放占用的內(nèi)存,參見下面的代碼片段:
file://寫入Exel工作表
wwb.write();
//關(guān)閉Excel工作薄對象
wwb.close();
這可能與讀取Excel文件的操作有少少不同,在關(guān)閉Excel對象之前,你必須要先調(diào)用write()方法,因?yàn)橄惹暗牟僮鞫际谴鎯υ诰彺嬷械模砸ㄟ^該方法將操作的內(nèi)容保存在文件中。如果你先關(guān)閉了Excel對象,那么只能得到一張空的工作薄了。
拷貝、更新Excel工作薄
接下來簡要介紹一下如何更新一個(gè)已經(jīng)存在的工作薄,主要是下面二步操作,第一步是構(gòu)造只讀的Excel工作薄,第二步是利用已經(jīng)創(chuàng)建的Excel工作薄創(chuàng)建新的可寫入的Excel工作薄,參考下面的代碼片段:(完整代碼見ExcelModifying.java)
file://創(chuàng)建只讀的Excel工作薄的對象
jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));
//創(chuàng)建可寫入的Excel工作薄對象
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);
//讀取第一張工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);
//獲得第一個(gè)單元格對象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
//判斷單元格的類型, 做出相應(yīng)的轉(zhuǎn)化
if(wc.getType() == CellType.LABEL)
{
Label l = (Label)wc;
l.setString("The value has been modified.");
}
//寫入Excel對象
wwb.write();
//關(guān)閉可寫入的Excel對象
wwb.close();
//關(guān)閉只讀的Excel對象
rw.close();
之所以使用這種方式構(gòu)建Excel對象,完全是因?yàn)樾实脑颍驗(yàn)樯厦娴氖纠攀茿PI的主要應(yīng)用。為了提高性能,在讀取工作表時(shí),與數(shù)據(jù)相關(guān)的一些輸出信息,所有的格式信息,如:字體、顏色等等,是不被處理的,因?yàn)槲覀兊哪康氖谦@得行數(shù)據(jù)的值,既使沒有了修飾,也不會對行數(shù)據(jù)的值產(chǎn)生什么影響。唯一的不利之處就是,在內(nèi)存中會同時(shí)保存兩個(gè)同樣的工作表,這樣當(dāng)工作表體積比較大時(shí),會占用相當(dāng)大的內(nèi)存,但現(xiàn)在好像內(nèi)存的大小并不是什么關(guān)鍵因素了。
一旦獲得了可寫入的工作表對象,我們就可以對單元格對象進(jìn)行更新的操作了,在這里我們不必調(diào)用API提供的add()方法,因?yàn)閱卧褚呀?jīng)于工作表當(dāng)中,所以我們只需要調(diào)用相應(yīng)的setXXX()方法,就可以完成更新的操作了。
盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去,以使單元格的內(nèi)容以不同的形式表現(xiàn)。
新生成的工作表對象是可寫入的,我們除了更新原有的單元格外,還可以添加新的單元格到工作表中,這與示例2的操作是完全一樣的。
最后,不要忘記調(diào)用write()方法,將更新的內(nèi)容寫入到文件中,然后關(guān)閉工作薄對象,這里有兩個(gè)工作薄對象要關(guān)閉,一個(gè)是只讀的,另外一個(gè)是可寫入的。
下面是在一個(gè)Excel表格中創(chuàng)建一個(gè)矩陣的簡單例子:
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
// code run against the jakarta-poi-1.5.0-FINAL-20020506.jar.
public class PoiTest {
static public void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("foo.xls");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet();
wb.setSheetName(0, "Matrix");
for(short i=0; i<50; i++) {
HSSFRow row = s.createRow(i);
for(short j=0; j<50; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(""+i+","+j);
}
}
wb.write(fos);
fos.close();
}
}
這段代碼首先創(chuàng)建一個(gè)Workbook,從該Workbook中得到一個(gè)表格、命名,然后繼續(xù)寫入一個(gè)50x50的矩陣。最后輸出到一個(gè)名為foo.xls的Excel文件,甚至在Apple Mac機(jī)上也可以打開。
POI項(xiàng)目是Java應(yīng)用的令人興奮的一步,為用戶提供了Windows文檔集成的新功能,允許Java開發(fā)人員方便地?cái)U(kuò)展其產(chǎn)品的功能。
posted @
2008-05-17 13:18 Stephen 閱讀(426) |
評論 (1) |
編輯 收藏
DBCC DBREINDEX重建索引提高SQL Server性能
大多數(shù)SQL Server表需要索引來提高數(shù)據(jù)的訪問速度,如果沒有索引,SQL Server 要進(jìn)行表格掃描讀取表中的每一個(gè)記錄才能找到索要的數(shù)據(jù)。索引可以分為簇索引和非簇索引,簇索引通過重排表中的數(shù)據(jù)來提高數(shù)據(jù)的訪問速度,而非簇索引則通過維護(hù)表中的數(shù)據(jù)指針來提高數(shù)據(jù)的索引。
1. 索引的體系結(jié)構(gòu)
為什么要不斷的維護(hù)表的索引?首先,簡單介紹一下索引的體系結(jié)構(gòu)。SQL Server在硬盤中用8KB頁面在數(shù)據(jù)庫文件內(nèi)存放數(shù)據(jù)。缺省情況下這些頁面及其包含的數(shù)據(jù)是無組織的。為了使混亂變?yōu)橛行颍鸵伤饕I伤饕螅陀辛怂饕摵蛿?shù)據(jù)頁,數(shù)據(jù)頁保存用戶寫入的數(shù)據(jù)信息。索引頁存放用于檢索列的數(shù)據(jù)值清單(關(guān)鍵字)和索引表中該值所在紀(jì)錄的地址指針。索引分為簇索引和非簇索引,簇索引實(shí)質(zhì)上是將表中的數(shù)據(jù)排序,就好像是字典的索引目錄。非簇索引不對數(shù)據(jù)排序,它只保存了數(shù)據(jù)的指針地址。向一個(gè)帶簇索引的表中插入數(shù)據(jù),當(dāng)數(shù)據(jù)頁達(dá)到100%時(shí),由于頁面沒有空間插入新的的紀(jì)錄,這時(shí)就會發(fā)生分頁,SQL Server 將大約一半的數(shù)據(jù)從滿頁中移到空頁中,從而生成兩個(gè)半的滿頁。這樣就有大量的數(shù)據(jù)空間。簇索引是雙向鏈表,在每一頁的頭部保存了前一頁、后一頁地址以及分頁后數(shù)據(jù)移動的地址,由于新頁可能在數(shù)據(jù)庫文件中的任何地方,因此頁面的鏈接不一定指向磁盤的下一個(gè)物理頁,鏈接可能指向了另一個(gè)區(qū)域,這就形成了分塊,從而減慢了系統(tǒng)的速度。對于帶簇索引和非簇索引的表來說,非簇索引的關(guān)鍵字是指向簇索引的,而不是指向數(shù)據(jù)頁的本身。
為了克服數(shù)據(jù)分塊帶來的負(fù)面影響,需要重構(gòu)表的索引,這是非常費(fèi)時(shí)的,因此只能在需要時(shí)進(jìn)行。可以通過DBCC SHOWCONTIG來確定是否需要重構(gòu)表的索引。
2. DBCC SHOWCONTIG用法
下面舉例來說明DBCC SHOWCONTIG和DBCC REDBINDEX的使用方法。以應(yīng)用程序中的Employee數(shù)據(jù)表作為例子,在 SQL Server的Query analyzer輸入命令:
use database_name
declare @table_id int
set @table_id=object_id('Employee')
dbcc showcontig(@table_id)
輸出結(jié)果:
DBCC SHOWCONTIG scanning 'Employee' table...
Table: 'Employee' (1195151303); index ID: 1, database ID: 53
TABLE level scan performed.
- Pages Scanned................................: 179
- Extents Scanned..............................: 24
- Extent Switches..............................: 24
- Avg. Pages per Extent........................: 7.5
- Scan Density [Best Count:Actual Count].......: 92.00% [23:25]
- Logical Scan Fragmentation ..................: 0.56%
- Extent Scan Fragmentation ...................: 12.50%
- Avg. Bytes Free per Page.....................: 552.3
- Avg. Page Density (full).....................: 93.18%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
通過分析這些結(jié)果可以知道該表的索引是否需要重構(gòu)。如下描述了每一行的意義:
信息 描述
Pages Scanned 表或索引中的長頁數(shù)
Extents Scanned 表或索引中的長區(qū)頁數(shù)
Extent Switches DBCC遍歷頁時(shí)從一個(gè)區(qū)域到另一個(gè)區(qū)域的次數(shù)
Avg. Pages per Extent 相關(guān)區(qū)域中的頁數(shù)
Scan Density[Best Count:Actual Count]
Best Count是連續(xù)鏈接時(shí)的理想?yún)^(qū)域改變數(shù),Actual Count是實(shí)際區(qū)域改變數(shù),Scan Density為100%表示沒有分塊。
Logical Scan Fragmentation 掃描索引頁中失序頁的百分比
Extent Scan Fragmentation 不實(shí)際相鄰和包含鏈路中所有鏈接頁的區(qū)域數(shù)
Avg. Bytes Free per Page 掃描頁面中平均自由字節(jié)數(shù)
Avg. Page Density (full) 平均頁密度,表示頁有多滿
從上面命令的執(zhí)行結(jié)果可以看的出來,Best count為23 而Actual Count為25這表明orders表有分塊需要重構(gòu)表索引。下面通過DBCC DBREINDEX來重構(gòu)表的簇索引。
3. DBCC DBREINDEX 用法
重建指定數(shù)據(jù)庫中表的一個(gè)或多個(gè)索引。
語法
DBCC DBREINDEX
( [ 'database.owner.table_name'
[ , index_name
[ , fillfactor ]
]
]
)
參數(shù)
'database.owner.table_name'
是要重建其指定的索引的表名。數(shù)據(jù)庫、所有者和表名必須符合標(biāo)識符的規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。如果提供 database 或 owner 部分,則必須使用單引號 (') 將整個(gè) database.owner.table_name 括起來。如果只指定 table_name,則不需要單引號。
index_name
是要重建的索引名。索引名必須符合標(biāo)識符的規(guī)則。如果未指定 index_name 或指定為 ' ',就要對表的所有索引進(jìn)行重建。
fillfactor
是創(chuàng)建索引時(shí)每個(gè)索引頁上要用于存儲數(shù)據(jù)的空間百分比。fillfactor 替換起始填充因子以作為索引或任何其它重建的非聚集索引(因?yàn)橐阎亟ň奂饕┑男履J(rèn)值。如果 fillfactor 為 0,DBCC DBREINDEX 在創(chuàng)建索引時(shí)將使用指定的起始 fillfactor。
同樣在Query Analyzer中輸入命令:
dbcc dbreindex('database_name.dbo.Employee','',90)
然后再用DBCC SHOWCONTIG查看重構(gòu)索引后的結(jié)果:
DBCC SHOWCONTIG scanning 'Employee' table...
Table: 'Employee' (1195151303); index ID: 1, database ID: 53
TABLE level scan performed.
- Pages Scanned................................: 178
- Extents Scanned..............................: 23
- Extent Switches..............................: 22
- Avg. Pages per Extent........................: 7.7
- Scan Density [Best Count:Actual Count].......: 100.00% [23:23]
- Logical Scan Fragmentation ..................: 0.00%
- Extent Scan Fragmentation ...................: 0.00%
- Avg. Bytes Free per Page.....................: 509.5
- Avg. Page Density (full).....................: 93.70%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
通過結(jié)果我們可以看到Scan Denity為100%。
******
原文鏈接:《如何提高SQL SERVER的性能》
http://www.csdn.com.cn/database/1142.htm
作者:unknown
posted @
2008-05-17 11:47 Stephen 閱讀(345) |
評論 (0) |
編輯 收藏
4月30日,因某些原因需要在上班時(shí)間重啟下應(yīng)用,
結(jié)果重啟后就報(bào)錯(cuò)無法使用,從下午4點(diǎn)多一直到下班系統(tǒng)都無法使用,
由于系統(tǒng)報(bào)的錯(cuò)誤始終是spring的applicationContext加載失敗,一直在找配置文件的原因,
其中嘗試還原備份,切換應(yīng)用等等好多操作,都沒有辦法,
開始反饋系統(tǒng)出錯(cuò)的電話很多,頭腦一直是亂的,等到下班以后才靜下心來找原因,
后來發(fā)現(xiàn)本地測試的應(yīng)用也無法啟動,
最后發(fā)現(xiàn)是hibernata的tld文件的下載地址失效了,原來的那個(gè)地址在網(wǎng)絡(luò)上突然已經(jīng)無法訪問,
通過其他方式找到TLD文件,打到hibernate 包里面,問題解決.
此事的教訓(xùn):
1,TLD文件一定要改為從本地取,不能用默認(rèn)的從網(wǎng)絡(luò)讀取的;
2,遇事要冷靜,不要著急,慌亂,每次都這么說,但每次都著急,需要改進(jìn).
posted @
2008-05-17 11:36 Stephen 閱讀(412) |
評論 (0) |
編輯 收藏
顯示器: AOC 193FW (19'液晶) 1480元
CPU: AMD AM2 Athlon 64 X2 5000+(90nm) 800元
主板: 微星 K9N Neo-F 699元
顯卡: 雙敏 無極HD3690玩家版 890元
內(nèi)存: 金士頓 DDRII800 1G 250元
硬盤: 希捷 酷魚7200.9/ST3250824AS 250G 465元
機(jī)箱+電源: 金河田 300元左右(可選金河田、愛國者,機(jī)箱溫度低為好)
鼠標(biāo)+鍵盤: 150左右(不用買好的,經(jīng)常會換)
光驅(qū): DVD光驅(qū) 170(先鋒、三星、索尼都行)
網(wǎng)卡聲卡板載
-------------------------------------------------------------------------------
合計(jì):5204
我的機(jī)器又落后了。。555555555
posted @
2008-03-23 23:02 Stephen 閱讀(209) |
評論 (0) |
編輯 收藏
https://gro.clinux.org/frs/download.php/1828/spring2.0-reference_final_zh_cn.chm
posted @
2007-06-25 21:22 Stephen 閱讀(242) |
評論 (0) |
編輯 收藏
8月了,大半年過去了,
回想今年,3-6月收獲還可以,
7,8兩個(gè)月進(jìn)步較慢,都是混日子;
這樣下去不行啊。。。。。。
今年剩下的日子:
1、重心不能偏移:學(xué)技術(shù)是重中之重;不和無聊的人勾心斗角;
2、堅(jiān)持學(xué)English:每天學(xué),時(shí)間總是有的;
3、自己寫出一款軟件
posted @
2006-08-15 22:30 Stephen 閱讀(374) |
評論 (1) |
編輯 收藏
1、無提示關(guān)閉窗口
<input type="button" onClick="window.opener = '';window.close();" value="IE6最簡單的無提示關(guān)閉窗口" >
2、防止被人iframeif (top.location != self.location)
{
top.location.href="
http://www.34do.net";
}
3、判斷一個(gè)對象存在不存在document.all("a")==null(不存在)
4、彈出子窗口window.open ('default.asp', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')
5、打開模態(tài)窗口window.showModalDialog('default.asp',window,'help: No; resizable: No; status: No;scrollbars:No;center: Yes;dialogWidth:width;dialogHeight:height;')
6、彈出的子窗口刷新父窗口window.parent.location.reload();
7、模態(tài)窗口刷新父窗口window.parent.dialogArguments.document.execCommand('Refresh');
8、一個(gè)js文件包含另外一個(gè)js文件document.write('<script src="/b_trade/public/new/public.js"><\/script>');
9、讓文字豎著寫<td style="Writing-mode:tb-rl;">佛羅倫</td>
10、iframe引用自己window.parent.document.getElementById("iframe_dg")
這樣在iframe文件里就可以操作它自己,比如:window.parent.document.getElementById("iframe_dg").height=200
11、根據(jù)內(nèi)容自動調(diào)整IFrame高度 function autoSetIframeSize()
{
var obj=self.parent.parent.document.all[self.name];
if(obj!=null)
{
self.parent.parent.document.all[self.name].style.pixelHeight=self.document.body.scrollHeight+5;
}
}
必須定義iframe的name屬性
<iframe id="iframe1" name="iframe1" align="middle" frameborder="0" width="100%" height="250" scrolling="no" src="a.asp"></iframe>
將a.asp的<body>修改為:
<body onload="autoSetIframeSize()">
12、為單元格添加漸變色效果(ie支持,firefox不支持).bg3
{
FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=#842B00, EndColorStr=#FFFFFF);
}
效果如圖
13、定時(shí)執(zhí)行任務(wù)規(guī)定一項(xiàng)任務(wù)在一定時(shí)間內(nèi)執(zhí)行:delayID=setTimeout(vCode, iMilliSeconds),在需要的時(shí)候,可以強(qiáng)制停止該任務(wù):clearTimeout(delayID)
14、自動選中復(fù)制<span onmouseover="var obj=document.body.createTextRange();obj.moveToElementText(this);obj.select();obj.execCommand('Copy')" onclick="var obj=document.body.createTextRange();obj.moveToElementText(this);obj.select();obj.execCommand('Copy')" >選中我并復(fù)制我</span>
15、產(chǎn)生隨機(jī)數(shù)VB的Rnd函數(shù)產(chǎn)生的隨機(jī)數(shù)范圍為0-1。假如要從(min,max)這個(gè)范圍內(nèi)隨機(jī)抽取一個(gè)數(shù),具體公式如下: 隨機(jī)數(shù) = (max - min) * Rnd() + min,min和max可以是任意整數(shù),只是min<max。
16、限制文本框只能輸入正整數(shù) <input onKeyUp="this.value=this.value.replace(/[^\d]/g,'')">
posted @
2006-02-16 23:47 Stephen 閱讀(549) |
評論 (0) |
編輯 收藏
最近在使用Eclipse開發(fā)Jsp,一直不會用單步調(diào)試功能,在網(wǎng)上搜了一下,資料也比較少,或許會的人就認(rèn)為很簡單了,但是像我這樣菜鳥摸索很久也不著門路

1.安裝Eclipse3.1以上版本,myEclipse4.10以上,沒有安裝別的插件
2.安裝tomcat 4或5,resin、Jboss其他類型的沒有試驗(yàn),以下都以tomcat5為例
3.設(shè)置Window-->Preferences-->MyEclipse-->Application-->Tomcat5

4.設(shè)置成功以后可以在下圖所示啟動Tomcat

5.新建一個(gè)J2EE web Project,里面會需要設(shè)置jsp源碼路徑,bean源碼路徑,以及頁面訪問的虛擬路徑

6.點(diǎn)擊剛才啟動服務(wù)按鈕旁邊的Deploy按鈕設(shè)置部署信息

注意這里的Deploy Location,是tomcat的部署路徑+剛才設(shè)置的建立工程時(shí)設(shè)置的虛擬路徑
配置成功后MeEclipse會自動把項(xiàng)目的程序連同頁面一起部署到Tomcat/webapp下面,因此在Server.xml文件里面配置到Deploy Location這里就可以。
7.配置好Eclipse,myEclipse和tomcat文件以后,就可以調(diào)試Jsp了
先在jsp或javabean上設(shè)置斷點(diǎn),然后通過MyEclipse啟動Tomcat,用IE或MyEclipse的瀏覽器,訪問所調(diào)試的頁面,就會停止在斷點(diǎn)的代碼處,就可以單步調(diào)試了。
調(diào)試Jsp的時(shí)候容易出現(xiàn)問題,有的時(shí)候和想要的顯示結(jié)果不相同,但是基本上可以達(dá)到調(diào)試效果,對JavaBean的調(diào)試比較穩(wěn)定,有時(shí)候出現(xiàn)問題,重新啟動一下服務(wù)就可以了。
posted @
2006-02-16 23:01 Stephen 閱讀(6304) |
評論 (1) |
編輯 收藏
060122 033399 2081
070201 048805 4919
080206 152275 7804
090215 148066 0000
posted @
2006-01-22 02:24 Stephen 閱讀(342) |
評論 (0) |
編輯 收藏
1、安裝Eclipse;
2、安裝Resin;
3、安裝插件:
插件下載網(wǎng)站為:
升級時(shí)安裝URL為:http://www.improve-technologies.com/alpha/updates/site.xml
Help=>Software update
升級成功后,重啟Eclipse
4、配置插件:
點(diǎn)擊Window => Preferences => Resin
設(shè)置Home directory(Resin的目錄)
設(shè)置java compiler (javac文件位置)
新建Java->Java Resin project
新建測試Jsp
Run As 里面新建resin
添如Resin配置文件路徑
運(yùn)行,如果正常可顯示測試Jsp內(nèi)容
我安裝的時(shí)候提示找不到類,把tools.jar添加到項(xiàng)目里就可以了
可查看網(wǎng)站提供幫助文件
http://www.improve-technologies.com/alpha/resin/readme.txt
posted @
2005-12-27 20:28 Stephen 閱讀(2076) |
評論 (0) |
編輯 收藏