java面试题记录

 一、多线程、高并发:

1.1 什么是死锁,怎样解决死锁问题?

死锁指的是由于两个或两个以上的线程互相持有对方所需要的资源,同时等待获取对方释放自己所需要的资源,导致这些线程处于等待中而无法往下进行的状态。

精简描述:死锁是指多个线程因竞争资源而造成的一种互相等待的僵局。
.
死锁的四个必要条件:
(1)互斥性:一个资源只能被一个线程占有;
(2)请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经占有的资源不释放;
(3)不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用;
(4)循环等待:发生死锁时,线程进入死循环,永久阻塞;
.
死锁的解决方案:

(1)注意加锁顺序。
(2)申请资源前,释放自己拥有的资源;
(3)死锁检测

1.2 谈谈你对 Synchronized 的理解

Synchronized解析——如果你愿意一层一层剥开我的心 - 掘金synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。 接下来,我们先剥开synchronized的第一层,反编译其作用的代码块以及方法。 由图可得,添加了s…icon-default.png?t=N7T8https://juejin.cn/post/6844903918653145102#comment

 

 二、java IO

2.1 Java中常见的I/O模型 ?

(1)BIO(Blocking I/O)同步阻塞I/O模型

        BIO是Java早期提供的IO模型。它是一种阻塞式IO,在进行IO操作时,线程会被阻塞直到IO操作完成。

        Java IO通过流的方式来进行IO操作,对应的主要类包括InputStream、OutputStream、Reader和Writer,它们是同步的,一次只能处理一个请求。在面对并发量较大的情况下,BIO模型性能较低。

     BIO缺点:

  1. 无法处理过高的并发请求
  2. 数据读写操作过程中线程阻塞、资源占用

(2)NIO(Non-Blocking I/O)同步非阻塞IO

        NIO有两种实现方式:

        第一种实现方式 (早期实现):一个线程无限循环去list(存放着客户端连接)轮训,检查是否有读写请求,如果有则处理,如果没有跳过;属于同步非阻塞I/O模型。

缺点:如果连接过多,会有大量的无效遍历(因为每个连接不一定都有读写事件),造成资源浪费。

        第二种实现方式(JDK1.4 后):客户端发送的连接请求都会注册到多路复用器selector上,多路复用器轮询到连接有IO请求就进行处理;属于I/O 多路复用模型。

(3) (I/O Multiplexing)  IO多路复用

        实际上就解决了 NIO 中的频繁轮询 CPU 的问题,并且引入一种新的 select 系统调用。

复用 IO 的基本思路就是通过 slect 调用来监控多 fd(文件描述符),来达到不必为每个 fd 创建一个对应的监控线程的目的,从而减少线程资源创建的开销。一旦某个描述符就绪(一般是内核缓冲区可读/可写),内核就能够将文件描述符的就绪状态返回给用户进程(或者线程),用户空间可以根据文件描述符的就绪状态进行相应的 IO 系统调用。IO 多路复用(IO Multiplexing)属于一种经典的 Reactor 模式实现,有时也称为异步阻塞 IO

(4)AIO(Asynchronous I/O)是异步I/O模型

        异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

特点:

1. 异步操作:在AIO中,I/O操作会在后台进行,不会阻塞程序的执行。当一个I/O操作被发起后,程序可以继续执行其他任务,而不需要等待操作完成。

2. 回调机制:当I/O操作完成时,系统会通知程序,触发事先注册的回调函数。通过回调函数,程序可以获取操作结果或执行后续处理。

3. 缓冲区管理:在AIO中,数据的读取和写入使用缓冲区。程序将数据写入缓冲区后,可以继续执行其他任务,而不需要等待数据的实际写入操作完成。

(5) 信号驱动I/O

        

当进程发起一个 IO 操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用 IO 读取数据。

信号驱动 IO 不同于 AIO 的是依旧存在阻塞状态,即用户进程获取到数据就绪信号后阻塞进行 IO 操作。

三、关系型数据库,如 MySql 等 数据库 

四、非关系型数据库,redis数据库 

五、rabbitMQ 等消息中间件 

 六、设计模式

 6.1 项目中使用过哪些设计模式?举例场景 及遇到的实际问题

七、spring 、springMVC  、springBoot、springCloud 框架的理解

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

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

相关文章

第一篇------Virtual I/O Device (VIRTIO) Version 1.1

1 介绍 本文档描述了“virtio”设备系列的规格。这些设备通常出现在虚拟环境中,但按设计,它们在虚拟机内部看起来像物理设备,而本文档将其视为这样的设备。这种相似性允许虚拟机内的客户端使用标准驱动程序和发现机制。 virtio及其规格的目的…

远程计算机控制软件

远程控制软件允许您连接和控制位于不同位置的设备,对于 IT 帮助台技术人员来说,这是一个很好的工具,可以通过与用户协作、与他们聊天以及安全地访问他们的文件来轻松排除故障和修复远程设备。使用远程控制软件,距离不再是提供技术…

Kotlin变量与控制条件的基本用法

一、变量与控制条件 1、var与val var:可修改变量 val:只读变量,只读变量并非绝对只读。 编译时常量只能在函数之外定义,因为函数内常量是在运行时赋值,编译时常量要在变量赋值前存在。并且值是无法修改的。 const…

VIRTIO-SCSI代码分析(2)VIRTIO 驱动分析

QEMU模拟出VIRTIO SCSI设备后,在虚拟机中呈现SCSI设备和PCIE设备。而在虚拟机中,PCIE设备与VIRTIO PCI驱动匹配触发virtio_pci_probe()注册生成virtio设备,而virtio设备与虚拟机中的virtio驱动匹配触发对应probe函数最终注册对应的驱动。 这里…

短视频搭建矩阵源码--短视频矩阵源码搭建

短视频矩阵系统是一种通过将短视频内容进行分类、管理和展示的系统。它可以将用户上传或者选择的短视频按照不同的特定标签进行分类和管理,用户可以根据自己的兴趣和需求选择观看不同类别的短视频。 短视频矩阵源码的开发部署其实并不难,主要依托于抖音平…

uniapp微信小程序《隐私保护协议》弹窗处理流程

背景 《关于小程序隐私保护指引设置的公告》 《小程序隐私协议开发指南》 流程 1.第一步 必须设置且审核通过!!! 2.第二步 uniapp在manifest.json中添加!!! /* 在 2023年9月15号之前,在 ap…

Apinto 网关: Go语言实现 HTTP 转 gRPC

gRPC 是由 Google 开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于 HTTP/2 协议标准而设计,同时支持大多数流行的编程语言。 gRPC 基于 HTTP/2 协议传输, HTTP/2 相比 HTTP1.x有以下优势: 采用二进制格式传输协议&#xff…

Flink JobManager的高可用配置

背景 在flink执行中,jobManager是一个负责执行流式应用执行和检查点生成的组件,一旦发生故障,那么其负责的所有应用都会被取消,所以我们需要对JobManager配置高可用的模式 JobManager高可用配置 配置JobManager的高可用需要使用…

Ae 效果:CC Hair

模拟/CC Hair Simulation/CC Hair CC Hair(CC 毛发)可以在源图像上模拟生成毛发、绒线等,并可调整它们的长度、方向、重量等属性,从而创建出非常独特的效果。 CC Hair 本质上是基于 Alpha 通道来生成毛发,无毛发处将变…

Python 文件写入操作

视频版教程 Python3零基础7天入门实战视频教程 w模式是写入,通过write方法写入内容。 # 打开文件 模式w写入,文件不存在,则自动创建 f open("D:/测试3.txt", "w", encoding"UTF-8")# write写入操作 内容写入…

Typora偏好设置中图床的配置文件点击打开没有反应

Typora偏好设置中图床的配置文件点击打开没有反应 突然发现Typora偏好设置中图床打开配置文件点击没有反应&#xff0c;如下按钮所示 可能是因为系统不知道用什么软件打开json&#xff0c;直接进入配置文件json目录&#xff0c;一般位置在C:\Users\<your_user_name>\.pi…

Python if条件分支结构

视频版教程 Python3零基础7天入门实战视频教程 如果 Python程序的多行代码之间没有任何流程控制&#xff0c;则程序总是从上向下依次执行。 但是现实生活中&#xff0c;我经常遇到一些需要做判断的业务流程。比如去银行ATM取款&#xff0c;如果密码输入正确&#xff0c;则可以…