java面试题基础第七天

news2024/9/21 8:32:52

一、java面试题第七天

1.throw和throws的区别?

  • throw: 用于抛出一个异常对象
  • throws:写在方法体上面,将方法体里面的异常,抛给上层

2. 通过故事讲清楚NIO

下面通过一个例子来讲解下。

假设某银行只有10个职员。该银行的业务流程分为以下4个步骤:

1) 顾客填申请表(5分钟);

2) 职员审核(1分钟);

3) 职员叫保安去金库取钱(3分钟);

4) 职员打印票据,并将钱和票据返回给顾客(1分钟)。

下面我们看看银行不同的工作方式对其工作效率到底有何影响。

首先是BIO方式。

每来一个顾客,马上由一位职员来接待处理,并且这个职员需要负责以上4个完整流程。当超过10个顾客时,剩余的顾客需要排队等候。

一个职员处理一个顾客需要10分钟(5+1+3+1)时间。一个小时(60分钟)能处理6个顾客,一共10个职员,那就是只能处理60个顾客。

可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。

这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。

那么如何提高银行的吞吐量呢?

思路就是:分而治之,将任务拆分开来,由专门的人负责专门的任务。

具体来讲,银行专门指派一名职员A,A的工作就是每当有顾客到银行,他就递上表格让顾客填写。每当有顾客填好表后,A就将其随机指派给剩余的9名职员完成后续步骤。

这种方式下,假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理。

柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。

可见工作方式的转变能带来效率的极大提升。

这种工作方式其实就NIO的思路。

下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,接收新连接,并将建立的socket分派给subReactor

subReactor可以是一个线程,也可以是线程池,负责多路分离已连接的socket,读写网络数据。这里的读写网络数据可类比顾客填表这一耗时动作,对具体的业务处理功能,其扔给worker线程池完成

可以看到典型NIO有三类线程,分别是mainReactor线程、subReactor线程、work线程。

不同的线程干专业的事情,最终每个线程都没空着,系统的吞吐量自然就上去了。

请添加图片描述

那这个流程还有没有什么可以提高的地方呢?

可以看到,在这个业务流程里边第3个步骤,职员叫保安去金库取钱(3分钟)。这3分钟柜台职员是在等待中度过的,可以把这3分钟利用起来。

还是分而治之的思路,指派1个职员B来专门负责第3步骤。

每当柜台员工完成第2步时,就通知职员B来负责与保安沟通取钱。这时候柜台员工可以继续处理下一个顾客。

当职员B拿到钱之后,通知顾客钱已经到柜台了,让顾客重新排队处理,当柜台职员再次服务该顾客时,发现该顾客前3步已经完成,直接执行第4步即可。

在当今web服务中,经常需要通过RPC或者Http等方式调用第三方服务,这里对应的就是第3步,如果这步耗时较长,通过异步方式将能极大降低资源使用率。

NIO+异步的方式能让少量的线程做大量的事情。这适用于很多应用场景,比如代理服务、api服务、长连接服务等等。这些应用如果用同步方式将耗费大量机器资源。

不过虽然NIO+异步能提高系统吞吐量,但其并不能让一个请求的等待时间下降,相反可能会增加等待时间。

最后,NIO基本思想总结起来就是:分而治之,将任务拆分开来,由专门的人负责专门的任务

3.BIO/NIO/AIO的区别?

**同步阻塞IO(BIO) **:

BIO是最早的一种I/O模型,它的特点是使用阻塞I/O方式。当应用程序通过socket等API发送或接收数据时,线程会被阻塞,直到数据被读取或写入完毕。

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

NIO是Java 1.4引入的新I/O模型,与BIO模型相比,它使用了非阻塞的I/O方式,并提供了更多的选择器、通道等操作。当数据准备完毕时,线程才会去读取或者写入数据

异步非阻塞IO(Asynchronous I/O)

AIO是Java 1.7提供的新I/O模型,它与NIO不同,使用了异步I/O方式,与I/O操作相关的线程会在完成操作后通知应用程序。

4.守护线程是什么?

守护线程也称之为后台线程,守护线程的主要作用于为其他线程提供服务,当守护线程守护的主线程结束后,守护线程也将结束,比如,文件下载时,一条主线程实现文件拷贝,另一条子线程用于计算下载进度,该条子线程主要为下载线程提供服务,因此计算下载进度的线程可以定义为守护线程;只需要调用Thread类提供的setDaemon()方法即可实现,java中要将其他线程设置为守护线程。

5.Java支持多继承吗?

java中,类是不支持多继承的,但是Java是支持多继承,我们可以通过接口来实现更多的功能

Java不支持多继承的原因:

  • 出于安全性的考虑,如果子类继承的多个父类里面有相同的方法或者属性,子类将不知道具体要继承哪个。
  • Java提供了接口和内部类以达到实现多继承功能,弥补单继承的缺陷。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【多光谱与高光谱图像融合:金字塔混洗Transformer】

PSRT: Pyramid Shuffle-and-Reshuffle Transformer for Multispectral and Hyperspectral Image Fusion (PSRT:用于多光谱与高光谱图像融合的金字塔混洗Transformer) Transformer在计算机视觉中受到了很多关注。由于Transformer具有全局自关…

使用Docker构建轻量级Linux容器

Docker是一个开源的容器化平台,可以帮助用户快速创建、部署和管理应用程序的轻量级Linux容器。通过Docker,用户可以将应用程序及其所有依赖项打包成一个独立的容器镜像,并在各种环境中运行,无需担心环境差异和依赖冲突。下面将详细…

【多线程】CAS 详解

CAS 详解 一. 什么是 CAS二. CAS 的应用1. 实现原子类2. 实现自旋锁 三. CAS 的 ABA 问题四. 相关面试题 一. 什么是 CAS CAS: 全称Compare and swap,字面意思:”比较并交换“一个 CAS 涉及到以下操作: 我们假设内存中的原数据 V,旧的预期值…

c++ vs2019 cpp20规范 模板function 源码解析

以下是文字结论: 这个函数模板,可以把函数类型,和对象函数类型(就是类里定义了operator()运算符函数)统一成一个类型,反正都是可调用对象。 代码注释完有900行,也挺多的。选择最重要的结论贴出…

腾讯mini项目-【指标监控服务重构】2023-08-21

今日已办 PPT 汇报 答辩的时间需要把控人员的分配不够合理效果展示不够清晰,不够熟练重点的调研测试对比报告还未产出 项目待办 50字总结项目意义,top3 难点watermill 和 profile 正则处理otel-sdk 隐式,可扩展接入云 clickhouse 集群&am…

[maven] scopes 管理 profile 测试覆盖率

[maven] scopes & 管理 & profile & 测试覆盖率 这里将一些其他的特性和测试覆盖率(主要是 jacoco) scopes maven 的 scope 主要就是用来限制和管理依赖的传递性,简单的说就是,每一个 scope 都有其对应的特性&…

大语言模型如何生成内容

大语言模型生成内容主要基于语言模型算法。语言模型是一种机器学习算法,它可以根据给定文本来预测下一个词语或字符的出现的概率。语言模型通过大量的文本数据来学习语言的统计特征,进而生成具有相似统计特征的新文本。其核心目标是建立一个统计模型&…

zemax像散与消像散

打开zemax自带的例子 点列图可以观察到像散 我们旋转3D视图 这个角度似乎聚焦在像平面上,我们旋转90度 可以看到这一方向上其实已经聚焦 像散就是光斑在像面上子午方向和弧矢方向的不一致性 从光纤光扇图中可以具体的看出,两者不一致: 消除…

安卓毕业设计各种app项目,Android毕设设计,Android课程设计,毕业论文

作为一位从事软件开发多年的专业人士,您积累了丰富的经验和技能,解决了许多不同类型的问题。除了开发原创项目,您还愿意分享您的知识,指导实习生和在校生。这种乐于助人的行为对于行业的发展和新一代软件开发者的成长都起着积极的…

腾讯云镜像TencentOS Server操作系统介绍、性能稳定性测评

腾讯云TencentOS Server镜像是腾讯云推出的Linux操作系统,完全兼容CentOS生态和操作方式,TencentOS Server操作系统为云上运行的应用程序提供稳定、安全和高性能的执行环境,TencentOS可以运行在腾讯云CVM全规格实例上,包括黑石物理…

系列七、Nginx负载均衡配置

一、目标 浏览器中访问http://{IP地址}:9002/edu/index.html,浏览器交替打印清华大学8080、清华大学8081. 二、步骤 2.1、在tomcat8080、tomcat8081的webapps中分别创建edu文件夹 2.2、将index.html分别上传至edu文件夹 注意事项:tomcat8080的edu文件…

lv4 嵌入式开发-9 静态库与动态库的使用

目录 1 库的概念 2 库的知识 3 静态库特点 4 静态库 4.1静态库创建 4.2 编译生成目标文件 4.3 创建静态库 hello 4.4 查看库中符号信息 4.5 链接静态库 5 共享库特点 6 共享库 6.1 共享库创建 6.2 编译生成目标文件 6.3 创建共享库 common 6.4为共享库文件创建…

启动微服务,提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

说明:启动一些微服务后,一直在报下面这个错误; com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not acc…

扩散模型在图像生成中的应用:从真实样例到逼真图像的奇妙转变

一、扩散模型 扩散模型的起源可以追溯到热力学中的扩散过程。热力学中的扩散过程是指物质从高浓度往低浓度的地方流动,最终达到一种动态的平衡。这个过程就是一个扩散过程。 在深度学习领域中,扩散模型(diffusion models)是深度生…

《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组对角矩阵

《数据结构、算法与应用C语言描述》使用C语言实现二维数组对角矩阵 对角矩阵定义 如下图所示: 代码实现 _9diagonalMatrix.h 模板类 /* Project name : allAlgorithmsTest Last modified Date: 2022年8月13日17点38分 Last Version: V1.0 Descriptions: …

pdf添加水印

给pdf文件添加水印 引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>添加水印 package com.it2.pdfdemo02.util;import com.itextpdf.tex…

解决npm install遇到的问题:Error while executing:

目录 一、遇到问题 二、解决办法 三、备用方案 一、遇到问题 npm ERR! Error while executing: npm ERR! D:\IT_base\git\Git\cmd\git.EXE ls-remote -h -t ssh://gitgithub.com/sohee-lee7/Squire.git npm ERR! npm ERR! fatal: unable to access https://github.com/so…

go-GMP和Scheduler

GPM模型 G 待执行的goroutine&#xff0c;结构定义在runtime.g M 操作系统中的线程&#xff0c;它由操作系统的调度器 进行 调度和管理, 结构定义在runtime.m P 处理器&#xff0c;是GM的中间件&#xff0c;它通过一个队列绑定了GM&#xff0c;每个P都有一个局部queue&#x…

【单线图的系统级微电网仿真】基于 PQ 的可再生能源和柴油发电机组微电网仿真(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华硕电脑怎么录屏?分享实用录制经验!

“华硕电脑怎么录屏呀&#xff0c;刚买的笔记本电脑&#xff0c;是华硕的&#xff0c;自我感觉挺好用的&#xff0c;但是不知道怎么录屏&#xff0c;最近刚好要录一个教程&#xff0c;怎么都找不到在哪里录制&#xff0c;有人能教教我吗&#xff1f;” 随着电脑技术的不断发展…