java手写程序的面试题

序列化和反序列化

什么是序列化和反序列化?

把类转换成二进制持久化到本地,反序列化就是把本地的二进制文件转换成类

序列化id如何产生?

当我们一个实体类中没有显示的定义一个名为“serialVersionUID”、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。譬如,当我们编写一个类时,随着时间的推移,我们因为需求改动,需要在本地类中添加其他的字段,这个时候再反序列化时便会出现serialVersionUID不一致,导致反序列化失败。那么如何解决呢?便是在本地类中添加一个“serialVersionUID”变量,值保持不变,便可以进行序列化和反序列化。

在哪些场景下需要实现序列化接口和实现序列化的好处

  1. 网络传输
  2. 持久化(内存的数据写到磁盘)
    好处:二进制数据(所有语言都认识)
  3. 数据可以共享
  4. 数据备份(容灾or灾备)

Java怎么做序列化的

1)让类实现Serializable接口,该接口是一个标志性接口,标注该类对象是可被序列

2)然后使用一个输出流来构造一个对象输出流并通过writeObect(Obejct)方法就可以将实现对象写出

3)如果需要反序列化,则可以用一个输入流建立对象输入流,然后通过readObeject方法从流中读取对象

作用

1)序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间;

2)为了解决对象流读写操作时可能引发的问题(如果不进行序列化,可能会存在数据乱序的问题)

3)序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆

序列化和反序列化介绍
java手写程序的面试题_第1张图片

java手写程序的面试题_第2张图片
序列化(前提对象首先实现Serializable接口)
java手写程序的面试题_第3张图片
反序列化
java手写程序的面试题_第4张图片
静态和瞬态都不能进行序列化
序列号冲突
java手写程序的面试题_第5张图片
java手写程序的面试题_第6张图片

单例

package com.itheima.single;
/*
     外界不能随便new
        构造方法私有化

        提供公共的获取对象方式 静态的

        new 的动作 只能一次!!!

        静态变量随着类的加载 初始化

        初始化一次

        如何完成单例

        1:私有构造方法
        2:定义静态变量  完成初始化
        3:提供公共的静态的获取方法

      饿汉式:
         只要类加载了,这个对象就产生了。
         不管别人用不用。

      多线程使用没有问题。
 */
public class Single {
     
    //定义静态变量
    private static Single single= new Single();

//    私有了构造
    private Single(){
     }

    //提供公共的访问方式  静态的
    public static Single newInstance(){
     

        return single;
    }


}

package com.itheima.single2;
/*

    饿汉式
        类一加载就创建了对象。

        浪费内存。
        延迟加载。用的时候再创建。

     懒汉式
        延迟对象的产生
 */
public class Single {
     
    //定义静态变量
    private static Single single = null;

//    私有了构造
    private Single(){
     }

    //提供公共的访问方式  静态的
    public  static Single newInstance(){
     

        //   判断该对象是否已经创建了
        if(single==null){
     
            single = new Single();
        }
        return single;
    }


}

package com.itheima.single3;
/*

    饿汉式
        类一加载就创建了对象。

        浪费内存。
        延迟加载。用的时候再创建。

     懒汉式
        延迟对象的产生

        线程安全的懒汉式
 */
public class Single {
     
    //定义静态变量
    private static Single single ;

//    私有了构造
    private Single(){
     }

    //提供公共的访问方式  静态的
    public   static Single newInstance(){
     

        if(single==null){
     
            final Single s = new Single();
        }
       //为了提高效率加一个 非空判断
       if(single==null){
     
           synchronized (Single.class){
     
               //   判断该对象是否已经创建了
               if(single==null){
     
                   single = new Single();
               }
           }
       }

        return single;
    }


}

Jdbc连Oracle的程序,并实现数据查询

package hello.ant;
import java.sql.*;
public class jdbc
{
     
    String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    String theUser="admin";
    String thePw="manager";
    Connection c=null;
    Statement conn;
    ResultSet rs=null;
    public jdbc()
    {
     
        try{
     
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
            c = DriverManager.getConnection(dbUrl,theUser,thePw);
            conn=c.createStatement();
        }catch(Exception e){
     
            e.printStackTrace();
        }
    }
    public boolean executeUpdate(String sql)
    {
     
        try
        {
     
            conn.executeUpdate(sql);
            return true;
        }
        catch (SQLException e)
        {
     
            e.printStackTrace();
            return false;
        }
    }
    public ResultSet executeQuery(String sql)
    {
     
        rs=null;
        try
        {
     
            rs=conn.executeQuery(sql);
        }
        catch (SQLException e)
        {
     
            e.printStackTrace();
        }
        return rs;
    }
    public void close()
    {
     
        try
        {
     
            conn.close();
            c.close();
        }
        catch (Exception e)
        {
     
            e.printStackTrace();
        }
    }
    public static void main(String[] args)
    {
     
        ResultSet rs;
        jdbc conn = new jdbc();
        rs=conn.executeQuery("select * from test");
        try{
     
            while (rs.next())
            {
     
                System.out.println(rs.getString("id"));
                System.out.println(rs.getString("name"));
            }
        }catch(Exception e)
        {
     
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(java笔试题)