java编程题

来源:互联网 发布:淘宝详情页一张多少钱 编辑:程序博客网 时间:2024/05/17 01:07

201103技能鉴定实战考试

JAVA三级试题

注意:

1 从如下三道试题中选择两道做答。每题50分。如果多做,则取得分最高的两道作为成绩。

2 每道试题,将从功能正确性、代码规范性、性能等方面综合评分。编写代码时请注意代码规范性(如注释,圈复杂度)。答题时建议经常保持能编译运行,确保可以获得已经实现功能的得分。

3、 每道题已经提供初步的框架,请在此框架上继续完成代码。随试题提供的代码框架*.java文件使用GBK编码,请调整eclipseIDE的编码字符集为GBK,以防止源文件中的中文出现乱码。

4、 试题框架提供的原有代码,除需要考生实现的方法体外的其他的内容(包括常量定义,方法签名等)均不能做任何修改。

5、 可以根据需要在代码框架中新增属性,方法等.也可以在本类中调用其他自己开发的类。不建议使用其他第三方lib库,如果确实需要使用,请务必将lib库拷贝到lib目录下。

6、 除题目明确要求需要处理的异常外,其他异常一律不考虑。

7、 最终答题代码,请以如下形式打包提交:

  工号

|____src

|    |_____level3java1

|    |     |______A.java

|    |_____level3java2

|    |     |______B.java

|____bin

|    |_____level3java1

|    |     |______A.class

|    |_____level3java2

|    |     |______B.class

|____lib

|    |_____XXX.jar

试题一

【背景】

公司很多产品都是面向终端用户服务的,在高峰时段,过量的并发访问可能会冲垮服务器,导致整个业务中断,所以产品在设计时要充分考虑可靠性需求。

【命题】

开发Web门户系统,需要满足以下几点可靠性要求:

1、系统最大支持XX在线用户数,如果超限禁止用户登录

2、系统支持用户白名单,即白名单里的用户可以直接登录(不受最大在线用户数限制)

3、系统支持用户黑名单,即黑名单里的用户直接拒绝登录.

其中黑白名单的内容为IP地址,且IP地址都是合法的,IP地址支持模糊匹配,模糊匹配的字符只会出现*,*表示任意字符。

比如白名单列表为10.137.8.12 , 10.137.11.*,则表示IP地址为10.137.8.12或者10.137.11开头的地址都可以直接登录,黑名单一样的规则。

不考虑用户IP地址同时匹配黑名单和白名单的情况。

不考虑已登录用户不退出系统又再次登录的情况。

 

【说明】

请实现level3java1.WebSecurity下面的四个方法:

/**

     * <系统进行初始化,设置系统支持的最大在线用户数,白名单IP地址,黑名单IP地址>

     * @param userNumber 系统支持的最大在线用户数

     * @param whiteIPList 白名单IP地址

     * @param blackIPList  黑名单IP地址

     * @return void

     */

public void init(int userNumber, int concurrentNumber , String[] whiteIPList , String[] blackIPList)

 

/**

     * 用户登录系统,

     * 1)、如果用户IP在白名单列表里,直接登录成功,用户在线数增1

     * 2)、如果用户IP在黑名单列表里,直接登录失败

     * 3)、如果用户IP不在黑白名单之列,检查当前在线用户数,如果超限,直接登录失败,否则登录成功,用户在线数增1

 

     * @param userId 用户编号

     * @param ip   客户端IP

     * @return boolean 用户登录标志,true:登录成功,false:登录失败

  */

public boolean login(String userId, String ip)

 

/**

     * 用户退出系统,用户在线数减1

     * @param userId  用户编号

     * @return void

     */

public void logout(String userId)

 

/**

     * 获取所有在线用户

     * @return String[] 所有在线用户编号(userId),按照用戶登入的順序打印用戶编号,比如1004,1002,1003依次登入系统,

     * 后续1002退出,此处只要返回10041003

     */

public String[] getUserList()

 

【提示】

1、 需要考虑多线程同时访问的情况。

2、  代码框架已给出基于JUnit的单元测试基本用例,完成编码后可执行此用例验证方法的基本功能是否正确。

 

试题二

【背景】

提供智能拨号能力的手机可使用数字拨号键盘快速查找手机已经存储的联系人,用户通过数字拨号键盘输入联系人姓或者名的前几个字母,联系人电话号码的部分连续数字,联系人姓和名的首字母来匹配联系人记录。

标准的数字拨号键盘见下图,其中2-9键分别对应26个字母。

 

【命题】

       我们的试题需要您实现通过指定的数字串查找符合条件的联系人集合的算法。

【说明】

一、              联系人(Contact)记录包括姓(lastName)、名(firstName)和号码(number)三个字段,姓和名只包含英文26个字母的大写或小写且值都不为空(不考虑包含中文和特殊字符的情况,不考虑姓和名同时或单个为空的情况),号码只包含数字且值不为空(不考虑国家码前缀“+”号)。

二、              用户输入数字串(长度必须大于等于2)按如下规则匹配联系人记录:

1、              联系人号码匹配:输入联系人号码(number)所包含的任意一段数字可匹配该联系人。比如某个联系人的号码是13951905919,用户可以输入号码的任意一段匹配,如输入“139”,“951”,“5919”等。

2、              联系人姓(lastName或者名(firstName)匹配:输入联系人姓或者名的英文单词的首几个字母(对应的数字键)可匹配该联系人。比如某个联系人姓名为“Brian Yang”(姓Yang,名Brian),用户可以输入9wxyz2abc)或者2abc7pqrs4ghi)来匹配该联系人。

3、              联系人姓名的首字母匹配:输入联系人姓和名的英文单词首字母可匹配该联系人,且姓和名的顺序可以颠倒。比如某个联系人姓名为“Brian Yang”(姓Yang,名Brian),用户可以输入2abc9wxyz)或者9wxyz2abc)来匹配该联系人。

 

【要求】

1、  请在试题给出的类level3java2.SmartDial中实现方法

public ArrayList findContacts(String digitalSequence)

该方法输入数字串返回符合上述条件的联系人集合(方法注释中有对参数和返回值的详细说明),返回值ArrayList中的元素类型为联系人实体类level3java2.Contact level3java2.Contact类以及level3java2.SmartDial类中添加联系人方法(addContact)的代码已经给出;

2、  请勿改动试题框架已给出的内容,例如:类名,方法签名等;

3、  可以根据需要在level3java2.SmartDial中新增属性,方法等,也可以在其中使用其他自己开发的类;

【提示】

1、  代码框架已给出基于JUnit的单元测试基本用例,完成编码后可执行此用例验证方法的基本功能是否正确。

试题三

【背景】

Java代码中的日志无处不在,通常的,有时需要在调试日志中将一个JavaBean对象的详细信息打印出来,以便进行问题的定位和调测。

但通常有很多的JavaBean(例如第三方代码生成器生成的代码)没有提供toString方法,致使在进行日志打印时,无法直接将JavaBean进行toString后输出。

【命题】

       我们的试题需要您实现一个通用的toString方法来打印JavaBean对象的详细信息。

【说明】

       通用的toString方法处理规则如下:

一、对于null对象,返回(NULL)

二、对于非null的对象:

1.       首先用 #+完整的类名+换行符(/n) 输出类名

2.       依次输出对象的字段值,形式是 字段名:字段的值+换行符(/n) (如果字段类型是基本类型或者String类型,直接输出对应的值(String 类型值为null的话,输出(NULL)),如果是对象则调用本方法输出)

3.       静态字段、transient字段忽略(无需输出)

4.       字段的输出顺序按字典序排序(字典序就是依次比较字符的ASCII值确定大小,若前面的ASCII值都相同则长度长的大,例如:AB < AC<ACD

5.       当前类输出结束后,循环对父类(如果有)执行本题给出的这一组规则。(不需要输出Object类)

例如:

package com.huawei;

class Super

{

    private String base;

    private transient String transField;

    …(Bean的方法省略)

}

 

package com.huawei;

class Extends extends Super

{

    private static String staticField;

private String str = "a";

private int number = 1;

…(Bean的方法省略)

}

 

toString(new Extends ())  输出的结果:

#com.huawei.Extends

number:1

str:a

#com.huawei.Super

base:(NULL)

 

三、对于指定的字段名列表进行忽略(不输出),字段名不区分大小写。

约束:不支持循环含循环引用的Bean,可不做考虑。

【要求】

一、请在试题给出的类level3java3.ToString中实现方法

public String toString(Object target,         // 目标对象

String[] ignoreFields)     // 忽略的字段

请勿改动试题框架已给出的内容,例如:类名,方法签名等;

二、可以根据需要在level3java3.ToString中新增属性,方法等,也可以使用其他自己开发的类;

【提示】

一、Java的反射机制,可能用到的类包括ClassField

二、代码框架已给出基于JUnit的单元测试基本用例,完成编码后可执行此用例验证方法的基本功能是否正确。