XYZ 公司每天在一些日志文件中存储用户的日志信息。打印一周登录两次的用户。
示例:
weekday1.log
weekday2.log
weekday3.log
weekday4.log
weekday5.log
weekday6.log
weekday7.log
每个 log
文件都包含当天登录到 XYZ 站点的用户名。现在从上面的文件中搜索两次登录的用户名。
这个问题是我在面试中被问到的。 而且我有一个非常明显的顺序扫描文件的答案,因为我不太擅长 DS 和算法。有人可以提供一些有效的方法来查找。谢谢。
可以这样做:
首先,将你所有的用户ID和初始登录频率存储在二维数组中,例如:
String [][] user = {{"john","0"}, {"bill","0"}, {"steve","0"},....};
//Of course you didn't do this hardcoded. You may do this using loop
然后做这样的事情:
BufferedReader fr;
String usrid="";
int frequency=0;
for(int i=1;i<8;i++){
try{
fr = new BufferedReader(new FileReader("filepath/weekday"+i+".log"));
String dataRow = fr.readLine();
while (dataRow != null){
usrid = ..... ;//retrieve the userId from the dataRow
for(int j=0;j<user.length; j++){
frequency=Integer.parseInt(user[j][1]);
if(usrid.equalsIgnoreCase(user[j][0])){
user[j][1]=String.valueOf(frequency+1);
}
}
dataRow = fr.readLine();
}
}
catch(Exception e){}
}
最后,打印一周登录两次的用户:
for(int k=0;k<user.length;k++){
if(user[k][1].equals("2")){
System.out.println(user[k][0]);
}