那些年我做错的笔试题一

原创
2017/03/04 09:35
阅读数 137

1.

的输出结果为:

good and gbc

解释:change()方法中传入的第一个参数为值传递,意味着在方法体内创建了一个局部变量str,其初始值为good,因此str="test ok",只是使这个局部变量指向了新的字符串"test ok",不会影响原来的str的值,而change()方法中传入的第二个参数为引用传递,将ch指向的地址传了进去,因此ch[0] = g;语句会将位于ch所指向地址的数组的第一项进行改变。

2.

好吧,无修饰符就是包修饰符~!

3.java object中常用的方法:getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(),  wait(), finalize()

  1.     
  2.     /* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。*/     
  3.      private   static   native   void  registerNatives();   
  4.    /* 对象初始化时自动调用此方法*/   
  5.      static  {   
  6.         registerNatives();   
  7.     }   
  8.     /* 返回此 Object 的运行时类。*/   
  9.      public   final   native  Class<?> getClass();   
  10.   
  11. /*   
  12. hashCode 的常规协定是:(本质 上是 返回该对象的哈希码值。 )
  1.    
  2. 1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。    
  3. 2.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。    
  4. 3.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。   
  5. */   
  6.   
  7.      public   native   int  hashCode();   
  8.   
  9.   
  10.      public   boolean  equals(Object obj) {   
  11.      return  ( this  == obj);   
  12.     }   
  13.   
  14.      /*本地CLONE方法,用于对象的复制。*/   
  15.      protected   native  Object clone()  throws  CloneNotSupportedException;   
  16.   
  17.      /*返回该对象的字符串表示。非常重要的方法*/   
  18.      public  String toString() {   
  19.      return  getClass().getName() +  "@"  + Integer.toHexString(hashCode());   
  20.     }   
  21.   
  22.     /*唤醒在此对象监视器上等待的单个线程。*/   
  23.      public   final   native   void  notify();   
  24.   
  25.     /*唤醒在此对象监视器上等待的所有线程。*/   
  26.      public   final   native   void  notifyAll();   
  27.   
  28.   
  29. /*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。    
  30. 当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。*/   
  31.      public   final   void  wait()  throws  InterruptedException {   
  32.     wait( 0 );   
  33.     }   
  34.   
  35.   
  36.   
  37.     /*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。*/   
  38.      public   final   native   void  wait( long  timeout)  throws  InterruptedException;   
  39.   
  40.      /* 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。*/   
  41.      public   final   void  wait( long  timeout,  int  nanos)  throws  InterruptedException {   
  42.          if  (timeout <  0 ) {   
  43.              throw   new  IllegalArgumentException( "timeout value is negative" );   
  44.         }   
  45.   
  46.          if  (nanos <  0  || nanos >  999999 ) {   
  47.              throw   new  IllegalArgumentException(   
  48.                  "nanosecond timeout value out of range" );   
  49.         }   
  50.   
  51.      if  (nanos >=  500000  || (nanos !=  0  && timeout ==  0 )) {   
  52.         timeout++;   
  53.     }   
  54.   
  55.     wait(timeout);   
  56.     }   
  57.   
  58.      /*当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。*/   
  59.      protected   void  finalize()  throws  Throwable { }   

4.抛出异常:

public void getCustomerInfo() {
        try {
            // do something that may cause an Exception
        } catch (java.io.FileNotFoundException ex) {
            System.out.print("FileNotFoundException!");
        } catch (java.io.IOException ex) {
            System.out.print("IOException!");
        } catch (java.lang.Exception ex) {
            System.out.print("Exception!");
        }
    }

题目说抛出一个异常,但是没说具体是什么异常,那么就要分情况了:

1.如果抛出一个FileNotFoundException(或其子类),那么最终结果就打印FileNotFoundException

2.如果抛出一个IOException,或者IOException的子类(不包含FileNotFoundException及其子类),那么最终结果就打印IOException

3.如果抛出一个Exception(不包含IOException及其子类),那么最终结果就打印Exception.

5.动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp" flush="true" /> 它总是会检查所含文件中的变化 , 适合用于包含动态页面 , 并且可以带参数。各个文件分别先编译,然后组合成一个文件。
静态 INCLUDE 用 include 伪码实现 , 定不会检查所含文件的变化 , 适用于包含静态页面 <%@ include file="included.htm" %> 。先将文件的代码被原封不动地加入到了主页面从而合成一个文件,然后再进行翻译,此时不允许有相同的变量。 
以下是对 include 两种用法的区别 , 主要有两个方面的不同 ;

    一 : 执行时间上 :

    <%@ include file="relativeURI"%> 是在翻译阶段执行

    <jsp:include page="relativeURI" flush="true" /> 在请求处理阶段执行 .

    二 : 引入内容的不同 :

    <%@ include file="relativeURI"%>

    引入静态文本 (html,jsp), 在 JSP 页面被转化成 servlet 之前和它融和到一起 .

    <jsp:include page="relativeURI" flush="true" /> 引入执行页面或 servlet 所生成的应答文本 .

6.优化Hibernate所鼓励的7大措施:

1.尽量使用many-to-one,避免使用单项one-to-many:Hibernate鼓励使用双向一对多关联,不使用单向一对多关联。单向一对多关联映射是在one端维护关系的,必须先保存many端后才可以保存one端,所以在保存many端时该端不知道one端是否存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空则无法保存。因为是one端维护关系,所以在保存one端时,会发出多余的update语句维护many端的外键关系。
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部