郁闷..下午收到了百度的拒信,大家帮我分析分析原因
我们很遗憾的通知您,您未在指定的时间内答题,或未能通过我们的笔试(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所占用的空间。