java面试题02

1.JAVA内部使用的编码格式是(utf-8)

2.

public class Threads2 implements Runnable {

@Override
public void run() {
System.out.println("run.");
throw new RuntimeException("problem");

}

public static void main(String[] args) {
Thread t = new Thread(new Threads2());
t.start();
System.out.println("End of method.");
}

}

执行结果:

run.
End of method.
Exception in thread "Thread-0" java.lang.RuntimeException: problem

或者:

End of method.
run.
Exception in thread "Thread-0" java.lang.RuntimeException: problem

3.

public class SimpleCalc {
public int value;

public void calculate() {
value += 7;
}
}

 

public class MultiCalc extends SimpleCalc {
public void calculate() {
value -= 3;
}

public void calculate(int multiplier) {
calculate();
super.calculate();
value *= multiplier;
}

public static void main(String[] args) {
MultiCalc calculate = new MultiCalc();
calculate.calculate(2);
System.out.println("value is:" + calculate.value);
}
}

 

输出结果:vaue is:8

 

4.对于JSP的通用规则,描述正确的是:

如果URL不是以“/”开始的,就被解释为相对于当前的JSP路径。

5.在MVC设计模式中,JavaBean的作用域是:

model

6.在一个Filter中,处理Filter业务的是什么方法?

doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

7.对下面Spring声明式事务的配置含义的说明错误是(缺少SqlSessionFactory属性的注入)。

8、hibernate API中的几口有一下几类 配置hibernate的接口是 configuration

9、事务的原子性是指:事务的原子性是指事务的所有操纵在数据库中要么全部正确反映出来,要么全部不反映

10、外链接的条件可以放在以下哪一个语句中 where;

第二部分 简答题

1、List Map Set 三个接口在存取元素时各有什么特点?

答:

List与Set都是单列元素的集合,它们有一个功共同的父接口Collection。

Set里面不允许有重复的元素,

存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。

取元素:没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

 

List表示有先后顺序的集合,

存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中的存放位置。

取元素:方法1:Iterator接口取得所有,逐一遍历各个元素

        方法2:调用get(index i)来明确说明取第几个。

 

Map是双列的集合,存放用put方法:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。

取元素:用get(Object key)方法根据key获得相应的value。

        也可以获得所有的key的集合,还可以获得所有的value的集合,

        还可以获得key和value组合成的Map.Entry对象的集合。

 

List以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

2、列举你所知道的排序方法 请写出快捷排序的伪代码?

答:排序的方法有:插入排序,选择排序,冒泡排序,堆排序,快速排序,归并排序,计数排序,基数排序,桶排序
快速排序的伪代码:

public void QuickSort(SeqList R,int low,int high){  

        //对R[low...high]进行快速排序  
        int pivotpos;//划分后的基准记录的位置  
        if(low<high){  
            //仅当区间长度大于1时才需排序  
            pivotpos = Partition(R,low,high);//对R[low...high]进行划分  
            QuickSort(R,low,pivotpos-1);  
            QuickSort(R,pivotpos+1,high);  
        }  
    }  

3、谈谈 final、finally、finalize 的区别?

答:

1.final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。

2.finally:在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。

3.finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

 

4、Struts的validate框架是如何验证的?(Struts1与Struts2任选其一)

 

答案:

 

方法一:Action类继承ActionSupport类,其中ActionSupport实现了Validateable接口,并定义了validation方法,只要在用户自定义的Action类中重写该方法就可以实现该功能。

 

其中错误信息可以通过addFieldError方法将错误信息保存起来。

 

方法二:在Action类的文件的路径下,添加一个校验文件ActionName-validation.xml,并配置校验器。

5、叙述Spring AOP事务的含义。

答案:

spring有两种事务配置方式,一种是配置的事务管理器,另一种的是代码控制的事务。
配置的事务管理器的方式是我们经常用到的经常会用到在配置文件中。代码控制的事务分为jdbc模板的和事务管理器的,jdbc默认自动提交,事务管理器的和咱们通常的一样会有commit rollback等操作。

第三部分:编程题

1、写出使用jdbc连接数据库进行查询的java代码。(数据库不限)

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 

public class DBCon { 
    //数据库驱动对象 
    public static final String DRIVER="oracle.jdbc.driver.OracleDriver"; 
    //数据库连接地址(数据库名) 
    public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl"; 
    //登陆名 
    public static final String USER="FM"; 
    //登陆密码 
    public static final String PWD="FM"; 
    //创建数据库连接对象 
    private Connection con=null; 
    //创建数据库预编译对象 
    private PreparedStatement ps=null; 
    //创建结果集 
    private ResultSet rs=null; 
    //创建数据源对象 
    public static DataSource source=null; 

        /** 
         * 获取数据库连接 
         */ 
        public Connection getCon(){ 
            try { 
                Class.forName(DRIVER); 
            } catch (ClassNotFoundException e) { 
                      e.printStackTrace(); 
            } 
            try { 
                con=DriverManager.getConnection(URL,USER,PWD); 
            } catch (SQLException e) { 
                    e.printStackTrace(); 
            }              
            return con; 
        } 

          /** 
     * 关闭所有资源 
     */ 
    public void closeAll(){ 
        if(rs!=null) 
            try { 
                rs.close(); 
            } catch (SQLException e) { 
                     e.printStackTrace(); 
            } 
            if(ps!=null) 
                try { 
                    ps.close(); 
                } catch (SQLException e) { 
                        e.printStackTrace(); 
                } 
                if(con!=null) 
                    try { 
                        con.close();  
                    } catch (SQLException e) { 
                        e.printStackTrace(); 
                    } 



    /** 
     * @param sql数据库查询语句 
     * @param pras参数列表(可传,可不传,不传为NULL,以数组形式存在) 
     * @return 返回结果集 
     */ 
    public ResultSet query(String sql,String... pras){ 
        con=getCon(); 
        try { 
            ps=con.prepareStatement(sql); 
            if(pras!=null) 
                for(int i=0;i<pras.length;i++){ 
                    ps.setString(i+1, pras[i]); 
                } 
            rs=ps.executeQuery(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } 
        return rs; 
    } 
}

2、写出实现下述功能的SQL语句

有两个表PRODUCT(产品信息表)和表PRODUCT_SS(产品进销表)。

 

PRODUCT表有下列字段:

字段

字段说明

字段类型

字段长度

说明

PRO_ID

产品编号

字符型

10

主键

PRO_NAME

产品名称

字符型

50

 

PRO_COUNT

产品总量

数字型

10

 

        

         PRODUCT_SALE表有下列字段:

字段

字段说明

字段类型

字段长度

说明

ID

序号,自增

 

 

主键

PRO_ID

产品编号

字符型

10

外键

SALE_COUNT

销售数量

数字型

6

 

SS_DATE

发生日期

日期型

 

 

1)写出建表的SQL语句

答案:

CREATE TABLE PRODUCT(

PRO_ID VARCHAR(10) PRIMARY KEY COMMENT '产品编号',

PRO_NAME VARCHAR(50) COMMENT '产品名称',

PRO_COUNT INT(10) COMMENT '产品总量'

)COMMENT='产品信息表';

 

CREATE TABLE PRODUCT_SALE(

ID INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '序号',

PRO_ID VARCHAR(10) COMMENT '产品编号',

SALE_COUNT INT(6) COMMENT '销售数量',

SS_DATE DATE COMMENT '发生日期'

)COMMENT='产品进销表';                       

 

ALTER TABLE PRODUCT_SALE             

ADD CONSTRAINT

FOREIGN KEY(PRO_ID) REFERENCES PRODUCT(PRO_ID)

 

2)显示产品编号以”12”开头的产品信息。

答案:

SELECT * FROM product WHERE pro_id LIKE '12%';

 

3)插入PRODUCT_SALE表中产品编号为”67890”的产品销售数量为2000。(注      意事务)

答案:

BEGIN;

 INSERT INTO product_sale (pro_id,sale_count)

  VALUES(67890,2000);

COMMIT;

 

4)显示所有产品的库存,要求显示产品名称和库存数量(用一条SQL语句).

答案:

SELECT pro_name,pro_count

FROM product;

 

5)显示所有产品的库存,要求显示产品名称、库存数量、库存状态。(用一条         SQL语句).

当库存数        >=10000时,库存状态显示库存积压;

当库存数        <=1000时,库存状态显示库存不足;

其他情况,库存状态显示库存正常。

答案:

SELECT pro_name AS 产品名称, pro_count AS 库存数量,  

  CASE  

    WHEN pro_count >= 10000 THEN '库存积压' 

    WHEN pro_count > 1000 AND pro_count < 10000 THEN '库存正常'  

    WHEN pro_count <= 1000 THEN '库存不足' 

  END 

AS 库存状态 

FROM product;  

 

posted @ 2017-09-23 20:03  East-M  阅读(257)  评论(0编辑  收藏  举报