java面试题06

第一部分

1.try{}里面有一个return语句,那么紧跟这个try后面的finally{}里面的code或不会执行,什么时候执行,在return前还是之后?

会执行

在return 执行之前执行

2.写出通过主函数在控制台打印出“helloworld”的程序。

package cn.ssdf.test;

public class Test01{

public static void main(String [] args) {

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

}

}

3.JQuery选取页面元素iddeptid的写法

$(“#deptid”);

4.编程实现:将字符串“hello worldhello java”输出为“hello worldworld hello.

String str = “hello world,hello java”;

str.replace(“hello java”,” world hello”);

5.简述strut2hibernatespring三个框框架各自的功能

hibernate是一个持久层框架,对JDBC进行了封装,负责对数据库的CRUD操作;

strut2是三层开发中的表现层的框架,MVC模式中的model层;很好的实现页面的跳转和用户输入信息的验证,处理用户请求信息并返回显示页面给用户;

spring是一个轻量级框架,两大特性:IOC和AOP;通过IOC-控制反转将对象的创建交给spring容器,解决各层业务层和dao层之间的过度依赖;AOP面向切面,对事物进行很好的管理,支持多个框架例如:hibernate、struts2、mybatis等。

6.简述Spring框架中如何控制事务

Spring支持两种类型的事务管理:这意味着你的业务代码分开事务管理。你只用注释或基于XML 配置来管理事务。

编程式事务管理:

编程式事务管理办法允许您管理与编程的源代码的帮助下事务。这就给了极大的灵活性,但它难以维护。

声明式事务管理:

声明式事务管理的方法可帮助您管理配置,而不是在源代码中硬编码的事务。这意味着,可以单独从业务代码事务管理。只用注释或基于XML配置来管理事务。bean的配置将指定的方法是事务性。以下是声明性与事务相关的步骤:

我们使用<tx:advice/>标签,这将创建我们定义了一个切入点匹配所有我们想做成事务,并引用其中的事务通知方法的事务并同时处理建议。

7.写出sql语法中左外连接的关键字,并且叙述左外连接的含义

关键字:left join ……on……

含义:查询结果左表为准,左表内容全部显示,右表对应的内容不管有没有内容都显示出来。

8.oracle数据库表A中有类型为varchart2deptcode的字段,通过sql实现deptcode字段中第二位到第四位等于03的所有记录。

select * from A where substr(“deptcode”,2,4) = “03”;

9.如何看软件产品的易用性、可扩展性

可维护性是说,对于前期开发的代码,后期在进行机能改善和扩充时,修改方便。不会出现推倒重新编写。

易用性是说,代码简洁明了,不冗余。

10.说说你个人的优点与缺点

第二部分

1.short S1=1;S1=S1+1;有什么错?short S1=1;S1+= 1;有什么错?

前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1),后面一句没错。

2.用最有效率的方法算出2乘以8等于几?

2<<3

3.请说出作用域public,private,protected,以及不写时的区别

public 所有地方都可以使用

protected 同一类、同包和子类中可以使用

private 仅限本包内使用

不写时  在同一类和本包中可以使用

4.构造器Constructor是否可被override

不可以被重写,但是可以重载。

5.是否可以继承String

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的

6.描述一下JVM加载class文件的原理机制

类装载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤:

(1)装载:查找和导入Class文件

(2)链接:其中解析步骤是可以选择的

(a)检查:检查载入的class文件数据的正确性

(b)准备:给类的静态变量分配存储空间

(c)解析:将符号引用转成直接引用

(3)初始化:对静态变量,静态代码块执行初始化工作

类装载工作由ClassLoder和其子类负责。JVM在运行时会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器)和AppClassLoader,其中根装载器不是ClassLoader的子类,由C++编写,因此在java中看不到他,负责装载JRE的核心类库,如JRE目录下的rt.jar,charsets.jar等。ExtClassLoader是ClassLoder的子类,负责装载JRE扩展目录ext下的jar类包;AppClassLoader负责装载classpath路径下的类包,这三个类装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下使用AppClassLoader装载应用程序的类

Java装载类使用“全盘负责委托机制”。“全盘负责”是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入;“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。这一点是从安全方面考虑的,试想如果一个人写了一个恶意的基础类(如java.lang.String)并加载到JVM将会引起严重的后果,但有了全盘负责制,java.lang.String永远是由根装载器来装载,避免以上情况发生

7.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是那些?

Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。

8.STRUTS的应用(如STRUTS架构)

Struts 是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。

9.hibernateinverse属性的作用

hibernate的属性inverse:它是用来指定关联的控制方的,inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联由对方控制。

10.介绍一下hibernate的二级缓存

二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用Hibernate 的二级缓存后,注意不要有其他的应用或SessionFactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

11.table显示n条记录,每三行换一次颜色,即123用红色字体,456用绿色字体,789用红色字体

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 

  <head> 

      <script type="text/javascript"> 

        window.onload=function() { 

               var tbl = document.getElementById("tbl"); 

               var rows = tbl.getElementsByTagName("tr"); 

               for(i=0;i<rows.length;i++) { 

                      var j = parseInt(i/3); // 此语句的效果是,以3个为单位,000 111 222 333 444 ... 

                      if(j%2==0) rows[i].style.backgroundColor="#f00"; 

                      else  rows[i].style.backgroundColor="#0f0"; 

               } 

        }; 

      </script> 

  </head> 

  <body> 

    <table id="tbl" border="1"> 

       <tr><td>1</td></tr> 

       <tr><td>2</td></tr> 

       <tr><td>3</td></tr> 

       <tr><td>4</td></tr> 

       <tr><td>5</td></tr> 

       <tr><td>6</td></tr> 

       <tr><td>7</td></tr> 

       <tr><td>8</td></tr> 

       <tr><td>9</td></tr> 

       <tr><td>10</td></tr> 

       <tr><td>11</td></tr> 

       <tr><td>12</td></tr> 

       <tr><td>13</td></tr>

    </table> 

  </body> 

</html> 

12.第一个人10,第二个比第一个大2岁,一次递推,请用递归方式计算出第八个人多大?

package com.test; 

public class ComputeAge { 

    /**

     * 递归函数的执行过程具有三个特点: 

     * 1、函数名相同 2、不断地自调用 3、最后被调用的函数要最先被返回

     * @param n

     * @return

     */ 

    public static int getComputeAge(int n) { 

        int age = 0; 

        if (n == 1) { 

            age = 10; 

        } else { 

            age = getComputeAge(n - 1) + 2; 

        } 

        return age; 

    } 

    public static void main(String[] args) { 

        System.out.println(getComputeAge(8)); 

    } 

13。请写出用于校验HTML文本框中输入的内容全部为数字的javascript代码

<input type="text" id="d1" onblur=" chkNumber(this)"/>

<script type=”text/javascript” />  

function chkNumber(eleText) {

              var value =eleText.value;

              var len =value.length;

              for(vari=0;i<len;i++) {

                     if(value.charAt(i)>"9"||value.charAt(i)<"0") {

                            alert("含有非数字字符");

                            eleText.focus();

                            break;

                     }

              }

       }

</script>

14.查出比经理薪水还高的员工信息

wzg大于flx,lhm大于zxx

select e.*

from employees e,employees m

where e.managerid=m.id 

and e.salary>m.salary;

15.一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?

alter table drop column score;

alter table add colunm score int;

可能会很快,但是需要试验,试验不能拿真实的环境来操作,并且要注意,这样的操作时无法回滚的,只有inert update delete等DML语句才能回滚,对于create table,drop table ,alter table等DDL语句是不能回滚。

  解决方案一,update user set score=0;

  解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就alter table user drop column score;alter table user add column score int。

   下面代码实现每年的那个凌晨时刻进行清零。

Runnable runnable = new Runnable(){

   public void run(){

       clearDb();

       schedule(this,new Date(new Date().getYear()+1,0,0));

    }

 };

     schedule(runnable,

     new Date(new Date().getYear()+1,0,1));

原文地址:https://www.cnblogs.com/kuoAT/p/6681842.html