標籤

顯示具有 programming 標籤的文章。 顯示所有文章
顯示具有 programming 標籤的文章。 顯示所有文章

2013年12月31日 星期二

(转)JAVA DAO编程模式

文章和sun官方文档比较接近,给出英文文档地址:
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开。实现DAO模式能够更加专注于编写数据访问代码。这篇文章中,Java开发人员Sean C. Sullivan从三个方面讨论DAO编程的结构特征:事务划分,异常处理,日志记录。
  在最近的18个月,我和一个优秀的软件开发团队一起工作,开发定制基于WEB的供应链管理应用程序.我们的应用程序访问广泛的持久层数据,包括出货状态,供应链制度,库存,货物发运,项目管理数据,和用户属性等.我们使用JDBC API连接我们公司的各种数据库平台,并且在整个应用程序中应用了DAO设计模式.
  通过在整个应用程序中应用数据访问对象(DAO)设计模式使我们能够把底层的数据访问逻辑和上层的商务逻辑分开.我们为每个数据源创建了提供CRUD(创建,读取,更新,删除)操作的DAO类.
  在本文中,我将向你介绍DAO的实现策略以及创建更好的DAO类的技术.我会明确的介绍日志记录,异常处理,和事务划分三项技术.你将学在你的DAO类中怎样把这三种技术结合在一起.这篇文章假设你熟悉JDBC API,SQL和关系性数据库编程.

2013年9月26日 星期四

editplus 3 繁體破解版

軟體名稱 :editplus 3 繁體版
軟體版本 :V3
軟體分類:文字編輯
軟體性質:試用軟體 
語言介面:繁體中文(另有英文、簡體中文等多國語系)   
作業系統:Windows xp , Vista

軟體下載連結資訊
ftp://ftp.editplus.com/epp310_en.exe (editplus 3 主程式)
http://www.mediafire.com/file/zmjnzzeuzmj/editplus_3.10.193_cht.7z (中文包)

http://www.jb51.net/softs/2276.html (key generator)


備用LINK:


 中文包安裝方法: 
1. 先下載安裝主程式editplus 3 主程式
2. 將繁體中文語系 "950.dll" 解壓縮到 C:\Program Files\EditPlus 3\ 目錄下。
3. 執行 language_cht.reg 變更為繁體中文界面。(執行 language_en.reg 可恢復為英文界面)


感謝 Jackbin 的中文化 -->  http://jackbin.blogspot.com/


軟體說明 :
 
一套功能強大,可取代記事本的文字編輯器,擁有無限制的復原與重做、 
英文拼字檢查、自動換列、列數標記、搜尋取代、同時編輯多檔、全螢幕
幕瀏覽功能。而它還有一個好用的功能,就是它有監視剪貼簿的功能,能
夠同步於剪貼簿自動將文字貼上進 EditPlus 的編輯視窗中,讓您省去粘
貼的步驟。另外它也是一個非常好用的 HTML 編輯器,它除了支援顏色標
記、HTML 標示,同時支援 C、C++、Perl、Java,另外,它還內建完整的
HTML & CSS1 指令功能,對於習慣用記事本編輯網頁的朋友,它可幫您節
省一半以上的網頁製作時間,若您有安裝 IE 3.0 以上版本,它還會結合
IE 瀏覽器於 EditPlus 視窗中,讓您可以直接預覽編輯好的網頁(若沒安
裝IE,也可指定瀏覽器路徑)。


2013年9月24日 星期二

Java:使用opencsv讀寫csv文件

OpenCSV是一個簡單的用於解析CSV文件的java類庫,它封裝了CSV格式文件的輸出和讀入,可以自動處理CSV格式中的特殊字符,最重要的是OpenCSV可以用於商業化(commercial- friendly)。
具體的使用方法:

讀CSV文件

1、使用Iterator方式讀
CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    // nextLine[] is an array of values ​​from the line 
    System.out.println(nextLine[0] + nextLine[1] + "etc..."); 
}
2、使用List
CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); 
List myEntries = reader.readAll();

2013年4月20日 星期六

complexity analysis


This analysis is based on the amount of work done by the algorithm.

Objectives of time complexity analysis:
• To determine the feasibility of an algorithm by estimating an upper bound on the amount of work performed
• To compare different algorithms before deciding on which one to implement

Time complexity expresses the relationship between the size of the input and the run time for the algorithm.
It is usually expressed as a proportionality,rather than an exact function.

To simplify analysis, we sometimes ignore work that takes a constant amount of time, independent of the problem input size. When comparing two algorithms that perform the same task, we often just concentrate on the differences between algorithms. Simplified analysis can be based on:
• Number of arithmetic operations performed
• Number of comparisons made
• Number of times through a critical loop
• Number of array elements accessed
• etc

2013年4月19日 星期五

Do hash tables work in constant time?

http://lemire.me/blog/archives/2008/06/05/why-pure-theory-is-wasteful/

Theory in Computer Science—as in any other field—is based on models. These models make many hidden assumptions. This is one of the fundamental reason why pure theory is wasteful. We must constantly revisit our old assumptions and run experiments to determine whether our models are useful.

Hash tables are a fundamental data structure. They are part of every elementary introduction to Computer Science. From a programmer’s point of view, they associate keys with values. Hash tables go back to the beginnings of Computer Science even though new variations keep being invented (e.g., Cuckoo hashing). Incredibly, hash tables were just recently integrated in the C++ language, but less conservative languages like Java, Python, Ruby, Perl, PHP, all have hash tables built-in.
The secret sauce is that the key is first transformed (or hashed) to a number between 1 and m corresponding to a cell in an array. As long as this number of generated with sufficient randomness, hash tables are almost equivalent to looking up values in an array—except for the overhead of hashing the key.

Big-O notation is a relative representation of the complexity of an algorithm.

http://stackoverflow.com/questions/487258/plain-english-explanation-of-big-o/487278#487278

Quick note, this is almost certainly confusing Big O notation (which is an upper bound) with Theta notation (which is a two-side bound). In my experience this is actually typical of discussions in non-academic settings. Apologies for any confusion caused.

The simplest definition I can give for Big-O notation is this:

There are some important and deliberately chosen words in that sentence:
  • relative: you can only compare apples to apples. You can't compare an algorithm to do arithmetic multiplication to an algorithm that sorts a list of integers. But two algorithms that do arithmetic operations (one multiplication, one addition) will tell you something meaningful;
  • representation: Big-O (in its simplest form) reduces the comparison between algorithms to a single variable. That variable is chosen based on observations or assumptions. For example, sorting algorithms are typically compared based on comparison operations (comparing two nodes to determine their relative ordering). This assumes that comparison is expensive. But what if comparison is cheap but swapping is expensive? It changes the comparison; and
  • complexity: if it takes me one second to sort 10,000 elements how long will it take me to sort one million? Complexity in this instance is a relative measure to something else.
Come back and reread the above when you've read the rest.

Introduction to Cuckoo Hashing

Describe the cuckoo hashing principle

Assumption:
m: In a hash function h : U -> [m] for some positive integer m < |U|.
n: set of data for insertion

If m > n then insert/delete/query take O(1) expected time.

- Requires two O(lg n)-independent hash functions, h1 and h2. (OPEN: same bound using only O(1)-independent hash family)



Why is Cuckoo Hashing cool?
For hash table:
                       Average Case          Worst Case

SpaceO(n)[1]O(n)
SearchO(1)O(n)
InsertO(1)O(n)
DeleteO(1)O(n)

Perfect hashing guarantees
  • O(1) lookup
  • O(1) insert
Cuckoo hashing also guarantees
  • O(1) lookup**
  • O(1) insert**
** O(1) expected time for insert
     O(1) worst case time for query/delete: because x is either at T[h1(x)] or at T[h2(x)] ),  query/delete takes worst-case two probes.
Other hashing strategies can’t guarantee this!

2013年4月17日 星期三

時間複雜度

  從比較執行時間的層面來看,或許你會想到:直接利用計時器來比較不同演算法實現程式的執行時間。但是,這種方式的變因太多。實作演算法的程式語言、記憶體大小、不同的編譯(直譯)器、甚至是電腦中運行的程式,可能都會影響計時所得的結果。相對的,這種方式也就顯得不太準確。

  除了實際去計時之外,我們也可以假設演算法中「每一步」的執行時間都相同。於是,我們也可以直接拿演算法所有「步驟」的執行次數總和來進行比較。


時間複雜度(Time Complexity)的定義
  演算法時間複雜度(Time Complexity)O(f(n))是指 在最差情況(worst case)下执行演算法所須要的「步驟」數 的概量

 T(n): 某演算法的執行時間 or 實際指令執行次數。通常和f(n)量級(order)相同。T(n)=O(f(n))。T(n) ∈ Ο(f(n)),就代表函數 T(n) 的成長趨勢與 f(n) 相似或是更慢的。
 f(n): 又可以稱為執行時間的成長率(rate of growth) ,T(n)的辅助函数。
 O(f(n)): 某演算法的時間複雜度, 可以看成是某一演算法在電腦中所需執行時間始終不會超過某一常數倍的f(n)(i.e. cf(n))。
 n: 輸入量, or 程式的规模。
又在此我們可以定義對輸入量n而言,程式的最大執行時間就是時間複雜度(Time complexity)的衡量標準。通常在漸近表示法(Asymptotic Notation)中,我們一般以Big-O來表示。

e.g. 
-T(n)=n^2+3n+4 和 T(n)=4n^2+2n+1 时间频度不同,但时间复杂度相同,都为O(n^2),f(n)=n^2

2013年4月10日 星期三

糾正對「用正確的工具幹活兒」這句話的誤解——編程語言不是工具

讓我以一個免責聲明來開始這篇文章:我絕對的認可懂得多種編程語言的價值,也認為「用正確的工具幹活兒」是個好思想。但在編程工作中,人們對這個概念有個誤解,我認為需要在這裡指出一下。但請記住,對這個誤解的詮釋並不是來否定「用正確的工具幹活兒」這個思想的。

多語言電影

讓我從一個古怪的類比開始:假設這有一個電影,是關於一個政治陰謀,涉及到一系列複雜的國際冒險,衝突波及到7、8個國家。每個演員都說著他們本地的語言,沒有字幕。誰能看懂這個陰謀的情節?恐怕只有少數幾個懂得多語言的製片人能欣賞的了這個電影。我們大部分人都不會去看它。

2013年4月6日 星期六

Java亂數抽籤程式


在很多場合都會用到抽籤功能,傳統的有用竹筷子上面寫數字放入籤筒裡來取得,還有用紙張寫數字折起來來取出需求數字,不過這些方法都可能會有人為的干擾,最好的方式還是交由程式來取得亂數,當做抽籤結果,以求公平。
這個範例是利用Java亂數來製作的一個抽籤程式,可以選擇是否取數時可允許重覆的數值取得。畫面如下:
RndApp1.jpg
程式碼如下:

2013年3月30日 星期六

[大話設計模式] 單一職責原則 SRP

http://www.wretch.cc/blog/Azole/30952400
單一職責原則 SRP:就一個類別而言,應該只有一個引起它變化的原因

解釋:如果一個類別承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或是抑制這個類別完成其他職責的能力。
這種耦合會導致脆弱的設計,當變化發生時,設計會遭受意想不到的破壞。

ps. 超級推薦這本書的啦,怎麼有人可以用那麼淺顯的話把那些那麼抽象的東西表達的這麼清楚!!
  我跟別人解釋事情的功力有這作者的1/10就好了 ><

2013年3月19日 星期二

如何學會600多種編程語言

文中提到既原則,請睇 
http://ecx.images-amazon.com/images/I/519J3P8ANML.jpg 

http://www.hksilicon.com/kb/articles/124300/600 


幾周前,做為8th Light公司的實習生,我從CEO那裡拿到了我的工作成績報告。在與CEO的會見期間,我發現了一個對如何做一個程序員的認識上的盲區。起初我以為,想擴展自己的軟件職業道路,那就要學很多各種的語言。我現在就要告訴你,事情不是這樣的。

我們一共有多少種編程語言?你只需看一下維基百科上的清單,600多種!說實話,就我個人的情況,我不相信我能學會數百種語言。因為有太多的文檔需要看,它們之間有太多的差異需要注意。它們很多都是相似的,例如那些面向對象的語言:C++,Java,Ruby,Python等。然而,我們卻有一種更高效的方法學習它們,那就是對它們歸納分類。

在美國德銳大學,每個畢業生要接受的一門必修課程教育就是如何有效的學習。我很幸運遇到一位非常好的教授,Sugarman先生,我才有機會學到學習方法。儘管這個方法非常的基礎,但它幾乎能應用到任何事情上——不論它們的數量看起來是多麼不可思議。

2013年3月18日 星期一

hashtable


1. How to put object into Hashtable?
2. How to retrieve object from Hashtable in Java?
3. How to reuse Hashtable by using clear()?
4. How to check if Hastable contains a particular value?
5. How to check if Hashtable contains a particular key?
6. How to traverse Hashtable in Java?
7. How to check if Hashtable is empty in Java?
8. How to Copy content of Hashtable into HashMap?
9. How to find size of Hashtable in Java?
10. How to get all values form hashtable in Java?
11. How to get all keys from hashtable in Java?
=====================================================================
哈希表的原始定義和基本原理各種數據結構教程上都有闡述.簡而言之,
哈希表之所以能夠實現根據關鍵字(典型的例子是一個字符串鍵值)來獲取記錄,是因為她在內部建立了記錄存儲位置-即內部數組中的索引號和關鍵字的一套對應關係f,
因而在查找時,只需根據這個映射關係f 找到給定鍵值K 對應的數f( K),就可直接從數組中取得目的數據Hashtable[K] = Hashtable.InternalArray[f(K)],而不必對數組進行遍歷和比較.這個對應關係f我們稱為哈希函數.


哈希函數f的兩個重要特點:
[1]哈希函數可以自定義,只要使得整數f(K)的範圍不超出哈希表內部存儲數組的上下界即可.
[2] K的取法有任意種,但f(K)只能固定在一個範圍,因此不同的關鍵字可能對應了相同的哈希值,形成了衝突.

需要注意的是哈希函數的運算和衝突的處理都需要係統開銷,尤其後者代價不菲.因此產生了兩個關鍵問題:如何設計函數f的算法,以及如何處理衝突,才能使得哈希表更加高效.

2013年3月17日 星期日

在編程練習中學會設計和使用測試程序


這是我和我的學生們C++程序設計課程中的一個練習。程序編寫得越來越大了,測試顯得越來越重要,如果還是照著以前一直對照練習要求寫程序,而不是按照工程要求去寫,永遠無法和實際工作去接軌。本文給出一個示例,展示在程序設計過程中,怎樣做到一邊寫程序,一邊開展測試的過程,這樣得到的程序中的各個“部件”可靠性得以保證。

練習要求

【項目5-玩日期】
定義一個表示時間(包括年、月、日、時、分、秒)的結構體,然後完成下面的功能(可以在一個main函數中完成,也可以用函數求解,main函數調用即可):
(1)輸入一個時間(注意各部分數據的取值範圍)將輸入的時間保存在一個結構體變量中;
(2)輸出該日在本年中是第幾天(注意閏年問題);
(3)輸出這是這一天中的第幾秒;
(4)輸出這是這一年中的第幾秒;
(5)求你輸入的時間d天后是哪年哪月哪日,將結果保存在一個結構體變量中輸出;(你的萬天日期靠這個功能了)——插講一個故事。當年老賀由小孩兒過百日,想到自己的萬日在哪天。編程計算,結果剛過了十幾天,那個懊惱啊。第二個萬日得再等26年多,第三個萬日,誰敢說一定能過上?20歲左右的你,要算清楚了。在第(1)問中輸入你的生日及時辰,d值取為10000,可以算出你的萬日,大概在26歲多。
(6)求你輸入的時間s秒後是何日何時,將結果保存在一個結構體變量中輸出;

詳看原文:
http://blog.csdn.net/sxhelijian/article/details/8655466

搜索引擎应用技术(中級篇)


3 理解检索需求

如今,搜索引擎远远不是仅仅指类似于百度(和google)这类web 搜索引擎,它涵盖了大量行业,满足各种各样的需求。

笔者从小就坚信分析一个问题应该从来源开始,所以,分析搜索引擎,我们应该从现在人们对搜索引擎的需求开始下图是信息检索的基本过程:



用户发出查询请求,然后搜索引擎从信息集合里面找出相关的信息集合返回给用户。
注意,这里所谓的相关有2 种含义:1)用户想看到的;2)系统想让用户看到的。

搜索引擎应用技术(初級篇)

1 信息检索及搜索引擎简介

信息检索(data searching)能做什么?
其实只有一件事:从一堆信息里面找出大概是你想要的一些。在之前的40 年里,这个工作一直都由数据库完成。回想一下,商业公司用数据库查询最近半月的营业额和查询购买超过10 万的大客户。所以:现代信息检索来源于数据库技术

现代信息检索技术 和 传统数据库技术 相比有什么不同?

其實数据库难以处理维度很高的数据。我们知道,任何一个数据都可以映射到多维空间。
比如数据库里面的记录,其实就是映射到了一个多维空间,其中,每个列是一个维度。一些数据库能够定义最多1024 个维度(列),而这个值在许多应用里都很不够。数据库还难以处理空间范围查询,更不用说对数据进行挖掘了。搜索引擎是一种信息检索系统,它通过计算机来完成信息检索的过程。本文将主要讨论搜索引擎应用技术。

有关信息检索和搜索引擎的历史和一些基本介绍,大家同样可以看answers上面的介绍,地址为:http://www.answers.com/search+engine?ca t=technologyhttp://www.answers.com/topic/web-search-enginecat=technology。这里提醒大家:
搜索引擎有很多很多种,常用的百度和google 只是其中的一种(网络搜索引擎)。常见的还有:企业搜索引擎、个人桌面搜索和最近很火爆的移动平台搜索引擎。其中,只有基于网络的搜索引擎才需要蜘蛛技术。蜘蛛技术不在本文的讨论范围内。

2013年3月15日 星期五

世界第一簡單閱讀程式碼(CODE)方法.

每個人閱讀程式碼的動機不盡相同,需要了解的程度也就有深淺的分別。
你為了什麼動機而閱讀呢?
================================================
文章重點:
要了解一個系統,最好是採取由上而下(Top-Down)、抽絲剝繭的方式。
透過記錄層層展開的樹狀結構,程式人可以逐步地建立起對系統的架構觀(由最外層的結構,一層一層逐漸探索越來越多的細節)

目標同樣要放在界定其中的角色、以及角色間的靜態、動態關係,以便透過重點式的程式碼「摘讀」,達到了解系統全貌

1. 先從系統如何初始化、系統如何反應各種事件與這個系統相接的其他系統、系統如何處理各種異常及錯誤這四項入手去去試著簡單探索一下系統的長相了解在這系統架構下,這四項是如何被完成的。(不過在探索這四項之前,還必須先找到程式的入口處。)
此時緊記不要急著去研究細節!!

2. 要先知道系統可能會發生那些故事,才開始閱讀細節性質的程式碼。
所以你可以利用簡單的列表,你所找到的情境直接將列出來(or描述出來)。在探索情境時,我喜歡將系統的運作情境,比擬成系統會上演的故事情節。角色就是演員,而你所列寫的正正就是劇本

3. 當你能夠列出系統可能會有的情境,表示你對系統所具備的功能,以及在各種情況下的反應,都具備概括性的認識。亦即順理成章使你同時掌握了系統中的角色、以及角色間的靜態、動態關係。此時便可算是正式有了對系統全貌的最概觀認識

4. 以此為基礎,便可在任何需要的時候,鑽進細節處深入了解。


緊記,適度地忽略不需要了解的細節,是一個很重要的態度。因為你不會一次就需要所有的細節,要知道閱讀都是有目的的。每次的閱讀也許都在探索程式中不同的區域;而每次探索時,你都可以增補樹狀結構中的某個子結構。漸漸地,你就會對這個程式更加的了解,逐步建立起對系統的架構觀。


另外,當你在閱讀一段程式碼時,或許可以試著轉換自己的立場,
從旁觀者的角度轉換成為寫作者的心態,揣摩原作者的心理及處境
當你試著設身處地站在他的立場,透過他的思考方式來閱讀、追蹤他所寫下的程式碼,將會感覺更加流暢。


我在閱讀程式碼時,會觀察原作者寫作的習慣,藉此對應到腦中所記憶的多種寫作模型
在閱讀的過程中,讀完幾行程式碼,我會試著猜想原作者在寫下這段程式碼時的心境
- 他寫下這段程式碼的用意是什麼?
- 為什麼他會採取這樣的寫法?
順著原作者的思考理路閱讀,自己的思考才能更貼近對方寫作當時的想法

=================================================================
我們在寫程式時, 有不少時間都是在看別人的 Code.
例如看 Team 的 Code, 看小組整合的 Code, 若一開始沒規劃怎麼看,
就會”嚕看嚕苦 (台語)”

不管是參考也好, 從 Open Source 抓下來研究也好, 為了瞭解箇中含意, 在有限的時間下, 不免會對龐大的 Source Code 解讀感到壓力.
網路上有一篇關於分析看 Code 的方法, 做為程式設計師的您, 不妨參考看看,
換個角度來分析. 也能更有效率的解讀你想要的程式碼片段.



六個章節:
     (1) 讀懂程式碼, 使心法皆為我所用.
     (2) 摸清架構, 便可輕鬆掌握全貌.
     (3) 優質工具在手, 讀懂程式非難事.
     (4) 望文生義, 進而推敲組件的作用.
     (5) 找到程式入口, 再由上而下抽絲剝繭.
     (6) 閱讀的樂趣, 透過程式碼認識作者. 

2013年3月9日 星期六

怎麼學好物件導向的觀念(OO)?

其實,無論這概念本身就是所有工程的基本,作為一個engineer必須要知道的概念。

=======================================================================
如果沒有弄清楚物件導向的基本觀念,就去接觸 Design Pattern或更高深的物件導向技術,我想您會學得很痛苦!!

建議先從程式基本入門開始,找介紹物件導向觀念的書籍搭配Java or C++語言的實作,會比較讓您容易上手。
邊做邊學,嘗試用它來解決實際問題。

從建築的觀念來看,
  • 物件導向中的 Class,就好比建築藍圖一般
  • 物件(Object)就是依據藍圖所構建出來的實體(Instance)
藉由這些實體間的搭配與介面(Interface)而逐步的將建築物構築出來
一磚一瓦都是基本功

要將建築物蓋得好蓋得穩,你必須要懂得:
  • 工程結構(物件導向系統分析OOSA)
  • 如何鑄模(物件導向系統設計OOSD)
  • 怎樣的 搭配會比較省時省本有效率(Design Pattern)
  • 是不是有好的方法來幫助您做這些事情(UML)

如果您是總體架構師,
有什麼樣的工具能幫您管理好這些事情,包括建築的規劃、測試、驗 收、結案(e.g. Rational Rose等)
不從最基本的開始,怎能知道什麼樣的材質才是最堅固耐用,模具如何重複的使用(Reuse)呢?


p.s. 物件導向的觀念,是很貼近生活中的一些事情,就看您自己如何領會

幾本會有幫助的書:
1. 物件導向設計模式(Design Patterns)
2. 重構-改善既有程式的設計(Refactoring)
3. 重構-向範式前進(Refactoring to Patterns)


"寫給 SA 的 UML/MDA 實務手冊"是實用的指南,也是好書,
但是不能代替你學習物件導向觀念。所以別跳過這一關,動手寫程式先。

2013年3月8日 星期五

編程之美——微軟技術面試心得


由微軟亞洲研究院的編程之美小組合作撰寫,書中除了提供微軟面試程式設計師時常用的題目,
更提供精闢的解法與最重要的分析與說明。

在淺略的閱讀中,我了解到一般程式設計的工作大致可分為:研究、開發、測試、以及專案管理等不同性質的工作,而面試者真正在乎的不只是應聘者能否順利解答題目,而是透過面試的過程了解應聘者的Problem Solving、Coding Skills以及Algorithm Analysis Skills,再判斷他們適不適合這份職務。


寫程式說簡單很簡單,懂得程式語言的語法,基本的邏輯概念。
透過開發工具一下子就可以完成很多的程式碼。
但是程式要寫的精簡、好看,除了基本功扎實,更重要的是對問題思考與分析的能力。
礙於自己目前的狀況,我並沒有將書中所提供的題目一一讀過,但看完各篇序章、面試雜談以及創作後記之後,我就知道這絕對是將來還會拿來細讀的一本書。

程式之美─微軟技術面試心得 
作者: 編程之美小組 
出版社: 悅知文化 
目錄: 
推薦序 
序 
面試雜談 
遊戲之樂─遊戲中碰到的題目 
數字之魅─數字中的技巧 
結構之法─字串及Linked List的探索 
數學之趣─數學遊戲的樂趣 
創作後記 

蛓點:
http://www.sendspace.com/file/g0f36e


不過無論如何, 這是一本computer algorithm技術味道濃厚的書, 
也就是說底子不佳的人可能看不下去; 即使是這個領域,也不一定要看得懂的; 就算看懂了也不代表能寫出好軟體。

我對此書的評價是內容不錯, 但是可能曲高和寡. 部分對岸的人對演算法似乎有種狂熱, 值得敬佩, 但是這與產品賣不賣相關性是很低的. 實際軟體工程實務上的東西對這個業界比較有幫助, 我也會更有興趣.


============================================================