作者: admin

  • 基於Oracle 高級複製功能的數據庫同步研究與應用

    摘要:隨著數據庫的廣泛使用和網絡的迅速發展,數據庫同步技術的研究一直是一個熱點。本文介紹了Oracle 的高級複製功能的相關概念及提供的功能。接著分析比較了幾種網絡間數據庫同步方法,並總結了基於Oracle 高級複製功能的同步的優勢。最後通過一個具體的數據庫同步需求,介紹一種基於Oracle高級複製功能的數據庫同步方案的具體實現。

    1.引言
    數據庫系統是現代企業運作和管理自動化系統的重要組成部分。在Internet 飛速發展的今天,數據庫一方面向集中化,大型化方向發展,但應用卻在向著分散化,小型化的方向延伸。對於越來越多的企業分支機構和辦公人員,他們需要隨時查詢和更新數據庫,而他們所需要操作的一般並不是數據庫的全部,而往往只是與之緊密相關的少量數據,但少量的數據必須與企業中心數據庫同步更新。如何根據實際情況有效地解決數據庫系統的數據同步問題已成為企業或系統的整個數據庫系統應用的核心環節。

    點擊下載:Oracle高級複製功能的數據庫同步研究與應用

  • 學習Java語言的重要含義

    1. Java是目前使用最為廣泛的網絡編程語言之一。它具有簡單,面向對象,穩定,與平台無關,解釋型,多線程,動態等特點。

         2.簡單Java語言簡單是指這門語言既易學有好用。不要將簡單誤解為這門語言很乾癟。你可能很贊同這樣的觀點英語要比阿了伯語言容易學。但這並不意味著英語就不能表達丰富的內容和深刻的思想,許多文學若貝爾獎的作品都是英文寫的。如果你學習過C++語言,你會感覺Java很眼熟,因為Java中許多基本語句的語法和C++一樣,像常用的循環語句,控制語句等和C++幾乎一樣,但不要誤解為Java是C++的增強版,Java和C++是兩種完全不同的語言,他們各有各的優勢,將會長期並存下去,Java語言和C++語言已成為軟件開發者應當掌握的語言。如果從語言的簡單性方面看,Java要比C++簡單,C++中許多容易混淆的概念,或者被Java棄之不用了,或者以一種更清楚更容易理解的方式實現,例如, Java不再有指針的概念。

         3.面向對象基於對象的編程更符合人的思維模式,使人們更容易編寫程序。在實際生活中,我們每時每刻都與對像在打交道。我們用的鋼筆,騎的自行車,乘的公共汽車等。而我們經常見到的卡車,公共汽車,轎車等都會涉及以下幾個重要的物理量可乘載的人數,運行速度,發動機的功率,耗油量,自重,輪子數目等。另外,還有幾個重要的功能加速功能,減速功能,剎車,轉彎功能等。我們也可以把這些功能稱作是他們具有的方法,而物理量是它們的狀態描述。僅僅用物理量或功能不能很好的描述它們。在現實生活中,我們用這些共有的屬性和功能給出一個概念機動車類。一個具體的轎車就是機動車類的一個實例對象.Java語言與其它面向對象語言一樣,引入了類的概念,類是用來創建對象的模板,它包含被創建的對象的狀態描述和方法的定義。

         4.與平台無關與平台無關是Java語言最大的優勢。其它語言編寫的程序面臨的一個主要問題是操作系統的變化,處理器升級以及核心系統資源的變化,都可能導致程序出現錯誤或無法運行。 Java的虛擬機成功地解決了這個問題,Java編寫的程序可以在任何安裝了Java虛擬機JVM的計算機上正確的運行,Sun公司實現了自己的目標“一次寫成,處處運行”。

         5.解釋型我們知道C,C++等語言,都是只能對特定的CPU芯片進行編譯,生成機器代碼,該代碼的運行就和特定的CUP有關。例如,在C語言中,我們都碰到過類似下面的問題int型變量的值是10 ,那麼下面代碼的輸出結果是什麼呢printf(“%d,%d”,x,x=x+1 )如果上述語句的計算順序是從左到右,結果是10,11但是,有些機器會從右到左計算,那麼結果就是11,11.Java不像C++,它不針對特定的CPU芯片進行編譯,而是把程序編譯為稱做字節碼的一個“中間代碼”。字節碼是很接近機器碼的文件,可以在提供了Java虛擬機JVM的任何系統上被解釋執行。 Java被設計成為解釋執行的程序,即翻譯一句,執行一句,不產生整個的機器代碼程序。翻譯過程如果不出現錯誤,就一直進行到完畢,否則將在錯誤處停止執行。同一個程序,如果是解釋執行的,那麼它的運行速度通常比編譯為可執行的機器代碼的運行速度慢一些。但是,對Java來說,二者的差別不太大,Java的字節碼經過仔細設計,很容易便能使用JIT即時編譯方式編譯技術將字節碼直接轉化成高性能的本地機器碼,Sun公司在Java 2發行版中提供了這樣一個字節碼編譯器——JIT(Just In Time),它是Java虛擬機的一部分。 Java運行系統在提供JIT的同時仍具有平台獨立性,因而“高效且跨平台”對Java來說不再矛盾。如果把Java的程序比做“漢語”的話,字節碼就相當於“世界語”,世界語不和具體的“國家”關,只要這個“國家”提供了“翻譯”,就可以再快速地把世界語翻譯成本地語言。

         6.多線程Java的特點之一就是內置對多線程的支持。多線程允許同時完成多個任務。實際上多線程使人產生多個任務在同時執行的錯覺,因為,目前的計算機的處理器在同一時刻只能執行一個線程,但處理器可以在不同的線程之間快速地切換,由於處理器速度非常快,遠遠超過了人接收信息的速度,所以給人的感覺好像多個任務在同時執行。 C++沒有內置的多線程機制,因此必須調用操作系統的多線程功能來進行多線程程序的設計。

         7.安全當你準備從網絡上下載一個程序時,你最大的擔心是程序中含有惡意的代碼,比如試圖讀取或刪除本地機上的一些重要文件,甚至該程序是一個病毒程序等。當你使用支持Java的瀏覽器時,你可以放心地運行Java的小應用程序Java Applet ,不必擔心病毒的感染和惡意的企圖,Java小應用程序將限制在Java運行環境中,不允許它訪問計算機的其它部分。

         8.動態Java程序的基本組成單元就是類,有些類是自己編寫的,有一些是從類庫中引入的,而類又是運行時動態裝載的,這就使得Java可以在分佈環境中動態地維護程序及類庫,而不像C++那樣,每當其類庫升級之後,相應的程序都必須重新修改,編譯。

  • 寫Java程序的三十個基本規則

    (1)類名首字母應該大寫。字段、方法以及對象(句柄)的首字母應小寫。對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。例如: ThisIsAClassName
     thisIsMethodOrFieldName
    若在定義中出現了常數初始化字符,則大寫static final基本類型標識符中的所有字母。這樣便可標誌出它們屬於編譯期的常數。
    Java包(Package)屬於一種特殊情況:它們全都是小寫字母,即便中間的單詞亦是如此。對於域名擴展名稱,如com,org,net或者edu等,全部都應小
    寫(這也是Java 1.1和Java 1.2的區別之一)。
    (2)為了常規用途而創建一個類時,請採取“經典形式”,並包含對下述元素的定義:
     equals()
     hashCode()
     toString()
     clone()(implement Cloneable)
     implement Serializable
    (3)對於自己創建的每一個類,都考慮置入一個main(),其中包含了用於測試那個類的代碼。為使用一個項目中的類,我們沒必要刪除測試代碼。若進行了任何形式的改動,可方便地返回測試。這些代碼也可作為如何使用類的一個示例使用。
    (4)應將方法設計成簡要的、功能性單元,用它描述和實現一個不連續的類接口部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便於類內代碼的重複使用(有些時候,方法必須非常大,但它們仍應只做同樣的一件事情)。

    (5)設計一個類時,請設身處地為客戶程序員考慮一下(類的使用方法應該是非常明確的)。然後,再設身處地為管理代碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什麼方法可把它們變得更簡單)。
    (6)使類盡可能短小精悍,而且只解決一個特定的問題。下面是對類設計的一些建議:
    1.一個複雜的開關語句:考慮採用“多形”機制
    2.數量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現
    3.許多成員變量在特徵上有很大的差別:考慮使用幾個類。
    (7)讓一切東西都盡可能地“私有”——private。可使庫的某一部分“公共化”(一個方法、類或者一個字段等等),就永遠不能把它拿出。若強行拿出,就可能破壞其他人現有的代碼,使他們不得不重新編寫和設計。若隻公佈自己必須公佈的,就可放心大膽地改變其他任何東西。在多線程環境中 ,隱私是特別重要的一個因素——只有private字段才能在非同步使用的情況下受到保護。
    (8)謹惕“巨大對象綜合症”。對一些習慣於順序編程思維、且初涉OOP領域的新手,往往喜歡先寫一個順序執行的程序,再把它嵌入一個或兩個巨大的對象裡。根據編程原理,對象表達的應該是應用程序的概念,而非應用程序本身。
    (9)若不得已進行一些不太雅觀的編程,至少應該把那些代碼置於一個類的內部。
    (10)任何時候只要發現類與類之間結合得非常緊密,就需要考慮是否採用內部類,從而改善編碼及維護工作(參見第14章14.1.2小節的“用內部類改進代碼”)。

    (更多…)

  • 從ITIL到PMP

    從ITIL到PMP

    會想到寫這篇文章,主要是因為看到ITIL V3的相關消息,及我在資策會上ITIL(IT Infrastructure Library)課程的講師吳傑離開精誠(負責CA產品)到聯想集團服務的消息。

    大概8年前,IBM提出SLM(Service Level Management)的概念,強調IT的服務水平是可以被量化,被管理的。當時我服務的公司也代理SLM的工具(Compuware,同質產品有IBM Tivoli,BMC Patrol,HP Openview,CA……),許多客戶見到這種工具,都相當有興趣,原因不外乎:系統部門可以和AP部門釐清問題的責任、可以在終端用戶報怨時有量化的數據可以討論、看看究竟是誰用掉大部份的系統或網路資源….等等。為了實現SLM(之後又發展出SLA, Service Level Agreement)的精神:提升終端用戶滿意度、有效投資IT的案例倒是不多。加上SLM不是生產的必要工具,所以,在台灣,這個市場和資訊安全的產品一樣,叫好不叫座。
    資訊業,是不是服務業?我想,這個問題的答案見仁見智。
    資訊從業人員大多必須經歷許多學習,才能成為專家。在付出相當的時間與金錢,好不容易考上專業證照之後,才發現,什麼!資訊業是服務業!和錢櫃KTV的服務生一樣,是服務業!……. 我想,這種情形大概沒有人可以接受。
    今日的台灣,交通相當便利,一日生活圈已成事實。從台北到高雄,不僅可以選擇搭飛機,還可以搭高鐵。同樣的,開飛機的機長,必須付出相當的努力,通過考試,才有資格開飛機。機長是不是也從事服務業呢?機長的工作,就是把旅客「安全」的送到目的地,如果能加上「舒適」這個元素,那是更是棒了。是的,機長是從事服務業。
    “程式與香雞排”這篇網路文章相信很多人看過,其中道儘台灣資訊從業人員薪資與工時的不平等,與心酸。我想,這種情形和民族性有相當大的關係。雖然,現在的政治情勢讓我搞不清楚我到底是哪一族?是中華民族?還是台灣族?還是……..,既然在這個環境下打拼,面對這種不可抗拒的因素,我們能想的是,如何讓自己過的更愉快而已。
    “請尊重專業!”,這句話的點播率相當高。
    那什麼是專業呢?考上專業證照之後,是不是就代表”專業”了呢?許多專業證照,只需要會考試就行了,考古題唸一唸,通過率也相當高,不知道去哪download考古題的人,還可去到 Test104去買。試問,這樣考出來的專業證照,足以代表什麼?
    機長把旅客「安全」的送到目的地,必須依賴專業證照,不是只有考試而已,還必須有相當的飛行時數,也就是實務經驗。同樣的,資訊從業人員也是如此。
    「舒適」,是一種感覺。客戶對你的服務是否滿意,是一種主觀因素。資訊從業人員如何讓你的客戶,或者你的客戶的客戶感到「舒適」呢?ITIL 是一個值得參考的精神(根據OGC英國商務部http://www.itil.co.uk/ 的說明,ITIL是最佳實務)。台灣資訊系統的建置潮已過,IT服務的價值如何量化,將是下一個關注的目標。與例來說,如果你是MIS人員或主管,公司同仁問:為什麼公司給我們的MAIL空間只有200MB,GOOGLE都給我2GB了。試問,該如何回答?”資訊系統升級要錢啊,可是老闆不同意”,看來像是回答了,不過,問題還是沒解決,如此只會是惡性循環。
    MIS部門,只是個會花錢的單位嗎?70年代開門做生意,需要”電話”這個工具,80年代開始,開門做生意需要資訊系統,而資訊系統就像個無底洞,硬體會老舊,軟體需要更新,每一項都要”錢”?從事IT供應商十多年,當然,站在供應商的角度,我們樂見這種情況,因為,這樣才有案子做,有案子做才能賺錢。不過,使用者也不是笨蛋,景氣好的時候樂於投資資訊系統,景氣不好的時候呢?當然是預算縮減,廠商削價競爭,最後,客戶得到什麼?IT?是Information Technology,還是In Trouble?
    「計劃趕不上變化,變化趕不上爺爺一句話」,這樣的情境,相信許多人不會感到陌生。在工作的過程中往往需要即興的表演一下,只因為,發生了一些不在計劃中、或想像中的事。如果這種情形發生在業務同仁身上,帶來的影響可能是訂單飛了;如果這種情形發生工程同仁身上,帶來的影響可能是工作沒做好,也可能帶來客戶損失。而這些問題的根本原因,都來自於”溝通”與”變更管理”。
    PMP面向客戶,追求團隊的共同努力去完成任務。
    從ITIL到PMP,追求的共同目標都是”客戶滿意”,讓IT不再是In Trouble。

    原文出处:http://www.itcert.org

  • Java開發者的堅守的基本原則

    有許多標準和實踐準則可適用於Java開發者,但此處要說的,是每個Java開發者需堅守的基本原則。

      一、為代碼加註釋。雖然每個人都知道這點,但有時卻不自覺忘了履行,今天你“忘了”加註釋了嗎?雖然註釋對程序的功能沒什麼“貢獻”,但過一段時間,比如說兩星期之後或者更長,回過頭來看看自己的代碼,說不定已經記不住它是乾什麼的了。假如這些代碼是你個人的,那還算是走運了,不幸的是,當然了,大多數時候都是別人的不幸,很多時候大家都是在為公司寫代碼,寫代碼的人也許早已經離開了公司,但別忘了一句古話,有來有往嘛,為他人,也為我們自己,請為你的代碼加上註釋。
      二、不要讓事情複雜化。程序員有時候總是對簡單問題想出複雜的解決方案,比如說,在只有五個用戶的程序中引入EJB、對程序實現了並不需要的框架(framework),之類的還有屬性文件、面向對象解決方案、多線程等等。為什麼要這樣做呢?也許我們並不知道是否這樣會更好,但這樣做也許可以學到一些新東西,或者讓自己更感愛好一些。假如是不知道為什麼這樣做,建議多請教經驗豐富的程序員,假如是為了個人的目的,麻煩讓自己更專業一點。
    三、始終牢記——“少即是好(Less is more)並不總是對的”。代碼效率雖然很重要,但在許多解決方案中,編寫更少的代碼並不能改善這些代碼的效率,請看下面這個簡單的例子:
             
                 if(newStatusCode.equals(“SD”) && (sellOffDate == null ||
                todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
                todayDate.compareTo(lastUsedDate)>0)) ||
                (newStatusCode.equals(“OBS”) && (OBSDate == null ||
                todayDate.compareTo(OBSDate)<0))){
                newStatusCode = “NYP”;
                } 
             
    能看明白if條件語句是乾什麼的嗎?能想出來是誰寫的這段代碼嗎?假如把它分成兩段獨立的if語句,是不是更輕易理解呢,下面是修改後的代碼:
             
                 if(newStatusCode.equals(“SD”) && (sellOffDate == null ||
                todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
                todayDate.compareTo(lastUsedDate)>0))){
                newStatusCode = “NYP”;
                }else
                if(newStatusCode.equals(“OBS”) && (OBSDate == null ||
                todayDate.compareTo(OBSDate)<0))
                {
                newStatusCode = “NYP”;
                } 
             是不是讀起來輕易多了呢,在此只是多加了一個if和兩個花括號,但代碼的可讀性與可理解性就一下子提高了一大截。
      四、請不要硬編碼。開發者經常有意“忘記”或忽略掉這點,因為有些時候開發日程逼得實在太緊。其實,多寫一行定義靜態變量的代碼能花多少時間呢?
                public class A {
                public static final String S_CONSTANT_ABC = “ABC”;
                public boolean methodA(String sParam1){
                if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
                return true;
                }
                return false;
                }
                } 
             

    現在,每次需要將“ABC”與其他變量進行比較時,不必記住實際代碼,直接引用A.S_CONSTANT_ABC就行了,而且在今後需要進行修改時,也可在一處修改,不會翻遍整個源代碼逐個修改了。
    五、不要“創造”自己的框架(framework)。確切來說,有數以千計的各種框架存在,而且大多數是開源的,這些框架都是優秀的解決方案,可用於日常程序開發中,我們只需使用這些框架的最新版本就行了,至少表面上要跟上形勢吧。被大家廣為接受的最為明顯的一個例子就是Struts了,這個開源web框架非常適合用在基於web的應用程序中。是不是想開發出自己的Struts呢,還是省點力氣吧,回頭看看第二條——不要讓事情複雜化。另外,假如正在開發的程序只有3個窗口,就不要使用Struts了,對這種程序來說,不需要那麼多的“控制”。
    六、不要使用println及字符串連接。通常為了調試方便,開發者喜歡在可能的所有地方都加上System.out.println,也許還會提醒自己回過頭來再來刪除,但有些時候,經常會忘了刪除或者不願意刪除它們。既然使用System.out.println是為了測試,那麼測試完之後,為什麼還要留著它們呢,因為在刪除時,很可能會刪除掉真正有用的代碼,所以不能低估System.out.println危害啊,請看下面的代碼:
             
                 public class BadCode {
                public static void calculationWithPrint(){
                double someValue = 0D;
                for (int i = 0; i < 10000; i ) {
                System.out.println(someValue = someValue i);
                }
                }
                public static void calculationWithOutPrint(){
                double someValue = 0D;
                for (int i = 0; i < 10000; i ) {
                someValue = someValue i;
                }
                }
                public static void main(String [] n) {
                BadCode.calculationWithPrint();
                BadCode.calculationWithOutPrint();
                }
                } 
             

    從測試中可以發現,方法calculationWithOutPrint()執行用了0.001204秒,作為對比,方法calculationWithPrint()執行可是用了10.52秒。
    要避免浪費CPU時間,最好的方法是引入像如下的包裝方法:
             
                public class BadCode {
                public static final int DEBUG_MODE = 1;
                public static final int PRODUCTION_MODE = 2;
                public static void calculationWithPrint(int logMode){
                double someValue = 0D;
                for (int i = 0; i < 10000; i ) {
                someValue = someValue i;
                myPrintMethod(logMode, someValue);
                }
                }
                public static void myPrintMethod(int logMode, double value) {
                if (logMode > BadCode.DEBUG_MODE) { return; }
                System.out.println(value);
                }
                public static void main(String [] n) {
                BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
                }
                } 

    另外,字符串連接也是浪費CPU時間的一個大頭,請看下面的示例代碼:

                public static void concatenateStrings(String startingString) {
                for (int i = 0; i < 20; i ) {
                startingString = startingString startingString;
                }
                }
                public static void concatenateStringsUsingStringBuffer(String startingString) {
                StringBuffer sb = new StringBuffer();
                sb.append(startingString);
                for (int i = 0; i < 20; i ) {
                sb.append(sb.toString());
                }
                } 
             
        在測試中可發現,使用StringBuffer的方法只用了0.01秒執行完畢,而使用連接的方法則用了0.08秒,選擇顯而易見了。
      七、多關注GUI(用戶界面)。再三強調,GUI對商業客戶來說,與程序的功能及效率同等重要,GUI是一個成功程序的最基本部分,而很多IT經理往往都沒注重到GUI的重要性。在現實生活中,許多公司可能為了節省開支,沒有僱用那些有著設計“用戶友好”界面豐富經驗的網頁設計者,此時Java開發者只能依靠他們自身的HTML基本功及在此領域有限的知識,結果,很多開發出來的程序都是“計算機友好”甚於“用戶友好”。很少有開發者同時精通軟件開發及GUI設計,假如你在公司“不幸”被分配負責程序界面,就應該遵守下面三條原則:
               1、 不要再發明一次輪子,即不做無用功。現有的程序可能會有類似的界面需求。

      2、 先創建一個原型。這是非常重要一步,用戶一般想看到他們將使用的東西,而且可以先利用這個原型徵求用戶的意見,再慢慢修改成用戶想

    要的樣子。
      3、 學會換位思考。換句話來說,就是從用戶的角度來審查程序的需求。舉例來講,一個匯總的窗口可以跨頁或者不跨頁,作為一個軟件開發者,可能會傾向於不跨頁,因為這樣簡單一些。但是,從用戶的角度來看,可能不希望看到上百行數據都擠在同一頁上。
      八、文檔需求不放鬆。每個商業需求都必須記錄在案,這可能聽上去像童話,似乎在現實生活中很難實現。而我們要做的是,不管開發時間多緊迫,不管最終期限多臨近,對每個商業需求都必須記錄在案。
    九、單元測試、單元測試、單元測試。關於什麼是單元測試的最好方法,在此不便細說,只是強調,單元測試一定要完成,這也是編程中最基本的原則。當然了,假如有人幫你做單元測試自然是最好,假如沒有,就自己來做吧,當創建一個單元測試計劃時,請遵守以下三條最基本的原則:
    1、 先於編寫類代碼之前編寫單元測試。
    2、 記錄單元測試中的代碼註釋。
    3、 測試所有執行要害功能的公有方法,這裡不是指set和get方法,除非它們是以自己獨特方式執行set和get方法。
      十、質量,而不是數量。有些時候因為產品問題、期限緊迫、或一些預料之外的事情,導致經常不能按時下班,但一般而言,公司不會因為僱員經常加班而對之表揚和獎勵,公司只看重高質量的工作。假如遵守了前九條原則,你會發現自己寫出的代碼bug少且可維護性高,無形中質量提高了一大步。

  • CIW的考試費用及考試重點

    參加CIW考試須到指定的授權考試中心參加考試,考試費用為135美元/門(各考試機構應該有不同的折算,具體費用考生可諮詢當地考試機構)。
      
    考題數量及重點
    一般情況下,考題數量分配情況是:
      
    “Network Security and Firewalls”有22道考題;
    “Operating Systems security”有16道考題;
    “Security Auditing, Attacks and Threat Analysis”有22道考題考試時間為150分鐘,通過分數線的百分比為75%左右,即每部分正確率為75%即可通過考試.

    CIW認證的考試途徑和報考條件

    如要申請CIW安全分析師證書,考生必須至少已經獲得下表列出的資格證書中的一種,並將相關證明文件寄往CIW中心,同時訪問認證機構的網站查詢獲得的證書是否通用。報考CIW安全分析師的先決條件/證書名稱/版本號。
      
    Microsoft Certified Systems Engineer(MCSE) NT4.0/2000/2003
      Certified Novell engineer(CNE) NetWare 4/5
      Cisco Certified Network Associate(CCNA)
      Cisco Certified Network Professional(CCNP)
      Cisco Certified Internetwork Expert(CCIE)
      Linux Professional Institute(LPI) Level 2
      SAIR Linux Certified Engineer Level 2

  • 为什么收不到邮件?

    =CE=AA=CA=B2=C3=B4=CA=D5=B2=BB=B5=BD=D3=CA=BC=FE=A3=BF=

  • [ithome]中文電腦書排行榜

    No1. ASP.NET AJAX 經典範例100─使用VC#、No2. ASP.NET AJAX應用剖析立即上手、No3. 軟體測試實務講座─來自矽谷的技術經驗與心得分享…
     
    1. ASP.NET AJAX 經典範例100─使用VC#章立民研究室/著
    碁峰出版
    售價:750元

    2. ASP.NET AJAX應用剖析立即上手
    董大偉/著
    博碩出版
    售價:580元

    3. 軟體測試實務講座─來自矽谷的技術經驗與心得分享
    李幸超/著
    博碩出版
    售價:290元

    4. JavaScript 大全( JavaScript: The Definitive Guide, 5/e)
    David Flanagan/著;
    陳建勳/譯
    歐萊禮出版
    售價:1200元

    5. SQL 語法範例辭典
    陳亦苓/著
    旗標出版
    售價:550元

    6. 深入淺出物件導向分析與設計(Head First Object-Oriented Analysis and Design)
    Brett McLaughlin、Gary Pollice、David West /著;
    楊仁和/譯
    歐萊禮出版
    售價:880元

    7. Microsoft Office SharePoint Server 2007新一代企業Web解決方案(第一集)
    恆逸資訊屠立剛、吳翠鳳/著
    悅知出版
    售價:690元

    8. 嵌入式設計及Linux 驅動開發指南─基於 ARM 9 處理器, 2/e
    孫天澤、袁文菊/著
    大學出版
    售價:420元

    9. ASP.NET 2.0 深度剖析範例集
    董大偉/著
    博碩出版
    售價:650元

    10. Java 認證SCJP 5.0猛虎出閘
    段維瀚/著
    碁峰出版
    售價:650元

    資料來源:天瓏資訊圖書,2007.07.16