問題:
一、 一個文本文件有多行,每行為一個URL。請編寫代碼,統計出URL中的文件名及出現次數。
a) 文件名不包括域名、路徑和URL參數,例如中的文件名是rs。
b) 部分URL可能沒有文件名,例如,這類統計為“空文件名”。
c) 出現在不同URL中的相同文件名視為同一文件名,例如和為同一文件名
文件內容示例如下:
二、 一個簡單的論壇系統,以數據庫儲存如下數據:
用户名,email,主頁,電話,聯繫
地址,發帖標題,發帖內容,回覆標題,回覆內容。
每天論壇訪問量300萬左右,更新帖子10萬左右。
請給出數據庫表結構設計,並結合範式簡要説明設計思路。
三、 現有兩個文件,
a)數據文件A,
格式為:關鍵詞、IP地址、時間,記錄條數為1000萬左右,該文件是無序排列的。
b)數據文件B是關鍵詞ID到關鍵詞的對應表文件,格式為:ID、關鍵詞,記錄條數在100萬左右,也是無序排列的。該對應表中的記錄是一一對應的,不存在ID或者關鍵詞重複的情況。
要求將數據文件A對應的關鍵詞替換為B中的ID,生成新的數據文件C,數據文件C的格式為:關鍵詞ID、IP地址、時間。
請設計一個程序,實現上述功能,並分析時間複雜度和空間複雜度。運行程序所使用的服務器的內存為1G,硬盤足夠大。(至少要給出關鍵算法和設計思路)
專家回答:
第一題 簡評 百度的主要業務是搜索,搜索的基本原理如下 1.編寫爬蟲程序到互聯網上抓取網頁海量的網頁。 2.將抓取來的網頁通過抽取,以一定的格式保存在能快速檢索的文件系統中。 3.把用户輸入的字符串進行拆分成關鍵字去文件系統中查詢並返回結果。 由以上3點可見,字符串的分析,抽取在搜索引擎中的地位是何等重要。 因此,百度的
筆試面試題中,出現這樣的題就變得理所當然了。 以下是該題的java實現,代碼如下:
import .*;
import .*;import .*; /** * @author tzy * 在j2sdk1.4.2下測
試通過 */public class FileNameStat{ private String srcPath;//要統計
的文件路徑 private Map statMap;//用於統計的map public
FileNameStat(String srcPath) { ath=srcPath
; statMap=new TreeMap(); } /*獲得要統
計的URL的文件名*/ public String getFileName(String urlString)
{ URL url=null; String filePath=null;
String fileName=null; try {
url=new URL(urlString); filePath=url
ath(); int index=0; if (
(index=IndexOf("/"))!=-1) {
fileName=tring(index+1);
} else {
fileName=""; } }
catch(MalformedURLException e) { }
return fileName; } /*統計指定文件名的
個數*/ public void stat(String filename) { Integer
count=null; if((filename)!=null)
{ count=(Integer)(filename);
count=new Integer(alue()+1); }
else { count=new Integer(1);