news 2026/3/8 7:24: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/3/5 8:05:53

基于微信小程序的社交平台系统(源码+lw+部署文档+讲解等)

背景及意义 在校园社交场景多元化、互动便捷性需求升级的背景下,传统校园社交存在 “场景割裂、信息触达慢、互动形式单一” 的痛点,基于微信小程序构建的校园社交平台,适配高校学生、社团、校园商家等角色,实现兴趣社群、活动邀约…

作者头像 李华
网站建设 2026/2/25 16:57:58

异常登录检测:AI识别可疑行为

异常登录检测:AI识别可疑行为 在智能系统日益普及的今天,一个看似简单的登录操作背后,可能隐藏着巨大的安全风险。试想:你正在远程办公,突然收到一条通知——“你的账户刚刚从东京的一台设备上登录”。而你明明身在纽约…

作者头像 李华
网站建设 2026/3/5 3:11:01

操作指南:如何在紧凑空间完成高效PCB布局设计

在30mm内塞进智能手表主板?揭秘高密度PCB布局的硬核实战你有没有试过在一块比指甲盖还小的电路板上,塞进主控芯片、无线模块、传感器阵列和电源管理系统?这不是科幻场景——而是如今每一块智能手表、TWS耳机甚至微型医疗贴片的真实写照。随着…

作者头像 李华
网站建设 2026/2/27 5:06:36

应急响应预案演练:关键时刻不慌乱

应急响应预案演练:关键时刻不慌乱 在一场突如其来的数据中心断电事故中,值班主管冲到控制台前,手心冒汗——他需要立刻确认备用电源切换流程、通知哪些负责人、是否触发上级应急预案。然而,厚厚的《IT基础设施应急手册》有200页&a…

作者头像 李华
网站建设 2026/3/6 2:26:50

18、Windows系统注册表分析与恶意软件检测全解析

Windows系统注册表分析与恶意软件检测全解析 注册表分析 在Windows 7系统中,注册表蕴含着大量有价值的信息。以下是对注册表分析的详细介绍: 1. 历史用户活动数据 :UserAssist子键中的信息能显示用户活动,但仅为最近一次活动情况。例如,看到用户启动某应用14次,只能…

作者头像 李华
网站建设 2026/3/4 13:43:55

易思维通过注册:前9个月营收2亿 净亏654万 拟募资12亿

雷递网 雷建平 12月22日易思维(杭州)科技股份有限公司(简称:“易思维”)日前通过注册,准备在科创板上市。易思维计划募资12.1亿元,其中,7.05亿元用于机器视觉产品产业化基地项目&…

作者头像 李华