97
京東網上商城
搜狗深度學習技術在廣告推薦領域的應用
內容來源:2017年4月17日,搜狗移動搜索廣告策略研究組負責人舒鵬在七牛雲和QCon聯合主辦的深度學習論壇“深度學習最新進展與實踐”上進行《搜狗深度學習技術在廣告推薦領域的應用》演講分享。
編者按
近來,深度學習成為一個流行詞。深度學習可以更好地通過增加數據集的規模來改善學習結果,與傳統的機器學習工具相比,深度學習挖掘了神經網絡的潛力。基於強大的特征提取,它比其他工具更適合模式識別(圖像、文本、音頻)。深度學習應用的範疇也越來越廣。這次搜狗移動搜索廣告策略研究組負責人舒鵬用自身的經驗分享搜狗深度學習技術在廣告推薦領域的應用,以下為此次演講內容的整理。
嘉賓演講視頻地址:https://t.cn/RKhDk65
搜索廣告背景知識
圖1
大家對廣告多多少少都有一些了解,現在大家都用搜索引擎,從總體的覆蓋率看,大家應該都會碰到廣告。大家對廣告多少會有些討厭,但中國互聯網領域的很多行業,都靠廣告變現來生存,大家手機上有很多免費APP,但天下沒有免費的午餐,很多APP都靠廣告來盈利,廣告是互聯網商業的基石。現在也有一些新的流量變現方式,如 O2O、電商,還有直播等。在這些商業模式出現之前,廣告為互聯網行業提供了商業基礎。
如圖 1 是搜索廣告的流程圖,對於搜索廣告來說一般有幾個處理步驟:首先是查詢理解,用戶當前的查詢到底想幹什麼、他有什麼目的?我們進行分詞,以及查詢傾向的分析;然後做廣告召回,有很多的客戶會在搜索廣告中買一些他們感興趣的詞,這些詞代表了他們對不同流量的感興趣程度,係統要對這些詞進行競價排序,所以需要先做一個廣告召回,判定在當前語境下麵哪些客戶提供的廣告比較合適。這個量比較大,搜狗的廣告庫在幾十億的量級,所以會做一定篩選,剩下幾千幾百個廣告,然後進行詳細評估;同時我們還會做點擊率預估,即假定這個廣告能夠在用戶麵前展示,實際的點擊比例會怎麼樣,點擊率能夠反映出很多因素,包括廣告的質量,以及廣告的價值等。此外,有的時候我們也需要花錢購買流量,如何更有效的利用這些流量,通常都要靠這些來保證;而後會有排序計價,挑選排名靠前的廣告來進行結果展示;然後會有後續的日誌收集功能,接下來會拿這個日誌做各種各樣的處理,包括 CTR預估模型的線下實驗以及各種各樣的事情,如此就完成了整個閉環,這是廣告係統的介紹。
深度學習在搜狗搜索廣告的一些應用
圖2
下邊介紹一下搜狗深度學習在搜索廣告領域裏麵有哪些應用。
第一塊是文本相關性計算,簡單來講就是一個廣告的標題、描述等整個信息跟當前的查詢詞是否相關,健康性有沒有問題,是否會影響用戶體驗?有時候一些客戶買詞不規矩,可能會買一些當下流行的熱點詞,但最後填寫的標題、描述等創意信息跟這個熱點詞並沒有關係,如果展示出來就會引起大家的反感,因此我們需要圍繞相關性做一些工作,來避免這種情況。
如圖2是去年做的一項工作,後來也是投了一篇論文發表在CIKM2016上麵去,這個論文是關於 Question Answering的,解決如何選出和 Question 最合適答案的問題,采用了典型的深度學習網絡結構。這篇論文的主要創新點在於無需分詞,做一些傳統的文本相關性計算時,一般會先做分詞,比如你會把論文進行分詞,把廣告標題進行分詞等,分詞之後再做處理。這個分詞算法設計也有很多講究,你需要不斷的更新語料庫,以及其它相關性工作,當時就想能不能不做分詞,把這個繞開直接搞定。就做了個實驗,簡單來講就是把英文的 26 個小寫字母,以及 26 個大寫字母,還有 0-9這些數字,以及標點符號等,每個字符都看成是一個標記,每個標記對應一個向量,這個向量可以通過向量表查詢得到,並在訓練中逐步更新,這樣每個句子就可以轉化為一個矩陣,矩陣得到之後可通過卷積和pooling等方法最終轉化成向量,這個向量通過全連接層形成一個輸出值,而後和樣本標注結果( 1 還是 0)進行比對和誤差回傳,從而形成一個網絡。有了這個網絡之後,就可以拿一些語料進行訓練,結束之後就會得到最終每個字符的vector,用以後續的處理。這樣做不需要分詞,可避免外部係統的幹擾。最近我們依賴的一個分詞庫需要進行升級,很多事情都要重新做一遍,特別麻煩。如果這個架構全麵應用的話,將會避免這些問題。
圖3
如圖 3 是廣告物料推薦,假設有一張圖片想知道含義,想知道跟這個圖片相關的文本有哪些。圖片采用 CNN 來處理,文本采用 LSTM 進行處理,最後把兩者通過cosine的方式結合在一起訓練以達到最終目的。
圖4
深度學習的應用很廣泛,具體到廣告領域:如圖像理解,像剛才介紹的圖像物料推薦,這個是用 CNN 技術來做;還有文本相關性,通常可以來做廣告召回,以及創意生成等事情,相關技術比如 LSTM,以及剛才提到的 CSR;還有CTR預估,深度學習可用來做廣告排序和相關的特征挖掘,相關技術如CNN、MxNet和TensorFlow等。圖 4 舉的例子是一個典型應用,具體到這個廣告而言,蛋糕的小圖片是通過剛才的技術做上去的,有很多客戶是屬於中小客戶,自己不具備強大的運營能力,他可能想為廣告配一些圖,但沒有精力做這件事情,我們就會幫他自動匹配一些圖片,這會影響後續的很多東西,包括訂單轉化等事情。廣告下方的三行子標題也是自動生成,係統會判斷一下當前有哪些東西用戶比較感興趣,而且和客戶有關,就會放在這裏,這部分涉及到文本相關性計算。這是主要介紹的三點深度學習在廣告中的應用。
基於多模型融合的CTR預估
CTR預估流程
圖5
下邊我們重點介紹一下 CTR 預估模塊。通常單個模型的能力有限,每個模型都有自己的特點,比如 LR 模型比較穩定,DNN 模型擅長做特征交叉。每個模型都有自己的特點,需要根據模型的特點去最大化利用它。我就這個領域詳細介紹一下。
首先介紹一下CTR預估的流程:首先搜集原始數據,包括查詢請求和點擊信息,這兩項每天都會實時產生並且量級很大;有這些之後就可以做特征的抽取,比如查詢相關特征,用戶查詢詞是什麼?他所處哪個地域?今天是星期幾?還有廣告特征,廣告本身的標題是什麼?描述是什麼?客戶購買的關鍵詞是什麼,以及這個廣告和查詢詞之間的匹配相關性。有了特征之後會進行線下模型訓練。圖 5 中有兩類模型,一個是線性模型,一個是非線性模型,線性模型主要指LR ,非線性模型主要是指 GBDT、DNN等。模型訓練完畢之後會加載到線上,同時線上 Server 會把整個特征抽取流程在線完成,而後會進行模型計算,然後形成 CTR 預估的完整結果。最後 Online 本身會產生實時日誌,形成完整的流程。
CTR預估涉及技術
圖6
大家知道,跟CTR預估有關的主要有三個因素,一個是數據、一個是特征、一個是模型。平台是承載這三點的基礎。具體到平台而言,我們通常會用多天的數據進行訓練,這種情況下單機是跑不完的,因此需要一個並行計算平台來同時處理大數據量。如圖 6 左邊列出來的幾個平台都是較為常用的平台:第一個是 MPI,如果做科學計算的話就會比較熟悉,這是比較早期的,這個平台會偏底層一些,需要修改不少代碼才能實現工作,現在大家不大會用,因為做起來比較繁瑣;第二種是XgBoost,主要是做 GBDT 相關的東西;然後是 MxNet,在深度學習中的應用比較多,像亞馬遜就在利用這個平台做些事情;最後是 TensorFlow,穀歌最近一兩年做出來的,主要是提供跨平台的深度學習計算工具。
在模型方麵:首先有線性模型,LR 模型又有一些細分算法,實時(FTRL)和特征自動組合(FM);非線性的模型是有GBDT,是決策樹的變體,可以看作多個決策樹的組合;然後是深度學習模型, 如DNN;
以及模型融合,剛才講到怎麼樣能把不同模型的優點都集中在一起,具體的做法有多種:第一種是 Bagging,比較實用簡單,就是有多個模型,每個模型都有個結果,怎麼樣把多個結果放在一起呢?直接加權平均一下就可以了,這個方法很簡單;其次是級聯模型,級聯模型相對複雜一些,這個做法不是把最終的評估結果放在一起,而是說每一個模型中間產生的數據也可以送到另外一個模型中去,這樣做起來就比較麻煩,但操作空間比較大,而且可以有多種組合方法;最後一個是 Wide&Deep,這是穀歌去年提出的思路,它跟前麵兩種都不一樣,前麵兩種每個模型訓練都是獨立的,即使有先後順序,但是 Wide&Deep 是針對兩個模型同時交互訓練,我們認為它相比其他兩個效果會更好一些。
數據模塊:首先要有一個日誌收集模塊,會收集到最原始的數據,需要進行去噪,是因為原始數據也會有一些噪聲點,比如同一個用戶同一個查詢詞連續搜索兩次,第一次沒點廣告,但第二次點了,第一次沒點到底是因為廣告出的不好,還是因為用戶當時不在狀態,根本沒有看到廣告呢。
其次是特征,在搜索廣告領域裏麵特征是非常重要的。有一個專有名詞叫特征工程,主要包括特征的設計、選擇、組合:所謂設計,就是概率論,你認為哪些因素對用戶選擇廣告有影響,這時你就要把它找到並設計一些新特征出來;單單有這個還不夠,我們需要判斷這種新特征是否有效,這就涉及到特征選擇,特征選擇需要進行仔細的分析,看看能不能用;最後是特征組合,也就是交叉特征,有的時候單個因素出現並不能說明問題,而兩個因素一塊出現時,可能就代表了特殊的含義。
特征設計
圖7
關於特征設計大體上可以分為兩類:一類是離散特征,所謂離散特征是指,比如一天 24 個小時,下午16 點整,我認為 16 點整在一天 24 小時當中會占據一個位置,把時間刻畫為長度為24的向量,其中 16 點就會占據這個向量中的一個位置。這種設計方法有幾個特點:首先比較容易設計,不管什麼樣的特征,隻要它有一個取值就可以映射到係統裏,實現特征的產生;還有一個特點,就是特征空間非常大,百億或者上千億的量級,但對於任何一個樣本最後隻有幾百個特征是有效的,其他的特征都沒有取值,它的稀疏性非常明顯,特征空間非常大,這樣會導致模型複雜度比較受限製。如果模型過於複雜,比如你把每一個離散特征都連接到DNN輸入層的話,參數就會非常多,訓練時間會非常長,結果也不一定好。這是離散特征。
其次是連續特征,跟離散特征反著過來的。像上邊那個時間的例子,如果說 24 個小時刻畫成離散特征是 24 個點的話,連續特征就是一個值,16 點就是 16,13 點就是 13,它隻會占據一個位置,但是那個位置的取值範圍可以有 24 種,而不僅僅是0和1,跟離散特征正好反過來。像這種特征一般來說需要做一個比較仔細的設計才行,大家都知道連續特征每一個特征隻會占一個位置,不像離散特征那樣隨意占據大量的空間。它的特點是定長,每個特征取值隻能有一個,像離散特征中有個特征叫當前查詢詞分詞之後的term分布,如果這個查詢詞比較長,它的term分布就長一些,占據的位置就多一些;如果隻是一個短的查詢,占據的位置就比較少,是變長的,這點和連續特征區別很大。此外,基本上每個連續特征都有值。有上麵這幾個特點,就會導致連續特征量相對小一些,差不多幾百維的向量就搞定了,它可以用比較複雜的模型進行訓練,像DNN 這種大概隻有幾百個輸入節點,相比圖像處理還是比較小兒科的。
模型類別
關於模型,剛才提到分為線性和非線性,線性模型中最典型的就是 LR,邏輯斯特回歸,這個模型比較簡單,它的公式大概是一個權重分量×特征分量+偏置,而後再做一個變換得到最終結果,它比較簡單,比較適合處理離散特征,而且穩定性比較好。但它有一個缺點,LR 本身沒法做特征交叉,隻能通過線下分析,嚐試兩種特征的交叉是否可以改善線下指標,這樣才能得到比較好的結果。這件事情很多公司都有自動化的學習平台,會自動進行特征的交叉並評估哪個特征比較好,盡管如此,這些工作還是比較耗時間的。
非線性模型有特別明顯的優點,能夠自動學習特征之間的交叉關係,如哪兩個特征交叉在一起比較好,模型會幫你實現。比如說 DNN 輸入 100 維特征,隱藏層中每層都有交叉關聯。如果兩個特征之間有很強的依賴關係,且對結果有影響的話,在權重分量上會有相應的側重,最後會達到特征自動交叉的目的,這就是為什麼 DNN 出來之後用戶非常廣泛的原因。像剛才 LR 這種特征組合,非常耗費人力和精力,可能一個公司一個特征組有幾個人或十幾個人,都在做這件事情,大家都在研究哪些特征會好,或者交叉在一起會好。但如果用非線性模型的話就會相對規避這一點,從這一點來看它比較適合做新領域的探索,可能效果會好一些。
但因為有上麵優點的存在,它就會有一些缺點,模型比較複雜,計算比較耗時。這點對於在線計算任務就比較關鍵一些,像做廣告CTR預估,每天有幾億次查詢,每次查詢有成百上千條廣告需要處理,查詢配對在千億量級,對計算資源的要求非常高。如果模型太複雜的話,就需要把計算資源擴充一些,買機器這些都要考慮,最後收益怎麼樣,到底值不值得,這是比較有風險的一點。
模型融合
圖9
上邊提到,因為每個模型都有優點,比如說 LR 模型最突出的優點是簡單、可靠、文本類特征處理比較好,但又不具備交叉能力;而DNN有這種能力,但沒有前邊說的優點,怎麼把它們融合在一起呢?因此會用到模型融合:
CTR bagging 將多個模型的輸出 CTR 加權平均,實現方法簡單,模型之間不會產生耦合,但是可調參數有限,改進空間相對較小。
再有模型融合,每個模型中間的結果或者是輸出結果可以作為另外一個模型的輸入,這個模型會學習上一個模型哪個地方處理的好或者不好,自動做出調整。實現的方法比較複雜,因為模型之間有依賴關係。但優點是實現方案較多,改進空間大一些。
圖10
由於第一種方式 (CTR bagging) 的空間有限,我們就選擇第二種。並針對性的做了一些設計,這些跟工程設計的關係大一些。如何做這件事情?要定一個目標,要做成什麼樣子來達成這個目的?首先希望這個東西能支持多個模型的加載的和計算;第二點,可支持模型之間的交叉和 CTR 的 Bagging;第三點,可通過配置項隨時調整模型融合方案;第四點,避免不必要的重複操作,以降低時間複雜度。根據這 4 個要求我們做了個解決方案,核心理念是引入了ModelFeature 的概念,即把模型本身看做一個特征,模型通過計算得到新的特征,對於模型輸出可作為 CTR,也可以作為特征為其它模型使用。限定 ModelFeature 的計算順序,即可實現 Bagging 和模型交叉等功能。
但是必須要注意數據一致性,線上依賴的數據源是否跟線下完全一致,如果數據不一致,所有的結論和實驗都是空中樓閣沒有根基。我們之前碰到過一個問題,做了一個特征線下效果很好,但線上效果不怎麼樣,可能就會有數據不一致的問題。拿剛才時間的例子,如果線下計算離散值時,比如說是 0 點占到第一個位置,1 點占到第二個位置,24 點占到第 24 個位置,但是線上有一個錯誤,0 點占到第 24 個位置,24 點占到第一個位置,就給它反過來,雖然線下做的很好,但是線上的使用效果會很差。
第二點,流程的穩定性,如果設計一個很複雜的流程,包括融合模型操作的話,流程之間就會有很強的依賴性,任何一個前麵的流程失敗,後麵的流程就跑不下去,所以你的流程必須要穩定,要有機製保證。
圖11
如圖 11 是一個流程圖,線下流程會把這些數據重組抽取特征進行訓練。在線下會訓練一個 LR 模型,這個結果反饋到 DNN 模型裏再進行訓練。到了線上之後,針對每個查詢請求都會抽取這些特征,得到特征值後進行 LR 模型計算,LR 模型產生的最終結果放在特征池裏麵,後續的 DNN 模型也會依賴這個東西計算。通過這套架構設計,基本上保證了剛才提到的要點。這套框架在線上跑了快一年時間,比較穩定。
模型效果評估
圖12
線下做實驗,以及線上上線,必須要評價一下這套流程是好還是壞。所以有一套模型效果的評估方法,用來判定新特征到底是好還是壞?
一、如圖 12的 AUC,這是搜索廣告領域以及現在的信息流推薦中常用的指標,隻要涉及到排序結果通常都會用到 AUC,這個指標表征排序能力,用於分析模型是不是把一些好的排在前麵差的排在後麵,它不一定能反映出數據的絕對值。AUC 還是比較穩定的,據有些人講,隻要這個指標在線下提升到一定幅度,線上一定會有效果。如果線上沒有效果的話,通常來講肯定是某一塊出了問題,包括剛才講的線上線不一致等。
二、最直接的評估方法,上線收益。如果線下發現 AUC 是有提升的,要到線上去看最終收益有沒有漲,看到底多賺多少錢?這兩個指標有一定的關聯性,AUC 比較高的話收益一定會漲,也有一些例外的情況。為什麼線下效果很好,到了線上之後沒有變化?通常從兩個角度來看:特征的覆蓋率,你這個特征如果非常好,但覆蓋的東西很有限,線上 100 個指征隻覆蓋了 2 個,即使這兩個獲得很大的提升,最終的收益也比較有限;Survival Bias,線下訓練時用到的數據都是自動篩選過的結果,一般凡是能展現的廣告通常都是之前係統認為比較好的廣告,在這個數據集上表現比較好,不代表你在真正放到線上之後表現好。因為真正上線之後你會對所有的廣告進行掃描計算,這時把壞廣告幹掉的能力就會顯得比較關鍵。這兩點可能會導致線上和線下不一致,其實做別的事情也會有同樣的問題,一個是理論一個是實際,這兩個如果不一致時,應該想一想到底哪一塊出了問題?
並行化訓練
圖13
此外,我們還需要並行化訓練,因為單機不可能處理這麼大的數據量。
數據量小的時候波動很大,做的很多改進沒有效果,一些小修改效果反而好。數據量變大之後,模型收益會更高而且比較可控。
我們選擇的深度學習並行化訓練方案是 MxNet,它支持多機多卡,使用成本比較低。我們每天都需要進行模型更新,對時效性要求很高,如果把 MxNet 直接用過來的話,效果不一定好,訓練時間比較久,需要優化,比如 怎麼樣做調度來提升GPU的加速比等。
現狀和計劃
我們目前已經實現了 LR+DNN 融合模型的上線,收益比好。但是受限於線上計算資源,模型複雜度有限,線下訓練流程有依賴關係,繁瑣易出錯。
我們針對這幾點情況做了個計劃。
一、做一個線上服務拆分,跟深度學習的模塊獨立出來,采用低功耗的 GPU 加速。這個現在做的差不多了,區別還是很明顯的。按目前線上 CPU 版本的服務器,其實它做這種工作時非常吃力,負載量不夠,但上了 GPU 之後,就能處理的很好。
二、支撐更寬、更深、更複雜的網絡結構,GPU 在處理已有線上任務時的負載量在 5% 左右,利用率很低,未來能支撐更寬更深更複雜的網絡結構。
三、采用 Wide & Deep,線下訓練流程解耦,因為之前的在線計算能力有限,如果GPU 運轉良好的話,可以采用 Wide&Deep 替換,使線下訓練流程解耦。
Wide Deep
圖14
這是接下來打算做的事情,大家如果感興趣可以看穀歌 2016 年 6 月份發表的相應論文。大概的思路如圖 14所示, Wide 部分可以理解為 LR,Deep就是 DNN,這兩個模塊會把它的結果同時反饋到最終輸出節點上,來跟最終的結果進行差值比對,它的誤差都會同時回傳,回傳之後進行同步更新。這樣有一個好處,:LR 跟 DNN 模型是同時訓練出來的,線下維護一個流程實現兩個模型的訓練,正確性包括各種錯誤率都能得到很好的保證。
該方法的優點比較明顯,首先它比較穩定,一次訓練出兩個模型,如果兩個模型同時訓練的話,兩個模型會互相影響,兩個模型的權重分配會更好一些。大家現在都在朝這個方向發展,我們剛開始做沒有多久,目前來看有好的效果,相比之前最好的效果再好一些,但因為現在的TensorFlow 平台不支持大規模訓練,接下來還需要在這一塊持續投入改進,如果有更新的結果會跟大家分享下。
Q & A
現場提問:論文中的方法(CSR)在英文語料上的效果怎麼樣?
舒鵬:效果差不多,比如說英文單詞在幾十萬百萬的量級,如果在線應用的話要加載幾十萬個字符和向量的映射關係,如果采用這種方法的話,大概 幾十個字符,加載 幾十 個vector 就實現這個功能。
現場提問:字的編碼怎麼編的?
舒鵬:總共 26 個字母加上大小寫以及標點符號和數字不到 100 種,每個對應一個向量。漢字看哪個庫,如果常用漢字大概幾千個,其實這個矩陣並不大。
現場提問:你剛才說的 MxNet你能介紹一下調度的優化嗎?
舒鵬:我們這邊有一些工程團隊支持,具體他們那邊熟悉一些。總體來講,首先I/O方麵,我們的訓練數量比較大,在幾十億量級,首先多台機器可以並行加載,怎麼樣把I/O和後麵的計算錯開,這是關鍵的。還要看網絡結構怎麼設計,深度學習訓練也是每一個節點做完一輪BP之後會把係數拿在一起做個平均計算,怎麼去設計機製來盡量縮短時間,主要是這些方麵。
現場提問:我想問一下論文中使用的訓練數據規模大概多少?
舒鵬:我們當時做論文時訓練數據規模比較小,是基於公開的庫,大概不超過一百萬,比較小的庫。線上訓練要看應用場景,我們有好幾種數據,有一種是人工標注過的。除此之外,還有自動數據,例如用戶提交query之後,下麵會出十條自然結果,點擊哪條結果能一定程度上表征query的一些屬性。query點擊的數據量很大,在百億量級。但第一種標注數據的話,量級比較小一些,主要取決於你的應用。
現場提問:請問CTR預估模型效果評估中的準確率度如何計算?
舒鵬:剛才沒有列出來,直觀想象下大概有個準確率計算方法。假設每個廣告係統有個預估CTR,假如是 0.10,可以把所有預測CTR是 0.10 的廣告放在一起,這些廣告就會有實際的點擊率,這個實際的點擊率和 0.10 的差距會有個監控,這個就是準確率。
現場提問:你剛剛在演講當中提到有一個 SurvivalBias 問題,想問一下具體怎麼解決這個問題的?
舒鵬:這個主要是說這個模型在碰到之前沒有見到的一些樣本時如何處理。關鍵點在於特征設計,尤其是特征泛化性,所謂泛化性,比如說一個新廣告,雖然廣告是新的,但廣告標題和舊廣告差不多,隻要你的特征能捕捉到這些經常出現的東西,例如查詢詞和廣告標題的匹配度,這種泛化性能保證的話,這個 SurvivalBias 就不會很差。反過來講,如果你的模型中所有特征都跟跟通用性特征沒有關聯,這個模型的 SurvivalBias 就會很差。舉個例子,如果你的模型訓練時依賴的特征是昨天模型的預估點擊率,你的模型就會變得很簡單,而且 AUC不會低,但實際上到了線上之後這個特征會缺失,然後效果就會很差,大概是這個意思。
今天就介紹到這裏,謝謝!
福利贈票!
炎炎夏日,IT大咖說贈福利,送清涼!作為GOPS全球運維大會的官方現場直播合作夥伴,特為小夥伴們爭取了免費票福利(原價¥1600)!
獲取方式:
掃碼加這位小姐姐微信(或加微信號:ITDKS666),她會告訴你咋整!(備注:GOPS)
名額有限,未獲得贈票的小夥伴,可訪問IT大咖說專屬通道(https://t.cn/RKQIv6q)購票,享7折優惠!
最後更新:2017-07-18 23:32:44
上一篇:
[原創]systemtap腳本分析係統中dentry SLAB占用過高問題
下一篇:
Ubuntu 安裝anaconda3
HTTP 1.1與HTTP 1.0的比較
與54位全球領導品牌CEO天貓閉門會,阿裏ceo張勇“五個支柱”透露新零售路徑
Android中定時器Timer和TimerTask的啟動,停止,暫停,繼續等操作實例
《Linux From Scratch》第二部分:準備構建 第五章:構建臨時文件係統- 5.35. 清理無用內容
Excell導SQL Server 某列包含混合數據 導致非數字串為null
仿今日頭條的graidview拖動
重寫hashcode,玩兒壞HashMap
Android 開發圖片壓縮/縮略圖的方法
性能對轉化率影響評估方法
php5.3 PHP5.4 PHP5.5 php5.6 新特性/使用PHP5.5/PHP5.6要注意的