`
mengzhiang
  • 浏览: 23961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;
	}


	@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第二季度技能等级二级考题

    在Java的第二季度技能等级二级考题中,我们聚焦于两个关键领域:源码理解和工具使用。源码分析是理解程序运行机制、优化代码性能以及解决问题的基础,而工具的熟练运用则能提升开发效率和团队协作。在这个考试中,...

    某公司的java考试题目

    1. **二季度试题.txt**:这可能是一份季度性的Java编程试题集,涵盖了Java的基础到进阶知识点。通常,这样的试题会包括但不限于数据类型、控制结构(如if-else、switch-case、循环)、方法、类与对象、继承、多态、...

    程序员考试历年试题及答案

    这份压缩包文件包含了历年来的程序员考试试题及对应的答案,对于备考者来说是极其宝贵的复习资源。 首先,我们可以从“程序员考试”这个标签中了解到,这个考试可能涵盖的内容包括但不限于: 1. 计算机基础:这...

    JAVA程序设计课件-公司季度表彰系统.pptx

    总结来说,这个"公司季度表彰系统"的案例不仅涵盖了JAVA程序设计中的循环结构,还涉及了二维数组的操作、条件判断和逻辑思维,这些都是OCJA认证考试中的核心知识点。通过这个案例,学习者可以深入理解并实践JAVA编程...

    JAVA程序教学设计:方法与数组——公司季度表彰系统.doc

    在实际编程实践中,这些知识会应用于解决具体问题,例如在"公司季度表彰系统"项目中,可能会使用方法来处理员工数据,使用数组来存储员工的评分,通过方法重载实现不同类型的评分计算,而递归则可能在处理层级结构的...

    《恋上数据结构》第1季度 + 第2季 完整学习笔记,从0实现的 Java 数据结构大全。.zip

    《恋上数据结构》的学习笔记包含了第一和第二季度的完整内容,这是一份全面的Java数据结构教程,适合从零开始学习数据结构的大学生。这份资料涵盖了C/C++/JAVA/Python等多种编程语言的数据结构学习,是编程初学者的...

    北大青鸟S2考试题目

    【北大青鸟S2考试题目】是针对北大青鸟教育机构S2阶段学员设计的一系列考试试题,旨在帮助学员在实际考试前进行充分的准备和练习。这些试题涵盖了北大青鸟S2阶段的教学内容,包括但不限于计算机基础知识、编程语言、...

    java简历上的项目集合大全

    并对招聘工作的职位发布、简历、面试、招聘题库、招聘考试、录用等环节加以规范。 技术架构:JSP/Servlet/JavaBean/Struts/Hibernate/JDBC/javaScript/XML/DWR 等相关技术 开发环境:Windows Server2003,Tomcat...

    2022年全面剖析VB.NET(1)Java教程.docx

    《2022年全面剖析VB.NET(1)Java教程》文档主要介绍了VB.NET的最新发展和集成开发环境的变化,这是针对VB开发者的深度解析。VB.NET是Visual Basic的升级版,于2022年第四季度发布,带来了许多新特性和改进。以下是...

    ED-2015-1:ED 20152课程档案

    7. **考试复习资料**:可能包括历年的期末试题和答案,帮助学生准备期末考试。 8. **论坛或讨论板链接**:方便学生提问和讨论问题,促进同伴之间的学习交流。 这个压缩包是Java学习者宝贵的资源,不仅可以系统地...

    给C++初学者的忠告

    - **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中会遇到诸多挑战,比如指针、内存管理等复杂概念。 - **...

Global site tag (gtag.js) - Google Analytics