JAVA季度编程考试试题

JAVA季度编程考试试题

 公司招聘录取问题

    某集团公司业务发展迅速,各事业部普遍面临开发人员不足的情况。因此,公司决定在下个月面向社会公开招聘开发人员。
    本次共有多个事业部参加本次社会招聘,每个事业部计划招聘的人数固定但并不一定相同。每位应聘者只能申请两个事业部的开发岗位(申请数量不能多也不能少,否则视为主动放弃录取),并参加公司组织的笔试与面试,两成绩相加是最终成绩。有专人对成绩进行汇总整理。
    为了使录取工作公平透明,录取工作过程中的应聘人员不使用姓名,而使用参加考试时分配的唯一编号(为整数)来表示,编号按报名的先后逐一分配。
    公司按应聘者的最终成绩进行择优录取,录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。为了严格控制录取人数,公司规定,如果出现分数相同的情况,优先录取编号靠前的人员。
    各事业部录取不设最低分数线,招聘至额满为止,或已对全部应聘者都作了录取处理。
    程序需要输出各事业部实际招聘的应聘人员,每个事业部的被录取者需要是有序队列(按被录取者成绩从高到低)。
   
    为降低复杂度,减化输入输出操作,所有输入、输出采用文本文件的形式,并都放在 c:\test 目录下。并且,文件记录从第一行开始,即没有表头行。

    输入文件信息
    1)计划招聘人数的信息,包含了所有参加本次招聘的事业部名称,及各自计划招聘的人数。文件名称:plan.txt,每行记录为一个事业部的录取计划人数信息,内容为:
      事业部名称,计划招聘人数
    2)应聘者成绩及所申请的事业部开发岗位信息。文件名称:source.txt,每行为一个应聘者的信息,内容为:
      人员编号,成绩,事业部名称1,事业部名称2

    由于数据由专人手工准备,因此可能存在错误。对于非法输入信息:
    1)非法数据分为两大类:
        一类是“数据错误”,如字段的缺失、类型不正确等等。
        一类是“数据重复”,是指①plan.txt中的两行或多行有相同的部门名称;②source.txt中的两行或多行具有相同的编号。
      要求对于一条数据,优先检查“数据错误”的问题,即:如果某记录存在“数据错误”问题,不再进行“数据重复”的检查。
    2)处理时,直接跳过非法数据,继续进行下面数据的处理。同时,要求在日志文件 result.log 中记录信息:
     文件名:被视为非法的那行数据内容:错误类型
     其中“错误类型”可以是“数据错误”或“数据重复”。

    举例:假设 “网络”在plan.txt中出现第二次;10号人员只申请了“培训中心”的开发岗位。在result.log文件中日志信息记录为:
     plan.txt:网络,5:数据重复
     source.txt:10,98,培训中心:数据错误

    注:如果采用log4j进行日志记录,由于参数配置会影响每行记录的信息。我们在考试中"不做严格要求","只要"所在日志记录行中出现上述要求的信息即可满足要求。

    输出文件要求:
    1)输入格式为事业部名称与录用人员编号列表。文件名称:result.txt,每行为一个事业部的录取情况,内容为:
      事业部名称:人员编号1,人员编号2,人员编号3
    2)为了方便结果的校验,结果请按事业部名称升序输出。排序时使用开发语言提供的基本的字符串比较方法,不需要考虑如拼音、笔划、大小写等因素。

提示与要求:
    编程过程中,可以使用apache commons包中的api (这个建议与考查的内容无关,至少便于对处理文件关闭进行处理,评分是不会有任何影响)
    除以上包以外,请使用j2se5.0或6.0的标准内容。引入其他第3方库并不符合考试要求。

文件列表

扫描二维码关注公众号,回复: 792466 查看本文章


1:plan.txt

政府,3
软开,6
网络,3
网络,5

2:source.txt

1,86,网络,软开
2,20,软开,网络
3,43,网络,政府
4,92,政府,网络
5,54,软开,政府
6,29,政府,软开
7,9,网络,软开
8,57,软开,网络
9,50,网络,政府
10,46,政府,网络
11,51,软开,政府
12,33,政府,软开
13,70,网络,软开
14,98,软开,网络
15,29,网络,政府
16,4,政府,网络
17,26,软开,政府
18,52,政府,软开
19,95,网络,软开
20,41,软开,网络
21,68,网络,政府
22,88,政府,网络
23,77,软开,政府
24,42,网络,软开
25,84,软开,网络
26,98,交通

3:result.txt

政府,4,22,63
网络,19,1,13
软开,14,25,23,8,5,11

4:result.log

plan.txt:网络,5:数据重复
source.txt:26,98,交通:数据错误

 解题如下

 

1:User.java

package com.test;

/**
 * 应聘者类
 */
public class User  {
	private int bh;
	private int cj;
	private String dyzy;
	private String dezy;
	
	public User(int bh, int cj, String dyzy, String dezy) {
		this.bh = bh;
		this.cj = cj;
		this.dyzy = dyzy;
		this.dezy = dezy;
	}
	

	public int getBh() {
		return bh;
	}


	public int getCj() {
		return cj;
	}


	public String getDyzy() {
		return dyzy;
	}


	public String getDezy() {
		return dezy;
	}


	@Override
	public String toString() {
		return this.bh+","+this.cj+","+this.dyzy+","+this.dezy+"\r\n";
	}

}

2:Dept.java

package com.test;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * 部门招聘计划类。
 */
public class Dept {
	private static Logger logger = Logger.getLogger(DataLoader.class); 
	private String name ;
	private int number;
	private List<User> list = new ArrayList<User>();
	public List<User> getList() {
		return list;
	}
	public void setList(List<User> list) {
		this.list = list;
	}
	public Dept(String name, int number) {
		this.name = name;
		this.number = number;
	}
	public String add(User u){
		if(list.size()<number){
			list.add(u);
			logger.info(name+"录取"+u+"还需"+(number-list.size()));
			return "success";
		}else{
			logger.info(name+"已录取满");
			return "failure";
		}
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	@Override
	public String toString() {
		return this.name+"计划招聘"+this.number+"人";
	}
	
}

3:DataLoader.java

package com.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
/**
 * 加载数据文件
 */
public class DataLoader {
	public static String PLAN_PATH = "C:\\test\\plan.txt";
	public static String SOURCE_PATH = "C:\\test\\source.txt";
	private static Logger logger = Logger.getLogger(DataLoader.class); 
	public static Map<String, String> smap = new HashMap<String, String>();
	/**
	 * 加载部门招聘计划
	 * @return
	 */
	public static Map<String,Dept> loadDept(){
		Map<String,Dept> map = new HashMap<String,Dept>();
		File file = new File(PLAN_PATH);
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			while ((tempString = reader.readLine()) != null) {
				String[]arr = tempString.split(",");
				if(!map.containsKey(arr[0])){
					smap.put(arr[0],arr[0]);
					map.put(arr[0], new Dept(arr[0],Integer.valueOf(arr[1])));
				}else{
					logger.error(PLAN_PATH+" "+tempString+" 数据重复!");
				}
				
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
		return map;
	}
	/**
	 * 加载应聘人员信息
	 * @return
	 */
	public static List<User> loadUser(){
		List<User> list = new ArrayList<User>();
		File file = new File(SOURCE_PATH);
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			while ((tempString = reader.readLine()) != null) {
				String[]arr = tempString.split(",");
				if(arr.length<=4){
					if(smap.containsKey(arr[2])&&smap.containsKey(arr[3])){
						list.add(new User(Integer.valueOf(arr[0]),Integer.valueOf(arr[1]),arr[2],arr[3]));
					}else{
						logger.error(SOURCE_PATH+" 数据错误"+tempString);
					}
				}else{
					logger.error(SOURCE_PATH+" 数据错误"+tempString);
				}
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
		return list;
	}
	/**
	 * 写文件
	 * @param content
	 */
	public static void writeFile(String content){
		File f = new File("C:\\test\\result.txt");
		FileWriter writer;
		try {
			f.createNewFile();
			writer = new FileWriter("C:\\test\\result.txt", true);
			writer.write(content);
			writer.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
}

 4:UserComparator.java

package com.test;

import java.util.Comparator;

/**
 * 排序类
 */
public class UserComparator implements Comparator<User> {

	@Override
	public int compare(User u1, User u2) {
		if (u1.getCj() > u2.getCj()) {
			return -1;
		} else if (u1.getCj() < u2.getCj()) {
			return 1;
		} else {
			if (u1.getBh() < u2.getBh()) {
				return -1;
			} else if (u1.getBh() < u2.getBh()) {
				return 1;
			} else {
				return 0;
			}
		}

	}

}

5:Main.java

package com.test;

import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.log4j.Logger;


/**
 * 主方法入口 */
public class Main {

	private static Logger logger = Logger.getLogger(DataLoader.class); 
	public static void main(String[] args) {
		//加载部门招聘计划和应聘者信息
		Map<String,Dept> map = DataLoader.loadDept();
		logger.info("招聘计划:"+map);
		List<User> ul = DataLoader.loadUser();
		//按成绩和编号对应聘者排序
		UserComparator uc = new UserComparator();
		Collections.sort(ul, uc);
		logger.info("应聘人员信息:"+ul);
		//按照筛选规则进行筛选
		while(ul.size()>0){
			User u = ul.get(0);
			String dyzy = u.getDyzy();
			//如果第一专业为空,说明是第一专业没录取,则录取第二专业。
			if(!dyzy.equals("")){
				Dept dy = map.get(dyzy);
				//如果没有录取成功成绩减5分按第二计划录取
				if(!dy.add(u).equals("success")){
					ul.add(new User(u.getBh(),u.getCj()-5,"",u.getDezy()));
				};
			}else{
				String dezy = u.getDezy();
				Dept de = map.get(dezy);
				if(!de.add(u).equals("success")){
					logger.info(u.getBh()+"两个专业都没录取。");
				};
			}
			ul.remove(u);
			Collections.sort(ul, uc);
			logger.info("还有"+ul.size()+"人等待录取");
			for(User us:ul){
				logger.info(us);
			}
			logger.info("-------------------------------");
		}
		//输出筛选结果
		Set<Entry<String, Dept>> set = map.entrySet();
		Iterator<Entry<String, Dept>> it = set.iterator();
		StringBuilder sb = new StringBuilder();
		while(it.hasNext()){
			Entry<String, Dept> entry = it.next();
			sb.append(entry.getKey()).append(",");
			List<User> list = ((Dept)entry.getValue()).getList();
			for(int i=0;i<list.size();i++){
				sb.append(list.get(i).getBh());
				if(i!=list.size()-1){
					sb.append(",");
				}
			}
			sb.append("\r\n");
		}
		DataLoader.writeFile(sb.toString());
	}
}

猜你喜欢

转载自mengzhiang.iteye.com/blog/1148146