日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java實(shí)現(xiàn)短網(wǎng)址服務(wù)的原理是什么?

針對于有些用戶擔(dān)心短網(wǎng)址會(huì)不會(huì)重復(fù)的問題,現(xiàn)將縮鏈(https://suolink.cn)平臺(tái)短網(wǎng)址服務(wù)的原理進(jìn)行了詳細(xì)介紹,以便用戶對短網(wǎng)址有更深的理解,消除其擔(dān)心。

創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元連云做網(wǎng)站,已為上家服務(wù),為連云各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

Q:那么小的長度應(yīng)該有一定概率會(huì)重復(fù)的吧?是不是一定時(shí)間后就不可用了?

A:短網(wǎng)址(Short URL),顧名思義就是在形式上比較短的網(wǎng)址。通常用的是asp或者php轉(zhuǎn)向,在Web 2.0的今天,不得不說,這是一個(gè)潮流。目前已經(jīng)有許多類似服務(wù),借助短網(wǎng)址您可以用簡短的網(wǎng)址替代原來冗長的網(wǎng)址,讓使用者可以更容易的分享鏈接。

短網(wǎng)址服務(wù),可能很多朋友都已經(jīng)不再陌生,現(xiàn)在大部分微博、手機(jī)郵件提醒等地方已經(jīng)有很多應(yīng)用模式了,并占據(jù)了一定的市場。估計(jì)很多朋友現(xiàn)在也正在使用。

看過新浪的短連接服務(wù),發(fā)現(xiàn)后面主要有6個(gè)字符串組成,于是第一個(gè)想到的就是原來公司寫的一個(gè)游戲激活碼規(guī)則,也就是下面的算法2,

26個(gè)大寫字母 26小寫字母,10個(gè)數(shù)字,隨機(jī)生成6個(gè)然后插入數(shù)據(jù)庫對應(yīng)一個(gè)id,短連接跳轉(zhuǎn)的時(shí)候,根據(jù)字符串查詢到對應(yīng)id,即可實(shí)現(xiàn)相應(yīng)的跳轉(zhuǎn)!不過2的62次方,不知道有沒有重復(fù)的,小概率可以,但是對應(yīng)不是很大的網(wǎng)站應(yīng)該足夠了

自從twitter推出短網(wǎng)址(shorturl),繼之國內(nèi)各大微博跟風(fēng),google公開goo.gl使用API,短網(wǎng)址之風(fēng)愈演愈烈.不得不說這是一個(gè)新興又一大熱門web2.0服務(wù).現(xiàn)整理一下,包括完整短網(wǎng)址網(wǎng)站,短網(wǎng)址生成原理,算法舉例,以及優(yōu)劣比較。

短鏈接的好處:

  • 內(nèi)容需要;
  • 用戶友好;
  • 便于管理。

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

微博限制字?jǐn)?shù)為140字一條,那么如果我們需要發(fā)一些連接上去,但是這個(gè)連接非常的長,以至于將近要占用我們內(nèi)容的一半篇幅,這肯定是不能被允許的,所以短網(wǎng)址應(yīng)運(yùn)而生了。

短網(wǎng)址可以在我們項(xiàng)目里可以很好的對開放級URL進(jìn)行管理。有一部分網(wǎng)址可以會(huì)涵蓋暴力,廣告等信息,這樣我們可以通過用戶的舉報(bào),完全管理這個(gè)連接將不出現(xiàn)在我們的應(yīng)用中,應(yīng)為同樣的URL通過加密算法之后,得到的地址是一樣的。

我們可以對一系列的網(wǎng)址進(jìn)行流量,點(diǎn)擊等統(tǒng)計(jì),挖掘出大多數(shù)用戶的關(guān)注點(diǎn),這樣有利于我們對項(xiàng)目的后續(xù)工作更好的作出決策。

算法原理

算法一

1)將長網(wǎng)址md5生成32位簽名串,分為4段, 每段8個(gè)字節(jié);

2)對這四段循環(huán)處理, 取8個(gè)字節(jié), 將他看成16進(jìn)制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;

3)這30位分成6段, 每5位的數(shù)字作為字母表的索引取得特定字符, 依次進(jìn)行獲得6位字符串;

4)總的md5串可以獲得4個(gè)6位串; 取里面的任意一個(gè)就可作為這個(gè)長url的短url地址;

這種算法,雖然會(huì)生成4個(gè),但是仍然存在重復(fù)幾率,下面的算法一和三,就是這種的實(shí)現(xiàn).

算法二

a-zA-Z0-9 這64位取6位組合,可產(chǎn)生500多億個(gè)組合數(shù)量.把數(shù)字和字符組合做一定的映射,就可以產(chǎn)生唯一的字符串,如第62個(gè)組合就是aaaaa9,第63個(gè)組合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存,那么對應(yīng)位置的組合字符串就會(huì)是無序的組合。

把長網(wǎng)址存入數(shù)據(jù)庫,取返回的id,找出對應(yīng)的字符串,例如返回ID為1,那么對應(yīng)上面的字符串組合就是bbb,同理 ID為2時(shí),字符串組合為bba,依次類推,直至到達(dá)64種組合后才會(huì)出現(xiàn)重復(fù)的可能,所以如果用上面的62個(gè)字符,任意取6個(gè)字符組合成字符串的話,你的數(shù)據(jù)存量達(dá)到500多億后才會(huì)出現(xiàn)重復(fù)的可能。

具體參看這里徹底完善新浪微博接口和超短URL算法,算法四可以算作是此算法的一種實(shí)現(xiàn),此算法一般不會(huì)重復(fù),但是如果是統(tǒng)計(jì)的話,就有很大問題,特別是對域名相關(guān)的統(tǒng)計(jì),就抓瞎了。

JAVA 實(shí)現(xiàn)代碼:

public class ShortUrlGenerator {
/**
@param args
*/
public static void main(String[] args) {
String sLongUrl = "QQ空間"; //長鏈接
String[] aResult = shortUrl(sLongUrl);
// 打印出結(jié)果
for (int i = 0; i < aResult.length; i++) {
System.out.println("["
ystem.out.println("[" + i + "]:::" + aResult[i]);
}
}
public static String[] shortUrl(String url) {
// 可以自定義生成 MD5 加密字符傳前的混合 KEY
String key = "mengdelong";
// 要使用生成 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)址進(jìn)行 MD5 加密
String sMD5EncryptResult = (new Encrypt()).md5(key
tring sMD5EncryptResult = (new Encrypt()).md5(key + url);
String hex = sMD5EncryptResult;
String[] resUrl = new String[4];
for (int i = 0; i < 4; i++) {
// 把加密字符按照 8 位一組 16 進(jìn)制與 0x3FFFFFFF 進(jìn)行位與運(yùn)算
String sTempSubString = hex.substring(i
tring sTempSubString = hex.substring(i * 8, i * 8 + 8);
// 這里需要使用 long 型來轉(zhuǎn)換,因?yàn)?Inteper .parseInt() 只能處理 31 位 , 首位為符號(hào)位 , 如果不用 long ,則會(huì)越界
long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);
String outChars = "";
for (int j = 0; j < 6; j++) {
// 把得到的值與 0x0000003D 進(jìn)行位與運(yùn)算,取得字符數(shù)組 chars 索引
long index = 0x0000003D & lHexLong;
// 把取得的字符相加
outChars += chars[(int) index];
// 每次循環(huán)按位右移 5 位
lHexLong = lHexLong >> 5;
}
// 把字符串存入對應(yīng)索引的輸出數(shù)組
resUrl[i] = outChars;
}
return resUrl;
}
}

網(wǎng)頁題目:Java實(shí)現(xiàn)短網(wǎng)址服務(wù)的原理是什么?
標(biāo)題來源:http://www.dlmjj.cn/article/cdoephp.html