Java大厂面试100道题(6 道 IO 流面试题)

各大厂800道Java后端经典面试题合集 另外,面试题答案的话,可以私信我, 希望大家都能找到自己理想的offer呀。 阅读详情

Q1:同步/异步/阻塞/非阻塞 IO 的区别?

同步和异步是通信机制,阻塞和非阻塞是调用状态。

同步 IO 是用户线程发起 IO 请求后需要等待或轮询内核 IO 操作完成后才能继续执行。异步 IO 是用户线程发起 IO 请求后可以继续执行,当内核 IO 操作完成后会通知用户线程,或调用用户线程注册的回调函数。

阻塞 IO 是 IO 操作需要彻底完成后才能返回用户空间 。非阻塞 IO 是 IO 操作调用后立即返回一个状态值,无需等 IO 操作彻底完成。


Q2:什么是 BIO?

BIO 是同步阻塞式 IO,JDK1.4 之前的 IO 模型。服务器实现模式为一个连接请求对应一个线程,服务器需要为每一个客户端]请求创建一个线程,如果这个连接不做任何事会造成不必要的线程开销。可以通过线程池改善,这种 IO 称为伪异步 IO。适用连接数目少且服务器资源多的场景。


Q3:什么是 NIO?

NIO 是 JDK1.4 引入的同步非阻塞 IO。服务器实现模式为多个连接请求对应一个线程,客户端连接请求会注册到一个多路复用器 Selector ,Selector 轮询到连接有 IO 请求时才启动一个线程处理。适用连接数目多且连接时间短的场景。

同步是指线程还是要不断接收客户端连接并处理数据,非阻塞是指如果一个管道没有数据,不需要等待,可以轮询下一个管道。

核心组件:

  • Selector: 多路复用器,轮询检查多个 Channel 的状态,判断注册事件是否发生,即判断 Channel 是否处于可读或可写状态。使用前需要将 Channel 注册到 Selector,注册后会得到一个 SelectionKey,通过 SelectionKey 获取 Channel 和 Selector 相关信息。
  • Channel: 双向通道,替换了 BIO 中的 Stream 流,不能直接访问数据,要通过 Buffer 来读写数据,也可以和其他 Channel 交互。
  • Buffer: 缓冲区,本质是一块可读写数据的内存,用来简化数据读写。Buffer 三个重要属性:position 下次读写数据的位置,limit 本次读写的极限位置,capacity 最大容量。
    • flip 将写转为读,底层实现原理把 position 置 0,并把 limit 设为当前的 position 值。
    • clear 将读转为写模式(用于读完全部数据的情况,把 position 置 0,limit 设为 capacity)。
    • compact 将读转为写模式(用于存在未读数据的情况,让 position 指向未读数据的下一个)。
    • 通道方向和 Buffer 方向相反,读数据相当于向 Buffer 写,写数据相当于从 Buffer 读。

使用步骤:向 Buffer 写数据,调用 flip 方法转为读模式,从 Buffer 中读数据,调用 clear 或 compact 方法清空缓冲区。


Q4:什么是 AIO?

AIO 是 JDK7 引入的异步非阻塞 IO。服务器实现模式为一个有效请求对应一个线程,客户端的 IO 请求都是由操作系统先完成 IO 操作后再通知服务器应用来直接使用准备好的数据。适用连接数目多且连接时间长的场景。

异步是指服务端线程接收到客户端管道后就交给底层处理IO通信,自己可以做其他事情,非阻塞是指客户端有数据才会处理,处理好再通知服务器。

实现方式包括通过 Future 的 get 方法进行阻塞式调用以及实现 CompletionHandler 接口,重写请求成功的回调方法 completed 和请求失败回调方法 failed。


Q5:http://java.io 包下有哪些流?

主要分为字符流和字节流,字符流一般用于文本文件,字节流一般用于图像或其他文件。

字符流包括了字符输入流 Reader 和字符输出流 Writer,字节流包括了字节输入流 InputStream 和字节输出流 OutputStream。字符流和字节流都有对应的缓冲流,字节流也可以包装为字符流,缓冲流带有一个 8KB 的缓冲数组,可以提高流的读写效率。除了缓冲流外还有过滤流 FilterReader、字符数组流 CharArrayReader、字节数组流 ByteArrayInputStream、文件流 FileInputStream 等。


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

Java 对象 JVM 退出时会全部销毁,如果需要将对象及状态持久化,就要通过序列化实现,将内存中的对象保存在二进制流中,需要时再将二进制流反序列化为对象。对象序列化保存的是对象的状态,因此属于类属性的静态变量不会被序列化。

常见的序列化有三种:

  • Java 原生序列化
    实现 Serializabale 标记接口,Java 序列化保留了对象类的元数据(如类、成员变量、继承类信息)以及对象数据,兼容性最好,但不支持跨语言,性能一般。序列化和反序列化必须保持序列化 ID 的一致,一般使用 private static final long serialVersionUID 定义序列化 ID,如果不设置编译器会根据类的内部实现自动生成该值。如果是兼容升级不应该修改序列化 ID,防止出错,如果是不兼容升级则需要修改。
  • Hessian 序列化
    Hessian 序列化是一种支持动态类型、跨语言、基于对象传输的网络协议。Java 对象序列化的二进制流可以被其它语言反序列化。Hessian 协议的特性:① 自描述序列化类型,不依赖外部描述文件,用一个字节表示常用基础类型,极大缩短二进制流。② 语言无关,支持脚本语言。③ 协议简单,比 Java 原生序列化高效。Hessian 会把复杂对象所有属性存储在一个 Map 中序列化,当父类和子类存在同名成员变量时会先序列化子类再序列化父类,因此子类值会被父类覆盖。
  • JSON 序列化
    JSON 序列化就是将数据对象转换为 JSON 字符串,在序列化过程中抛弃了类型信息,所以反序列化时只有提供类型信息才能准确进行。相比前两种方式可读性更好,方便调试。

序列化通常会使用网络传输对象,而对象中往往有敏感数据,容易遭受攻击,Jackson 和 fastjson 等都出现过反序列化漏洞,因此不需要进行序列化的敏感属性传输时应加上 transient 关键字。transient 的作用就是把变量生命周期仅限于内存而不会写到磁盘里持久化,变量会被设为对应数据类型的零值。

推荐学习视频课程:

Java基础视频教程_java从入门到精通_java300集新手必看教程

【尚学堂】Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通

10多家公司的Java开发面试常见问题合集 ​上篇文章我请几个大佬帮我总结了一下,整理了三套模拟面试题,细心的大佬已经发现我中间断更了一天,为什么断更呢,也讲一下原因吧。我把我以前去面试过的那些东东扒出来了,今天我分享一下我的。 本人是做java开发的,这是我参加工作几年面试总结所得,当然面得那些公司自然是跟在座的大佬比不得。有一些互联网大厂也有一些小的创业型公司的面试问题,与之前的几篇分享的会有一些重复,弄清楚这些,相信面试会轻松许多。... 阅读详情

相关推荐

手把手教你用Multisim搭建FM直接调频电路(附完整波形分析)

本文通过Multisim仿真软件,手把手教你搭建FM直接调频电路。详细介绍了从核心概念理解、压控振荡器(VCO)参数设置、电路搭建与波形观测,到带通滤波器设计与信号优化的完整流程。通过对比滤波前后的时域波形与频谱分析,帮助读者直观理解频率调制原理,并提供了常见问题的排查思路与参数调试方法,将抽象的通信理论转化为可操作的实践技能。

weixin_29230773的博客 215

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

Java 对象 JVM 退出时会全部销毁,如果需要将对象及状态持久化,就要通过序列化实现,将内存中的对象保存在二进制流中,需要时再将二进制流反序列化为对象。对象序列化保存的是对象的状态,因此属于类属性的静态变量不会被序列化。 常见的序列化有三种: Java 原生序列化 实现 Serializabale 标记接口,Java 序列化保留了对象类的元数据(如类、成员变量、继承类信息)以及对象数据,兼容性最好,但不支持跨语言,性能一般。序列化和反序列化必须保持序列化 ID 的一致,一般使用 private st

徐明晓的博客 297

基于AR和SLAM技术的商场智能导视系统技术原理详解

本文针对智慧商场室内导航需求,提出基于AR和SLAM技术的商场智能导视系统技术方案,实现了沉浸式导览体验并促进消费转化,助力商场运营升级。

维小帮定位导航的博客 1243

java model 序列化_Java序列化对字段名的影响

前段时间遇到一个问题,序列化之后原本类中的属性名发生了变化,原本isDel序列化之后得到的是del,为此查了一下相关资料,发现和序列化机制有关在阿里巴巴Java开发手册中关于这一点,有过一个『强制性』规定:为此我们要看一下POJO中布尔类型变量不同的命名classModel1 {privateBoolean isSuccess;public voidsetSuccess(Boolean succ...

weixin_39792803的博客 213

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 732

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1550

Java 序列化的这三个坑千万要小心

作者 | L 责编 | 欧阳姝黎前几天看到一个2016年挺有趣的一个故障复盘,有一哥们给底层的HSF服务返回值加了一个字段,秉承着“加字段一定是安全的”这种惯性思维就直接上线了...

优快云资讯 1594

T12 电烙铁简单程序逻辑

通过分析就可以知道,发热丝本身即是发热体,也是热偶的工作端。怎么可能是热电动势呢,确实,但不要忘了T12-OUTPUT端的电压是PWM波,理论上是有单片机PWM电压为0 v时的,而T12-OUTPUT端的电压此时也应为0。在T12烙铁头中,PID控制算法通过监测温度传感器的输出,计算当前温度与设定温度之间的差异,并根据这一差异调节加热功率,以实现烙铁头温度的精确控制。这段代码实现了一个简单的增量式PID控制器,通过计算当前温度与期望温度之间的差异以及历史偏差值,调节输出控制量,实现对温度的精确控制。

hgkhjkljnl的博客 1万+

Java开发规范精要

1.命名规则 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:(领域模型 的相关命名)DO / BO / DTO / VO等。 正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo

CWeeYii的专栏 1055

Halcon形状模板匹配实战:inspect_shape_model参数优化指南

本文深入解析Halcon形状模板匹配中inspect_shape_model参数的优化技巧,涵盖NumLevels和Contrast参数的实战应用。通过具体案例展示如何平衡匹配速度与精度,帮助开发者高效调试形状模型,提升工业视觉检测的准确性和效率。

weixin_30342209的博客 618

从RadixTree到哈希表:深入对比SGLang和vLLM的Prefix Cache实现差异

本文深入对比了SGLang与vLLM在大语言模型推理服务中实现Prefix Cache(前缀缓存)的两种核心方案。SGLang采用基于Radix Tree的RadixAttention,支持任意长度前缀的精确匹配与灵活复用;vLLM则采用基于哈希表的方案,深度集成于PagedAttention,实现简洁但要求块级精确对齐。文章剖析了二者在设计哲学、内存管理、适用场景及集群级优化(如Prefix Cache Aware Routing)上的关键差异,为高性能LLM服务的技术选型提供决策依据。

blockchain9miner的博客 956

序列化与反序列化介绍

序列化与反序列化介绍

shsh1234567890的博客 1万+

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2846

带劲!100道大厂Java核心面试题出炉,你全程下来会几个?

前言 今日提莫听闻,现在很多培训出来的应届生薪资都赶上了摸爬滚打两三年的朋友,讲道理,这说不过去啊 作为同行来说,这个行业发展很快,技术更新很快,淘汰也很快,千万不要再找借口了,想吃这碗饭不如好好思考如何提升自己的技术,提高自己的核心竞争力。 下面给大家分享一波十月份精选的互联网大厂Java核心面试题,透过面试题来分析自己所掌握的技术栈与大厂所需的差距,判断面试难易程度,从而进一步明确自己学习的方向。 这些面试题你都会了吗?(精选97道Java核心面试题) 常量池有哪些,数据结构,自己设计一个

豆汁 3795

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day2】 —— Redis篇1

百日闭关修炼,每日三道高频面试题。一起冲进大厂!看什么看?快上车!今天是Reds,香

陈哈哈的菜园子 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

2019我总结了140道Java高频面试题,来自BAT大厂的拷问

本文转载自:2019我总结了140道Java高频面试题,来自BAT大厂的拷问 140个Java高频面试题,查漏补缺,共同学习 JDK和JRE有什么区别? ==和equals的区别是什么? 基本类型和包装类对象使用==和equals进行比较的结果? 什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题? hashCode0相同,equals0也- 定为true吗? final在java中的作用...

Java____superman的博客 1269

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

BAT大厂流题出的数百道 Java 经典面试

BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量池 6.Object有哪些公用方法 7.Java的四种引用,强弱软虚,用到的场景 8.Hashcode的作用 9.HashMap的hashcode的作用 10.为什么重载hashC...

Java0257的博客 846

火爆大厂的100道Java面试题及答案(2023年整理,持续更新)

面试是跳槽涨薪最直接有效的方式,各位做好面试造飞机,工作拧螺丝的准备了吗?掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击 9999 点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

csdn1234561231的博客 632

2020年最新阿里、字节、腾讯、京东等一线大厂高频面试(Java岗)真题合集,面试轻松无压力

本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。 与此同时,今年算法面试一定是会被问的,而算法不是光靠背面试题就有用的,它是需要数学逻辑思维的,因此,小编会在文末为大家准备一份非常优质的算法学习手册,重点在于学习思维方法,话不多说,直接开始上精选的大厂面试真题! 由于文章篇幅限制,不可能将所有面试题以文字形式把大厂面试题展示出来,本篇为大家

资料免费分享,点击名片 1万+

面试必备!Java核心技术100+面试题

一线互联网公司工作了几年,我作为求职者参加了不少面试,也作为面试官面试了很多同学,整理这份面试指南,一方面是帮助大家更好的准备面试,有的放矢,另一方面也是对自己知识框架做一个体系化的梳理。 这篇文章梳理了Java核心技术常见面试题,整理了120道题目,包括Java基础、集合框架、并发编程、NIO、反射等部分的内容。JVM和垃圾回收部分的内容比较多,会在下一篇博客中单独写。 除了Java核心技...

微赚开发者技术分享博客 1124

大厂最全1100道Java面试题及答案整理(2023最新版)

春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今…近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备了一整套 Java 复习面试的刷题以及答案,我知道很多同学不知道怎么复习,不知道学习过程中哪些才是重点,其实,你们经历过的事情,小马也经历过,正应为经历过,所以不愿意看到还有万千学子为此伤神,也许这篇文章帮不到万千学子,

m0_74823561的博客 597

盘点2024年Java岗面试被问得最多的100道题「附PDF」,你能答对几道?

165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?118. 在 hibernate 中使用 Integer 和 int 做映射有什么区别?46. 线程池中 submit() 和 execute() 方法有什么区别?29. 在 Queue 中 poll()和 remove()有什么区别?

jjc4261的博客 1070

一周吃透互联网大厂Java面试八股文(2024最新整理)

不论是技术经理还是架构师,没有绝对地说哪条路是对还是错,适合自己才是最重要。小公司的可能没有架构师这个概念,大公司的架构师职位又不是那么容易拿下。但不管怎样,不断去学习新的技术,提升自己的层次是很有必要的,无论你在哪一家公司,过硬的技术水平才能吃得开。

csdn1234561231的博客 2292

【大厂真题实战】Java工程师 | 字节面试真题(一)

还在迷茫的小伙伴,还不快来行动起来,为了你我的大厂梦,牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职 …点击直接访问牛客网,大厂面试真题、各类算法由易到难层层递进、专项题库应有尽有,还不快来体验体验牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网. 公司真题 专项练习 面试题库 在线编程. 其他题库.

鱼干的博客 3380

2022最新Android大厂面试题详解,堪称金三银四的葵花宝典_2022android面试

但是近日,阿里、腾讯裁员纷纷冲上热搜。大厂裁员减负,本来在热火朝天的金三银四,奋力冲刺和面试跳槽大厂的互联网打工人们,陷入了迷茫和焦虑。对大环境的担忧是应该的,因为大环境会直接影响到我们生活的方方面面。所以在这个当下,我整理了一些技术资料和面试题集,供大家提升进阶,不管你是有跳槽打算还是单纯精进自己,都可以免费领取一份。,这些面试资料整理给大家,希望面试踩过的坑不要再踩,遭遇的技术瓶颈一次性消灭。

2401_89722210的博客 795

Java面试题大全(2024最新版)1000+大厂面试题附答案详解

不论是技术经理还是架构师,没有绝对地说哪条路是对还是错,适合自己才是最重要。小公司的可能没有架构师这个概念,大公司的架构师职位又不是那么容易拿下。但不管怎样,不断去学习新的技术,提升自己的层次是很有必要的,无论你在哪一家公司,过硬的技术水平才能吃得开。

ekskef_sef的博客 580
上一篇: Java大厂面试100道题( 37 道并发面试题总结篇二)
下一篇: Java大厂面试100道题(7 道集合面试题总结)
java_500
博客等级 码龄5年 12粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值