Hi,大家好,我是Mic

一个工作4年的粉丝,投了很多简历

好不容易接到一个互联网公司的面试邀约。

在面试第一轮就被干掉了,原因是对主流互联网技术理解太浅了。

其中就有一个这样的问题:“简单说一下你对序列化和反序列化的理解”

下面看看普通人和高手的回答。

普通人:

序列化和反序列化就是说我要去把一个对象传输到网络上的其他的一个应用上一个情况下,就是我需要对这个对象做序列化。

然后想Java里面我们可以,我们需要对这个对象的序列化的话,我们需要去实现像Serializable这样一个接口吧。

高手:

好的,关于这个问题,我需要从几个方面来回答。

首先,我认为,之所以需要序列化,核心目的是为了解决网络通信之间的对象传输问题。

也就是说,如何把当前JVM进程里面的一个对象,跨网络传输到另外一个JVM进程里面。

而序列化,就是把内存里面的对象转化为字节流,以便用来实现存储或者传输。

反序列化,就是根据从文件或者网络上获取到的对象的字节流,根据字节流里面保存的对象描述信息和状态。

重新构建一个新的对象。

其次呢,序列化的前提是保证通信双方对于对象的可识别性,所以很多时候,我们会把对象先转化为通用的解析格式,

比如json、xml等。然后再把他们转化为数据流进行网络传输,从而实现跨平台和跨语言的可识别性。

最后,我再补充一下序列化选择。

市面上开源的序列化技术非常多,比如Json、Xml、Protobuf、Kyro、hessian等等。

那在实际应用里面,哪种序列化最合适,我认为有几个关键因素。

  • 序列化之后的数据大小,因为数据大小会影响传输性能
  • 序列化的性能,序列化耗时较长会影响业务的性能
  • 是否支持跨平台和跨语言
  • 技术的成熟度,越成熟的方案使用的公司越多,也就越稳定。

以上就是我对这个问题的理解!

总结

序列化这个问题,面试问得也比较多

再深入一点,还会问到序列化的算法和原理。

在实际开发中,序列化技术的选择对于性能的影响也是比较大的。

因此互联网公司对这方面的考察会比较多一些。

喜欢我作品的小伙伴,记得点赞收藏加关注。

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构

如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

【Java面试】简单说一下你对序列化和反序列化的理解的更多相关文章

  1. Java基础IO流(四)序列化与反序列化

    对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObjec ...

  2. MessagePack Java 0.6.X 多种类型变量的序列化和反序列化(serialization/deserialization)

    类 Packer/Unpacker 允许序列化和反序列化多种类型的变量,如后续程序所示.这个类启用序列化和反序列化多种类型的变量和序列化主要类型变量以及包装类,String 对象,byte[] 对象, ...

  3. java oop第12章_IO、序列化和反序列化

    引言:数据通常通过文件系统保存在外存中,有时需要将他们读取到程序中进行一些操作,Java针对文件系统的操作提供了一套规范,即IO,针对计算机内存而言,输入的称为输入流,输出的称为输出流. 一.     ...

  4. c#中序列化和反序列化的理解

    using System.IO;using System.Runtime.Serialization.Formatters.Binary; 序列化:对象转化为文件的过程(字节流) 反序列化:文件(字节 ...

  5. Java数据通讯中使用Googgle Protobuf 序列化与反序列化

    概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活.高效.自动的方法,有如XML,不过它更小.更快.也更简单.你可以定义自己的数据结构,然后使用代 ...

  6. Java学习笔记——IO操作之对象序列化及反序列化

    对象序列化的概念 对象序列化使得一个程序可以把一个完整的对象写到一个字节流里面:其逆过程则是从一个字节流里面读出一个事先存储在里面的完整的对象,称为对象的反序列化. 将一个对象保存到永久存储设备上称为 ...

  7. JAVA中序列化和反序列化中的静态成员问题

    关于这个标题的内容是面试笔试中比较常见的考题,大家跟随我的博客一起来学习下这个过程. ? ? JAVA中的序列化和反序列化主要用于: (1)将对象或者异常等写入文件,通过文件交互传输信息: (2)将对 ...

  8. JAVA的序列化与反序列化

    一.为什么要进行序列化 再介绍之前,我们有必要先了解下对象的生命周期,我们知道Java对象的生命周期,也即Java中的远程方法调用RMI也会被用到,在网络中要传输对象的话,则必须要对对象进行序列化,关 ...

  9. K:java中的序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...

随机推荐

  1. ArcGIS使用技巧(七)——批量导出

    新手,若有错误还请指正! 在ArcGIS中如何将栅格数据批量导出?用到"复制栅格这个工具",这里我用的例子是:将ArcGIS默认输出的DEM文件夹批量导出为tif格式.(如果是文件 ...

  2. Msf路由转发

    Msf路由转发 前言 在内网渗透中,我们拿下了一台机器A的权限,再通过A做一个跳板来做横向渗透,这时我们对于内网中的其他机器是无法连接的.我们在A上做横向渗透是很困难的,因为在这台机器一般为web服务 ...

  3. Restful API和传统的API的区别

    一.功能区别 Restful API是当作资源的唯一标识符,而传统是实现某某功能 如:/api/getList/1 and /api/getList?page=1 二.methods多样性 Restf ...

  4. XCTF练习题---MISC---Banmabanma

    XCTF练习题---MISC---Banmabanma flag:flag{TENSHINE} 解题步骤: 1.观察题目,打开附件 2.发现是一张斑马图片,这是典型的条形码啊,直接开网站识别 网站:h ...

  5. XCTF练习题---CRYPTO---Railfence解析

    XCTF练习题---CRYPTO---Morse解析 flag:cyberpeace{railfence_cipher_gogogo} 解题步骤: 1.观察题目,下载附件进行查看 2.根据题目提示,发 ...

  6. Docker系列教程01-使用Docker镜像

    docker系列导读 一文带你读懂什么是docker Docker安装部署 10张图带你深入理解Docker容器和镜像 前言 学习Docker,我们需要掌握它的三大核心概念:镜像.容器和仓库. 今天先 ...

  7. 【面试普通人VS高手】Spring 中Bean的作用域有哪些?

    一个工作3年的小伙子,去面试被问到Spring里面的问题. 这个问题比较简单,但是他却没有回答上来. 虽然他可以通过搜索引擎找到答案,但是如果没有理解,下次面试还是不会! 这个面试题是: " ...

  8. Redis GEO 地理位置

    目录 GEO指令 GEOADD GEODIST GEOPOP GEOHASH GEORADIUS GEORADIUSBYMEMBER 指令补充 删除操作 避免单集合数量过多 存储原理 GEOADD存储 ...

  9. 请求扩展、蓝图、g对象

    今日内容概要 请求扩展 蓝图 g对象 内容详细 1.请求扩展 # 在请求来了,请求走了,可以做一些校验和拦截,通过装饰器来实现 7 个 # 1 before_request 类比django中间件中的 ...

  10. windows获取高精度时间戳 精度100ns

    #include <stdio.h> #include <Windows.h> int main(void){ LARGE_INTEGER ticks,Frequency; Q ...