解決方案
-
設計模式(三)建造者模式Builder(創建型)
1. 概述 在軟件開發的過程中,當遇到一個“復雜的對象”的創建工作,該對象由一定各個部分的子對象用一定的算法構成,由于需求的變化,復雜對象的各個部分經常面臨劇烈的變化,但將它們組合在一起的算法相對穩定。 例子1:買肯德基 &…
-
設計模式(一)工廠模式Factory(創建型)
在面向對象編程中, 最通常的方法是一個new操作符產生一個對象實例,new操作符就是用來構造對象實例的。但是在一些情況下, new操作符直接生成對象會帶來一些問題。舉例來說, 許多類型對象的創造需要一系列的步驟: 你可能需要計算或取得對象的初始設置; 選擇生成哪個子對象實例; 或在生成你需要的對象之前必須先生成一些輔助功能的對象。 在…
-
PHP的類自動加載機制
在PHP開發過程中,如果希望從外部引入一個class,通常會使用include和require方法,去把定義這個class的文件包含進來。這個在小規模開發的時候,沒什么大問題。但在大型的開發項目中,這么做會產生大量的require或者include方法調用,這樣不因降低效率,而且使得代碼難以維護,況且require_once的代價很大。 在PHP5之前,各個…
-
Trie樹:應用于統計和排序
1. 什么是trie樹 1.Trie樹 (特例結構樹) Trie樹,又稱單詞查找樹、字典樹,是一種樹形結構,是一種哈希樹的變種,是一種用于快速檢索的多叉樹結構。典型應用是用于統計和排序大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。它的優點是:最大限度地減少…
-
大數據計算:如何僅用1.5KB內存為十億對象計數
Big Data Counting: How To Count A Billion Distinct Objects Using Only 1.5K This is a guest post by Matt Abrams (@abramsm), from Clearspring, discussing how they are able to accurat…
-
設計模式 ( 十九 ) 模板方法模式Template method(類行為型)
設計模式 ( 十九 ) 模板方法模式Template method(類行為型) 1.概述 在面向對象開發過程中,通常我們會遇到這樣的一個問題:我們知道一個算法所需的關鍵步驟,并確定了這些步驟的執行順序。但是某些步驟的具體實現是未知的,或者說某些步驟的實現與具體的環境相關。例子1:銀行業務辦理流程在銀行辦理業務時,一般都包含幾個基本固定步驟:取號排隊->…
-
設計模式 ( 二十 ) 訪問者模式Visitor(對象行為型)
特此說明:對訪問者模式理解不是特別透徹,若有誤,請指正,謝謝! 1.概述 在軟件開發過程中,對于系統中的某些對象,它們存儲在同一個集合collection中,且具有不同的類型,而且對于該集合中的對象,可以接受一類稱為訪問者的對象來訪問,而且不同的訪問者其訪問方式有所不同。 例子1:顧客在超市中將選擇的商品,如蘋果、圖書等放在購物車中,然后到收銀員處付款。在購…
-
重構與模式:改善代碼三部曲中的第三部
一、改善代碼的三部曲 《設計模式》-> 《重構》-> 《重構與模式》。也就是設計->重構->重構出新設計。 《設計模式》主要詳細說明20幾種模式,為我們帶來了常見設計問題的經典解決方案,從而改變了整個面向對象開發的面貌。為設計而著。 《重構》改善既有代碼的設…
-
回溯法 -數據結構與算法
1.回溯法算法思想: 定義: 回溯法(探索與回溯法)是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 1、回溯法適用:有許多問題,當需要找出它的解集(…
-
數據結構應用詳解-
概述 最小生成樹——無向連通圖的所有生成樹中有一棵邊的權值總和最小的生成樹 拓撲排序 ——由偏序定義得到拓撲有序的操作便是拓撲排序。建立模型是AOV網 關鍵路徑——在AOE-網中有些活動可以并行地進行,所以完成工程的最短時間是從開始點到完成點的最長路徑的長度,路徑長度最長的路徑叫做關鍵路徑(Critical Path)。 最短路徑——最短路徑問題是…
-
Google 開源技術protobuf
1. Protobuf簡介 protobuf是google提供的一個開源序列化框架,類似于XML,JSON這樣的數據表示語言,其最大的特點是基于二進制,因此比傳統的XML表示高效短小得多。雖然是二進制數據格式,但并沒有因此變得復雜,開發人員通過按照一定的語法定義結構化的消息格式,然后送給命令行…