Be happy with Java

          2006年5月1日 #

          python 語言類型

          一位博學(xué)的讀者發(fā)給我 Python 如何與其它編程語言的比較的解釋:

          靜態(tài)類型定義語言
          一種在編譯期間數(shù)據(jù)類型固定的語言。大多數(shù)靜態(tài)類型定義語言是通過要求在使用所有變量之前聲明它們的數(shù)據(jù)類型來保證這一點(diǎn)的。 JavaC 是靜態(tài)類型定義語言。
          動(dòng)態(tài)類型定義語言
          一種在運(yùn)行期間才去確定數(shù)據(jù)類型的語言, 與靜態(tài)類型定義相反。 VBScriptPython 是動(dòng)態(tài)類型定義的, 因?yàn)樗鼈兇_定一個(gè)變量的類型是在您第一次給它賦值的時(shí)候。
          強(qiáng)類型定義語言
          一種總是強(qiáng)制類型定義的語言。 JavaPython 是強(qiáng)制類型定義的。您有一個(gè)整數(shù), 如果不明確地進(jìn)行轉(zhuǎn)換 , 不能將把它當(dāng)成一個(gè)字符串。
          弱類型定義語言
          一種類型可以被忽略的語言, 與強(qiáng)類型定義相反。 VBScript 是弱類型定義的。在 VBScript 中, 您可以將字符串 '12' 和整數(shù) 3 進(jìn)行連接得到字符串'123', 然后可以把它看成整數(shù) 123 , 所有這些都不需要任何的顯示轉(zhuǎn)換。

          所以說 Python 既是 動(dòng)態(tài)類型定義語言 (因?yàn)樗皇褂蔑@示數(shù)據(jù)類型聲明) , 又是 強(qiáng)類型定義語言 (因?yàn)橐坏┮粋€(gè)變量具有一個(gè)數(shù)據(jù)類型, 它實(shí)際上就一直是這個(gè)類型了) 。

          posted @ 2007-02-13 11:56 SYBIL@BLOGJAVA 閱讀(170) | 評(píng)論 (0)編輯 收藏

          unix 高手的10個(gè)習(xí)慣,zz

          UNIX 高手的 10 個(gè)習(xí)慣

          克服不良的 UNIX 使用模式

          developerWorks
          文檔選項(xiàng)
          將此頁作為電子郵件發(fā)送

          將此頁作為電子郵件發(fā)送

          未顯示需要 JavaScript 的文檔選項(xiàng)


          拓展 Tomcat 應(yīng)用

          下載 IBM 開源 J2EE 應(yīng)用服務(wù)器 WAS CE 新版本 V1.1


          級(jí)別: 中級(jí)

          Michael Stutz (stutz@dsl.org), 作者, 顧問

          2007 年 2 月 09 日

          采用 10 個(gè)能夠提高您的 UNIX? 命令行效率的好習(xí)慣——并在此過程中擺脫不良的使用模式。本文循序漸進(jìn)地指導(dǎo)您學(xué)習(xí)幾項(xiàng)用于命令行操作的技術(shù),這些技術(shù)非常好,但是通常被忽略。了解常見錯(cuò)誤和克服它們的方法,以便您能夠確切了解為何值得采用這些 UNIX 習(xí)慣。

          引言

          當(dāng)您經(jīng)常使用某個(gè)系統(tǒng)時(shí),往往會(huì)陷入某種固定的使用模式。有時(shí),您沒有養(yǎng)成以盡可能最好的方式做事的習(xí)慣。有時(shí),您的不良習(xí)慣甚至?xí)?dǎo)致出現(xiàn)混亂。糾正此類缺點(diǎn)的最佳方法之一,就是有意識(shí)地采用抵制這些壞習(xí)慣的好習(xí)慣。本文提出了 10 個(gè)值得采用的 UNIX 命令行習(xí)慣——幫助您克服許多常見使用怪癖,并在該過程中提高命令行工作效率的好習(xí)慣。下面列出了這 10 個(gè)好習(xí)慣,之后對(duì)進(jìn)行了更詳細(xì)的描述。

          采用 10 個(gè)好習(xí)慣

          要采用的十個(gè)好習(xí)慣為:

          1. 在單個(gè)命令中創(chuàng)建目錄樹 。
          2. 更改路徑;不要移動(dòng)存檔 。
          3. 將命令與控制操作符組合使用
          4. 謹(jǐn)慎引用變量 。
          5. 使用轉(zhuǎn)義序列來管理較長的輸入 。
          6. 在列表中對(duì)命令分組
          7. find 之外使用 xargs 。
          8. 了解何時(shí) grep 應(yīng)該執(zhí)行計(jì)數(shù)——何時(shí)應(yīng)該繞過 。
          9. 匹配輸出中的某些字段,而不只是對(duì)行進(jìn)行匹配 。
          10. 停止對(duì) cat 使用管道 。

          在單個(gè)命令中創(chuàng)建目錄樹

          清單 1 演示了最常見的 UNIX 壞習(xí)慣之一:一次定義一個(gè)目錄樹。


          清單 1. 壞習(xí)慣 1 的示例:單獨(dú)定義每個(gè)目錄樹
          	
          ~ $ mkdir tmp
          ~ $ cd tmp
          ~/tmp $ mkdir a
          ~/tmp $ cd a
          ~/tmp/a $ mkdir b
          ~/tmp/a $ cd b
          ~/tmp/a/b/ $ mkdir c
          ~/tmp/a/b/ $ cd c
          ~/tmp/a/b/c $
          

          使用 mkdir-p 選項(xiàng)并在單個(gè)命令中創(chuàng)建所有父目錄及其子目錄要容易得多。但是即使對(duì)于知道此選項(xiàng)的管理員,他們?cè)诿钚猩蟿?chuàng)建子目錄時(shí)也仍然束縛于逐步創(chuàng)建每級(jí)子目錄?;〞r(shí)間有意識(shí)地養(yǎng)成這個(gè)好習(xí)慣是值得的:


          清單 2. 好習(xí)慣 1 的示例:使用一個(gè)命令來定義目錄樹
          ~ $ mkdir -p tmp/a/b/c

          您可以使用此選項(xiàng)來創(chuàng)建整個(gè)復(fù)雜的目錄樹(在腳本中使用是非常理想的),而不只是創(chuàng)建簡單的層次結(jié)構(gòu)。例如:


          清單 3. 好習(xí)慣 1 的另一個(gè)示例:使用一個(gè)命令來定義復(fù)雜的目錄樹
          ~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

          過去,單獨(dú)定義目錄的唯一借口是您的 mkdir 實(shí)現(xiàn)不支持此選項(xiàng),但是在大多數(shù)系統(tǒng)上不再是這樣了。IBM、AIX?、mkdir、GNU mkdir 和其他遵守單一 UNIX 規(guī)范 (Single UNIX Specification) 的系統(tǒng)現(xiàn)在都具有此選項(xiàng)。

          對(duì)于仍然缺乏該功能的少數(shù)系統(tǒng),您可以使用 mkdirhier 腳本(請(qǐng)參見參考資料),此腳本是執(zhí)行相同功能的 mkdir 的包裝:

          ~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

          更改路徑;不要移動(dòng)存檔

          另一個(gè)不良的使用模式是將 .tar 存檔文件移動(dòng)到某個(gè)目錄,因?yàn)樵撃夸浨『檬悄M谄渲刑崛?.tar 文件的目錄。其實(shí)您根本不需要這樣做。您可以隨心所欲地將任何 .tar 存檔文件解壓縮到任何目錄——這就是 -C 選項(xiàng)的用途。在解壓縮某個(gè)存檔文件時(shí),使用 -C 選項(xiàng)來指定要在其中解壓縮該文件的目錄:


          清單 4. 好習(xí)慣 2 的示例:使用選項(xiàng) -C 來解壓縮 .tar 存檔文件
          ~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

          相對(duì)于將存檔文件移動(dòng)到您希望在其中解壓縮它的位置,切換到該目錄,然后才解壓縮它,養(yǎng)成使用 -C 的習(xí)慣則更加可取——當(dāng)存檔文件位于其他某個(gè)位置時(shí)尤其如此。





          回頁首


          將命令與控制操作符組合使用

          您可能已經(jīng)知道,在大多數(shù) Shell 中,您可以在單個(gè)命令行上通過在命令之間放置一個(gè)分號(hào) (;) 來組合命令。該分號(hào)是 Shell 控制操作符,雖然它對(duì)于在單個(gè)命令行上將離散的命令串聯(lián)起來很有用,但它并不適用于所有情況。例如,假設(shè)您使用分號(hào)來組合兩個(gè)命令,其中第二個(gè)命令的正確執(zhí)行完全依賴于第一個(gè)命令的成功完成。如果第一個(gè)命令未按您預(yù)期的那樣退出,第二個(gè)命令仍然會(huì)運(yùn)行——結(jié)果會(huì)導(dǎo)致失敗。相反,應(yīng)該使用更適當(dāng)?shù)目刂撇僮鞣ū疚膶⒚枋銎渲械牟糠植僮鞣V灰?Shell 支持它們,就值得養(yǎng)成使用它們的習(xí)慣。

          僅當(dāng)另一個(gè)命令返回零退出狀態(tài)時(shí)才運(yùn)行某個(gè)命令

          使用 && 控制操作符來組合兩個(gè)命令,以便僅當(dāng) 第一個(gè)命令返回零退出狀態(tài)時(shí)才運(yùn)行第二個(gè)命令。換句話說,如果第一個(gè)命令運(yùn)行成功,則第二個(gè)命令將運(yùn)行。如果第一個(gè)命令失敗,則第二個(gè)命令根本就不運(yùn)行。例如:


          清單 5. 好習(xí)慣 3 的示例:將命令與控制操作符組合使用
          ~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

          在此例中,存檔的內(nèi)容將提取到 ~/tmp/a/b/c 目錄中,除非該目錄不存在。如果該目錄不存在,則 tar 命令不會(huì)運(yùn)行,因此不會(huì)提取任何內(nèi)容。

          僅當(dāng)另一個(gè)命令返回非零退出狀態(tài)時(shí)才運(yùn)行某個(gè)命令

          類似地,|| 控制操作符分隔兩個(gè)命令,并且僅當(dāng)?shù)谝粋€(gè)命令返回非零退出狀態(tài)時(shí)才運(yùn)行第二個(gè)命令。換句話說,如果第一個(gè)命令成功,則第二個(gè)命令不會(huì)運(yùn)行。如果第一個(gè)命令失敗,則第二個(gè)命令才會(huì) 運(yùn)行。在測(cè)試某個(gè)給定目錄是否存在時(shí),通常使用此操作符,如果該目錄不存在,則創(chuàng)建它:


          清單 6. 好習(xí)慣 3 的另一個(gè)示例:將命令與控制操作符組合使用
          ~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

          您還可以組合使用本部分中描述的控制操作符。每個(gè)操作符都影響最后的命令運(yùn)行:


          清單 7. 好習(xí)慣 3 的組合示例:將命令與控制操作符組合使用
          ~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar





          回頁首


          謹(jǐn)慎引用變量

          始終要謹(jǐn)慎使用 Shell 擴(kuò)展和變量名稱。一般最好將變量調(diào)用包括在雙引號(hào)中,除非您有不這樣做的足夠理由。類似地,如果您直接在字母數(shù)字文本后面使用變量名稱,則還要確保將該變量名稱包括在方括號(hào) ([]) 中,以使其與周圍的文本區(qū)分開來。否則,Shell 將把尾隨文本解釋為變量名稱的一部分——并且很可能返回一個(gè)空值。清單 8 提供了變量的各種引用和非引用及其影響的示例。


          清單 8. 好習(xí)慣 4 的示例:引用(和非引用)變量
          ~ $ ls tmp/
          a b
          ~ $ VAR="tmp/*"
          ~ $ echo $VAR
          tmp/a tmp/b
          ~ $ echo "$VAR"
          tmp/*
          ~ $ echo $VARa
          
          ~ $ echo "$VARa"
          
          ~ $ echo "${VAR}a"
          tmp/*a
          ~ $ echo ${VAR}a
          tmp/a
          ~ $
          





          回頁首


          使用轉(zhuǎn)義序列來管理較長的輸入

          您或許看到過使用反斜杠 (\) 來將較長的行延續(xù)到下一行的代碼示例,并且您知道大多數(shù) Shell 都將您通過反斜杠聯(lián)接的后續(xù)行上鍵入的內(nèi)容視為單個(gè)長行。然而,您可能沒有在命令行中像通常那樣利用此功能。如果您的終端無法正確處理多行回繞,或者您的命令行比通常?。ɡ缭谔崾痉掠虚L路經(jīng)的時(shí)候),反斜杠就特別有用。反斜杠對(duì)于了解鍵入的長輸入行的含義也非常有用,如以下示例所示:


          清單 9. 好習(xí)慣 5 的示例:將反斜杠用于長輸入
          ~ $ cd tmp/a/b/c || \
          > mkdir -p tmp/a/b/c && \
          > tar xvf -C tmp/a/b/c ~/archive.tar

          或者,也可以使用以下配置:


          清單 10. 好習(xí)慣 5 的替代示例:將反斜杠用于長輸入
          ~ $ cd tmp/a/b/c \
          >                 || \
          > mkdir -p tmp/a/b/c \
          >                    && \
          > tar xvf -C tmp/a/b/c ~/archive.tar

          然而,當(dāng)您將輸入行劃分到多行上時(shí),Shell 始終將其視為單個(gè)連續(xù)的行,因?yàn)樗偸莿h除所有反斜杠和額外的空格。

          注意:在大多數(shù) Shell 中,當(dāng)您按向上箭頭鍵時(shí),整個(gè)多行輸入將重繪到單個(gè)長輸入行上。





          回頁首


          在列表中對(duì)命令分組

          大多數(shù) Shell 都具有在列表中對(duì)命令分組的方法,以便您能將它們的合計(jì)輸出向下傳遞到某個(gè)管道,或者將其任何部分或全部流重定向到相同的地方。您一般可以通過在某個(gè) Subshell 中運(yùn)行一個(gè)命令列表或通過在當(dāng)前 Shell 中運(yùn)行一個(gè)命令列表來實(shí)現(xiàn)此目的。

          在 Subshell 中運(yùn)行命令列表

          使用括號(hào)將命令列表包括在單個(gè)組中。這樣做將在一個(gè)新的 Subshell 中運(yùn)行命令,并允許您重定向或收集整組命令的輸出,如以下示例所示:


          清單 11. 好習(xí)慣 6 的示例:在 Subshell 中運(yùn)行命令列表
          ~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
          > VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
          > | mailx admin -S "Archive contents"

          在此示例中,該存檔的內(nèi)容將提取到 tmp/a/b/c/ 目錄中,同時(shí)將分組命令的輸出(包括所提取文件的列表)通過郵件發(fā)送到地址 admin

          當(dāng)您在命令列表中重新定義環(huán)境變量,并且您不希望將那些定義應(yīng)用于當(dāng)前 Shell 時(shí),使用 Subshell 更可取。

          在當(dāng)前 Shell 中運(yùn)行命令列表

          將命令列表用大括號(hào) ({}) 括起來,以在當(dāng)前 Shell 中運(yùn)行。確保在括號(hào)與實(shí)際命令之間包括空格,否則 Shell 可能無法正確解釋括號(hào)。此外,還要確保列表中的最后一個(gè)命令以分號(hào)結(jié)尾,如以下示例所示:


          清單 12. 好習(xí)慣 6 的另一個(gè)示例:在當(dāng)前 Shell 中運(yùn)行命令列表
          ~ $ { cp ${VAR}a . && chown -R guest.guest a && \
          > tar cvf newarchive.tar a; } | mailx admin -S "New archive"





          回頁首


          在 find 之外使用 xargs

          使用 xargs 工具作為篩選器,以充分利用從 find 命令挑選的輸出。find 運(yùn)行通常提供與某些條件匹配的文件列表。此列表被傳遞到 xargs 上,后者然后使用該文件列表作為參數(shù)來運(yùn)行其他某些有用的命令,如以下示例所示:


          清單 13. xargs 工具的經(jīng)典用法示例
          ~ $ find some-file-criteria some-file-path | \
          > xargs some-great-command-that-needs-filename-arguments

          然而,不要將 xargs 僅看作是 find 的輔助工具;它是一個(gè)未得到充分利用的工具之一,當(dāng)您養(yǎng)成使用它的習(xí)慣時(shí),將會(huì)希望進(jìn)行所有試驗(yàn),包括以下用法。

          傳遞空格分隔的列表

          在最簡單的調(diào)用形式中,xargs 就像一個(gè)篩選器,它接受一個(gè)列表(每個(gè)成員分別在單獨(dú)的行上)作為輸入。該工具將那些成員放置在單個(gè)空格分隔的行上:


          清單 14. xargs 工具產(chǎn)生的輸出示例
          ~ $ xargsabcControl-D
          a b c
          ~ $
          

          您可以發(fā)送通過 xargs 來輸出文件名的任何工具的輸出,以便為其他某些接受文件名作為參數(shù)的工具獲得參數(shù)列表,如以下示例所示:


          清單 15. xargs 工具的使用示例
          ~/tmp $ ls -1 | xargs
          December_Report.pdf README a archive.tar mkdirhier.sh
          ~/tmp $ ls -1 | xargs file
          December_Report.pdf: PDF document, version 1.3
          README: ASCII text
          a: directory
          archive.tar: POSIX tar archive
          mkdirhier.sh: Bourne shell script text executable
          ~/tmp $
          

          xargs 命令不只用于傳遞文件名。您還可以在需要將文本篩選到單個(gè)行中的任何時(shí)候使用它:


          清單 16. 好習(xí)慣 7 的示例:使用 xargs 工具來將文本篩選到單個(gè)行中
          ~/tmp $ ls -l | xargs
          -rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
          root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
          16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
          joe joe 3239 Sep 30 12:40 mkdirhier.sh
          ~/tmp $
          

          謹(jǐn)慎使用 xargs

          從技術(shù)上講,使用 xargs 很少遇到麻煩。缺省情況下,文件結(jié)束字符串是下劃線 (_);如果將該字符作為單個(gè)輸入?yún)?shù)來發(fā)送,則它之后的所有內(nèi)容將被忽略。為了防止這種情況發(fā)生,可以使用 -e 標(biāo)志,它在不帶參數(shù)的情況下完全禁用結(jié)束字符串。





          回頁首


          了解何時(shí) grep 應(yīng)該執(zhí)行計(jì)數(shù)——何時(shí)應(yīng)該繞過

          避免通過管道將 grep 發(fā)送到 wc -l 來對(duì)輸出行數(shù)計(jì)數(shù)。grep-c 選項(xiàng)提供了對(duì)與特定模式匹配的行的計(jì)數(shù),并且一般要比通過管道發(fā)送到 wc 更快,如以下示例所示:


          清單 17. 好習(xí)慣 8 的示例:使用和不使用 grep 的行計(jì)數(shù)
          ~ $ time grep and tmp/a/longfile.txt | wc -l
          2811
          
          real    0m0.097s
          user    0m0.006s
          sys     0m0.032s
          ~ $ time grep -c and tmp/a/longfile.txt
          2811
          
          real    0m0.013s
          user    0m0.006s
          sys     0m0.005s
          ~ $ 
          

          除了速度因素外,-c 選項(xiàng)還是執(zhí)行計(jì)數(shù)的好方法。對(duì)于多個(gè)文件,帶 -c 選項(xiàng)的 grep 返回每個(gè)文件的單獨(dú)計(jì)數(shù),每行一個(gè)計(jì)數(shù),而針對(duì) wc 的管道則提供所有文件的組合總計(jì)數(shù)。

          然而,不管是否考慮速度,此示例都表明了另一個(gè)要避免地常見錯(cuò)誤。這些計(jì)數(shù)方法僅提供包含匹配模式的行數(shù)——如果那就是您要查找的結(jié)果,這沒什么問題。但是在行中具有某個(gè)特定模式的多個(gè)實(shí)例的情況下,這些方法無法為您提供實(shí)際匹配實(shí)例數(shù)量 的真實(shí)計(jì)數(shù)。歸根結(jié)底,若要對(duì)實(shí)例計(jì)數(shù),您還是要使用 wc 來計(jì)數(shù)。首先,使用 -o 選項(xiàng)(如果您的版本支持它的話)來運(yùn)行 grep 命令。此選項(xiàng) 輸出匹配的模式,每行一個(gè)模式,而不輸出行本身。但是您不能將它與 -c 選項(xiàng)結(jié)合使用,因此要使用 wc -l 來對(duì)行計(jì)數(shù),如以下示例所示:


          清單 18. 好習(xí)慣 8 的示例:使用 grep 對(duì)模式實(shí)例計(jì)數(shù)
          ~ $ grep -o and tmp/a/longfile.txt | wc -l
          3402
          ~ $
          

          在此例中,調(diào)用 wc 要比第二次調(diào)用 grep 并插入一個(gè)虛擬模式(例如 grep -c)來對(duì)行進(jìn)行匹配和計(jì)數(shù)稍快一點(diǎn)。





          回頁首


          匹配輸出中的某些字段,而不只是對(duì)行進(jìn)行匹配

          當(dāng)您只希望匹配輸出行中特定字段 中的模式時(shí),諸如 awk 等工具要優(yōu)于 grep。

          下面經(jīng)過簡化的示例演示了如何僅列出 12 月修改過的文件。


          清單 19. 壞習(xí)慣 9 的示例:使用 grep 來查找特定字段中的模式
          ~/tmp $ ls -l /tmp/a/b/c | grep Dec
          -rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
          -rw-r--r--  1 root root  238 Dec 03 08:19 README
          -rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
          ~/tmp $
          

          在此示例中,grep 對(duì)行進(jìn)行篩選,并輸出其修改日期和名稱中帶 Dec 的所有文件。因此,諸如 December_Report.pdf 等文件是匹配的,即使它自從一月份以來還未修改過。這可能不是您希望的結(jié)果。為了匹配特定字段中的模式,最好使用 awk,其中的一個(gè)關(guān)系運(yùn)算符對(duì)確切的字段進(jìn)行匹配,如以下示例所示:


          清單 20. 好習(xí)慣 9 的示例:使用 awk 來查找特定字段中的模式
          ~/tmp $ ls -l | awk '$6 == "Dec"'
          -rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
          -rw-r--r--  1 root root  238 Dec 03 08:19 README
          ~/tmp $
          

          有關(guān)如何使用 awk 的更多詳細(xì)信息,請(qǐng)參見參考資料。





          回頁首


          停止對(duì) cat 使用管道

          grep 的一個(gè)常見的基本用法錯(cuò)誤是通過管道將 cat 的輸出發(fā)送到 grep 以搜索單個(gè)文件的內(nèi)容。這絕對(duì)是不必要的,純粹是浪費(fèi)時(shí)間,因?yàn)橹T如 grep 這樣的工具接受文件名作為參數(shù)。您根本不需要在這種情況下使用 cat,如以下示例所示:


          清單 21. 好習(xí)慣和壞習(xí)慣 10 的示例:使用帶和不帶 cat 的 grep
          	
          ~ $ time cat tmp/a/longfile.txt | grep and
          2811
          
          real    0m0.015s
          user    0m0.003s
          sys     0m0.013s
          ~ $ time grep and tmp/a/longfile.txt
          2811
          
          real    0m0.010s
          user    0m0.006s
          sys     0m0.004s
          ~ $ 
          

          此錯(cuò)誤存在于許多工具中。由于大多數(shù)工具都接受使用連字符 (-) 的標(biāo)準(zhǔn)輸入作為一個(gè)參數(shù),因此即使使用 cat 來分散 stdin 中的多個(gè)文件,參數(shù)也通常是無效的。僅當(dāng)您使用帶多個(gè)篩選選項(xiàng)之一的 cat 時(shí),才真正有必要在管道前首先執(zhí)行連接。





          回頁首


          結(jié)束語:養(yǎng)成好習(xí)慣

          最好檢查一下您的命令行習(xí)慣中的任何不良的使用模式。不良的使用模式會(huì)降低您的速度,并且通常會(huì)導(dǎo)致意外錯(cuò)誤。本文介紹了 10 個(gè)新習(xí)慣,它們可以幫助您擺脫許多最常見的使用錯(cuò)誤。養(yǎng)成這些好習(xí)慣是加強(qiáng)您的 UNIX 命令行技能的積極步驟。

          posted @ 2007-02-12 17:39 SYBIL@BLOGJAVA 閱讀(152) | 評(píng)論 (0)編輯 收藏

          線程池

          100行Java代碼構(gòu)建一個(gè)線程池

          在現(xiàn)代的操作系統(tǒng)中,有一個(gè)很重要的概念――線程,幾乎所有目前流行的操作系統(tǒng)都支持線程,線程來源于操作系統(tǒng)中進(jìn)程的概念,進(jìn)程有自己的虛擬地址空間以及正文段、數(shù)據(jù)段及堆棧,而且各自占有不同的系統(tǒng)資源(例如文件、環(huán)境變量等等)。與此不同,線程不能單獨(dú)存在,它依附于進(jìn)程,只能由進(jìn)程派生。如果一個(gè)進(jìn)程派生出了兩個(gè)線程,那這兩個(gè)線程共享此進(jìn)程的全局變量和代碼段,但每個(gè)線程各擁有各自的堆棧,因此它們擁有各自的局部變量,線程在UNIX系統(tǒng)中還被進(jìn)一步分為用戶級(jí)線程(由進(jìn)程自已來管理)和系統(tǒng)級(jí)線程(由操作系統(tǒng)的調(diào)度程序來管理)。

            既然有了進(jìn)程,為什么還要提出線程的概念呢?因?yàn)榕c創(chuàng)建一個(gè)新的進(jìn)程相比,創(chuàng)建一個(gè)線程將會(huì)耗費(fèi)小得多的系統(tǒng)資源,對(duì)于一些小型的應(yīng)用,可能感覺不到這點(diǎn),但對(duì)于那些并發(fā)進(jìn)程數(shù)特別多的應(yīng)用,使用線程會(huì)比使用進(jìn)程獲得更好的性能,從而降低操作系統(tǒng)的負(fù)擔(dān)。另外,線程共享創(chuàng)建它的進(jìn)程的全局變量,因此線程間的通訊編程會(huì)更將簡單,完全可以拋棄傳統(tǒng)的進(jìn)程間通訊的IPC編程,而采用共享全局變量來進(jìn)行線程間通訊。

            有了上面這個(gè)概念,我們下面就進(jìn)入正題,來看一下線程池究竟是怎么一回事?其實(shí)線程池的原理很簡單,類似于操作系統(tǒng)中的緩沖區(qū)的概念,它的流程如下:先啟動(dòng)若干數(shù)量的線程,并讓這些線程都處于睡眠狀態(tài),當(dāng)客戶端有一個(gè)新請(qǐng)求時(shí),就會(huì)喚醒線程池中的某一個(gè)睡眠線程,讓它來處理客戶端的這個(gè)請(qǐng)求,當(dāng)處理完這個(gè)請(qǐng)求后,線程又處于睡眠狀態(tài)??赡苣阋苍S會(huì)問:為什么要搞得這么麻煩,如果每當(dāng)客戶端有新的請(qǐng)求時(shí),我就創(chuàng)建一個(gè)新的線程不就完了?這也許是個(gè)不錯(cuò)的方法,因?yàn)樗苁沟媚憔帉懘a相對(duì)容易一些,但你卻忽略了一個(gè)重要的問題――性能!就拿我所在的單位來說,我的單位是一個(gè)省級(jí)數(shù)據(jù)大集中的銀行網(wǎng)絡(luò)中心,高峰期每秒的客戶端請(qǐng)求并發(fā)數(shù)超過100,如果為每個(gè)客戶端請(qǐng)求創(chuàng)建一個(gè)新線程的話,那耗費(fèi)的CPU時(shí)間和內(nèi)存將是驚人的,如果采用一個(gè)擁有200個(gè)線程的線程池,那將會(huì)節(jié)約大量的的系統(tǒng)資源,使得更多的CPU時(shí)間和內(nèi)存用來處理實(shí)際的商業(yè)應(yīng)用,而不是頻繁的線程創(chuàng)建與銷毀。

            既然一切都明白了,那我們就開始著手實(shí)現(xiàn)一個(gè)真正的線程池吧,線程編程可以有多種語言來實(shí)現(xiàn),例如C、C++、java等等,但不同的操作系統(tǒng)提供不同的線程API接口,為了讓你能更明白線程池的原理而避免陷入煩瑣的API調(diào)用之中,我采用了JAVA語言來實(shí)現(xiàn)它,由于JAVA語言是一種跨平臺(tái)的語言,因此你不必為使用不同的操作系統(tǒng)而無法編譯運(yùn)行本程序而苦惱,只要你安裝了JDK1.2以上的版本,都能正確地編譯運(yùn)行本程序。另外JAVA語言本身就內(nèi)置了線程對(duì)象,而且JAVA語言是完全面像對(duì)象的,因此能夠讓你更清晰地了解線程池的原理,如果你注意看一下本文的標(biāo)題,你會(huì)發(fā)現(xiàn)整個(gè)示例程序的代碼只有大約100行。

            本示例程序由三個(gè)類構(gòu)成,第一個(gè)是TestThreadPool類,它是一個(gè)測(cè)試程序,用來模擬客戶端的請(qǐng)求,當(dāng)你運(yùn)行它時(shí),系統(tǒng)首先會(huì)顯示線程池的初始化信息,然后提示你從鍵盤上輸入字符串,并按下回車鍵,這時(shí)你會(huì)發(fā)現(xiàn)屏幕上顯示信息,告訴你某個(gè)線程正在處理你的請(qǐng)求,如果你快速地輸入一行行字符串,那么你會(huì)發(fā)現(xiàn)線程池中不斷有線程被喚醒,來處理你的請(qǐng)求,在本例中,我創(chuàng)建了一個(gè)擁有10個(gè)線程的線程池,如果線程池中沒有可用線程了,系統(tǒng)會(huì)提示你相應(yīng)的警告信息,但如果你稍等片刻,那你會(huì)發(fā)現(xiàn)屏幕上會(huì)陸陸續(xù)續(xù)提示有線程進(jìn)入了睡眠狀態(tài),這時(shí)你又可以發(fā)送新的請(qǐng)求了。

            第二個(gè)類是ThreadPoolManager類,顧名思義,它是一個(gè)用于管理線程池的類,它的主要職責(zé)是初始化線程池,并為客戶端的請(qǐng)求分配不同的線程來進(jìn)行處理,如果線程池滿了,它會(huì)對(duì)你發(fā)出警告信息。

            最后一個(gè)類是SimpleThread類,它是Thread類的一個(gè)子類,它才真正對(duì)客戶端的請(qǐng)求進(jìn)行處理,SimpleThread在示例程序初始化時(shí)都處于睡眠狀態(tài),但如果它接受到了ThreadPoolManager類發(fā)過來的調(diào)度信息,則會(huì)將自己喚醒,并對(duì)請(qǐng)求進(jìn)行處理。


            首先我們來看一下TestThreadPool類的源碼:



          //TestThreadPool.java
          1 import java.io.*;
          2
          3
          4 public class TestThreadPool
          5 {
          6 public static void main(String[] args)
          7 {
          8 try{
          9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          10 String s;
          11 ThreadPoolManager manager = new ThreadPoolManager(10);
          12 while((s = br.readLine()) != null)
          13 {
          14 manager.process(s);
          15 }
          16 }catch(IOException e){}
          17 }
          18 }



            由于此測(cè)試程序用到了輸入輸入類,因此第1行導(dǎo)入了JAVA的基本IO處理包,在第11行中,我們創(chuàng)建了一個(gè)名為manager的類,它給ThreadPoolManager類的構(gòu)造函數(shù)傳遞了一個(gè)值為10的參數(shù),告訴ThreadPoolManager類:我要一個(gè)有10個(gè)線程的池,給我創(chuàng)建一個(gè)吧!第12行至15行是一個(gè)無限循環(huán),它用來等待用戶的鍵入,并將鍵入的字符串保存在s變量中,并調(diào)用ThreadPoolManager類的process方法來將這個(gè)請(qǐng)求進(jìn)行處理。

            下面我們?cè)龠M(jìn)一步跟蹤到ThreadPoolManager類中去,以下是它的源代碼:



          //ThreadPoolManager.java
          1 import java.util.*;
          2
          3
          4 class ThreadPoolManager
          5 {
          6
          7 private int maxThread;
          8 public Vector vector;
          9 public void setMaxThread(int threadCount)
          10 {
          11 maxThread = threadCount;
          12 }
          13
          14 public ThreadPoolManager(int threadCount)
          15 {
          16 setMaxThread(threadCount);
          17 System.out.println("Starting thread pool...");
          18 vector = new Vector();
          19 for(int i = 1; i <= 10; i++)
          20 {
          21 SimpleThread thread = new SimpleThread(i);
          22 vector.addElement(thread);
          23 thread.start();
          24 }
          25 }
          26
          27 public void process(String argument)
          28 {
          29 int i;
          30 for(i = 0; i < vector.size(); i++)
          31 {
          32 SimpleThread currentThread = (SimpleThread)vector.elementAt(i);
          33 if(!currentThread.isRunning())
          34 {
          35 System.out.println("Thread "+ (i+1) +" is processing:" +
          argument);
          36 currentThread.setArgument(argument);
          37 currentThread.setRunning(true);
          38 return;
          39 }
          40 }
          41 if(i == vector.size())
          42 {
          43 System.out.println("pool is full, try in another time.");
          44 }
          45 }
          46 }//end of class ThreadPoolManager



            我們先關(guān)注一下這個(gè)類的構(gòu)造函數(shù),然后再看它的process()方法。第16-24行是它的構(gòu)造函數(shù),首先它給ThreadPoolManager類的成員變量maxThread賦值,maxThread表示用于控制線程池中最大線程的數(shù)量。第18行初始化一個(gè)數(shù)組vector,它用來存放所有的SimpleThread類,這時(shí)候就充分體現(xiàn)了JAVA語言的優(yōu)越性與藝術(shù)性:如果你用C語言的話,至少要寫100行以上的代碼來完成vector的功能,而且C語言數(shù)組只能容納類型統(tǒng)一的基本數(shù)據(jù)類型,無法容納對(duì)象。好了,閑話少說,第19-24行的循環(huán)完成這樣一個(gè)功能:先創(chuàng)建一個(gè)新的SimpleThread類,然后將它放入vector中去,最后用thread.start()來啟動(dòng)這個(gè)線程,為什么要用start()方法來啟動(dòng)線程呢?因?yàn)檫@是JAVA語言中所規(guī)定的,如果你不用的話,那這些線程將永遠(yuǎn)得不到激活,從而導(dǎo)致本示例程序根本無法運(yùn)行。

            下面我們?cè)賮砜匆幌聀rocess()方法,第30-40行的循環(huán)依次從vector數(shù)組中選取SimpleThread線程,并檢查它是否處于激活狀態(tài)(所謂激活狀態(tài)是指此線程是否正在處理客戶端的請(qǐng)求),如果處于激活狀態(tài)的話,那繼續(xù)查找vector數(shù)組的下一項(xiàng),如果vector數(shù)組中所有的線程都處于激活狀態(tài)的話,那它會(huì)打印出一條信息,提示用戶稍候再試。相反如果找到了一個(gè)睡眠線程的話,那第35-38行會(huì)對(duì)此進(jìn)行處理,它先告訴客戶端是哪一個(gè)線程來處理這個(gè)請(qǐng)求,然后將客戶端的請(qǐng)求,即字符串a(chǎn)rgument轉(zhuǎn)發(fā)給SimpleThread類的setArgument()方法進(jìn)行處理,并調(diào)用SimpleThread類的setRunning()方法來喚醒當(dāng)前線程,來對(duì)客戶端請(qǐng)求進(jìn)行處理。

            可能你還對(duì)setRunning()方法是怎樣喚醒線程的有些不明白,那我們現(xiàn)在就進(jìn)入最后一個(gè)類:SimpleThread類,它的源代碼如下:

          //SimpleThread.java
          1 class SimpleThread extends Thread
          2 {
          3 private boolean runningFlag;
          4 private String argument;
          5 public boolean isRunning()
          6 {
          7 return runningFlag;
          8 }
          9 public synchronized void setRunning(boolean flag)
          10 {
          11 runningFlag = flag;
          12 if(flag)
          13 this.notify();
          14 }
          15
          16 public String getArgument()
          17 {
          18 return this.argument;
          19 }
          20 public void setArgument(String string)
          21 {
          22 argument = string;
          23 }
          24
          25 public SimpleThread(int threadNumber)
          26 {
          27 runningFlag = false;
          28 System.out.println("thread " + threadNumber + "started.");
          29 }
          30
          31 public synchronized void run()
          32 {
          33 try{
          34 while(true)
          35 {
          36 if(!runningFlag)
          37 {
          38 this.wait();
          39 }
          40 else
          41 {
          42 System.out.println("processing " + getArgument() + "... done.");
          43 sleep(5000);
          44 System.out.println("Thread is sleeping...");
          45 setRunning(false);
          46 }
          47 }
          48 } catch(InterruptedException e){
          49 System.out.println("Interrupt");
          50 }
          51 }//end of run()
          52 }//end of class SimpleThread

            如果你對(duì)JAVA的線程編程有些不太明白的話,那我先在這里簡單地講解一下,JAVA有一個(gè)名為Thread的類,如果你要?jiǎng)?chuàng)建一個(gè)線程,則必須要從Thread類中繼承,并且還要實(shí)現(xiàn)Thread類的run()接口,要激活一個(gè)線程,必須調(diào)用它的start()方法,start()方法會(huì)自動(dòng)調(diào)用run()接口,因此用戶必須在run()接口中寫入自己的應(yīng)用處理邏輯。那么我們?cè)趺磥砜刂凭€程的睡眠與喚醒呢?其實(shí)很簡單,JAVA語言為所有的對(duì)象都內(nèi)置了wait()和notify()方法,當(dāng)一個(gè)線程調(diào)用wait()方法時(shí),則線程進(jìn)入睡眠狀態(tài),就像停在了當(dāng)前代碼上了,也不會(huì)繼續(xù)執(zhí)行它以下的代碼了,當(dāng)調(diào)用notify()方法時(shí),則會(huì)從調(diào)用wait()方法的那行代碼繼續(xù)執(zhí)行以下的代碼,這個(gè)過程有點(diǎn)像編譯器中的斷點(diǎn)調(diào)試的概念。以本程序?yàn)槔?,?8行調(diào)用了wait()方法,則這個(gè)線程就像凝固了一樣停在了38行上了,如果我們?cè)诘?3行進(jìn)行一個(gè)notify()調(diào)用的話,那線程會(huì)從第38行上喚醒,繼續(xù)從第39行開始執(zhí)行以下的代碼了。

            通過以上的講述,我們現(xiàn)在就不難理解SimpleThread類了,第9-14行通過設(shè)置一個(gè)標(biāo)志runningFlag激活當(dāng)前線程,第25-29行是SimpleThread類的構(gòu)造函數(shù),它用來告訴客戶端啟動(dòng)的是第幾號(hào)進(jìn)程。第31-50行則是我實(shí)現(xiàn)的run()接口,它實(shí)際上是一個(gè)無限循環(huán),在循環(huán)中首先判斷一下標(biāo)志runningFlag,如果沒有runningFlag為false的話,那線程處理睡眠狀態(tài),否則第42-45行會(huì)進(jìn)行真正的處理:先打印用戶鍵入的字符串,然后睡眠5秒鐘,為什么要睡眠5秒鐘呢?如果你不加上這句代碼的話,由于計(jì)算機(jī)處理速度遠(yuǎn)遠(yuǎn)超過你的鍵盤輸入速度,因此你看到的總是第1號(hào)線程來處理你的請(qǐng)求,從而達(dá)不到演示效果。最后第45行調(diào)用setRunning()方法又將線程置于睡眠狀態(tài),等待新請(qǐng)求的到來。

            最后還有一點(diǎn)要注意的是,如果你在一個(gè)方法中調(diào)用了wait()和notify()函數(shù),那你一定要將此方法置為同步的,即synchronized,否則在編譯時(shí)會(huì)報(bào)錯(cuò),并得到一個(gè)莫名其妙的消息:“current thread not owner”(當(dāng)前線程不是擁有者)。

            至此為止,我們完整地實(shí)現(xiàn)了一個(gè)線程池,當(dāng)然,這個(gè)線程池只是簡單地將客戶端輸入的字符串打印到了屏幕上,而沒有做任何處理,對(duì)于一個(gè)真正的企業(yè)級(jí)運(yùn)用,本例還是遠(yuǎn)遠(yuǎn)不夠的,例如錯(cuò)誤處理、線程的動(dòng)態(tài)調(diào)整、性能優(yōu)化、臨界區(qū)的處理、客戶端報(bào)文的定義等等都是值得考慮的問題,但本文的目的僅僅只是讓你了解線程池的概念以及它的簡單實(shí)現(xiàn),如果你想成為這方面的高手,本文是遠(yuǎn)遠(yuǎn)不夠的,你應(yīng)該參考一些更多的資料來深入地了解它。

          posted @ 2007-02-04 12:28 SYBIL@BLOGJAVA 閱讀(792) | 評(píng)論 (0)編輯 收藏

          這就不行了?

          for ?( int ?i? = ? 1 ;?i? <= ? 10 ;?i ++ )? {
          // ????????????????int?i?=?7;
          ????????????MNPClientThread?mnpct? = ? new ?MNPClientThread(i);

          ????????????mnpct.start();
          ????????????System.out.println(i);
          ????????}

          public ?MNPClientThread( int ?i)? {
          ????????
          this .count? = ?i;
          ????}


          ????
          public ? void ?run()? {
          ????????
          try ? {
          ????????????
          for ( int ?i = 1 ;i <= 800000 ;i ++ ) {
          ????????????????StringBuffer?phoneNumber?
          = ? new ?StringBuffer( " 88600 " );
          ????????????????phoneNumber.append(count);
          ????????????????phoneNumber.append(
          " 0000 " );
          ????????????????phoneNumber.append(i);
          ????????????????Thread.sleep(
          800 );
          // ????????????????System.out.println("****************"+phoneNumber.toString());
          ????????????????MNPClientTest?client? = ? new ?MNPClientTest();
          ????????????????client.runTest(phoneNumber.toString());
          // ????????????java.util.Date?d2?=?new?java.util.Date();
          ????????????????System.out.println( " Thread? " ? + ?count? + ? " ?Runs " );
          // ????????????????System.out.println(new?java.util.Date());
          // ????????????????System.out.println(i);
          ????????????}

          ????????}
          ? catch ?(Exception?ex)? {
          ????????????ex.printStackTrace();
          ????????}

          ????}

          運(yùn)行3小時(shí)左右,發(fā)了不到10Wquery就掛了???
          報(bào)這個(gè):
          Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space

          我加了-Xms128m -Xmx800m 還是不行?是內(nèi)存泄露嗎??

          posted @ 2007-02-02 15:54 SYBIL@BLOGJAVA 閱讀(594) | 評(píng)論 (2)編輯 收藏

          links read

          ENUM:
          http://www.ptsn.net.cn/article_new/show_article.php?article_id=expert_9039d306-6d61-d622-14d5-43c49c788fef

          e164:
          http://www.mc21st.net/old/faq/reply.asp?ID=7471

          IMSI:
          http://zhidao.baidu.com/question/7853752.html

          http://baike.baidu.com/view/715091.htm

          posted @ 2007-01-25 11:59 SYBIL@BLOGJAVA 閱讀(229) | 評(píng)論 (0)編輯 收藏

          ……忘了轉(zhuǎn)正這件事了

          一言難盡

          posted @ 2007-01-21 13:08 SYBIL@BLOGJAVA 閱讀(228) | 評(píng)論 (0)編輯 收藏

          第一章 思考題與練習(xí)題[原]

          第一章??? 思考題與練習(xí)題

          ?

          1. 什么是移動(dòng)通信?能否說移動(dòng)通信就是“無線電通信”?為什么?

          移動(dòng)通信是指通信雙方或至少有一方在移動(dòng)中進(jìn)行信息交換的通信方式。

          不能,移動(dòng)通信是有線、無線相結(jié)合的通信方式。

          2. 移動(dòng)通信有哪些特點(diǎn)?存在的問題分別用哪些方法解決?

          移動(dòng)通信是有線、無線相結(jié)合的通信方式;電波傳播條件惡劣,存在嚴(yán)重的多徑衰落;強(qiáng)干擾條件下工作;具有多卜勒效應(yīng);存在陰影區(qū)(盲區(qū));用戶經(jīng)常移動(dòng)。

          移動(dòng)臺(tái)必須體積要小、重量要輕、操作使用要簡便安全,另外,其成本要低;在進(jìn)行移動(dòng)通信系統(tǒng)的設(shè)計(jì)時(shí),必須具有一定的抗衰落的能力和儲(chǔ)備;移動(dòng)通信設(shè)備必須具有良好的選擇性,使用自動(dòng)功率控制電路,移動(dòng)通信系統(tǒng)在組網(wǎng)時(shí),必須考慮同頻干擾;鎖相技術(shù);考慮陰影區(qū)在網(wǎng)絡(luò)規(guī)劃、設(shè)置基站時(shí);位置登記、越區(qū)切換及漫游訪問等跟蹤交換技術(shù)。

          3. 移動(dòng)通信常用的工作方式有哪些?公用蜂窩移動(dòng)電話系統(tǒng)中使用哪些?

          單工方式,半雙工方式,雙工方式。

          雙工。

          4. 什么是小區(qū)制?為什么小區(qū)制既能解決頻道數(shù)有限和用戶數(shù)增大的矛盾,又能不斷適應(yīng)用戶數(shù)增大的需要?

          小區(qū)制是將整個(gè)服務(wù)區(qū)劃分為若干個(gè)小無線區(qū),每個(gè)小無線區(qū)分別設(shè)置一個(gè)基站負(fù)責(zé)本區(qū)的移動(dòng)通信的聯(lián)絡(luò)和控制,同時(shí)又可在 MSC 的統(tǒng)一控制下,實(shí)現(xiàn)小區(qū)間移動(dòng)通信的轉(zhuǎn)接及與市話網(wǎng)的聯(lián)系。

          小區(qū)制中,每個(gè)小區(qū)使用一組頻道,鄰近小區(qū)使用不同的頻道。由于小區(qū)內(nèi)基站服務(wù)區(qū)域縮小,同頻復(fù)用距離減小,所以在整個(gè)服務(wù)區(qū)中,同一組頻道可以多次重復(fù)使用,因而大大提高了頻率利用率。另外,在區(qū)域內(nèi)可根據(jù)用戶的多少確定小區(qū)的大小。隨著用戶數(shù)目的增加,小區(qū)還可以繼續(xù)劃小,即實(shí)現(xiàn)“小區(qū)分裂”,以適應(yīng)用戶數(shù)的增加。因此,小區(qū)制解決了大區(qū)制中存在的頻道數(shù)有限而用戶數(shù)不斷增加的矛盾,可使用戶容量大大增加。

          5. 無線區(qū)域的劃分為什么采用正六邊形小區(qū)形狀?正六邊形無線區(qū)群構(gòu)成應(yīng)滿足什么條件?

          假定整個(gè)服務(wù)區(qū)的地形地物相同,并且基站采用全向天線,覆蓋面積大體上上一個(gè)圓,即無線小區(qū)是圓形的。由考慮到多個(gè)小區(qū)彼此鄰接來覆蓋整個(gè)區(qū)域,用圓內(nèi)接正多邊形代替圓。圓內(nèi)接正多邊形彼此鄰接構(gòu)成平面時(shí),只能是正三角形、正方形和正六邊形三種面狀區(qū)域。正六邊形,其相鄰小區(qū)的中心距離最小,便于實(shí)現(xiàn)跟蹤交換;其覆蓋面積最大,對(duì)于同樣大小的服務(wù)區(qū)域,采用正六邊形構(gòu)成小區(qū)制所需的小區(qū)數(shù)最少,即所需基站數(shù)最少;所需的頻率個(gè)數(shù)最少,頻率利用率高。

          滿足以下兩個(gè)條件:一是若干單位無線區(qū)群能彼此鄰接;二是相鄰單位無線區(qū)群中的同頻小區(qū)中心間隔相等。

          6. 什么是多信道共用?有何優(yōu)點(diǎn)?

          多信道共用是指在網(wǎng)內(nèi)的大量用戶共同享有若干無線信道,這與市話用戶共同享有中繼線相類似。相對(duì)于獨(dú)立信道方式來說,可以顯著提高信道利用率。

          7. 大容量的移動(dòng)通信系統(tǒng)采用何種信道選擇方式?有什么優(yōu)缺點(diǎn)?

          專用呼叫信道方式。

          處理一次呼叫過程所需的時(shí)間很短,所以設(shè)立一個(gè)專用呼叫信道就可以處理成百上千個(gè)用戶的呼叫,適用于大容量系統(tǒng)中;由于專門抽出一個(gè)信道作呼叫信道,相對(duì)而言,減少了通話信道的數(shù)目,因此對(duì)小容量系統(tǒng)來說,是不合算的。

          8. 若需設(shè)計(jì)一移動(dòng)通信系統(tǒng),用戶容量要求為 600 戶,每天每個(gè)用戶平均呼叫 5 次,每次平均占用信道時(shí)間為 60 秒,呼損率要求為 10% ,忙時(shí)擊中率為 0.125 ,問需要多少信道才能滿足 600 個(gè)用戶的需要?

          A/A 用戶 =600

          A 用戶 =CTK/3600=5*60*0.125=37.5/3600

          A=6.25

          查表得: 9

          9. 話務(wù)量是怎樣定義的?什么是呼損率?呼損率與接通話務(wù)量的關(guān)系如何?

          單位時(shí)間( 1 小時(shí))內(nèi)呼叫次數(shù)與每次呼叫的平均占用信道時(shí)間之積。

          當(dāng)多個(gè)信道共用時(shí),通??偸怯脩魯?shù)大于信道數(shù),當(dāng)多個(gè)用戶同時(shí)要求服務(wù)而信道數(shù)不夠時(shí),只能讓一部分用戶先通話,另一部分用戶等信道空閑時(shí)在通話。后一部分用戶因無空閑信道而不能通話,即為呼叫失敗,簡稱呼損。在一個(gè)通信系統(tǒng)中,造成呼叫失敗的概率稱為呼叫損失概率,簡稱呼損率。

          呼損率為呼叫失敗的次數(shù)與總呼叫次數(shù)之百分比。

          10.????????????? 愛爾蘭呼損表應(yīng)用的條件是什么?已知 A 用戶 =0.02Erl/ 用戶,如果要求呼損率為 10% ,現(xiàn)有 70 個(gè)用戶,需共用的頻道數(shù)為多少?如果 920 個(gè)用戶共用 18 個(gè)頻道,那么呼損率是多少?

          每次呼叫相對(duì)獨(dú)立,互不相關(guān),即呼叫具有隨機(jī)性,也就是說,一個(gè)用戶要求通話的概率與正在通話的用戶數(shù)無關(guān);每次呼叫在時(shí)間上都有相同的概率。

          A/n=70*0.02/n, A=1.4, 查表得 n=4

          A/n=920*0.02/n, A=18.4, 查表得呼損率為 20%

          11.????????????? 如何提高頻率利用

          頻率復(fù)用、頻率協(xié)調(diào)和頻率規(guī)劃

          12.????????????? 系統(tǒng)對(duì)移動(dòng)交換機(jī)有哪些特殊要求?

          用戶數(shù)據(jù)的存儲(chǔ);用戶位置的登記;尋呼用戶的信令系統(tǒng)識(shí)別及處理;越區(qū)頻道轉(zhuǎn)換的處理;過荷控制;遠(yuǎn)距離檔案存??;路由的控制等。

          13.????????????? 什么是位置登記、一齊呼叫、越區(qū)切換、漫游?

          位置登記是指移動(dòng)臺(tái)向基站發(fā)送報(bào)文,表明自己所處的位置的過程。

          若位置信息表明被呼移動(dòng)用戶在某個(gè)位置區(qū),但不知其所處的具體小區(qū),因此,位置區(qū)內(nèi)所有基站一齊呼出被呼移動(dòng)用戶識(shí)別碼,被叫移動(dòng)用戶應(yīng)答后,即由應(yīng)答小區(qū)提供接續(xù)服務(wù),系統(tǒng)的這種功能稱為“一齊呼叫”。

          為了保證通信的連續(xù)性,正在通話的移動(dòng)臺(tái)從一個(gè)小區(qū)進(jìn)入相鄰的另一小區(qū)時(shí),工作頻道從一個(gè)無限頻道上轉(zhuǎn)換到另一個(gè)無限頻道上,而通話不中斷,這就是越區(qū)切換。

          在聯(lián)網(wǎng)的移動(dòng)通信系統(tǒng)中,移動(dòng)臺(tái)從一個(gè) MSC 區(qū)到另一個(gè) MSC 區(qū)后,仍能入網(wǎng)使用的通信服務(wù)功能稱為漫游。

          posted @ 2007-01-12 18:51 SYBIL@BLOGJAVA 閱讀(1457) | 評(píng)論 (0)編輯 收藏

          junt 4&static import

          JUnit 4:
          http://www.ibm.com/developerworks/cn/java/j-junit4.html

          逐漸挖掘Static Import
          更簡單的訪問靜態(tài)成員
          http://blog.csdn.net/avius/archive/2004/08/27/86744.aspx

          posted @ 2007-01-09 18:02 SYBIL@BLOGJAVA 閱讀(273) | 評(píng)論 (0)編輯 收藏

          說說希望……

          ??? 《妙手人心3》,廖碧兒和一腦科醫(yī)生剛剛做醫(yī)生,看到急癥室一病人無論如何也搶救不過來,一陣唏噓……林保儀走過去,問他們做醫(yī)生是為了什么?兩個(gè)小醫(yī)生說是救死扶傷……林否定,說人的生命不是醫(yī)生能夠掌握的,你們不必耿耿于懷。隨后,兩人問林,那你為什么要做醫(yī)生?林答:希望,給病人希望……
          ??? 另:……這個(gè)省略號(hào)以前一直不知道是怎么打出來的,剛看韓寒的blog有說,終于學(xué)會(huì)了!原來他也不會(huì),哈哈……再也不用。。。。。。了
          ??? 記住了是謝夫特加6哦^^

          posted @ 2007-01-06 23:54 SYBIL@BLOGJAVA 閱讀(276) | 評(píng)論 (1)編輯 收藏

          JUnit使用經(jīng)驗(yàn)(1)(2)(3)

          http://www.z6688.com/info/27393-1.htm

          http://www.z6688.com/info/27394-1.htm

          http://www.z6688.com/info/27392-1.htm

          比較有用的是測(cè)試執(zhí)行順序那鍋和不必寫捕獲異常的那鍋。

          posted @ 2007-01-05 17:01 SYBIL@BLOGJAVA 閱讀(878) | 評(píng)論 (1)編輯 收藏

          links read 1.3

          Ubuntu這個(gè)詞怎么讀?
          http://zhidao.baidu.com/question/5236768.html?si=3

          posted @ 2007-01-03 20:53 SYBIL@BLOGJAVA 閱讀(203) | 評(píng)論 (0)編輯 收藏

          Blog links

          什么是3G通信?
          http://zhidao.baidu.com/question/14085848.html?si=5


          http://zhidao.baidu.com/question/11419446.html?md=3

          posted @ 2006-12-25 14:48 SYBIL@BLOGJAVA 閱讀(200) | 評(píng)論 (0)編輯 收藏

          很笨。。。。的自動(dòng)化測(cè)試。。。。

          找到頁面,有效,登陸,點(diǎn)一個(gè)鏈接
          找到頁面,有效,登陸,點(diǎn)一個(gè)鏈接
          找到頁面,有效,登陸,點(diǎn)一個(gè)鏈接

          posted @ 2006-12-22 17:46 SYBIL@BLOGJAVA 閱讀(160) | 評(píng)論 (0)編輯 收藏

          :)

          ?

          版權(quán)聲明:本文可以被轉(zhuǎn)載,但是在未經(jīng)本人許可前,不得用于任何商業(yè)用途或其他以盈利為目的的用途。本人保留對(duì)本文的一切權(quán)利。如需轉(zhuǎn)載,請(qǐng)?jiān)谵D(zhuǎn)載是保留此版權(quán)聲明,并保證本文的完整性。也請(qǐng)轉(zhuǎn)貼者理解創(chuàng)作的辛勞,尊重作者的勞動(dòng)成果。

          作者:陳雷 (Jackei)

          郵箱:jackeichan@gmail.com

          Bloghttp://jackei.cnblogs.com

          ?


          ???早上上班路上想到的,大家有興趣可以一起討論

          ^_^

          1.?????????? 騙子經(jīng)常需要對(duì)不同的人說同樣的話,做同樣的事,但是一個(gè)優(yōu)秀的騙子不會(huì)因此而覺得膩味,而是每次都飽含激情,讓你不自覺的跟著他興奮起來;

          2.?????????? 騙子每次施行騙術(shù)時(shí),都把他的目標(biāo)當(dāng)作第一次被騙,力求用準(zhǔn)確、簡單的方法讓對(duì)方理解自己的意思而掉進(jìn)圈套;

          3.?????????? 騙子力求將行騙的過程做成真正的“體驗(yàn)式教學(xué)”;

          4.?????????? 騙子都是極善溝通的人——啞巴也能行騙,不過那就是另外一個(gè)領(lǐng)域的騙術(shù)了;

          5.?????????? 你能看見的騙子只有一個(gè),但是你看不見騙子身后負(fù)責(zé)設(shè)計(jì)騙術(shù)的團(tuán)隊(duì),一個(gè)好的騙術(shù)的開發(fā)同樣要靠團(tuán)隊(duì)的合作,需要反復(fù)的演練和完善,千錘百煉;

          6.?????????? 騙子在設(shè)計(jì)騙術(shù)時(shí),同樣要參考同行的先進(jìn)經(jīng)驗(yàn),研究以往的案例,并加入一些流行元素;

          7.?????????? 一個(gè)成功的騙術(shù)需要綜合多個(gè)領(lǐng)域的知識(shí)和經(jīng)驗(yàn),例如心理學(xué);

          8.?????????? 優(yōu)秀的騙子會(huì)在每次行騙后,根據(jù)被騙者的反應(yīng)總結(jié)成功的經(jīng)驗(yàn)和失敗的教訓(xùn),并進(jìn)一步完善騙術(shù);

          9.?????????? 騙術(shù)要不斷的推陳出新,雖然有的時(shí)候內(nèi)容沒換只是換了一個(gè)表現(xiàn)形式或者換了一個(gè)表述的方法;

          10.?????? 每次被騙者都是心甘情愿、興高采烈的把錢交到騙子手上,過后才發(fā)現(xiàn)自己上當(dāng)了。

          posted @ 2006-12-20 17:45 SYBIL@BLOGJAVA 閱讀(173) | 評(píng)論 (0)編輯 收藏

          年會(huì)。。。。。。

          最大的收獲是把人都認(rèn)識(shí)全了,最大的體會(huì)是那些特別口水的歌好像我都不是很會(huì)唱:)

          posted @ 2006-12-19 22:58 SYBIL@BLOGJAVA 閱讀(142) | 評(píng)論 (0)編輯 收藏

          今天寫了個(gè)http-unit

          LoginTest.java
          ?1package?com.asmiling.test.login;
          ?2
          ?3/**
          ?4?*?<p>Title:?</p>
          ?5?*
          ?6?*?<p>Description:?</p>
          ?7?*
          ?8?*?<p>Copyright:?Copyright?(c)?2006</p>
          ?9?*
          10?*?<p>Company:?</p>
          11?*
          12?*?@author?sybil
          13?*?@version?1.0
          14?*/

          15import?java.net.URL;
          16import?junit.framework.TestCase;
          17import?junit.framework.TestSuite;
          18import?junit.textui.TestRunner;
          19
          20import?com.meterware.httpunit.WebConversation;
          21import?com.meterware.httpunit.WebRequest;
          22import?com.meterware.httpunit.WebResponse;
          23import?com.meterware.httpunit.WebForm;
          24import?com.meterware.httpunit.GetMethodWebRequest;
          25
          26import?com.asmiling.test.util.LoginTestInf;
          27public?class?LoginTest?extends?TestCase?implements?LoginTestInf{
          28????????private?WebConversation?brower;
          29????????private?WebRequest?request;
          30????????private?WebResponse?response;
          31????????private?String?urlBlogdriver="http://192.168.22.75:8080/sms2401";
          32????????public?void?setUp()?throws?Exception{
          33????????????????brower=new?WebConversation();
          34????????????????request=new?GetMethodWebRequest(urlBlogdriver);
          35????????????????response=brower.getResponse(request);
          36????????}

          37????????//輸入登錄地址的頁面地址,驗(yàn)證該頁面是否被正常訪問
          38????????public?void?testValidPage()?throws?Exception{
          39????????????????assertNotNull("Summary在網(wǎng)絡(luò)上不存在!",response);
          40????????}

          41????????//驗(yàn)證被訪問的頁面是否是登錄頁面
          42????????public?void?testIsLoginPage()?throws?Exception{
          43????????????????URL?currentUrl=response.getURL();
          44????????????????String?currentUrlStr=currentUrl.getProtocol()+"://"+currentUrl.getHost()+currentUrl.getPath();
          45????????????????assertEquals("登錄頁面不是Summary首頁!",currentUrlStr,urlBlogdriver);
          46????????}

          47????????//輸入非法用戶名、密碼,驗(yàn)證登錄失敗
          48????????public?void?testBadLogin()?throws?Exception{
          49????????????????WebForm?form=response.getForms()[0];
          50????????????????form.setParameter("txtUserName","smsAdmin@test.cu.com");
          51????????????????form.setParameter("txtPassword","sms@))*");
          52????????????????request=form.getRequest();
          53????????????????response=brower.getResponse(request);
          54????????????????assertTrue("您的用戶名和密碼在IOSMS沒有備案!",response.getText().indexOf("出錯(cuò)信息")!=-1);
          55????????}

          56????????//輸入合法用戶名、密碼、驗(yàn)證登錄成功
          57????????public?void?testGoodLogin()?throws?Exception{
          58????????????????WebForm?form=response.getForms()[0];
          59????????????????form.setParameter("txtUserName","smsAdmin@test.cu.com");
          60????????????????form.setParameter("txtPassword","sms@))*");//此處需要填寫真實(shí)密碼
          61????????????????request=form.getRequest();
          62????????????????response=brower.getResponse(request);
          63????????????????assertTrue("轉(zhuǎn)到Summary頁面失敗!",response.getText().indexOf("Summary")!=-1);
          64????????}

          65
          66????????public?static?TestSuite?suite(){
          67????????????????return?new?TestSuite(LoginTest.class);
          68????????}

          69
          70????????public?static?void?main(String?args[]){
          71????????????????TestRunner.run(suite());
          72????????}

          73}

          LoginTestInf.java
          ?1package?com.asmiling.test.util;
          ?2
          ?3/**
          ?4?*?<p>Title:?</p>
          ?5?*
          ?6?*?<p>Description:?</p>
          ?7?*
          ?8?*?<p>Copyright:?Copyright?(c)?2006</p>
          ?9?*
          10?*?<p>Company:?</p>
          11?*
          12?*?@author?sybil
          13?*?@version?1.0
          14?*/

          15
          16public?interface?LoginTestInf{
          17????public?void?testValidPage()?throws?Exception;
          18????public?void?testIsLoginPage()?throws?Exception;
          19????public?void?testBadLogin()?throws?Exception;
          20????public?void?testGoodLogin()?throws?Exception;
          21}

          一共四個(gè)方法,通過了兩個(gè),testValidPage和testGoodLogin通過了,testInLoginPage和testBadLogin沒過。

          posted @ 2006-12-13 18:26 SYBIL@BLOGJAVA 閱讀(255) | 評(píng)論 (0)編輯 收藏

          致老大和同志們書,zz from 老徐

          我的頂頭上司我的老大每次聊天聊到最后,一沒什么話說的時(shí)候總是那句老話:我覺得你該學(xué)點(diǎn)東西了……卟啦卟啦卟啦……小時(shí)候每次聽到這句話腦子就是一緊,心里嘀咕:……又學(xué)什么啊……終于,長大了,不心虛啦,也敢皺著眉頭來一句:“學(xué)什么呀?!”了——這是今天的事情。不但如此,還能擺出一幅不學(xué)無術(shù)的樣子……過癮……偷眼看老大,老大的反應(yīng)撲哧是笑了:嘿,長能耐了啊你。嘻嘻,老大原來是個(gè)紙老虎……要是早發(fā)現(xiàn)了,我爬墻,我不脫鞋上床,我天天吃白糖
          ?
          ??? 長大了,唯一的好處就是自由,沒人再能逼你。長大了唯一的壞處是非得自律,就是那種自發(fā)的,發(fā)自內(nèi)心的要求自己,做不到,就自責(zé)就譴責(zé)自己,腦子里一個(gè)小人兒:你你你,你你你,你怎么能這樣,你沒耐心,你粗枝大葉,你小心眼兒,你充大頭,你你你,你不學(xué)無術(shù)……反抗別人是一種爭取自由的表現(xiàn),心里總是油然升起一種很正義的感覺;反抗自己容易得抑郁癥,大概是弗洛伊德他老先生說的那種:超我過度發(fā)達(dá)。據(jù)說最嚴(yán)重的會(huì)引發(fā)自殺等行為??傻牵墒?,在下活的正美,可不要得了這毛病。于是又有另外一個(gè)小人兒,另外一個(gè)小人兒說,不不不,沒有一定之規(guī),人怎樣活都可以,怕冷不是嬌氣,也不叫:不,堅(jiān),強(qiáng),穿多點(diǎn)就行了;粗枝大葉那叫大大咧咧,傳說中這是個(gè)美德——至少好多人都這么說;沒耐心也別老忍著,憋出個(gè)好歹來誰負(fù)責(zé)啊,就小眼睛一翻,又叫衛(wèi)生眼球一瞪:沙特阿普,再見,還有,見你的鬼去吧,神經(jīng)病,滾開………………唯一的問題,就是翻臉如翻刀,翻出去的臉就像翻出去的水,想再翻回來,挺難……好吧,想不再翻回來的時(shí)候再翻。說著有點(diǎn)繞啊……理卻就是這么個(gè)理,反正所有的事情都有另外一面,怎么著都行,誰別礙著誰就行了。誰知道呢。
          ?
          ??? 老大,我這么說行嗎……您教育出來的孩子,好歹,也就是她了……她基本還算:孝順,老實(shí),愛學(xué)習(xí),天天向上,熱愛祖國人民,團(tuán)結(jié)友愛,對(duì)同志像春天般溫暖,沒有敵人,有人把她當(dāng)了假想敵……那就沒辦法了,只要人家高興,也算助人為樂。還有:聰明善良樸實(shí)……不能說了,再說把自己說不好意思了,反正離完美不遠(yuǎn)……也不是太近……不能太完美……人都說了,追求完美就是把自己逼上絕路,還有老話說:木秀于林……大風(fēng)就催之……
          ?
          ??? 在臭雞蛋和爛西紅柿還沒有砸來之前,我閃了,和遠(yuǎn)路來的朋友,募捐小同學(xué)吃飯去了。生命如此短暫,務(wù)必別惹事兒,同時(shí),深愛自己——我特美,我特棒,我們都是自大狂……
          ?
          ??? 晚安。

          posted @ 2006-12-10 11:40 SYBIL@BLOGJAVA 閱讀(220) | 評(píng)論 (1)編輯 收藏

          要擺正自己的位置

          人生就像一場戲???因?yàn)橛芯壊畔嗑?br />
          相扶到老不容易???是否更該去珍惜

          為了小事發(fā)脾氣???回頭想想又何必

          別人生氣我不氣????氣出病來無人替

          我若氣死誰如意???況且傷神又費(fèi)力

          鄰居親朋不要比???兒孫瑣事由他去

          吃苦享樂在一起???神仙羨慕好伴侶

          posted @ 2006-11-30 16:33 SYBIL@BLOGJAVA 閱讀(256) | 評(píng)論 (1)編輯 收藏

          blog read of nov 18th


          pentium-m是用在筆記本上的而pentium-4在筆記本和臺(tái)式機(jī)上都有應(yīng)用,不過因?yàn)閜entium-m架構(gòu)設(shè)計(jì)比pentium-4要優(yōu)秀的多,而且兼顧低電壓低功耗.有這樣的處理器Intel才能牢牢占居筆記本市場80%的市場份額.pentium-m處理器的效率要比pentium-4高很多,你舉例的pentium-m1.73已經(jīng)可以和P43.0G媲美了.

          Pentium M是過時(shí)的Pentium III的重新設(shè)計(jì)版。該芯片的設(shè)計(jì)師之一埃登在談到它時(shí)說,它不再強(qiáng)調(diào)速度,而是對(duì)客戶需求的響應(yīng)。

          數(shù)年前,英特爾位于以色列的一些工程師與歐德寧談?wù)摿艘环N針對(duì)筆記本電腦的芯片的想法。目的是什么?在不犧牲電池使用時(shí)間或遭遇象Pentium 4那樣散熱問題的情況下提供較高的性能。由于基于Pentium M的產(chǎn)品受到了企業(yè)和消費(fèi)者客戶的青睞,英特爾計(jì)劃從2006年年末開始在其所有產(chǎn)品線中采用Pentium M架構(gòu)。

          我們?cè)谶@里披露一個(gè)幾乎不為人所知的秘密。盡管英特爾的官員曾經(jīng)表示Pentium M是一款全新設(shè)計(jì)的芯片,但實(shí)際上它是Pentium III芯片的重大修改版。AMD的官員嘲笑說,如何使Pentium 4表現(xiàn)更好?采用Pentium III。英特爾的前首席芯片設(shè)計(jì)師鮑勃說,我們?cè)?jīng)提出了改進(jìn)Pentium III的20-30項(xiàng)措施,但并沒有真正付諸實(shí)施,以色列的設(shè)計(jì)人員對(duì)它進(jìn)行了改進(jìn)。Pentium M確實(shí)不是一款全新的芯片。

          Pentium M是英特爾在性能方面趕超AMD的最佳選擇。它采用了Pentium III的執(zhí)行內(nèi)核和Pentium 4的總線接口。當(dāng)系統(tǒng)處于空閑狀態(tài)時(shí),它能夠降低時(shí)鐘頻率節(jié)約能耗。Pentium M的時(shí)鐘頻率低于Pentium 4,但性能相當(dāng),在能耗降低28%的情況下,計(jì)劃在明年1月份問世的雙內(nèi)核版Pentium M的性能卻提高了68%。

          但是,競爭對(duì)手和英特爾的前芯片設(shè)計(jì)師表示,Pentium M也有不足之處。P.A. Semi的總裁兼首席執(zhí)行官丹說,由于屬于“新瓶裝舊酒”,它存在先天性問題。

          考慮到英特爾在設(shè)計(jì)方面的強(qiáng)大力量,它在未來數(shù)年內(nèi)肯定會(huì)設(shè)計(jì)出全新的芯片架構(gòu)。埃登說,芯片設(shè)計(jì)師的自尊心都非常強(qiáng),這是件好事,這將導(dǎo)致更多的創(chuàng)新。

          posted @ 2006-11-18 22:46 SYBIL@BLOGJAVA 閱讀(179) | 評(píng)論 (2)編輯 收藏

          消沉下去也沒什么意思,還不如站直了別趴下

          。。。。
          朋友說,其實(shí)你本來也是可以考上的

          posted @ 2006-11-07 17:20 SYBIL@BLOGJAVA 閱讀(451) | 評(píng)論 (3)編輯 收藏

          寫文檔,這個(gè)是必須做的。。。。。。

          下午5點(diǎn)之前把這個(gè)寫好。。。。

          posted @ 2006-11-07 13:29 SYBIL@BLOGJAVA 閱讀(133) | 評(píng)論 (0)編輯 收藏

          又落后了,死。。。。

          呵呵,對(duì)自己完全無語。

          posted @ 2006-11-05 20:26 SYBIL@BLOGJAVA 閱讀(126) | 評(píng)論 (0)編輯 收藏

          性能測(cè)試。。。。。何時(shí)能夠結(jié)束。。。。

          測(cè)mmvd HA的性能測(cè)試快兩個(gè)月了,遲遲沒法結(jié)束,經(jīng)歷了第二輪測(cè)試,不跟其他人比就跟自己比,不知道為什么總處要蛾子,換到64不行,很慢,沒仔細(xì)看是那個(gè)原因,決定還是換回以前好用的73,發(fā)完整體流程后發(fā)現(xiàn)還是慢,分布看過之后才發(fā)現(xiàn)是-1-〉0慢(至少),是怎么回事?tomcat的問題?還是什么的問題?為什么他的rpc接收速度這么慢?是因?yàn)閾Q了gmd嗎?不應(yīng)該,那就是tomcat的問題,tomcat能有什么問題?性能測(cè)試需要對(duì)tomcat調(diào)優(yōu)嗎?總感覺過去的一些不足會(huì)緩慢的反應(yīng)到現(xiàn)在直到未來。。。。。。

          posted @ 2006-11-04 21:26 SYBIL@BLOGJAVA 閱讀(146) | 評(píng)論 (0)編輯 收藏

          今天遇到一個(gè)問題。。。

          昨天晚上10點(diǎn)多本來想看看73上面的那個(gè)stability測(cè)試的腳本是否好用,結(jié)果發(fā)出去了,不記得有沒有kill掉,莫名其妙的發(fā)到商用服務(wù)器上,我肯定不會(huì)有意的發(fā)到那,但是我也沒有仔細(xì)看到哪里,我想我是應(yīng)該學(xué)會(huì)怎樣為自己解釋,至少要把事情說清楚。。。

          posted @ 2006-11-01 13:11 SYBIL@BLOGJAVA 閱讀(163) | 評(píng)論 (0)編輯 收藏

          領(lǐng)導(dǎo)找我談話了。。。

          1. 這陣子表現(xiàn)很不好,就是XX整的,就賴某人,老是竄得我。。
            領(lǐng)導(dǎo)找我談話了,細(xì)碎內(nèi)容不表,主要是工作效率不高
            其實(shí)工作是這樣,有些點(diǎn)是要抓住的,全面撒網(wǎng),重點(diǎn)培養(yǎng),我的道路還很漫長。。
            人的精力都很有限。。
            我既然做了測(cè)試工程師。。也許就會(huì)一直做測(cè)試工程師。。。
            有的人看輕自己,有的人看輕別人。。
            看來是不夠認(rèn)真
            多跟大家交流。。。

          2. ?日?qǐng)?bào)內(nèi)容要寫好,我寫的慢,那就每天抽出至少半小時(shí)來寫日?qǐng)?bào),這樣吧,每天在吃晚飯之前的半小時(shí)寫日?qǐng)?bào),時(shí)間就在晚上5:50到6:20這段時(shí)間,雷打不動(dòng)。。。。
            也許有的人可以做到不寫日?qǐng)?bào)思路也很清晰,但我不行,這個(gè)我很清楚,一定要有個(gè)計(jì)劃感
          3. ?有沒有一個(gè)量化的想法?第一次測(cè)試花了多長時(shí)間?那么第二次是不是要折半?最終的目標(biāo)是什么?現(xiàn)在離元旦還有兩個(gè)月,工作已經(jīng)四個(gè)月,要怎么過?有沒有具體的想法?
          4. 現(xiàn)在在測(cè)mmvd ha performance,為什么一直測(cè)不完????
          5. 今天把那個(gè)stability測(cè)試跑了,需要找到226的那個(gè)腳本,在本子上明明記下來了的,怎么找不到了?
          6. 還有73上面的那個(gè)發(fā)送腳本也挺樂的,也需要改動(dòng)嗎?
          7. 我每天的其他時(shí)間在做些什么?有沒有經(jīng)常瀏覽測(cè)試的網(wǎng)站?周圍的同事這么聰明好學(xué),自己有沒有受他們傳染呢?
          8. 發(fā)現(xiàn)一個(gè)同事做事非常有條理,而且目的很分明,晚是晚了點(diǎn),還來得及。。
          9. 說話辦事聰明一點(diǎn)。。聰明一點(diǎn)。。

          posted @ 2006-10-31 23:09 SYBIL@BLOGJAVA 閱讀(291) | 評(píng)論 (0)編輯 收藏

          到點(diǎn)了,睡了。

          這陣子迷超女迷的丟了魂~~~在這里渴望安靜一下~~~~不過這里也是有人知道的。。這真是個(gè)問題,to be or not to be...
          睡先
          求放心

          posted @ 2006-10-10 01:03 SYBIL@BLOGJAVA 閱讀(128) | 評(píng)論 (0)編輯 收藏

          工作三周的口水

          ???  工作三周,真正不需要請(qǐng)假的是在上周結(jié)束畢業(yè)典禮的事情,不知道老大那里給我記了幾天的假,呵呵。算了,先不問,還沒轉(zhuǎn)正。
          ???  說起來上周就發(fā)了錢了,只不過始終有這樣那樣的事情,沒有來得及慶祝:),這樣,上班不過10天,在新浪實(shí)習(xí)也就10余天,也賺了許多銀子了,我很滿意~~~
            工作三周,體會(huì)還是有些,比如最明顯的體會(huì)是晚上不想回家。我也不知道是不是所有剛工作的人都是這樣的感覺,可能是西單終究還是太繁華,讓我這個(gè)小屁孩兒竟有些流連忘返起來;其他的體會(huì)么,覺得暈頭轉(zhuǎn)向的,不知道是我比較穩(wěn)重呢,還是怎的,覺得同事有點(diǎn)忙叨。加上大部分同事是研究生(我這邊10個(gè)人,只有我一個(gè)本科生),感覺壓力還是有些。而且也感覺到有點(diǎn)“代溝”。加上一切如新,本來就有些茫然。應(yīng)該盡快適應(yīng)。
            前兩天剛接手了會(huì)所的技術(shù)支持,雖然困難談不上,但也是要花功夫的。這下晚上不能逛街了。需要時(shí)間讓我熟悉,若說優(yōu)先級(jí)的話,應(yīng)該是先找到好的空間,同時(shí)熟悉論壇程序,多去官網(wǎng),多跟“董事會(huì)”溝通。希望我能給會(huì)所帶來新的活力。希望能修正一下那些老大難問題。
            若說其他的,比如工作中體會(huì)到的人情冷暖之類的,我想現(xiàn)在還是忍耐的時(shí)候,也是要虛心向別人學(xué)習(xí)的時(shí)候,其他的烏七八糟的事情,機(jī)靈著點(diǎn)就可以了。要記住自己的事業(yè)目標(biāo)是大老板。
            下周準(zhǔn)備簽勞動(dòng)合同和學(xué)校那的遺留問題的解決。

          posted @ 2006-07-09 20:43 SYBIL@BLOGJAVA 閱讀(216) | 評(píng)論 (0)編輯 收藏

          這兩天在寫的這個(gè)破爛ant,還有錯(cuò)誤,tnnd.(修改版,已完成)

               摘要: jar包那采用了一種很極端的方式,本來引用過的,又引用了一次。老大讓我把這個(gè)寫成ppt,今明兩天就把框架寫好吧。細(xì)節(jié)問題的改進(jìn)可能沒有時(shí)間做了。先交。 ??1 <? xml?version="1.0" ?> ??2 <!-...  閱讀全文

          posted @ 2006-07-06 20:35 SYBIL@BLOGJAVA 閱讀(372) | 評(píng)論 (0)編輯 收藏

          軟件版本的意思

          ? alpha 內(nèi)部測(cè)試版
            beta 外部測(cè)試版
            demo 演示版
            Enhance 增強(qiáng)版或者加強(qiáng)版 屬于正式版
            Free 自由版
            Full version 完全版 屬于正式版
            shareware 共享版
            Release 發(fā)行版 有時(shí)間限制
            Upgrade 升級(jí)版
            Retail 零售版
            Cardware 屬共享軟件的一種,只要給作者回復(fù)一封電郵或明信片即可。(有的作者并由此提供注冊(cè)碼等),目前這種形式已不多見。
            Plus 屬增強(qiáng)版,不過這種大部分是在程序界面及多媒體功能上增強(qiáng)。
            Preview 預(yù)覽版
            Corporation & Enterprise 企業(yè)版
            Standard 標(biāo)準(zhǔn)版
            Mini 迷你版也叫精簡版只有最基本的功能
            Premium -- 貴價(jià)版
            Professional -- 專業(yè)版
            Express -- 特別版
            Deluxe -- 豪華版
            Regged -- 已注冊(cè)版
            CN -- 簡體中文版
            CHT -- 繁體中文版
            EN -- 英文版
            Multilanguage -- 多語言版
            Rip 是指從原版文件(一般是指光盤或光盤鏡像文件)直接將有用的內(nèi)容(核心內(nèi)容)分離出來,剔除無用的文檔,例如PDF說明文件啊,視頻演示啊之類的東西,也可以算做是精簡版吧…但主要內(nèi)容功能是一點(diǎn)也不能缺少的!另:DVDrip是指將視頻和音頻直接從DVD光盤里以文件方式分離出來。
            trail 試用版(含有某些限制,如時(shí)間、功能,注冊(cè)后也有可能變?yōu)檎桨妫?br />  RC 版。是 Release Candidate 的縮寫,意思是發(fā)布倒計(jì)時(shí),該版本已經(jīng)完成全部功能并清除大部分的BUG。到了這個(gè)階段只會(huì)除BUG,不會(huì)對(duì)軟件做任何大的更改。
            RTM 版。這基本就是最終的版本,英文是 Release To Manufactur,意思是發(fā)布到生產(chǎn)商。
            Original Equipment Manufacturer (OEM)
            You may license products through an Original Equipment Manufacturer (OEM). These products, such as Windows operating systems, come installed when you purchase a new computer.
            OEM軟件是給電腦生產(chǎn)廠的版本,無需多說。
            Full Packaged Product (FPP)-Retail
            Physical, shrink-wrapped boxes of licensed product that can be purchased in a local retail store or any local software retailer.
            FPP就是零售版(盒裝軟件),這種產(chǎn)品的光盤的卷標(biāo)都帶有"FPP"字樣,比如英文WXP Pro的FPP版本的光盤卷標(biāo)就是WXPFPP_EN,其中WX表示是Windows XP,P是Professional(H是Home),F(xiàn)PP表明是零售版本,EN是表明是英語。獲得途徑除了在商店購買之外,某些MSDN用戶也可以得到。
            Volume Licensing for Organizations (VLO)
            You may enjoy potentially significant savings by acquiring multiple product licenses. Depending on the size and type of your organization.
            團(tuán)體批量許可證(大量采購授權(quán)合約),這是為團(tuán)體購買而制定的一種優(yōu)惠方式。這種產(chǎn)品的光盤的卷標(biāo)都帶有"VOL"字樣,取"Volume"前3個(gè)字母,以表明是批量,比如英文 WXP Pro的VOL版本的光盤卷標(biāo)就是WXPVOL_EN,其中WX表示是Windows XP,P是Professional(VOL沒有Home版本),VOL表明是團(tuán)體批量許可證版本,EN是表明是英語。獲得途徑主要是集團(tuán)購買,某些 MSDN用戶也可以得到。
          這種版本根據(jù)購買數(shù)量等又細(xì)分為“開放式許可證”、“選擇式許可證”、“企業(yè)協(xié)議”、“學(xué)術(shù)教育許可證”等以下5種版本
            Open License
            Select License
            Enterprise Agreement
            Enterprise Subscription Agreement
            Academic Volume Licensing
            由此可見,平時(shí)說的什么select/corp是許可證授權(quán)方式,他的出現(xiàn)是為了用若干種不同級(jí)別的優(yōu)惠政策賣同一種軟件,通過select/corp 許可證授權(quán)方式得到的xxx的光盤都是VOL這一種、是并不是有很多種,只不過是相同的VOL光盤配以不同的許可證方式;而Volume Licensing (Product) Keys,即VLK,它所指的只是一個(gè)Key(密匙),僅僅是一個(gè)為證明產(chǎn)品合法化、以及安裝所使用的Key,因?yàn)楦鶕?jù)VOL計(jì)劃規(guī)定,VOL產(chǎn)品是不需要激活的!
            或者說,VLK不是指一種版本,而是指這種版本在部署(deploy)過程中所需要的Key,而需要VLK這種Key的版本應(yīng)該叫做VOL!只不過在實(shí)際中,沒有必要強(qiáng)調(diào)這種叫法、稱呼的準(zhǔn)確性,加之很多人的VOL版本光盤是通過企業(yè)的選擇式許可證、企業(yè)協(xié)議等方式得到的等等原因,所以才會(huì)有很多人叫他為“選擇版”等等。
          官方網(wǎng)站有一個(gè)表格,上面有一句話:“Different products require different Volume Licensing Keys (VLKs). Refer to the table below to make sure you have the correct VLK for your Microsoft product.”,我想這就很好的說明了VLK指的是Key而不是產(chǎn)品了。 很明顯的,F(xiàn)PP需要激活,VOL不需要激活。

          posted @ 2006-06-30 00:16 SYBIL@BLOGJAVA 閱讀(890) | 評(píng)論 (1)編輯 收藏

          畢業(yè)設(shè)計(jì)英文翻譯——Ajax開發(fā)框架

               摘要: 網(wǎng)上有個(gè)版本,是前輩翻得,我改了一些地方,原文的出處是ajaxpatterns.org的ajaxframework,我是看著英文翻得,前輩的翻譯很多不全,只翻譯了一部分。錯(cuò)的(我認(rèn)為錯(cuò)誤)不多,但是不全現(xiàn)象比較嚴(yán)重。我的翻譯不求有多專業(yè),但求把原文逐字逐句翻譯,還是貼出來,個(gè)人愛好,跟抄不抄襲無關(guān)。??????? 是交上去的版本,目錄按那個(gè)的。??????? 譯文正文基于瀏覽器的應(yīng)用框架一般分...  閱讀全文

          posted @ 2006-06-26 22:28 SYBIL@BLOGJAVA 閱讀(3529) | 評(píng)論 (4)編輯 收藏

          畢設(shè)用Buffalo實(shí)時(shí)保存部分的代碼寫了71行,第一次:)

          服務(wù)器端SimpleService.java
          ?1package?net.buffalo.sei.simple;
          ?2import?java.io.IOException;
          ?3import?java.util.*;
          ?4import?java.io.*;
          ?5
          ?6public?class?SimpleService{
          ?7????public?static?void?main(String[]?args)?throws?IOException{
          ?8/*????????2.Input?from?memory
          ?9????????StringReader?in2=new?StringReader(sHandle.value);
          10????????int?c;
          11????????while((c=in2.read())!=-1)
          12????????????System.out.print((char)c);
          13????????
          14*/

          15????????
          16//????????4.File?output
          17????????try{
          18????????????BufferedReader?in4=new?BufferedReader(
          19????????????????????new?StringReader(sHandle.value));
          20????????????PrintWriter?out1=new?PrintWriter(
          21????????????????????new?BufferedWriter(new?FileWriter("Interval.xml")));
          22????????????int?lineCount=1;
          23????????????while((s=in4.readLine())!=null)
          24????????????????out1.println(lineCount++?+?":"+s);
          25????????????out1.close();
          26????????}
          catch(EOFException?e){
          27????????????System.err.println("End?of?stream");
          28????????}

          29????}

          30}
          瀏覽器端部分相關(guān)代碼:)
          ?1<script?language="JavaScript"?src="script/prototype.js"></script>
          ?2<script?language="JavaScript"?src="script/buffalo.js"></script>
          ?3<script?language="JavaScript"?src="script/template.js"></script>
          ?4<SCRIPT?language=javascript>
          ?5<!--
          ?6var?endPoint="<%=request.getContextPath()%>/BUFFALO";
          ?7var?buffalo?=?new?Buffalo(endPoint);
          ?8function?cmdSave()?{
          ?9var?sHandle?=?Buffalo.getElementById("description1");
          10buffalo.remoteCall("simpleService.save",[buffalo:],?function(reply)?{
          11??sHandle.value?=?reply.getResult();
          12?}
          )
          13}

          14//-->
          15
          </SCRIPT>
          16
          17<script?language=javascript>
          18<!--
          19setInterval("cmdSave()",60000);
          20-->
          21
          </script>
          buffalo-service.properties
          1#?simpleService,?The?simple?Service
          2simpleService=net.buffalo.sei.simple.SimpleService
          web.xml
          ?1<?xml?version="1.0"?encoding="UTF-8"?>
          ?2<!DOCTYPE?web-app?PUBLIC?"-Sun?Microsystems,?Inc.DTD?Web?Application?2.3//EN"?"http://java.sun.com/dtd/web-app_2_3.dtd">
          ?3<web-app>
          ?4<display-name>Buffalo?Demo-divide?Application</display-name>
          ?5<servlet>
          ?6??<servlet-name>service</servlet-name>
          ?7??<servlet-class>net.buffalo.server.BuffaloServiceServlet</servlet-class>
          ?8??<init-param>
          ?9???<param-name>debug</param-name>
          10???<param-value>true</param-value>
          11??</init-param>
          12</servlet>
          13
          14<servlet-mapping>
          15??<servlet-name>service</servlet-name>
          16??<url-pattern>/BUFFALO</url-pattern>
          17</servlet-mapping>
          18</web-app>
          又是71行:)

          posted @ 2006-05-31 23:06 SYBIL@BLOGJAVA 閱讀(140) | 評(píng)論 (0)編輯 收藏

          5.19links

          如何用正確的方法寫出高質(zhì)量軟件的75條體會(huì)(粗粗的看了30條,就當(dāng)是長見識(shí)和開闊思路用)

          http://www.blueidea.com/tech/program/2006/3479.asp

          posted @ 2006-05-19 13:33 SYBIL@BLOGJAVA 閱讀(139) | 評(píng)論 (0)編輯 收藏

          畢設(shè)代碼改進(jìn)版,寫了71行:)

          Item.java:)
          ?1package?xml;
          ?2public?class?Item?implements?java.io.Serializable{
          ?3????private?String?input=null,output=null;
          ?4????public?Item(String?input,String?output)?
          ?5????{?
          ?6????????this.input=input;?
          ?7????????this.output=output;?
          ?8????}
          ?
          ?9????public?String?getinput()?
          10????{?
          11????????return?input;?
          12????}
          ?
          13????public?String?getoutput()?
          14????{?
          15????????return?output;?
          16????}
          ?
          17}
          ItemOption.java:)
          ?1package?xml;?
          ?2import?java.util.Iterator;?
          ?3import?java.util.Vector;?
          ?4public?class?ItemOption?implements?java.io.Serializable?{?
          ?5????private?Vector?items=new?Vector();?
          ?6????public?ItemOption()?
          ?7????{?
          ?8????}
          ?
          ?9????public?Iterator?getItems()?
          10????{?
          11????????return?items.iterator();?
          12????}
          ?
          13????//增加vector中的對(duì)象?
          14????public?void?addItem(String?input,String?output)?
          15????{?
          16????????Object?elements=new?Item(input,output);?
          17????????items.addElement(elements);?
          18????}
          ?
          19????//移除vector中的對(duì)象?
          20????public?void?delItem()?
          21????{?
          22????????items.removeAllElements();?
          23????}
          ?
          24}
          ?
          25
          tcxml.jsp:)
          ?1<%@?page?contentType="text/html;charset=gb2312"%>
          ?2<%@?page?import="xml.*"%>
          ?3<jsp:useBean?id="ItemOption"?scope="session"?class=xml.ItemOption"/>
          ?4
          ?5????<%int?tcnum=Integer.parseInt(request.getParameter("tcNum"));%>
          ?6????<count><%out.println("tcnum");%></count>
          ?7
          ?8????<%?for(int?i=1;i<=tcnum;i++){
          ?9????????String?textarea0=request.getParameter("textarea"+"i");
          10????????String?textarea1=request.getParameter("textarea"+"i+1");
          11????
          12????????ItemOption.addItem("textarea0","textarea1");?
          13????}
          ?%>
          14????
          15????<%?
          16????java.util.Iterator?Itvar=ItemOption.getItems()?;?
          17????Item?item=null;?
          18????%>
          19????
          20????<%!int?i=1;?%>
          21????<%????while(Itvar.hasNext())?
          22????{?
          23????????item=(Item)Itvar.next();?
          24????%>?
          25????<tc<%out.println(i);?%>weight=<%Integer.parseInt(request.getParameter("weight13"));%>>
          26????<input><%=item.getinput()%></input>?
          27????<output>?<%=item.getoutput()%>?</output>?
          28????<%i+=1;%>
          29????</tc<%out.println(i);?%>weight=<%Interger.parseInt(request.getParameter("weight13"));%>>
          30????<%}
          %>

          我是在動(dòng)態(tài)生成xml文件呢,呵呵,程序應(yīng)該有好多錯(cuò),有沒人幫我挑挑呢?
          XML文件格式是這樣的:
          ?1<count>5</count>
          ?2<tc1?weight="0.2">????????
          ?3????<input>輸入</input>
          ?4????<output>期望輸出</output>
          ?5</tc1>?
          ?6<tc2?weight="0.2">
          ?7????<input>輸入</input>????
          ?8????<output>期望輸出</output>
          ?9</tc2>
          10<tc3?weight="0.2">
          11????<input>輸入</input>????
          12????<output>期望輸出</output>
          13</tc3>?
          14<tc4?weight="0.2">
          15????<input>輸入</input>????
          16????<output>期望輸出</output>
          17</tc4>?
          18<tc5?weight="0.2">
          19????<input>輸入</input>????
          20????<output>期望輸出</output>
          21</tc5>??

          posted @ 2006-05-15 22:33 SYBIL@BLOGJAVA 閱讀(164) | 評(píng)論 (0)編輯 收藏

          畢設(shè)代碼寫了二十一行:)

          呵呵,有米人知道我寫的是啥?

          <% @?page?contentType = " text/xml;charset= " gb2312 " ?language= " java " %>
          <%@?page?import=
          " java . io .* " %>
          <html>
          <head>
          ????<title>JDOM?parse?XML</title>
          </head>
          <body>
          ????<br>file2file.jsp動(dòng)態(tài)生成XML文件</br>
          ????<%int?tcnum=Integer.parseInt(request.getParameter(
          " tcNum " ));%>
          ????<count><%out.println(
          " tcnum " );%></count>
          ????
          ????????<%?for(int?i=1;i<=tcnum;i++){%>???
          ????????????<tc<%out.println(i);%>?weight=<%Integer.parseInt(request.getParameter(
          " weight13 " ));%>>
          ????????????????<%String?textarea0=request.getPafameter(
          " textarea " + " i " );%>
          ????????????????<input><%out.println(
          " textarea0 " );%></input>
          ????????????????<%String?textarea1=request.getPafameter(
          " textarea " + " i + 1 " );%>
          ????????????????<output><%out.println(textarea1);%></output>
          ????????????</tc<%out.println(i);%>>
          ????
          </body>
          </html>

          posted @ 2006-05-14 22:33 SYBIL@BLOGJAVA 閱讀(284) | 評(píng)論 (0)編輯 收藏

          [5.1]links

          百度首席架構(gòu)師:算法是百度工程師的利器
          http://community.csdn.net/Expert/topic/4680/4680082.xml?temp=.6066553


          文件之間的鏈接

          http://www.shanxiwindow.net/teaching/htmlbook/link01.htm

          posted @ 2006-05-01 18:25 SYBIL@BLOGJAVA 閱讀(97) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 吕梁市| 盘山县| 拜城县| 沐川县| 洪泽县| 怀来县| 行唐县| 和政县| 东阳市| 石屏县| 肥西县| 南雄市| 金塔县| 肃北| 新巴尔虎右旗| 穆棱市| 平阴县| 炎陵县| 百色市| 湖北省| 尉氏县| 新丰县| 赤壁市| 长丰县| 平凉市| 博罗县| 巨鹿县| 长顺县| 嘉鱼县| 桃园市| 公安县| 杂多县| 屏南县| 固原市| 枣庄市| 宁明县| 榕江县| 景谷| 卢湾区| 沙洋县| 米易县|