Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。上一周給我的網站加了一個搜尋功能,能自動抓取我的部落格和別人的CSDN部落格。通過RSS抓取。這樣資料格式規範,容易解析。問題是資訊較少。後來發現在HTML原始碼裡面,會有為了方便搜尋引擎索引的meta欄位,能指出作者和詳情。以我的部落格《Golang實現HTTP發送gzip請求》為例。裡面的meta資訊如下:<meta charset="utf-8"><meta
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。HTTP報文的格式問題接著昨天的寫。昨天的文章有個不確定的地方,就是建立TCP串連之後,向伺服器發送的資料,包括命令、頭和主體的格式。這三個部分是如何分割的,我是參考了POSTMAN預覽的格式和telnet發送的格式猜測的,原認為行直接是通過\n進行區分的,而頭和主題是兩個\n進行區分。這樣發送也是能夠正常解析的,今天去讀了一下《HTTP權威指南》和Golangnet/http包,具體瞭解了下到底是如何區分的。《HTTP權威指南》
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。最近買了本書《HTTP權威指南》,看了第一章,看到書上說通過telnet類比HTTP請求,我這個學渣就發現自己沒學過電腦網路。今天翻了一下考研指定教材《電腦網路》,裡面也以訪問清華大學首頁為例詳細講了通訊過程: 瀏覽器分析連結指向頁面的URL。 瀏覽器向DNS請求解析www.tsinghua.edu.cn的IP地址。 網域名稱系統DNS解析出清華大學伺服器的IP地址為166.111.4.100。
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。關於堆排序的演算法,可以參考我去年的文章《堆排序(HEAP SORT)》。那篇文章講的是建立小頂堆進行的排序,這裡說的是建立大頂堆建立的排序,差不多。在Golang源碼的sort包裡,內建了排序函數。該函數可以對各種類型進行排序,只不過該類型需要實現三個函數,使得該類能夠實現Interface介面。type Interface interface {// Len is the number of elements in the
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。大數乘法,簡單的說,就是把小學學的列豎式計算的方法進行了實現。這其實也就是個乘法分配率的變形。5 * 12 = 5 * (2 + 10) = 5 * 2 + 5 *
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Golang的結構體可以增加類似於Java裡面@JsonProperty("id")注釋。在結構體裡面通過反引號包含的字串被稱為Tag。type Cyeam struct {Url string `json:"url"`Other string
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。從大一開始學C++,所接觸過的for迴圈只有一種方式,for (int i = 0; i < count; i++) {...}。後來接觸了Java,知道Java 5 引入了一種新特性,可以通過for (a : aa)遍曆整個數組。雖然知道,但是也沒用過,因為之前那種方法足夠了。現在主力語言是Go。Go也支援傳統的寫法for i := 0; i < count; i++ {...}。同樣,還有一種for i, a :=
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。###C語言中的字串C語言的字串是通過字元數組實現的,每個字串以'\0'結束。C語言字串的三大操作函數也是常見筆試題。int strlen(char *s) {char *p = s;while (*p != '\0')p++return p -s;}void strcpy(char *s, char *t) {int i;i = 0;while ((s[i] = t[i]) != '\0&
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。由於眾所周知的原因,Golang不支援國內使用。當查文檔或者升級版本的時候就會比較苦惱。有的時候實在是沒轍,就用必應的快取頁面看文檔,下載升級包也是各種想轍。每次都很麻煩。為了我自己能方便點用,我把Golang官方文檔的頁面都下載下來放在我的VPS上面。VPS也不是每天都能連得上,趁昨天有機會趕緊放上去,然後用CDN加速。連結: http://cyeam.com/go/pkg/index.html這讓我想起前幾天看到的一條微博。
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。大家都知道,最近我模仿binux大嬸的pyspider的害羞組線上上跑了一段時間了。後來加入了一些新的東西,比如代理池等。看瞅著代碼越來越靠譜了,結果突然有一天,發現抓取停止了,緊接著去看日誌:2015/08/12 23:18:22 Post http://api.duoshuo.com/posts/import.json: dial tcp: lookup api.duoshuo.com: too many open
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。單件模式比較常見,算是建立型的設計模式,和原廠模式不同,他只能建立一個執行個體。他的應用情境很多,比如MySQL只能有一個執行個體這種都算。單件模式能簡單分成支援並發和不支援並發兩種。不過並發這個很簡單,滿大街Golang實現的單件模式都是這樣的。普通的單件模式package singletonimport ("fmt")var _self *Singletontype Singleton struct
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Thrift的序列化是比Json更好用的結構(具體哪裡好了我還沒研究)。但是它有一個非常嚴重的問題:相容性差。常年使用Json的我們已經被慣壞了,潛意識裡就覺得資料預設是能保持相容的。先說一下那個線上問題。我與公司其它部門用Thrift對接,先上了一版,我是調用方。接著,二次升級的時候,合作的部門改了一下Idl,在函數返回結果結構體的最前面,插入了一個結構,是一個結構體,原本第一版第一個位置是整形。然後他們上線了,我還在排隊上線。
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。####介紹當有新人加入Go-Miami組,他們經常希望去學習的並行存取模型。當我剛剛開始聽說Go語言的時候,並發似乎看起來是這門語言的熱門詞彙。當我看了Rob Pike的Go併發模式的視頻之後,我認為我應該去學習這門語言了。為了去理解是如何通過Go語言編寫出更簡單、難出錯的並發程式,我們首先需要去理解什麼是並發程式和並發程式的結果是什麼這兩個問題。我不會去講述CSP(通訊順序進程、Communicating
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。4月9號那天,出了一個線上bug,回家分析了半天,主觀原因就不說了,客觀原因就在於beego提供的編譯打包工具bee不支援設定檔檢查。。。研究了半天,關於設定檔的先行編譯檢查,我也沒啥想法,不過看了看bee的源碼,還是懂了不少,記錄一下。圍繞bee run命令說一下。 用這個命令,要進入當前包,檢查目錄./conf/app.conf檔案,得到appname。 編譯。go install
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。之前在《網址壓縮的調研分析(續)》介紹過Base62演算法,他是一種類似於Base64的雜湊演算法。今天發現了另一種最佳化的Base64演算法,又參考了下Golang的源碼,在encoding/base64/base64.go裡面。const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"傳統的Base64