news 2026/4/29 12:07:35

Java技术八股学习Day08

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java技术八股学习Day08

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

简单来说:

  • 序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式
  • 反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程

下面是序列化和反序列化常见应用场景:

  • 对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化;
  • 将对象存储到文件之前需要进行序列化,将对象从文件中读取出来需要进行反序列化;
  • 将对象存储到数据库(如 Redis)之前需要用到序列化,将对象从缓存数据库中读取出来需要反序列化;
  • 将对象存储到内存之前需要进行序列化,从内存中读取出来之后需要进行反序列化。

综上:序列化的主要目的是通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。

序列化协议对应于TCP/IP4层模型的哪一层?

序列化协议属于 TCP/IP 协议应用层的一部分。

如果有些字段不想序列化怎么办?

对于不想进行序列化的变量,使用transient关键字修饰。

transient关键字的作用是:阻止实例中那些用此关键字修饰的变量序列化;当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。

关于transient还有几点注意:

  • transient只能修饰变量,不能修饰类和方法。
  • transient修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰int类型,那么反序列后结果就是0
  • static变量因为不属于任何对象(Object),所以无论有没有transient关键字修饰,均不会被序列化。

常见序列化协议有哪些?

JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且存在安全问题。比较常用的序列化协议有 Hessian、Kryo、Protobuf、ProtoStuff,这些都是基于二进制的序列化协议。

为什么不推荐使用JDK自带序列化协议?

  • 不支持跨语言调用: 如果调用的是其他语言开发的服务的时候就不支持了。
  • 性能差:相比于其他序列化框架性能更低,主要原因是序列化之后的字节数组体积较大,导致传输成本加大。
  • 存在安全问题:序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

怎么把一个对象从一个jvm传递到另一个jvm?

使用序列化与反序列化。

使用消息传递机制。

使用远程方法调用(RPC)

使用共享数据库或缓存。

JavaIO流了解吗?

IO 即Input/Output,输入和输出。

IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。

Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

  • InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

什么是语法糖?

语法糖(Syntactic sugar)代指的是编程语言为了方便程序员开发程序而设计的一种特殊语法,这种语法对编程语言的功能并没有影响。实现相同的功能,基于语法糖写出来的代码往往更简单简洁且更易阅读。for-each就是一个语法糖。

Java中有哪些语法糖?

Java 中最常用的语法糖主要有泛型、自动拆装箱、变长参数、枚举、内部类、增强 for 循环、try-with-resources 语法、lambda 表达式等。

Java怎么实现网络IO高并发编程?

可以用 Java NIO ,是一种同步非阻塞的I/O模型,也是I/O多路复用的基础。NIO 是基于I/O多路复用实现的,它可以只用一个线程处理多个客户端I/O,如果你需要同时管理成千上万的连接,但是每个连接只发送少量数据,例如一个聊天服务器,用NIO实现会更好一些。

BIO、NIO和AIO区别是什么?

BIO(Blocking IO):就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调研是可靠的线性顺序。优点是代码比较简单、直观;缺点是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。

NIO(non-blocking IO):Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层高性能的数据操作方式。

AIO(Asynchronous IO):是 Java 1.7 之后引入的包,是 NIO 的升级版本,提供了异步非堵塞的IO操作方式,所以人们叫它 AIO(Asynchronous IO)异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

NIO是怎么实现的?

NIO是一种同步非阻塞的IO模型,所以也可以叫NON-BLOCKINGIO。同步是指线程不断轮询IO事件是否就绪,非阻塞是指线程在等待IO的时候,可以同时做其他任务。

同步的核心就Selector(I/O多路复用)Selector代替了线程本身轮询IO事件,避免了阻塞同时减少了不必要的线程消耗。非阻塞的核心就是通道和缓冲区,当IO事件就绪时,可以通过写到缓冲区,保证IO的成功,而无需线程阻塞式地等待。

NIO由一个专门的线程处理所有IO事件,并负责分发。事件驱动机制,事件到来的时候触发操作。

NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector,传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)因此,单个线程可以监听多个数据通道。

你知道有哪个框架用了NIO吗?

Netty。

Native方法有什么用?

在Java中,native方法是一种特殊类型的方法,它允许Java代码调用外部的本地代码,即用C、C++或其他语言编写的代码。native关键字是Java语言中的一种声明,用于标记一个方法的实现将在外部定义。

要实现native方法,你需要完成以下步骤:

1.生成JNI头文件:使用javah工具从你的Java类生成C/C++的头文件,这个头文件包含了所有native方法的原型。

2.编写本地代码:使用C/C++编写本地方法的实现,并确保方法签名与生成的头文件中的原型匹配。

3.编译本地代码:将C/C++代码编译成动态链接库(DLL,在Windows上),共享库(SO,在Linux上)

4.加载本地库:在Java程序中,使用System.loadLibrary()方法来加载你编译好的本地库,这样JVM就能找到并调用native方法的实现了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 18:07:44

54、计算机硬件、性能故障排除与家庭网络搭建指南

计算机硬件、性能故障排除与家庭网络搭建指南 1. 硬件变更处理 当你对计算机硬件进行了更改,但 Windows 系统未能自动识别时,可通过以下操作让系统重新扫描:打开“设备管理器”,选择“操作”➪“扫描硬件更改”,Windows 便会对系统进行重新扫描。 2. 错误消息处理 错误…

作者头像 李华
网站建设 2026/4/22 14:41:28

32、Windows通信基础之Peer Channel与REST POX服务解析

Windows通信基础之Peer Channel与REST POX服务解析 1. Peer Channel相关操作与特性 1.1 操作步骤 在使用涉及学生应用和教师应用的系统时,有如下操作步骤: 1. 切换到学生应用,此时会出现对勾或叉号,用以表示问题答案是否正确。 2. 关闭教师应用。 3. 查看CustomPeerR…

作者头像 李华
网站建设 2026/4/28 21:54:42

34、Windows Communication Foundation:管理与版本控制详解

Windows Communication Foundation:管理与版本控制详解 1. Windows Communication Foundation 的管理设施 Windows Communication Foundation(WCF)应用程序具备丰富的检测和工具。不过,为特定应用程序提供管理模型仍是开发者的任务,因为不同应用需要监控的内容、检测值的…

作者头像 李华
网站建设 2026/4/28 8:31:49

健康检查探针:及时发现异常节点

健康检查探针:及时发现异常节点 在现代AI系统部署中,尤其是基于大语言模型(LLM)的文档问答、知识库检索类应用,服务“看似正常却无法响应”的情况并不少见。你可能遇到用户上传文档突然失败、对话中断、或者搜索毫无反…

作者头像 李华
网站建设 2026/4/23 0:51:08

桌面客户端发布:离线环境下稳定运行

桌面客户端发布:离线环境下稳定运行 在金融合规会议的密闭会议室里,分析师需要即时查询上季度财报中的风险披露条款;工程师在远洋科考船上,依靠本地知识库排查设备故障。这些场景共同指向一个现实挑战:当网络不可用、数…

作者头像 李华
网站建设 2026/4/27 20:44:36

Spot实例竞价:短期任务节省开支

Spot实例竞价:短期任务节省开支 在AI应用日益普及的今天,越来越多团队希望部署私有化的智能问答系统——比如基于文档的RAG引擎或企业知识助手。但现实往往令人却步:一块GPU云服务器动辄每月数千元,而大部分时间系统其实处于闲置…

作者头像 李华