一个公司面试题~!

来源:互联网 发布:sql group by 取多列 编辑:程序博客网 时间:2024/04/30 07:45
昨天一个好朋友和我打电话说,他接到一个著名公司的面试通知,然后他很欣喜的去了,因为他深入j2ee开发很多年,对于各种框架的应用十分的熟练,就是那种明天上班马上就能上手工作的那种人,公司的面试题很简单,却给他出了一个简单的难题:
   题:假设某个Login对象保存某个特定的登录会话信息,登录的合法性通过校验以后,我们想把数据保存下来,但是不保存密码,为了做到这一点公司的技术人员实现的Serializable接口,这是为什么呢?下面给出了代码,但是代码中缺少一些语句,请你给添加上。
 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
 
 
public class Login implements Serializable {
       private Date date = new Date();
 
       private String username;
 
       private transient String password;
 
       public Login(String name, String pwd) {
              username = name;
              password = pwd;
       }
 
       public String toString() {
              String pwd = (password == null) ? "(n/a)" : password;
              return "Login info:/n username:" + username + "/n date:" + date
                            + "/n password:" + pwd;
       }
 
public static void main(String[] args) throws Exception{
 Login a=new Login("tianyi","easyjf");
 System.out.println("Login a="+a);
 ObjectOutputStream o=new ObjectOutputStream(new FileOutputStream("Login.out"));
 o.writeObject(a);
 o.close();
 Thread.sleep(1000);
 ObjectInputStream in=new ObjectInputStream(new FileInputStream("Login.out"));
 System.out.println("Recovering object at"+new Date());
 a=(Login)in.readObject();
 System.out.println("Login a="+a);
}}
,这个题目就是对java基础的考察,不了解这个序列化接口的人们肯定解决不了这个问题,序列化接口大家都知道,他什么方法都没有,但是实现序列化接口的类,它包含transient关键字,只要实现这个关键字就能很好的控制字段,他可以逐个关闭序列化,用Bruce Eckel的话说“不用麻烦你保存或者恢复数据-------我自己会处理的!”,这个题目就是考察这个简单的东西了,只要在password前面加上关键字transient就可以解决这个问题了!