java面试题学习2

 题目来源:

锐明技术 Java开发 10.25 一面 二面 凉经_牛客网 (nowcoder.com)

1.java异常机制

Java基础面试题 | 小林coding (xiaolincoding.com)

java的异常体系主要基于两大类,Throwable类及其子类。主要是Error和Exception。

Error:表示运行时环境错误。程序无法处理的严重问题

Exception:表示程序本身可以处理的异常条件

非运行时异常;运行时异常

异常处理:try,catch,finally,throw,throws

2.BIO、NIO、AIO的区别

BIO(Blocking I/O)阻塞IO

在进行I/O操作时,线程会被阻塞,直到操作完成,为每个链接创建一个线程,线程在处理请求时会被阻塞,适用于小型应用或连接数较少的场景

NIO(Non-blocking I/O)非阻塞IO

I/O操作不会阻塞线程,线程可以继续执行其他任务,直到有数据可以用或操作完成。通过Selector来监控多个通道(Cannel)的状态,适合处理大量并发连接

AIO(Asynchornous I/O)异步IO

I/O操作是异步的。线程发起请求后可继续执行其他任务,完成后通过回调机制处理结果。通过Future或Callback来处理I/O结果,不需要轮询,适合大量I/O操作并对响应时间要求较高的应用。

3.IO用了哪些设计模式

适配者模型:用于将不同的输入输出流(InputStream和OutputStream)统一到一个接口,可以处理不同的数据源

装饰器模型:例如BufferInputStream和DataInputStream,可以在不改变原有类的基础上为其添加信功能

策略模式:用于选择不同的算法或处理方式,例如不同的字符编码策略

工厂模式:用于创建各种类型的流对象

观察者模式:在某些情况下,I/O系统可能需要监听某些事件。

4..Java内存模型

JMM(Java 内存模型)详解 | JavaGuide

java内存模型即JMM,主要解决了多线程环境下的可见性、原子性和有序性问题。

主要定义了对于一个共享变量,当另一个线程对这个共享变量执行写操作后,这个线程对这个共享变量的可见性。抽象了线程和主内存之间的关系,线程之间的共享变量必须存储在主内存中,规定了java源代码到cpu执行指令的这个转换过程的原则和规范,主要目的是为了简化多线程编程,增强程序可移植性。

happens-before原则:逻辑时钟,对分布式系统的事件的先后顺序进行判断。

happen-before原则的诞生是为了程序员和编译器、处理器之间的平衡。程序员追求的是易于理解喝编程的强内存模型,遵守规则编码即可;编译器和处理器追求的是较少约束的弱内存模型,让性能最大化。

设计思想:对编译器和处理器的约束尽可能少,只要不改变程序的执行结果(单线程和正确执行的多线程),编译器和处理器怎么进行重排序优化都行

对于会改变程序执行结果的,JMM要求编译器和处理器必须禁止这种重排序。

常见规则:

程序顺序规则:一个线程内,按照代码顺序,书写在前面的操作happens-before于书写在后面的操作

解锁规则:一个线程对某个对象的解锁操作happens-before于另一个线程对该对象的加锁操作

volatile变量规则:对一个volatile变量的写操作happen-before该变量后续的读操作

传递性:A happen-before B,且B happen-before C,那么A happen-before C

线程开始规则:对于一个线程的start()调用,happen-before该线程的如何操作

线程结束规则:对于一个线程得到所有操作,happend-before该线程的join()调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值