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.rhkb.cn/news/130844.html

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

相关文章

计算机二级公共基础知识-2023

计算机基础知识: 计算机的发展: 第一台电子计算机eniac 埃尼阿克 1946 第一台存储程序计算机 edvac 艾迪瓦克 根据电子元器件的发展分类 1.电子管 2.晶体管 3.集成电路 4.超大规模继承电路 按照电脑的用途可以分为 专用计算机 专门用于处理…

CAD ObjectArx 二次开发 创建工具栏实现点击button出现抽屉式菜单

实现在CAD中创建工具栏并添加菜单命令,如下图 参照文章: cad—菜单,工具栏,屏幕菜单,增强工具栏 主要实现路径是通过创建一个可停靠窗口,并在其中创建toolbutton并给button点击事件添加命令,将…

简易yum仓库搭建

目录 一、实验准备 二、获取yum仓库、安装httpd 三、客户机配置yum源 四、测试、验证 一、实验准备 准备两台主机: 192.168.115.148 :安装http 、作为yum仓库、挂载默认光盘 192.168.115.148 :作为客户机使用yum仓库、不挂载光盘 二、…

Spring MVC:请求转发与请求重定向

Spring MVC 请求转发请求重定向附 请求转发 转发( forward ),指服务器接收请求后,从一个资源跳转到另一个资源中。请求转发是一次请求,不会改变浏览器的请求地址。 简单示例: 1.通过 String 类型的返回值…

【爬虫】8.1. 深度使用tesseract-OCR技术识别图形验证码

深度使用tesseract-OCR技术识别图形验证码 文章目录 深度使用tesseract-OCR技术识别图形验证码1. OCR技术2. 准备工作3. 简单作用了解3.1. 验证码图片爬取-screenshot_as_png3.2. 识别测试-image_to_string3.2.1. 正确识别3.2.2. 错误识别3.2.3. 灰度调节 3.3. 识别实战-使用im…

Trinitycore学习之在vscode查看远端服务器上源码配置

1:安装vscode,去官网下载,这里下载windows版本安装包 .zip https://code.visualstudio.com/Download 2:安装后,安装扩展chinese,使用中文设置,需要重启vscode。 3:安装ssh相关插件…

Jmeter系列进阶-获取图片验证码(4)

安装工具 通过ocrserver工具识别图片验证码,解压后 .exe双击启动即可。 jmeter中使用 (1)HTTP请求获取验证码 (2)在获取验证码图片的接口下面添加监听器》保存响应到文件;如下图: &#x…

stu01-IDEA怎么创建一个HTML项目

1.打开idea,依次点击file→new→project 2.点击Java,选择你的jdk,没有下载的点击“Download JDK”/已经下载有JDK但在这里没显示的→点击“Add JDK”,选择你安装的JDK的路径,然后next 3.next 4.起好名字,我…

Python基于Flask的高校舆情分析,舆情监控可视化系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 运行效果图 基于Python的微博大数据舆情分析,舆论情感分析可视化系统 系统介绍 微博舆情分析系…

线性回归方程

性回归是利用数理统计中的回归分析来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法,是变量间的相关关系中最重要的一部分,主要考查概率与统计知识,考察学生的阅读能力、数据处理能力及运算能力,题目难度中等&…

基于 Flink CDC 高效构建入湖通道

本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人, Apache Flink PMC Member & Committer 徐榜江(雪尽),在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分: Flink CDC 核心技术解析数…

基于springboot+vue的大学社团管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

sqli第一关

1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐。左为sqlilabs第一关,右为burpsuite。 2.输入?id1 and 11 与?id1 and 12试试 可以看出没有变化哈,明显我们输入的语句被过滤了。在?id1后面尝试各种字符,发现单引号 包…

企业架构LNMP学习笔记18

nginx的日志: 日志类型: access.log 访问日志、查看统计用户的访问信息,流量。 error.log 错误日志,错误信息,重写信息。 access.log日志文件内容示例: 192.168.17.1 - - [06/Sep/2023:20:37:39 0800] …

数据库系统概念学习1

第一章 引言 数据库管理系统是由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库 特定时刻存储在数据库中的信息的集合称为数据库的一个实例,而数据库的总体设计称为数据库模式 数据库结构的基础是数据模型,…

【C++基础】左值引用、右值引用、move、forward

本文参考:右值引用 | 爱编程的大丙 转移和完美转发 | 爱编程的大丙 左值、右值、左值引用、右值引用 左值 是指存储在内存中、有明确存储地址(可取地址)的数据; 右值 是指可以提供数据值的数据(不可取地址&#x…

UNext:基于 MLP 的快速医学图像分割网络

UNext 会议分析摘要贡献方法整体框架1.Shifted MLP2.Tokenized MLP Stage 实验1.对比实验2.消融实验2.1 模块的消融实验2.2 通道数的探索 可借鉴参考 会议分析 期刊(会议)名: MICCAI 2022 会议信息: 属于顶会了 有代码&#xff1…

3D视觉测量:3D空间圆拟合优化

文章目录 0. 测试效果1. 测量思路2. 部分调用代码文章目录:形位公差测量关键内容:通过视觉方法实现GD&T中的圆孔位置定位0. 测试效果 1. 测量思路 空间圆拟合是指在三维空间中找到最佳拟合圆的过程。这通常用于从一组三维点数据中找到一个圆,以最小化数据点到圆的距离之…

百度地图3D棱柱鼠标事件

百度地图2D API JavaScript API | 百度地图API SDK 百度地图3D API jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 var map new BMapGL.Map(container, {style: {styleJson: styleJson2} }) map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9); map…

通过rabbitmq生成延时消息,并生成rabbitmq镜像

通过rabbitmq生成延时消息队列,并生成rabbitmq镜像 整体描述1. 使用场景2. 目前问题3. 前期准备 具体步骤1. 拉取镜像2. 运行镜像3. 安装插件4. 代码支持4.1 config文件4.2 消费监听4.2 消息生产 5. 功能测试 镜像操作1. 镜像制作2. 镜像导入 总结 整体描述 1. 使用…