IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java知识点详解 3,2021年阿里Java高级面试题及答案 -> 正文阅读

[Java知识库]【Java知识点详解 3,2021年阿里Java高级面试题及答案

1、分布式传递对象,或者网络传输,需要序列化

2、我调用你的jvm的方法,结果返回到我的jvm上进行处理

3、序列化可以保持对象的状态

比如:tomcat关闭以后会把session对象序列化到SESSIONS.ser文件中,等下次启动的时候就把这些session再加载到内存里面来。

4、数据传输并复原

在j2ee中页面与后台使用的比较多。尤其是在列表中的时候使用尤为突出。

比如:一个人员的列表保存起来的话,你可以将这个列表序列化,传到后台,然后再反序列化成person对象直接进行对象的保存。

5、比如EJB远程调用?分布式存储,缓存存储等

6、像银行卡、密码这些字段不能被序列化

四、序列化和反序列化的注意事项

===============

1、Java序列化的方式


实现 Serializable 接口:可以自定义 writeObject、readObject、writeReplace、readResolve 方法,会通过反射调用。

实现 Externalizable 接口:需要实现 writeExternal 和 readExternal 方法。

2、序列化ID问题


虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)。

3、静态字段不会序列化


序列化时不保存静态变量,这是因为序列化保存的是对象的状态,静态变量属于类的状态,因此序列化并不保存静态变量。

4、transient


transient代表对象的临时数据。

如果你不想让对象中的某个成员被序列化可以在定义它的时候加上 transient 关键字进行修饰,这样,在对象被序列化时其就不会被序列化。

transient 修饰过的成员反序列化后将赋予默认值,即 0 或 null。

有些时候像银行卡号这些字段是不希望在网络上传输的,transient的作用就是把这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

5、父类的序列化


当一个父类实现序列化,子类自动实现序列化;而子类实现了 Serializable 接口,父类也需要实现Serializable 接口。

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


7、并非所有的对象都可以序列化


(1)安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行RMI传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的;

(2)资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分配,而且,也是没有必要这样实现;

8、序列化解决深拷贝问题


如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存,这是能用序列化解决深拷贝的重要原因。

五、代码实例

======

1、实体类



package javase.transientpackage;

 

import java.io.Serializable;

 

public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private String username;

    private transient String password;

 

    //construct、setter、getter

}

2、ObjectOutputStream实现序列化和ObjectInputStream实现反序列化



package javase.transientpackage;

 

import java.io.*;

 

public class TransientTest {

    public static void main(String[] args) {

        try {

            SerializeUser();

            DeSerializeUser();

        } catch (IOException e) {

            e.printStackTrace();

        }catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

    }

 

    //序列化

    private static void SerializeUser() throws IOException{

        User user = new User();

        user.setUsername("素小暖");

        user.setPassword("123456");

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D://data.txt"));

        oos.writeObject(user);

        oos.close();

        System.out.println("普通字段序列化:username=  "+user.getUsername());

        System.out.println("添加了transient关键字序列化:password=  "+user.getPassword());

    }

 

    //反序列化

    private static void DeSerializeUser() throws IOException, ClassNotFoundException {

        File file = new File("D://data.txt");

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));

        User user = (User)ois.readObject();



# **感受:**

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

**也祝愿各位同学,都能找到自己心动的offer。**

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档,**[需要的朋友可以【点赞+关注】戳这里即可免费获取](https://gitee.com/vip204888/java-p7)**

努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

**也祝愿各位同学,都能找到自己心动的offer。**

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档,**[需要的朋友可以【点赞+关注】戳这里即可免费获取](https://gitee.com/vip204888/java-p7)**

![拿到字节跳动offer后,简历被阿里捞了起来,二面迎来了P9"盘问"](https://img-blog.csdnimg.cn/img_convert/d3472d0025d7359fd4c9bb63943e7ba0.png)
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:06:27  更:2021-08-11 12:08:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:59:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码