软通动力 Java 笔试 答案

软通动力Java笔试题         2012-5-15   Author:zxc

1.       填空题(共32分,每空1分)

1)       Java中存在publicprivateprotecteddefault、四种访问权限控制等级(按从最宽松到最严格控制等级依次填写).

2)       常用的两个List的非同步实现类是__ArrayList_____LinkedList_。其中基于链表实现的是LinkedList,其查询效率较ArrayList、增删效率较________.

3)       Spring简化了Bean的配置,提供了自动装配(autowire)机制,根据指定的原则(通过<Bean>的autowire属性指定)进行Bean的自动装配,Spring本身为autowire属性提供了_byName__、_byType_、_constructor_、_autodetect_以及no五个选项.

4)       默认情况下,用户请求一个Servlet时,容器___________为当前用户创建一个会话;当用户请求一个Jsp页面时,容器__不会________为当前用户创建一个会话(请填写”会”与”不会”).

5)       J2EE事务提供了两种方式,一种是由__编程式事务_来管理,另一种是由__声明式事务_来管理.

6)       Java中线程的四种状态分别是__运行_、_就绪_、_挂起_、__结束__;让线程从运行状态转换为暂停状态的有__sleep()_、__wait()_。

7)       在UML中,类之间的管理有: _继承_、_实现__、__依赖_、__关联__、_聚合五种.

8)       Set中的元素___可以___为null, _不可以__重复, HashMap中的Key_不可以__为Null, value__可以__为Null. (请填写“可以”与”不可以”).

2.       问答题(共48分)

1)       假设类A的某个成员方法a()分别具有public,private, protected,default的访问修饰符,如果希望在B类中调用A的a()方法。那么调用是否成功取决于A与B之间的关系,以及他们所在包的关系。请完成如下表格,在B类中能否调用A.a()成功(成功用√, 失败用*表示)(3分)

方法修饰符

类A与类B关系

public

private

protected

default

A与B在同包下,没有继承关系

成功

成功

成功

成功

A与B在不同包中,B继承自A

成功

失败

成功

失败

A与B在不同包中,没有继承关系

成功

失败

失败

失败

 

2)       给定下面的代码:(3分)

  public void Test(){

     try{

        method();

        System.out.println(“hello world”);

}catch(Exception e){

  System.out.println(“Exception”);

}finally{

  System.out.println(“Thank you”);

}

System.out.println(“Test”);

}

如果Method方法正常运行且返回,在控制台会显示哪些信息,如果method方法出现异常,在控制台会显示哪些信息.

 

 

3)       指出下面这个程序的运行结果,并说明主要原因: (4分)

   public class Example{

      String str=new String(“good”);

      Char[] ch={‘a’,’b’,’c’};

 

     public static void main(String[] args){

         Example ex=new Example();

         ex.change(ex.str,ex.ch);

         System.out.println(ex.str+”and “);

         System.out.println(ex.ch); 

}

 

public void change(String str,char ch[]){

   str=”test.ok”;

   ch[0]=’g’;

}

}

4)       什么是unchecked exception,什么是checked exception?它们在代码中被抛出时,需要显示捕捉或显示申明抛出来吗?(3分)

unchecked exception也就是runtime excerption 它的抛出通常是因为我们程序自身的问题 也就是说 我们编的程序有问题 我们不用抛出这类异常 编译器会帮我们抛出的
而checked exception就是像IOException这样的异常 通常是需要程序员抛出的 也是通过try catch或者throw来抛出的。一般而言,Checked Exception 表示这个Exception 必须要被处理,也就是说程序设计者应该已经知道可能会收到某个Exception(因为要try catch住) ,所以程序设计者应该能针对这些不同的Checked Exception 做出不同的处理。

5)       简述Servlet中请求的转发与重定向的区别. (3分)

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session, request参数都可以获取。

6)       简述Overload与Orverride的区别. Overload的方法是否可以改变返回值类型?(3分)

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被\"屏蔽\"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

7)       简述IO流中的字符流与字节流之间的差别。并列举出常用的字符流与字节流。字符流与字节流转换的桥梁是什么? (5分)

 

8)       请使用代码演示单例(Singleton)模式和工厂(Factory)模式(用静态工厂实现). 并使用适当的注释指出实现的要点部分. (8分)

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){

}      //在自己内部定义自己一个实例,注意这是private 只供内部调用     

private static Singleton instance = new Singleton();//这里提供了一个供外部访问本class的静态方法,可以直接访问 

public static Singleton getInstance() { 

return instance;        

}    

}    

第二种形式:

public class Singleton {   

private static Singleton instance = null;  

public static synchronized Singleton getInstance() {//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次,使用时生成实例,提高了效率!  

if(instance==null)

instance=new Singleton();return instance;   

}

} 其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些

 

9)       描述使用JDBC连接数据库的过程,并写出关键的注释。(基于oracle数据库连接) (6分).

连接 Oracle 数据库

Class.forName( “ oracle.jdbc.driver.OracleDriver ” );//加载oracle驱动类

Connection con=DriverManager.openConnection( “ jdbc:oracle:thin:@localhost:1521:DataBase

” , ” UserName ” , ” Password ” );//获得oracle数据库的连接

preparedStatment ps=Con.preparedStatment( “ select * from [ table ]”);//获得与oracle数据库操作的preparestatement对象

ResultSet rs=ps.executeQuery();//执行sql语句

While(rs.next)//遍历结果集

{

Rs.getString(1) 或 rs.getString( “ 字段名 ” )

}

 

 

10)   请写一个java socket编程代码,需要完成以下功能: (10分)

a)         有服务端等待客户端连接

b)         客户端连接成功之后,给客户端发一条消息”好好考试,争取被录取”;

c)         客户端在获得消息之后,在控制台打印出来,并结束连接

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.*;

public class SocketComm {

    public static void main(String[] args){

        new Server().start();

        new Client().connect("127.0.0.1", 1234);

    }

}

class Client {

    public void connect(final String host, final int port) {

        new Thread(new Runnable() {

 

            @Override

            public void run() {

                try {

                    Socket s = new Socket(host, port);

                    DataInputStream dis = new DataInputStream(

                            s.getInputStream());

                    String msg = dis.readUTF();

                    System.out.println(msg);

                } catch (Exception e) {

                    e.printStackTrace(System.err);

                }

            }

        }).start();

    }

}

class Server implements Runnable {

 

    public void start() {

        new Thread(this).start();

    }

 

    @Override

    public void run() {

        ServerSocket ss = null;

        Socket s = null;

        try {

            ss = new ServerSocket(SERVER_PORT);

            s = ss.accept();

            DataOutputStream dos = new DataOutputStream(s.getOutputStream());

            dos.writeUTF("好好考试,争取被录取");

        } catch (Exception e) {

            e.printStackTrace(System.err);

        } finally {

            try {

                if (s != null) {

                    s.close();

                }

                if (ss != null) {

                    ss.close();

                }

            } catch (IOException e) {

                e.printStackTrace(System.err);

            }

        }

    }

    private static final int SERVER_PORT = 1234;

}

 

3.       数据库(共20分)

数据库中有以下两张表,各表之间的关系大家根据字面意思理解,在这里就不详细列出:

-          部门表department,包括部门编号(deptId), 部门名称(deptname)

-          员工表employee, 包括员工编号(empid), 员工姓名(empname), 部门编号(deptid), 工资(e_wage)

请按要求写出基于oracle数据库的sql语句:

1.列出工资大于7000的员工所属部门的编号. (2分)

select employee.empname from employee where employee.e_wage>7000

 

2.列出员工表中的部门名称(要求使用左连接).(2分)

select e.deptid,d.deptname from employee e, left outer join department d on e.deptid=d.deptid

 

3.列出员工数少于3人的部门编号. (3分)

select employee.deptid from employee where (select count(employee.empid) from employee group by employee.deptid)>3

 

4.列出工资最高的员工姓名. (3分)

select employee.empname from employee

where employee.e_wage=(select t.e_wage from

(select d.empname,d.e_wage,rownum rnum from

select employee.empname, employee.e_wage from employee order by employee.e_wage)d)t where t.rnum=1);

 

5.求各部门的平均工资(2分)

select department.deptname,avg(employee.e_wage) from employee,department where employee.deptid=department.deptid group by employee.deptid

 

6.求各部门的员工工资总额(3分)

select department.deptname,sum(employee.e_wage) from employee,department where employee.deptid=department.deptid group by employee.deptid

 

7.求每个部门中的最大工资值与最小工资,并且他的最小值小于5000, 最大值大于15000的部门信息.(3分)

select department.deptname max(employee.e_wage),min(employee.e_wage) from employee,department 

where employee.deptid=department.deptid

and (select min(employee.e_wage) from employee ,department where employee.deptid=department.deptid group by department.deptid )<5000

and (select max(employee.e_wage) from employee ,department where employee.deptid=department.deptid group by department.deptid)>15000

 

8.假如数据库中有一个和员工表结构相同的空表employee2, 请用一条SQL语句将employee表中的所有记录插入到employee2表中. (2分)

insert into employee2 select * from employee;

阅读更多
个人分类: java基础
想对作者说点什么? 我来说一句

软通动力2012最新java笔试

2012年08月28日 19KB 下载

软通动力面试集(Java、日语)

2011年06月21日 82KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭