【面经总结】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,一经查实,立即删除!

相关文章

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)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立…

java实现文件的压缩及解压

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

TCPListen客户端和TCPListen服务器

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

据阿谱尔统计显示,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…

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;对于小程序开发者来…

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开发需要学…

工业烤箱设备厂家:专业制造,助力工业发展

随着现代工业的不断发展&#xff0c;工业烤箱设备在各个领域的应用越来越广泛。作为专业的工业烤箱设备厂家&#xff0c;我们致力于为客户提供高质量、高效率的烤箱设备&#xff0c;助力工业生产的顺利进行。 工业烤箱设备在工业生产中扮演着至关重要的角色。无论是电子、化工、…

Flask快速入门

Flask快速入门&#xff08;路由、CBV、请求和响应、session&#xff09; 目录 Flask快速入门&#xff08;路由、CBV、请求和响应、session&#xff09;安装创建页面Debug模式快速使用Werkzeug介绍watchdog介绍快速体验 路由系统源码分析手动配置路由动态路由-转换器 Flask的CBV…

SpringBoot整合SpringDataRedis

目录 1.导入Maven坐标 2.配置相关的数据源 3.编写配置类 4.通过RedisTemplate对象操作Redis SpringBoot整合Redis有很多种&#xff0c;这里使用的是Spring Data Redis。接下来就springboot整合springDataRedis步骤做一个详细介绍。 1.导入Maven坐标 首先&#xff0c;需要导…

Mysql中使用where 1=1有什么问题吗

昨天偶然看见一篇文章&#xff0c;提到说如果在mysql查询语句中&#xff0c;使用where 11会有性能问题&#xff1f;&#xff1f; 这着实把我吸引了&#xff0c;因为我项目中就有不少同事&#xff0c;包括我自己也有这样写的。为了不给其他人挖坑&#xff0c;赶紧学习一下&…

ABAP调用JavaScript进行幂乘运算

ECC版本没有内置的ipow运算函数&#xff0c;所以需要进行幂乘运算的话&#xff0c;可以采用调用JavaScript的方式来实现&#xff0c;参考代码如下&#xff1a;

集合java

1.集合 ArrayList 集合和数组的优势对比&#xff1a; 长度可变 添加数据的时候不需要考虑索引&#xff0c;默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…

Chrome/Edge浏览器视频画中画可拉动进度条插件

目录 前言 一、Separate Window 忽略插件安装&#xff0c;直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页&#xff0c;但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候&#xff…