亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

短網(wǎng)址的原理與生成方法(Java實現(xiàn))

 更新時間:2020年10月02日 09:27:50   作者:蒙面?zhèn)b  
這篇文章主要給大家介紹了關(guān)于短網(wǎng)址的原理與生成方法,利用的是Java實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

短網(wǎng)址應(yīng)用已經(jīng)在全國各大微博上開始流行了起來。例如QQ微博的url.cn,新郎的sinaurl.cn等。

我們在QQ微博上發(fā)布網(wǎng)址的時候,微博會自動判別網(wǎng)址,并將其轉(zhuǎn)換,例如:http://url.cn/2hytQx

為什么要這樣做的,原因我想有這樣幾點:

  1. 微博限制字數(shù)為140字一條,那么如果我們需要發(fā)一些連接上去,但是這個連接非常的長,以至于將近要占用我們內(nèi)容的一半篇幅,這肯定是不能被允許的,所以短網(wǎng)址應(yīng)運而生了。
  2. 短網(wǎng)址可以在我們項目里可以很好的對開放級URL進行管理。有一部分網(wǎng)址可以會涵蓋色情,暴力,廣告等信息,這樣我們可以通過用戶的舉報,完全管理這個連接將不出現(xiàn)在我們的應(yīng)用中,應(yīng)為同樣的URL通過加密算法之后,得到的地址是一樣的。
  3. 我們可以對一系列的網(wǎng)址進行流量,點擊等統(tǒng)計,挖掘出大多數(shù)用戶的關(guān)注點,這樣有利于我們對項目的后續(xù)工作更好的作出決策。

其實以上三點純屬個人觀點,因為在我接下來的部分項目中會應(yīng)用到,所以就了解了一下,下面先來看看短網(wǎng)址映射算法的理論(網(wǎng)上找到的資料):

  1. 將長網(wǎng)址md5生成32位簽名串,分為4段,每段8個字節(jié);
  2. 對這四段循環(huán)處理,取8個字節(jié),將他看成16進制串與0x3fffffff(30位1)與操作,即超過30位的忽略處理;
  3. 這30位分成6段,每5位的數(shù)字作為字母表的索引取得特定字符,依次進行獲得6位字符串;
  4. 總的md5串可以獲得4個6位串;取里面的任意一個就可作為這個長url的短url地址;

很簡單的理論,我們并不一定說得到的URL是唯一的,但是我們能夠取出4組URL,這樣幾乎不會出現(xiàn)太大的重復(fù)。

下面來看看程序部分:

public static string[] ShortUrl(string url) 
{ 
 //可以自定義生成MD5加密字符傳前的混合KEY 
 string key = "Leejor"; 
 //要使用生成URL的字符 
 string[] chars = new string[]{ 
  "a","b","c","d","e","f","g","h", 
  "i","j","k","l","m","n","o","p", 
  "q","r","s","t","u","v","w","x", 
  "y","z","0","1","2","3","4","5", 
  "6","7","8","9","A","B","C","D", 
  "E","F","G","H","I","J","K","L", 
  "M","N","O","P","Q","R","S","T", 
  "U","V","W","X","Y","Z" 
 }; 
 
 //對傳入網(wǎng)址進行MD5加密 
 string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5"); 
 
 string[] resUrl = new string[4]; 
 
 for (int i = 0; i < 4; i++) 
 { 
  //把加密字符按照8位一組16進制與0x3FFFFFFF進行位與運算 
  int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16); 
  string outChars = string.Empty; 
  for (int j = 0; j < 6; j++) 
  { 
   //把得到的值與0x0000003D進行位與運算,取得字符數(shù)組chars索引 
   int index = 0x0000003D & hexint; 
   //把取得的字符相加 
   outChars += chars[index]; 
   //每次循環(huán)按位右移5位 
   hexint = hexint >> 5; 
  } 
  //把字符串存入對應(yīng)索引的輸出數(shù)組 
  resUrl[i] = outChars; 
 } 
 return resUrl; 
} 

現(xiàn)在可以直接使用該方法,可以等到下面四組值:

ShortUrl(http://www.me3.cn)[0]; //得到值fAVfui 
ShortUrl(http://www.me3.cn)[1]; //得到值3ayQry 
ShortUrl(http://www.me3.cn)[2]; //得到值UZzyUr 
ShortUrl(http://www.me3.cn)[3]; //得到值36rQZn 

在存放這個URL的數(shù)據(jù)方面,我個人推薦TTServer,有的朋友可以沒有聽說過,下面是這個數(shù)據(jù)庫的介紹:

Tokyo Cabinet 是日本人 Mikio Hirabayashi(平林幹雄)のページ 開發(fā)的一款DBM數(shù)據(jù)庫(注:大名鼎鼎的DBM數(shù)據(jù)庫qdbm就是他開發(fā)的),該數(shù)據(jù)庫讀寫非???。insert:0.4sec/1000000 recordes(2500000qps),寫入100萬數(shù)據(jù)只需要0.4秒。search:0.33sec/1000000 recordes (3000000 qps),讀取100萬數(shù)據(jù)只需要0.33秒。

可以看到對于字典類型的數(shù)據(jù)Key/Value的查詢,這個數(shù)據(jù)庫可以說是我目前見過效率非常高的,況且他如此的小巧,用來對short url/long url的配對再好不過。

該系統(tǒng)使用6個短碼字符來表示任何長度的網(wǎng)址。 有效的字符代碼是ASCII 'A'到'Z'和'0'的'5',其中每個字符包含2 ^ 5(32)狀態(tài)。  6短碼字符可用于繪制32 ^ 6(1073741824)的網(wǎng)址

首先,你需要一個數(shù)據(jù)庫表來存儲和檢索你映射的網(wǎng)址。

CREATE TABLE mappedURL (的CREATE TABLE mappedURL( 
shortCode char(6) not null, 
lognURL text not null, 
PRIMARY KEY shortCodeInd (shortCode), 
); 

其次,你需要定義一個算法將長的URL映射到短的URL。 算法上面已經(jīng)介紹過了。

第三,你需要創(chuàng)建一個網(wǎng)頁,從數(shù)據(jù)庫的短網(wǎng)址的映射找到原始的URL,并重定向之。

總結(jié)

到此這篇關(guān)于短網(wǎng)址的原理與生成方法的文章就介紹到這了,更多相關(guān)短網(wǎng)址的原理與生成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)簡單猜數(shù)字游戲

    java實現(xiàn)簡單猜數(shù)字游戲

    這篇文章主要介紹了java實現(xiàn)簡單猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java中char類型轉(zhuǎn)換成int類型的2種方法

    java中char類型轉(zhuǎn)換成int類型的2種方法

    這篇文章主要給大家介紹了關(guān)于java中char類型轉(zhuǎn)換成int類型的2種方法,因為java是一門強類型語言,所以在數(shù)據(jù)運算中會存在類型轉(zhuǎn)換,需要的朋友可以參考下
    2023-07-07
  • Java中HashSet和LinkedHashSet詳解

    Java中HashSet和LinkedHashSet詳解

    這篇文章主要介紹了Java中HashSet和LinkedHashSet詳解,   HashSet是Set接口的子類,其內(nèi)部采用了HashMap作為數(shù)據(jù)存儲,HashSet其實就是在操作HashMap的key,HashSet是無序存儲的,不能保證元素的順序;HashSet并沒有進行同步處理,因此是線程不安全的,需要的朋友可以參考下
    2023-09-09
  • java常用工具類 UUID、Map工具類

    java常用工具類 UUID、Map工具類

    這篇文章主要為大家詳細介紹了Java常用工具類,包括UUID工具類、Map工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • spring?boot?validation參數(shù)校驗與分組嵌套各種類型及使用小結(jié)

    spring?boot?validation參數(shù)校驗與分組嵌套各種類型及使用小結(jié)

    參數(shù)校驗基本上是controller必做的事情,畢竟前端傳過來的一切都不可信,validation可以簡化這一操作,這篇文章主要介紹了spring?boot?validation參數(shù)校驗分組嵌套各種類型及使用小結(jié),需要的朋友可以參考下
    2023-09-09
  • springboot實現(xiàn)配置本地訪問端口及路徑

    springboot實現(xiàn)配置本地訪問端口及路徑

    這篇文章主要介紹了springboot實現(xiàn)配置本地訪問端口及路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 并發(fā)編程之Java內(nèi)存模型順序一致性

    并發(fā)編程之Java內(nèi)存模型順序一致性

    這篇文章主要介紹了并發(fā)編程Java內(nèi)存模型順序一致性,順序一致性內(nèi)存模型是一個理論參考模型,處理器的內(nèi)存模型和編程語言的內(nèi)存模型都會以順序一致性內(nèi)存模型作為參照,下面我們一起進入文章看看學(xué)校內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Java設(shè)計者模式簡單工廠模式解析

    Java設(shè)計者模式簡單工廠模式解析

    這篇文章主要介紹了Java設(shè)計者模式簡單工廠模式解析,介紹了其簡介,實例以及優(yōu)缺點分析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Springboot允許logger.debug輸出日志方式

    Springboot允許logger.debug輸出日志方式

    這篇文章主要介紹了Springboot允許logger.debug輸出日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springMVC中RestTemplate傳值接值方法

    springMVC中RestTemplate傳值接值方法

    今天小編就為大家分享一篇springMVC中RestTemplate傳值接值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論