首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA季度编程考试考题

2012-11-05 
JAVA季度编程考试试题JAVA季度编程考试试题?公司招聘录取问题??? 某集团公司业务发展迅速,各事业部普遍面

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方库并不符合考试要求。

?

文件列表


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;}@Overridepublic 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;}@Overridepublic 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> {@Overridepublic 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());}}

?

热点排行