论坛首页 Java企业应用论坛

一道java英文试题

浏览 7200 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-01-25  
Functional Requirement:
The program need scan a given directory and all its children recursively, and find out the top 10 biggest files.
Non-Functional Requirement:
Please use OO design, TDD, design patterns etc. Take care about code style as well.
   发表时间:2014-01-26  
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Top10BiggestFiles {
	private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表
	public List<File> getTop10Files() {
		return top10Files;
	}
        //递归调用获得一个目录下前10最大文件的
	public void findTop10BiggestFiles(String parentFile){
		File dir = new File(parentFile);
		File[] files = dir.listFiles();
		if(files==null){
			return;
		}
		for(File file:files){
			if(file.isDirectory()){
				findTop10BiggestFiles(file.getAbsolutePath());
			}else{
				top10Files.add(file);
                                //逆序排序,按照文件的大小从大到小排序
				Collections.sort(top10Files,new Comparator<File>() {
					@Override
					public int compare(File o1, File o2) {
						if(o1.length()>o2.length()){
							return -1;
						}else if(o1.length()==o2.length()){
							return 0;
						}else{
							return 1;
						}
					}
				});
			}
		}
		int fileSize = top10Files.size();
                //只留下前十的文件
		if(fileSize>10){
			List<File> fileList = new ArrayList<File>(10);
			for(int i=0;i<10;i++){
				fileList.add(top10Files.get(i));
			}
			top10Files.clear();
			top10Files = fileList;
		}
	}
	public static void main(String[] args){
		Top10BiggestFiles topFile = new Top10BiggestFiles();
		topFile.findTop10BiggestFiles("D:\\awork");
		topFile.getTop10Files();
	}
}

1 请登录后投票
   发表时间:2014-01-26  
chen3975 写道
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Top10BiggestFiles {
	private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表
	public List<File> getTop10Files() {
		return top10Files;
	}
        //递归调用获得一个目录下前10最大文件的
	public void findTop10BiggestFiles(String parentFile){
		File dir = new File(parentFile);
		File[] files = dir.listFiles();
		if(files==null){
			return;
		}
		for(File file:files){
			if(file.isDirectory()){
				findTop10BiggestFiles(file.getAbsolutePath());
			}else{
				top10Files.add(file);
                                //逆序排序,按照文件的大小从大到小排序
				Collections.sort(top10Files,new Comparator<File>() {
					@Override
					public int compare(File o1, File o2) {
						if(o1.length()>o2.length()){
							return -1;
						}else if(o1.length()==o2.length()){
							return 0;
						}else{
							return 1;
						}
					}
				});
			}
		}
		int fileSize = top10Files.size();
                //只留下前十的文件
		if(fileSize>10){
			List<File> fileList = new ArrayList<File>(10);
			for(int i=0;i<10;i++){
				fileList.add(top10Files.get(i));
			}
			top10Files.clear();
			top10Files = fileList;
		}
	}
	public static void main(String[] args){
		Top10BiggestFiles topFile = new Top10BiggestFiles();
		topFile.findTop10BiggestFiles("D:\\awork");
		topFile.getTop10Files();
	}
}



Please use OO design, TDD, design patterns etc.
0 请登录后投票
   发表时间:2014-01-26  
jerry1985 写道
chen3975 写道
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Top10BiggestFiles {
	private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表
	public List<File> getTop10Files() {
		return top10Files;
	}
        //递归调用获得一个目录下前10最大文件的
	public void findTop10BiggestFiles(String parentFile){
		File dir = new File(parentFile);
		File[] files = dir.listFiles();
		if(files==null){
			return;
		}
		for(File file:files){
			if(file.isDirectory()){
				findTop10BiggestFiles(file.getAbsolutePath());
			}else{
				top10Files.add(file);
                                //逆序排序,按照文件的大小从大到小排序
				Collections.sort(top10Files,new Comparator<File>() {
					@Override
					public int compare(File o1, File o2) {
						if(o1.length()>o2.length()){
							return -1;
						}else if(o1.length()==o2.length()){
							return 0;
						}else{
							return 1;
						}
					}
				});
			}
		}
		int fileSize = top10Files.size();
                //只留下前十的文件
		if(fileSize>10){
			List<File> fileList = new ArrayList<File>(10);
			for(int i=0;i<10;i++){
				fileList.add(top10Files.get(i));
			}
			top10Files.clear();
			top10Files = fileList;
		}
	}
	public static void main(String[] args){
		Top10BiggestFiles topFile = new Top10BiggestFiles();
		topFile.findTop10BiggestFiles("D:\\awork");
		topFile.getTop10Files();
	}
}



Please use OO design, TDD, design patterns etc.


个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个?
0 请登录后投票
   发表时间:2014-01-27  
用堆结构直接解决
0 请登录后投票
   发表时间:2014-01-27  
yuwenchun 写道
jerry1985 写道
chen3975 写道
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Top10BiggestFiles {
	private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表
	public List<File> getTop10Files() {
		return top10Files;
	}
        //递归调用获得一个目录下前10最大文件的
	public void findTop10BiggestFiles(String parentFile){
		File dir = new File(parentFile);
		File[] files = dir.listFiles();
		if(files==null){
			return;
		}
		for(File file:files){
			if(file.isDirectory()){
				findTop10BiggestFiles(file.getAbsolutePath());
			}else{
				top10Files.add(file);
                                //逆序排序,按照文件的大小从大到小排序
				Collections.sort(top10Files,new Comparator<File>() {
					@Override
					public int compare(File o1, File o2) {
						if(o1.length()>o2.length()){
							return -1;
						}else if(o1.length()==o2.length()){
							return 0;
						}else{
							return 1;
						}
					}
				});
			}
		}
		int fileSize = top10Files.size();
                //只留下前十的文件
		if(fileSize>10){
			List<File> fileList = new ArrayList<File>(10);
			for(int i=0;i<10;i++){
				fileList.add(top10Files.get(i));
			}
			top10Files.clear();
			top10Files = fileList;
		}
	}
	public static void main(String[] args){
		Top10BiggestFiles topFile = new Top10BiggestFiles();
		topFile.findTop10BiggestFiles("D:\\awork");
		topFile.getTop10Files();
	}
}



Please use OO design, TDD, design patterns etc.


个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个?

如果有多个文件大小一致的情况 可以把大小一致的文件列举出来
如:以下是10个最大的文件
文件一
文件二
文件三
...
其中以下文件大小一致:
文件名
文件名
0 请登录后投票
   发表时间:2014-01-27  
yuwenchun 写道
jerry1985 写道
chen3975 写道
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Top10BiggestFiles {
	private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表
	public List<File> getTop10Files() {
		return top10Files;
	}
        //递归调用获得一个目录下前10最大文件的
	public void findTop10BiggestFiles(String parentFile){
		File dir = new File(parentFile);
		File[] files = dir.listFiles();
		if(files==null){
			return;
		}
		for(File file:files){
			if(file.isDirectory()){
				findTop10BiggestFiles(file.getAbsolutePath());
			}else{
				top10Files.add(file);
                                //逆序排序,按照文件的大小从大到小排序
				Collections.sort(top10Files,new Comparator<File>() {
					@Override
					public int compare(File o1, File o2) {
						if(o1.length()>o2.length()){
							return -1;
						}else if(o1.length()==o2.length()){
							return 0;
						}else{
							return 1;
						}
					}
				});
			}
		}
		int fileSize = top10Files.size();
                //只留下前十的文件
		if(fileSize>10){
			List<File> fileList = new ArrayList<File>(10);
			for(int i=0;i<10;i++){
				fileList.add(top10Files.get(i));
			}
			top10Files.clear();
			top10Files = fileList;
		}
	}
	public static void main(String[] args){
		Top10BiggestFiles topFile = new Top10BiggestFiles();
		topFile.findTop10BiggestFiles("D:\\awork");
		topFile.getTop10Files();
	}
}



Please use OO design, TDD, design patterns etc.


个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个?

给指定目录,扫描,用递归估计就完蛋了。目录里面还有目录,用递归直接会栈溢出。
0 请登录后投票
   发表时间:2014-01-27  
注意看题目要求啊:
Non-Functional Requirement:
Please use OO design, TDD, design patterns etc. Take care about code style as well.
-----
最起码要有一个自己定义的类,里面有文件名称,文件大小属性。
0 请登录后投票
   发表时间:2014-01-28  
steafler 写道
用堆结构直接解决

这B崽子直接在这废话
0 请登录后投票
   发表时间:2014-01-29  
楼猪你在这里问面试题,CITI BANK知道么?
其实我当时用的是用runtime类直接跑dos dir指令,当然非要设计模式的话,那就来个工厂模式,加个linux版本
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics