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;
}
@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());
}
}
分享到:
相关推荐
0911.pdf可能是2009年11月的程序员考试试题,它可能包含了一些特定主题或技术的测试,比如当时热门的编程语言(如Java、C++或Python)、数据库管理、软件设计原则等。考生可以通过对比不同年份的试题,发现考试趋势...
在Java的第二季度技能等级二级考题中,我们聚焦于两个关键领域:源码理解和工具使用。源码分析是理解程序运行机制、优化代码性能以及解决问题的基础,而工具的熟练运用则能提升开发效率和团队协作。在这个考试中,...
1. **二季度试题.txt**:这可能是一份季度性的Java编程试题集,涵盖了Java的基础到进阶知识点。通常,这样的试题会包括但不限于数据类型、控制结构(如if-else、switch-case、循环)、方法、类与对象、继承、多态、...
这份压缩包文件包含了历年来的程序员考试试题及对应的答案,对于备考者来说是极其宝贵的复习资源。 首先,我们可以从“程序员考试”这个标签中了解到,这个考试可能涵盖的内容包括但不限于: 1. 计算机基础:这...
总结来说,这个"公司季度表彰系统"的案例不仅涵盖了JAVA程序设计中的循环结构,还涉及了二维数组的操作、条件判断和逻辑思维,这些都是OCJA认证考试中的核心知识点。通过这个案例,学习者可以深入理解并实践JAVA编程...
在实际编程实践中,这些知识会应用于解决具体问题,例如在"公司季度表彰系统"项目中,可能会使用方法来处理员工数据,使用数组来存储员工的评分,通过方法重载实现不同类型的评分计算,而递归则可能在处理层级结构的...
《恋上数据结构》的学习笔记包含了第一和第二季度的完整内容,这是一份全面的Java数据结构教程,适合从零开始学习数据结构的大学生。这份资料涵盖了C/C++/JAVA/Python等多种编程语言的数据结构学习,是编程初学者的...
【北大青鸟S2考试题目】是针对北大青鸟教育机构S2阶段学员设计的一系列考试试题,旨在帮助学员在实际考试前进行充分的准备和练习。这些试题涵盖了北大青鸟S2阶段的教学内容,包括但不限于计算机基础知识、编程语言、...
并对招聘工作的职位发布、简历、面试、招聘题库、招聘考试、录用等环节加以规范。 技术架构:JSP/Servlet/JavaBean/Struts/Hibernate/JDBC/javaScript/XML/DWR 等相关技术 开发环境:Windows Server2003,Tomcat...
《2022年全面剖析VB.NET(1)Java教程》文档主要介绍了VB.NET的最新发展和集成开发环境的变化,这是针对VB开发者的深度解析。VB.NET是Visual Basic的升级版,于2022年第四季度发布,带来了许多新特性和改进。以下是...
7. **考试复习资料**:可能包括历年的期末试题和答案,帮助学生准备期末考试。 8. **论坛或讨论板链接**:方便学生提问和讨论问题,促进同伴之间的学习交流。 这个压缩包是Java学习者宝贵的资源,不仅可以系统地...
- **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中会遇到诸多挑战,比如指针、内存管理等复杂概念。 - **...