去腾讯面试测试,面试官给出了一个比较简单的题,当时没写出来,现在补上来自己写的很粗糙的一个答案。
扔出去一块砖,捡回一块玉
希望大家能够指点一下我这个小菜鸡~
问题:从一个日志文件中找到有几处error错误,将错误数量写在另一个文件中。
(当时没听清楚是写错误信息还是错误的数量,此版本为写错误数量,接下来我再想想怎么统计日志信息,算是个简单的日志归集功能吧)
代码如下:
package Interview;
import java.io.*;
/**
* @auther ***
* @date 8/6/2018 3:42 PM
*/
public class ErrorMessageCollect {
public static void main(String[] args) throws IOException {
ErrorMessageCollect errorMessageCollect = new ErrorMessageCollect();
String readResult = errorMessageCollect.readFile("d:/read.txt");
errorMessageCollect.writeFile(errorMessageCollect.ErrorNumberCollect(readResult));
}
public String readFile(String s) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(s));
String content = null;
while ((s = br.readLine()) != null) {
content = s;
}
br.close();
return content;
}
public void writeFile(int i) throws IOException {
String strI = String.valueOf(i);
File file = new File("d:/write.txt");
FileOutputStream fos = new FileOutputStream(file,false);
fos.write("错误的个数为: ".getBytes());
fos.write(strI.getBytes());
fos.flush();
fos.close();
}
public int ErrorNumberCollect(String s){
String strToFind = "error";
int index = 0;
int count = 0;
int indexx = 0;
while((index = s.indexOf(strToFind,indexx)) != -1){
indexx = index + strToFind.length();
count ++;
}
return count;
}
}
简单写了程序的实现之后也能够回答面试时第二个问题了。
第二个问题是:如果需要测试这个error统计的程序,应该怎么测?
当时的回答只有一些基本功能实现层面的回答,自己写了之后才发现其实代码层面有很多可能出问题的地方,
根据代码实现使用的不同的方法,可能会有很多问题,比如error在文章开头的时候可能第一个字符会读不到,
比如error后一半在另外一行,比如error在文章末尾,这些情况可能对应不同的问题,如果当时能够懂这些的
话我想应该问题不至于回答的那么表面。