面向对象的特点
jsp内置对象
HashMap检索内部对象的机制
java解析xml文件的方法
说出user级别线程和daemon线程的区别
ArrayList与vector的区别
运行时异常和一般异常的异同点
说说hibernate多对多如学生很班级的映射
查询出学生成绩大于80分的姓名
问了好多Velocity的东西如如何循环输出后台的数据
Velocity中如何比较两个值的大小

解决方案 »

  1.   

    1.对象唯一性,分类性,继承性。多态性(多形性) 2.JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 
    request 用户端请求,此请求会包含来自GET/POST请求的参数 
    response 网页传回用户端的回应 
    pageContext 网页的属性是在这里管理 
    session 与请求有关的会话期 
    application servlet正在执行的内容 
    out 用来传送回应的输出 
    config servlet的构架部件 
    page JSP网页本身 
    exception 针对错误网页,未捕捉的例外 3,ArrayList和Vector的区别 
      推荐Collection 
      ├List 
      │├LinkedList 
      │├ArrayList 
      │└Vector 
      │ └Stack 
      └Set 
      Collection接口 
      Collection是最基本的集合接口,一个Collection代表一组Object,即 Collection的元素 
      (Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提 
      供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 
      所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的 
      Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与 
      传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。 
      如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的 
      方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下: 
      Iterator it = collection.iterator(); // 获得一个迭代子 
      while(it.hasNext()) { 
      Object obj = it.next(); // 得到下一个元素 
      } 
      由Collection接口派生的两个接口是List和Set。 
      List接口 
      List是有序的Collection,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素 
      。 
      除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,允许添加 
      ,删除,设定元素,还能向前或向后遍历。 
      实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。 
      LinkedList类 
      LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get, remove,insert方法 
      在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列 
      (deque)。 
      注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解 
      决方法是在创建List时构造一个同步的List: 
      List list = Collections.synchronizedList(new LinkedList(...)); 
      ArrayList类 
      ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size, 
      isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间 
      。其他的方法运行时间为线性。 
      每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不 
      断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用 
      ensureCapacity方法来增加ArrayList的容量以提高插入效率。 
      和LinkedList一样,ArrayList也是非同步的(unsynchronized)。 
      Vector类 
      Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和 ArrayList创 
      建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个 
      线程改变了 Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出 
      ConcurrentModificationException,因此必须捕获该异常 
      Stack 类 
      Stack继承自Vector,实现一个后进先出的堆栈。 
      就ArrayList与Vector主要从二方面来说. 
      一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
      二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 
      如果涉及到堆栈,队列等操作,应该考虑用Vector,对于需要快速插入,删除元素,应该使用LinkedList 
      ,如果需要快速随机访问元素,应该使用ArrayList 4.select name from biao where sroce>80
      

  2.   

    面向对象的特点 封装、继承、多态。
    jsp内置对象 1.request对象 2.response对象 3.session对象 4.out对象 5.page对象 6.application对象 7.exception对象 8.pageContext对象 9.config对象 HashMap检索内部对象的机制
    java解析xml文件的方法 DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations)
    说出user级别线程和daemon线程的区别 Java有两种Thread:“守护线程Daemon”与“用户线程User”。
    我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。
    从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:
    用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
    守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。 

    ArrayList与vector的区别 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。2Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。
    运行时异常和一般异常的异同点
    Throwable是所有Java程序中错误处理的父类,有两种资类:Error和Exception。   Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。Exception:表示可恢复的例外,这是可捕捉到的。Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。    但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。    出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。    如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。异常处理的目标之一就是为了把程序从异常中恢复出来。
    说说hibernate多对多如学生很班级的映射 班级与学生的关系就是典型的一对多的关系。在实际编写程序时,一对多关系有两种实现方式:单向关联和双向关联。单向的一对多关系只需要在一方进行映射配置,而双向的一对多需要在关联的双方进行映射配置。
    查询出学生成绩大于80分的姓名
    问了好多Velocity的东西如如何循环输出后台的数据
    Velocity中如何比较两个值的大小  Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false,但是与java不同它使用"=="来比较两个值,而且velocity要求等号两边的值类型相同。
    关系、逻辑运算符
    Velocity中使用等号操作符判断两个变量的关系。例如:
    #set ( $foo = "deoxyribonucleic acid" )
    #set ( $bar = "ribonucleic acid" )
      

  3.   

    1. 封装、继承、多态
    2. request,response,out,pageContext,session,application,config,page
    3. 不是太明白,HashMap把它的元素存储在哈希表中,通过key来寻找吧
    4. dom,sax,jdom,dom4j...
    5. 任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开。用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
    6. 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
    7. 学生和班级是多对多?这不大符合情理,不过就照你说的来吧。学生和班级之间是多对多的关联关系,这两张表之间最好不要直接关联,应该设置一张关联表来表达学生表与班级表之间的关联, 这样在Hibernate中,设置的时候,学生实体与关联对象之间关联(多对一),班级也与关联对象关联(多对一),这样设计就比较清楚了。 
    8. 不知道你表是什么结构,假设姓名与成绩都在一个表里
        select name from table where grade > 80
    9,10 没用过Velocity
      

  4.   

    其实面试分面试哪类人了:新毕业的大学生,肯定是要考些java基础的的东西;几年开发经验的,再考些这东西也不太符合实际,但,往往几年开发经验的以上问题,70%不清楚了已经,,呵呵