java面试题基础第七天

2023-09-16 00:05:39

一、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提供了接口和内部类以达到实现多继承功能,弥补单继承的缺陷。
更多推荐

面试失败的反思:如何从错误中吸取教训

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

服务器搭建(TCP套接字)-epoll版(服务端)

epoll是一种在Linux系统上用于高效事件驱动编程的I/O多路复用机制。它相比于传统的select和poll函数具有更好的性能和扩展性。epoll的主要特点和原理:1、事件驱动:epoll是基于事件驱动的模型,它通过监听事件来触发相应的回调函数,而不是像传统的阻塞模型那样持续轮询。这样可以避免无效的轮询操作,提高效

开源项目在面试中的作用:如何用你的贡献加分

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

STM32F4X UCOSIII 消息队列

STM32F4XUCOSIII消息队列消息队列消息队列的作用消息队列工作机制消息队列创建消息发送消息发送模式FIFO(先进先出)LIFO(后进先出)消息接收消息队列删除消息队列常用函数消息队列创建函数消息队列发送函数消息队列接收函数消息队列删除函数UCOSIII消息队列例程消息队列消息队列的作用消息队列是一种常用于任务

全渠道零售趋势——现代零售业成功的关键

在快节奏的零售时代,无论通过什么渠道购物,消费者越来越习惯无缝购物体验。因此,保持线上和线下购物体验的一致性有助于在品牌与购物者之间建立信任,这也是每个零售商的首要任务。在本文中,我们将介绍现代零售业成功的关键——全渠道零售趋势,帮助零售商实现现代零售业的成功。什么是全渠道零售体验?全渠道零售是一种使零售商能够在所有渠

孙宇晨:稳定币支付交易具百倍增长潜力 后FTX时代行业仍需修炼内功

9月14日,波场TRON创始人、火币HTX全球顾问委员会成员孙宇晨受邀出席于新加坡举办的TOKEN2049,并参加了“生态系统和行业增长:展望加密货币的未来十年”主题板块的讨论。孙宇晨在发言中表示,接下来的10年里,加密货币和区块链的最大日常应用场景仍然是稳定币支付交易,预计将有百倍规模增长。他同时指出,一系列风险事件

RISC-V架构学习——C语言内嵌汇编总结

1、C语言内嵌汇编的作用(1)优化:对于特别重要代码进行优化,出于性能的考虑;(2)C语言需要借助汇编指令来实现特殊功能。比如:C语言中访问系统寄存器就需要借助CSR指令;2、基础内嵌汇编2.1、基础内嵌汇编格式asmasm-qualifiers(AssemblerInstructions)关键字含义asm这是内嵌汇编

欧科云链研究院:锚定金融市场,香港从STO再出发

作者|HedyBi昨日,据大公报报道,太极资本宣布推出香港首个面向「专业投资者」的房地产基金证券型代币发行(STO)。集资目标为1亿元。“牌照,醉翁之意不在酒。BTC、ETH等加密资产只是第一步,而背后暗藏的玄机,则是整个金融市场。”“在合规之前,我们看到行业更多是冒出来的是例如NFT、DeFi这类原生的项目。合规之后

【C++】C++ 引用详解 ⑦ ( 指针的引用 )

文章目录一、二级指针可实现的效果二、指针的引用1、指针的引用等同于二级指针(重点概念)2、引用本质-函数间接赋值简化版本3、代码示例-指针的引用一、二级指针可实现的效果指针的引用效果等同于二级指针,因此这里先介绍二级指针;使用二级指针作为参数,可以实现如下功能:动态内存管理:借助二级指针,可以在函数中分配或释放内存;如

数据结构:平衡二叉树

文章目录平衡二叉树一,概述二,添加数据三,删除数据平衡二叉树一,概述平衡二叉树,也称为AVL树,是一种特殊的二叉排序树,它的每个节点的左子树和右子树的高度差不超过1。平衡二叉树的定义可以概括为以下两点:左子树和右子树的高度差绝对值不超过1。左子树和右子树都是平衡二叉树。平衡因子是平衡二叉树中的一个重要概念,它表示一个节

爬虫 — Xpath 数据解析

目录一、介绍二、使用三、语法1、//2、/3、@4、/text5、[]、[@]四、练习1、元组写入2、对象写入五、豆瓣电影信息爬取一、介绍XPath(XMLPathLanguage)是一种XML的查询语言,它能在XML树状结构中寻找节点。XPath用于在XML文档中通过元素和属性进行导航。XML是一种标记语法的文本格式

热文推荐