前言:
最近看了一些關於短址(short url)方面的一些部落格,有些部落格說到一些好的東西,但是,也不是很全,所以,這篇部落格算是對其它部落格的乙個總結吧。
介紹:
短址,顧名思義,就是把長的 url 轉成短的 url, 現在提供這種服務的有很多公司,我們以google家的 url shortener 服務:為例。
首先我們到,然後把本文部落格的位址
teng輸入進去,最後它會返回乙個更短的url,jfs6q。如下圖所示:
url 解析:
當我們在瀏覽器裡輸入jfs6q時,dns首先解析獲得的ip位址。當dns獲得ip位址以後(比如:74.125.225.72),會向這個位址傳送http get請求,查詢jfs6q, 這個時候,伺服器會把請求通過http 301轉到對應的長url
teng。後面的解析過程就和平常**解析是一樣的了。
短址本質:
短址本質上是實現了乙個對映函式 f: x -> y。而這個對映函式必須同時具有兩個特點:
1. 如果 x1 != x2, 則 f (x1) != f(x2);
2. 對於每乙個 y, 能夠找到唯一的乙個 x 使得 f(x) = y;
對於任何的線性函式,比如 f(x) = 2x,都滿足這樣的條件。
好了,如果了解了短址的本質,我們再來看它是如何實現的。
註明:在googleurl shortener 服務中,它允許乙個長 url 對應多個短的url。這可能是出於安全上的考慮。在本文中,我們不考慮這種情況。
實現:
短址的長度一般設為 6 位,而每一位是由 [a - z, a - z, 0 - 9] 總共 62 個字母組成的,所以6位的話,總共會有 62^6 ~= 568億種組合,基本上夠用了。在googleurl shortener 服務中,短址長度為 5,大概有9億多種組合.
1. id,int, 自動增長;
2. lurl,varchar, // 長url;
3. surl, varchar, // 短url。
現在我們考慮通過如何長url得到唯一的短url。
在講具體演算法以前,先提乙個問題:10進製數和16進製制數之間的轉換是否滿足剛剛提到的對映函式f: x -> y中的兩個條件?
答案: 是。
本文的思路也是利用進製之間的轉換。
因為我們總共有 62 個字母,我們可以自創一種進製,叫做 62 進製。其規則如下:
0 → a
1 → b
...25 → z
...52 → 0
61 → 9
所以,對於每乙個長位址,我們可以根據它的id,得到乙個6位的 62 進製數,這個6位的 62 進製數就是我們的短址。具體實現如下:
public arraylistbase62(int id)
return value;
}
舉例:
對於 id = 138,通過 base62(138), 我們得到 value = [14, 2]。根據上面的對應規則表,我們可以得到其對應的短址為:aaaabn 。(由 value 得到具體的短址,可以通過switch 語句得到,因為**太長,在此略過。)
當我們想通過短址找到所對應的長位址,方法也很簡單,就是把62進製數轉成10進製數即可,這樣我們就可以得到長位址的id了。**如下:
public static int base10(arraylistbase62)
int id = 0;
int size = base62.size();
for (int i = 0; i < size; i++)
return id;
}
比如,對於短址aaae9a,其62進製為[0, 0, 0, 4,61,0] ,則其長位址的id 為[0, 0, 0, 4,61,0]= 0×62^5+0×62^4 +0×62^3 +4×62^2 + 61×62^1 + 0×62^0 = 1915810。
有了id,我們自然就可以得到長位址了。
參考:本文演算法**)
teng
短址原理及其實現
url 演算法google 資料庫瀏覽器 伺服器 前言 最近看了一些關於短址 short url 方面的一些部落格,有些部落格說到一些好的東西,但是,也不是很全,所以,這篇部落格算是對其它部落格的乙個總結吧。介紹 短址,顧名思義,就是把長的 url 轉成短的 url,現在提供這種服務的有很多公司,我...
ARP原理及其實現方法
arp原理及其實現方法 在區域網中,是通過arp協議來完成ip位址轉換為第二層實體地址 即mac位址 的。arp協議對網路安全具有極其重要的意義。通過偽造ip位址和mac位址實現arp欺騙,能夠在網路中產生大量的arp通訊量使網路阻塞。arp協議是 address resolution protoc...
跳表的原理及其實現
作用 目的 跳表作為一種資料結構通常用於取代平衡樹。起因平衡樹可以用於表示抽象的資料型別如字典和有序鍊錶,它通過樹旋轉 tree rotation 操作強制使樹結構保持平衡來保證節點搜尋的效率。在資料為隨機插入的情況下,平衡樹效能表現良好 但資料為順序插入或者需要刪除節點的情況下,平衡樹的效能就會有...