【面经总结】Java基础 - IO

序列化

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

序列化:将对象转换为二进制数据

反序列化:将二进制数据转换为对象

  • 目的:方便网络传输、持久化保存

Java 是怎么实现序列化的?

Java 通过对象输入输出流来实现序列化和反序列化,对象序列化不会关注类中的静态变量。

Java 的序列化过程:

  1. 对象及其属性都要必须属于 EnumArraySerializable
  2. 类中需要存在 serialVersionUID 字段,用来标明版本。
  3. 使用 ObjectOutputStream 进行序列化。
/*** 序列化*/
private static void serialize(String filename) throws IOException {File f = new File(filename);// 文件输出流OutputStream out = new FileOutputStream(f); // 对象输出流ObjectOutputStream oos = new ObjectOutputStream(out); // 保存对象oos.writeObject(new Person("Jack", 30, Sex.MALE)); oos.close();out.close();
}/*** 反序列化*/
private static void deserialize(String filename) throws IOException, ClassNotFoundException {File f = new File(filename);// 文件输入流InputStream in = new FileInputStream(f); // 对象输入流ObjectInputStream ois = new ObjectInputStream(in); // 读取对象Object obj = ois.readObject();ois.close();in.close();System.out.println(obj);
}

img

可以使用 transient 关键字忽略掉某些字段

transient private Integer age = null;

常见的序列化协议有哪些?

  1. 二进制序列化
    1. Java 原生序列化:不能跨语言,性能较差,要求多
    2. Protobuf:Google 数据标准
    3. Thrift:Apache 开源项目
    4. Hessian
    5. Kryo
    6. FST
  2. Json 序列化
    1. Fastjson:阿里
    2. Jackson
    3. Gson:Google

网络 I/O

https://www.bilibili.com/video/BV1Lg4y1u7KW/

BIO/NIO/AIO 有什么区别?

  1. BIO(同步阻塞 IO):在读、写动作完成之前,线程会一直阻塞在那里,线性调用。
    1. BIO 会阻塞线程,一个连接一个线程。已经建立 Socket 连接后不能再与其他客户端连接。
    2. BIO 可以使用多线程和线程池优化

img

  1. NIO(同步非阻塞 IO):使用后台线程执行IO,前台线程轮询查看状态。
    1. NIO 性能消耗大,需要频繁轮询。
    2. 可以通过 I/O 多路复用优化

img

  1. AIO(异步非阻塞 IO):基于事件和回调机制,后台处理完成后,会通知相应线程进行后续工作。

img

I/O 多路复用是什么?

操作系统提供了一系列系统调用(select、poll、epoll),可以同时监控多个 fd 文件描述符(批量轮询)。

select 和 epoll 有什么区别?

select 的问题:

  1. 最大连接数有限
  2. 返回后通过遍历所有的 fd,找出就绪的 fd 进行下一步操作

epoll 的优势:

  1. 最大连接数无限
  2. 通过事件回调返回就绪的 fd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue全局组件

全局组件 首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互喷不会进步,相互指点才会。。。。谢谢大家啦 目录 全局组件 目录内置模板引入模板优…

tp6+swoole+mysql+nginx+redis高并发优化

1.服务器 IDC机房提供的物理机:单机 40核,64G内存,带宽100M, 2.redis 7.2配置 timeout600 #空闲连接超时时间,0表示不断开 maxclients100000 #最大连接数 3.Mysql 5.7配置,按宝塔16-32G优化方案并调整:…

通用大模型VS垂直大模型,相辅相成!

1.通用大模型: 如OpenAI的GPT系列、Google的PaLM等,因其广泛的训练数据来源和强大的泛化能力,展现出在多种任务和场景中的应用潜力。它们能够处理从文本生成、代码编写到语言翻译等多种复杂任务,适应性强,减少了针对单…

第二届京津冀现代商贸物流金融创新发展百人大会将于6月16日在廊坊举行

编辑|Ray 物流是实体经济的“筋络”,联接生产和消费、内贸和外贸,必须有效降低全社会物流成本,增强产业核心竞争力,提高经济运行效率。《京津冀协同发展规划纲要》赋予河北“三区一基地”的功能定位,建设全…

第十七章 策略模式

目录 1 策略模式概述 2 策略模式原理 3 策略模式实现 4 策略模式应用实例 5 策略模式总结 1 策略模式概述 策略模式(strategy pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立…

如何通过Python爬虫提升电商数据分析效率

如何通过Python爬虫提升电商数据分析效率 电商环境中,数据是决策的核心。无论是市场分析、竞争对手研究,还是商品定价和库存管理,获取并分析大量的实时数据都是至关重要的任务。Python 作为一种强大的编程语言,其简单易用的特性使…

java实现文件的压缩及解压

一、起因 开发中需要实现文件的压缩及解压功能,以满足某些特定场景的下的需要,在此说下具体实现。 二、实现 1.定义一个工具类ZipUtils,实现文件的压缩及解压,代码如下: import java.io.*; import java.nio.charset.Charset; impo…

######## redis各章节终篇索引(更新中) ############

其他 父子关系(ctx、协程)#### golang存在的父子关系 ####_子goroutine panic会导致父goroutine挂掉吗-CSDN博客 参数传递(slice、map)#### go中参数传递(涉及:切片slice、map、channel等) ###…

TCPListen客户端和TCPListen服务器

创建项目 TCPListen服务器 public Form1() {InitializeComponent();//TcpListener 搭建tcp服务器的类,基于socket套接字通信的//1创建服务器对象TcpListener server new TcpListener(IPAddress.Parse("192.168.107.83"), 3000);//2 开启服务器 设置最大…

ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的侧信道抵御

安全之安全(security)博客目录导读 目录 一、系统PMU计数器 二、使用信号和功耗操作进行的故障攻击 一、系统PMU计数器 性能监测单元 (PMU) 计数器可能成为泄露机密信息的侧信道,如访问模式或受RME安全保障保护的安全状态下的执行控制流。以下规则补充了《Arm CoreSight™…

(message): No CUDA toolset found.

解决方法: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\visual_studio_integration\MSBuildExtensions\ 下的4个文件 复制到 D:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations\下。…

据阿谱尔统计显示,2023年全球凹版印刷机市场销售额约为9.1亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球凹版印刷机市场销售额约为9.1亿美元,预计在2024-2030年预测期内将以超过2.54%的CAGR(年复合增长率)增长。 由于对软包装和印刷包装的需求不断增长,全球凹…

数据分析-Excel基础函数的使用

Excel基础函数: sum:求和 sumif:单条件求和 sumifs:多条件求和 subtotal:根据筛选求和 if:逻辑判断 vlookup:连接匹配数据 match:查找数值在区域中的位置 index:根据区域的位置返回数值 match、index:一起使用:自动根据列名查找数据 sumifs、match、ind…

FreeSWITCH入门到精通系列(三):FreeSWITCH基础概念与架构

FreeSWITCH入门到精通系列(三):FreeSWITCH基础概念与架构 前言 在前两篇博客中,我们介绍了FreeSWITCH的基本概念和安装与配置。本篇文章将深入探讨FreeSWITCH的基础概念和架构,帮助您更好地理解这个强大的通信平台的…

2.线性神经网络

目录 1.线性回归一个简化模型线性模型:可以看做是单层神经网络衡量预估质量训练数据参数学习显示解总结 2.基础优化方法小批量随机梯度下降总结 3.Softmax回归:其实是一个分类问题回归VS分类从回归到多类分类---均方损失Softmax和交叉熵损失 4.损失函数L…

web前端:作业三

1.回到顶部案例(固定定位) <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>#container{height: 5000px;border: 1px solid blue;}#back-button{width: 100px;height: 100px;border: 1px solid…

如何申请小程序SSL证书

在互联网时代&#xff0c;数据安全和用户隐私保护变得尤为重要。SSL证书作为网站、应用或小程序与用户之间建立安全连接的关键工具&#xff0c;其重要性不言而喻。SSL证书能够加密数据传输&#xff0c;防止信息被窃取&#xff0c;提升用户信任度&#xff0c;对于小程序开发者来…

深度学习模型的训练时间:影响、意义与应用范围

深度学习模型的训练时间&#xff1a;影响、意义与应用范围 在深度学习领域&#xff0c;训练时间是衡量模型性能的一个重要因素&#xff0c;但它能否决定模型的优劣和实际应用范围&#xff1f;本文将深入探讨训练时间对深度学习模型的具体影响、模型选择的考虑因素以及如何合理…

Redux 与 MVI:Android 应用的对比

Redux 与 MVI&#xff1a;Android 应用的对比 在为 Android 应用选择合适的状态管理架构时可能会感到困惑。在这个领域中&#xff0c;有两种流行的选择是 Redux 和 MVI&#xff08;Model-View-Intent&#xff09;。两者都有各自的优缺点&#xff0c;因此在深入研究之前了解它们…

WebGIS开发:你还在纠结的10大问题合集!

问题1&#xff1a;GIS开发到底是学Java还是Python&#xff1f; Java是后端语言&#xff0c;Python更重数据分析和算法。 假设通常说的GIS开发是指Webgis&#xff0c;Web就是指网页端&#xff0c;所以我们说的GIS开发大部分情况下是指网页端的地图可视化开发。 GIS开发需要学…