面试题总结1

来源:互联网 发布:查看淘宝商品类目插件 编辑:程序博客网 时间:2024/06/06 03:08

1.用代码实现以下的图形:

*****
****
***
**
*

public class Picture {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        for(int i=0;i<5;i++){
         for(int j=0;i+j<5;j++){
          System.out.print("*");
         }
         System.out.println();        
        }
 }

}

2.java 事件委托机制的概念:一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制: 垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为 null,则次对象适合进行垃圾回收。

 

3.什么是 java  序列化,如何实现 java  序列化?

         序列化与反序列化的概念:Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。

        什么情况下需要序列化 :a.当你想把的内存中的对象保存到一个文件中或者数据库中时候;

                                                 b.当你想用套接字在网络上传送对象的时候;

                                                 c.Remote Method Invoke远程方法调用时,需要进行序列化。

    如何实现序列化:将需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列化。

       序列化和反序列化例子

     

public class mytest implements Serializable {

 /**
  *
  */
 private static final long serialVersionUID = 1L;

 private String name = "xujiang";
 private int age = 24;

 public static void main(String[] args) {
          xuliehua();
          //fan();
         
 }
 public static void xuliehua() {
  try {
   ObjectOutputStream oos = new ObjectOutputStream(
     new FileOutputStream("xj.dd"));
   mytest mt=new mytest();  
   oos.writeObject(mt);   
   oos.flush();  
   oos.close();
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 @SuppressWarnings("resource")
 public  static void fan() {
  try {
   ObjectInputStream ois =null;
   ois=new ObjectInputStream(new FileInputStream("xj.dd"));
   mytest mt=null;
   mt=(mytest) ois.readObject();
   System.out.println(mt.name);
   System.out.println(mt.age);
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

     序列化ID

     序列化 ID 在 Eclipse 下提供了两种生成策略,一个是固定的 1L,一个是随机生成一个不重复的 long 类型数据(实际上是使用 JDK 工具生成),在这里有一个建议,如果没有特殊需求,就是用默认的 1L 就可以,这样可以确保代码一致时反序列化成功。这也可能是造成序列化和反序列化失败的原因,因为不同的序列化id之间不能进行序列化和反序列化。

     序列化前和序列化后的对象的关系

    插入知识点:==与equal的简单比较:  

    值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

    ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。

    显然,当equals为true时,==不一定为true;

    回答正题:系列化与反序列化后的对象的关系是深度复制;

     序列化前后对象的地址不同了,但是内容是一样的,而且对象中包含的引用也相同。

 

    静态变量能否序列化

   序列化会忽略静态变量,即序列化不保存静态变量的状态。transient后的变量也不能序列化

   序列化的总结:

   a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

   b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

   c) static,transient后的变量不能被序列化;

 

 

0 0
原创粉丝点击