最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

我們?cè)赒Q微博上發(fā)布網(wǎng)址的時(shí)候,微博會(huì)自動(dòng)判別網(wǎng)址,并將其轉(zhuǎn)換,例如:http://url.cn/2hytQx

為什么要這樣做的,原因我想有這樣幾點(diǎn):

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

其實(shí)以上三點(diǎn)純屬個(gè)人觀點(diǎn),因?yàn)樵谖医酉聛?lái)的部分項(xiàng)目中會(huì)應(yīng)用到,所以就了解了一下,下面先來(lái)看看短網(wǎng)址映射算法的理論(網(wǎng)上找到的資料):

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

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

下面來(lái)看看程序部分:

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" 
 }; 
 
 //對(duì)傳入網(wǎng)址進(jìn)行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進(jìn)制與0x3FFFFFFF進(jìn)行位與運(yùn)算 
  int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16); 
  string outChars = string.Empty; 
  for (int j = 0; j < 6; j++) 
  { 
   //把得到的值與0x0000003D進(jìn)行位與運(yùn)算,取得字符數(shù)組chars索引 
   int index = 0x0000003D & hexint; 
   //把取得的字符相加 
   outChars += chars[index]; 
   //每次循環(huán)按位右移5位 
   hexint = hexint >> 5; 
  } 
  //把字符串存入對(duì)應(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 

在存放這個(gè)URL的數(shù)據(jù)方面,我個(gè)人推薦TTServer,有的朋友可以沒(méi)有聽(tīng)說(shuō)過(guò),下面是這個(gè)數(shù)據(jù)庫(kù)的介紹:

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

可以看到對(duì)于字典類型的數(shù)據(jù)Key/Value的查詢,這個(gè)數(shù)據(jù)庫(kù)可以說(shuō)是我目前見(jiàn)過(guò)效率非常高的,況且他如此的小巧,用來(lái)對(duì)short url/long url的配對(duì)再好不過(guò)。

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java對(duì)象創(chuàng)建的幾種方式總結(jié)

    Java對(duì)象創(chuàng)建的幾種方式總結(jié)

    本文詳細(xì)介紹了Java中創(chuàng)建對(duì)象的五種方法,包括使用new關(guān)鍵字、Class的newInstance()方法、Constructor的newInstance()方法、克隆以及反序列化,同時(shí)討論了這些方式是否調(diào)用了構(gòu)造器以及創(chuàng)建對(duì)象的條件,文章還提供了示例代碼進(jìn)行演示,需要的朋友可以參考下
    2025-02-02
  • SpringBoot處理跨域請(qǐng)求的四種方法

    SpringBoot處理跨域請(qǐng)求的四種方法

    在現(xiàn)代Web應(yīng)用中,由于安全性和隱私的考慮,瀏覽器限制了從一個(gè)域向另一個(gè)域發(fā)起的跨域HTTP請(qǐng)求,解決這個(gè)問(wèn)題的一種常見(jiàn)方式是實(shí)現(xiàn)跨域資源共享(CORS),SpringBoot提供了多種方式來(lái)處理跨域請(qǐng)求,本文將介紹其中的幾種方法,感興趣的朋友可以參考下
    2023-12-12
  • springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例

    springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例

    本文主要介紹了springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例,為了優(yōu)化性能,通過(guò)Lua腳本實(shí)現(xiàn)對(duì)多個(gè)馬戲場(chǎng)次下的座位等席的庫(kù)存余量檢查,感興趣的可以了解一下
    2024-09-09
  • Java并發(fā)編程之threadLocal

    Java并發(fā)編程之threadLocal

    ThreadLocal是JDK包提供的,它提供了線程本地變量,也就是說(shuō)如果創(chuàng)建了一個(gè)ThreadLocal變量,需要的朋友可以參考一下喲
    2021-09-09
  • Spring MVC集成springfox-swagger2構(gòu)建restful API的方法詳解

    Spring MVC集成springfox-swagger2構(gòu)建restful API的方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC集成springfox-swagger2構(gòu)建restful API的相關(guān)資料,文中介紹介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • Flink開發(fā)IDEA環(huán)境搭建與測(cè)試的方法

    Flink開發(fā)IDEA環(huán)境搭建與測(cè)試的方法

    這篇文章主要介紹了Flink開發(fā)IDEA環(huán)境搭建與測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • java判斷域名無(wú)法訪問(wèn)自行訪問(wèn)下一條

    java判斷域名無(wú)法訪問(wèn)自行訪問(wèn)下一條

    這篇文章主要為大家介紹了java實(shí)現(xiàn)判斷域名無(wú)法訪問(wèn)的時(shí)候自行訪問(wèn)下一條域名示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 教你怎么用Java通過(guò)關(guān)鍵字修改pdf

    教你怎么用Java通過(guò)關(guān)鍵字修改pdf

    此方法只適合通過(guò)關(guān)鍵字位置,在pdf上添加字符直接上代碼,代碼比較長(zhǎng),大部分自己的理解都在代碼注釋中了,需要的朋友可以參考下
    2021-05-05
  • eclipse下整合springboot和mybatis的方法步驟

    eclipse下整合springboot和mybatis的方法步驟

    這篇文章主要介紹了eclipse下整合springboot和mybatis的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Java中的javaBean、vo、entity、domain和pojo

    Java中的javaBean、vo、entity、domain和pojo

    這篇文章主要介紹了Java中的javaBean、vo、entity、domain和pojo用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

南丹县| 且末县| 汕尾市| 新营市| 宜丰县| 鹿泉市| 巴林左旗| 沅江市| 吉木萨尔县| 宣武区| 义乌市| 营山县| 远安县| 福贡县| 深水埗区| 新泰市| 桂平市| 丘北县| 绥江县| 茶陵县| 大洼县| 西畴县| 樟树市| 阿克| 太谷县| 芦山县| 建昌县| 佛坪县| 达孜县| 永新县| 托里县| 林州市| 施秉县| 成安县| 澄城县| 兴国县| 都匀市| 崇信县| 淮南市| 甘肃省| 尉犁县|