HIGO網(wǎng)絡(luò)。。
問我的是MySQL的存儲(chǔ)問題。
一個(gè)長(zhǎng)url怎么存儲(chǔ),對(duì)應(yīng)到服務(wù)端的短url,怎么進(jìn)行存儲(chǔ)呢?
(首先我并不知道,怎么存儲(chǔ)額,什么東西額)。
訪問者,有一個(gè)短鏈,如何對(duì)應(yīng)到長(zhǎng)鏈。。。。
就是我有一個(gè)長(zhǎng)網(wǎng)址,有一個(gè)短網(wǎng)址,我如何將短網(wǎng)址快速的對(duì)應(yīng)到長(zhǎng)網(wǎng)址,有什么快速的方法。(面試官,這是相當(dāng)于給了我提示)
數(shù)據(jù)模型需要用數(shù)據(jù)庫(kù)存下來。需要存儲(chǔ)的字段,可能用到的索引,預(yù)計(jì)每個(gè)字段的長(zhǎng)度,具體點(diǎn)描述。
為什么用兩個(gè)表? 說明這個(gè)東西不好。
為什么不能用一張表來存?
這個(gè)表如果加索引的話,我們?cè)撊绾渭铀饕兀恳簿褪钦f,我們?cè)谀男┳侄紊厦婕铀饕?,以便加快索引速度?/p>
能不能有什么快的方法存儲(chǔ)一個(gè)長(zhǎng)鏈,分成http,string,本身的域名。分成三部分存。。。有沒有考慮。
有沒有更節(jié)約存儲(chǔ)空間的方法。。。。。。。
那你知道怎么去識(shí)別一個(gè)url的域名,http,string。。。
url規(guī)則
(http|https)://<主機(jī)名>:<端口號(hào)>/<路徑>?<查詢字段>#<片段>
什么是解析
https://www.baidu.com/s?wd=url%20規(guī)則&rsv_spt=1
協(xié)議名是什么,
Domain是什么
域名是什么
主域名,二級(jí)域名是什么
有沒有端口號(hào),端口號(hào)是什么。
你知不知道有什么方法識(shí)別http,query(string),,你知道什么切割方法嗎?
那么,你知不知道,PHP里面其實(shí)又辦法做這些事情的。
Parse_url
<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>
以上例程會(huì)輸出:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
/path
那么我們換個(gè)方法,我們用摘要算法,將長(zhǎng)鏈轉(zhuǎn)換成短鏈,你有什么辦法嗎?
substr(md5($url) ,0,7);
id 長(zhǎng)鏈 短鏈 時(shí)間
http://www.baidu.com /xxxxxfaefwaf
http://t.cn
http://t.cn/3e5f2ed1
將http://t.cn/3e5f2ed1對(duì)應(yīng)成長(zhǎng)鏈
你能解釋一下,什么是sql注入?
Sql注入是利用服務(wù)器端接受客戶器端參數(shù)時(shí),沒有進(jìn)行安全檢驗(yàn),然后利用數(shù)據(jù)庫(kù)特殊字符串截?cái)嘣甲址?,然后增加自己邏輯的攻擊方式?/p>
如何截?cái)啵?br> https://www.baidu.com/s?wd=url%20規(guī)則&rsv_spt=1 or sleep(1)
select * from xxx where rsv_spt=$_GET['rsv_spt']
select * from xxx where rsv_spt=1
select * from xxx where rsv_spt=1 or sleep(1)
select * from xxx where rsv_spt=1 or 1=1
select * from xxx where rsv_spt=$_GET['rsv_spt']
對(duì)于一個(gè)數(shù)字:
if(!is_number($_GET['rsv_spt']))
{
return false;
}
mysql_escape_string
轉(zhuǎn)義一個(gè)字符串用于 mysql_query
<?php
$item = "Zak's Laptop";
$escaped_item = mysql_escape_string($item);
printf ("Escaped string: %s\n", $escaped_item);
?>
以上例子將產(chǎn)生如下輸出:
Escaped string: Zak's Laptop
' '
' "
php md5
md5($str);
64 或 32位字符串
substr($str,0,7);
創(chuàng)建文件
touch
文件夾 mkdir
chmod 755 xxx
要是200長(zhǎng)度,散列成8位。
1、 解析url
$hash_str=3e5f2ed1
select * from xxx where 短鏈=3e5f2ed1
長(zhǎng)密碼 hash_value
短鏈,就是md5 之后的密碼。
把數(shù)據(jù)做到一張表上面,
select * from xxx where 短鏈=3e5f2ed1
密碼不做存儲(chǔ),長(zhǎng)短鏈需要做存儲(chǔ)。
查的比較頻繁,才加一個(gè)索引。
索引的使用原則: 1.有查詢需求。。。。2.差異度大的。。
100萬的情況,只有兩種,加索引,就沒有什么用。
知識(shí)是死的 應(yīng)用是活的 要會(huì)變通
長(zhǎng)鏈 短鏈 相互轉(zhuǎn)化 不就類似我給你講的 明文密碼 和 加密后的密碼 的轉(zhuǎn)化嗎?
類似的東西 思考一下再
簡(jiǎn)歷上的東西踏實(shí)的過一遍再