日期:2014-05-20  浏览次数:20863 次

郁闷..下午收到了百度的拒信,大家帮我分析分析原因
我们很遗憾的通知您,您未在指定的时间内答题,或未能通过我们的笔试(Java软件工程师)。您的简历和笔试记录将被转入您所申请的备选职位,并进入百度人才库保存。

百度   人力资源部
==========================================================
题目居然跟这个一模一样,早知道先搜着看看了。虽然事先有协议,但这不能算我发的吧
http://hi.baidu.com/termite/blog/item/67f652c2b33c9434e4dd3b62.html
不知道百度怎么阅卷的,我觉得做得还可以的,唉,谁帮我看看为什么没通过..
是不是编程题应该调试一下再发的?我写好了直接发的,今天调试了一下还发现了几个错误,后悔当初没直接在IDE里写。


1、保存URL的文件为C:\url.txt
//假设文件记录数量不是非常大(1万条之内)
代码如下:
import   java.io.*;
void   readfile()
{
      String   line   =   " ";
      FileReader   fr   =   new   FileReader(c:\url.txt);  
BufferedReader   br   =   new   BufferedReader(fr);
ArrayList   filelist   =   new   ArrayList();
try  
{  
    line   =   br.readLine();
    while(line!=null)
{
    String   tempStr   =   line;
    urlFile=   " ";
    if(tempStr.contains( '? '))//带有参数
{
tempStr   =   tempStr.substring(0,tempStr.indexOf( "? ")-1)     //将?后面的字符串去掉
urlFile   =   tempStr.substring(tempStr.lastIndexOf( "/ ")+1);  

}

    else
    if(tempStr.lastIndexOf( "/ ")==tempStr.length-1)//以域名结尾无文件名,”/“在URL最后
{
    urlFile   =   "空文件名 ";
    line   =   br.readLine();       //读下一行
    continue;
}
else                       //不带参数且不是域名
{
urlFile   =   tempStr.substring(tempStr.lastIndexOf( "/ ")+1);
}
///////////以下进行数量记录////////////////////////
int   position   =   filelist.indexOf(urlFile);     //查找是否有相同的文件名
int   count   =   0;
if(position==-1)   //没有相同的文件名
{
filelist.add(urlFile);     //增加文件名
count   =   1;
filelist.add(count);       //增加数量
}
else               //有相同的文件名
{
  count   =   filelist.get(position);
  count++;
  filelist.set(position,count);     //数量加1
}
}
resultPrint(filelist);     //结果输出
}  
catch(FileNotFoundException   e)
{
system.out.println( "file   not   found! ");
}

}

void   resultPrint(ArrayList   al)
{
for(int   i   =   0;   i <al.size();i++)
{
system.out.println(al.get(i).toString);     //结果打印
}
}


2、设计三个数据表:userInfo,userTitle,userReplyTitle;结构如下:
userInfo:   userName,email,homePage,phone,address.   存储用户基本信息
userTitle:   userName,title,context.         存储发帖信息
userReplyTitle:   userName,rtitle,rcontext.     存储回复信息
分析:首先userName与其他数据项都有联系,
其次(title,context)(email,homePage,phone,address)(rtitle,rcontext)这三组数据互相没有联系。
分成三个表不会造成传递依赖,三个表以userName连接查找。这样的设计是符合第三范式的。


3、设计思路:考虑先将数据文件B进行内排序,再对A替换关键词后生成新的文件C。
基本算法:
1、读文件B到内存中(ID和关键词的大小*100万   <   1G),可以用数组B保存。
2、根据关键词的Unicode码进行排序(假设数据文件的编码为unicode码),采用快速排序算法。
3、读数据文件A的一条记录,跟据关键词在排好序的数组B中查找ID(二分查找),
4、替换这条记录的关键词为ID。
5、追加到数据文件C中。
6、重复步骤3,直至读完文件A。

空间复杂度:主要是读文件B所占用的空间。