HIGO網(wǎng)絡(luò)辖试。。
問(wèn)我的是MySQL的存儲(chǔ)問(wèn)題劈狐。
一個(gè)長(zhǎng)url怎么存儲(chǔ)罐孝,對(duì)應(yīng)到服務(wù)端的短url,怎么進(jìn)行存儲(chǔ)呢肥缔?
(首先我并不知道莲兢,怎么存儲(chǔ)額,什么東西額)续膳。
訪問(wèn)者改艇,有一個(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ù)存下來(lái)啼辣。需要存儲(chǔ)的字段绵咱,可能用到的索引,預(yù)計(jì)每個(gè)字段的長(zhǎng)度熙兔,具體點(diǎn)描述。
為什么用兩個(gè)表艾恼? 說(shuō)明這個(gè)東西不好住涉。
為什么不能用一張表來(lái)存?
這個(gè)表如果加索引的話钠绍,我們?cè)撊绾渭铀饕赜呱恳簿褪钦f(shuō),我們?cè)谀男┳侄紊厦婕铀饕员慵涌焖饕俣取?/p>
能不能有什么快的方法存儲(chǔ)一個(gè)長(zhǎng)鏈媳握,分成http碱屁,string,本身的域名蛾找。分成三部分存娩脾。。打毛。有沒(méi)有考慮柿赊。
有沒(méi)有更節(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í)域名是什么
有沒(méi)有端口號(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í)湃密,沒(méi)有進(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萬(wàn)的情況在扰,只有兩種,加索引雷客,就沒(méi)有什么用芒珠。
知識(shí)是死的 應(yīng)用是活的 要會(huì)變通
長(zhǎng)鏈 短鏈 相互轉(zhuǎn)化 不就類似我給你講的 明文密碼 和 加密后的密碼 的轉(zhuǎn)化嗎?
類似的東西 思考一下再
簡(jiǎn)歷上的東西踏實(shí)的過(guò)一遍再