跟着B战学习JAVA面试八股文

news2024/11/15 13:43:34

学习链接:https://www.bilibili.com/video/BV1gm411S7EX/?spm_id_from=333.337.search-card.all.click&vd_source=efbaa07876b231ae3225ba8999116807

  1. 创建线程的几种方式?
  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 通过线程池来创建线程
  1. 为什么不建议使用Executors创建线程池?

以创建FixedThreadPool为例,其构造方法为:

public static ExecutorService newFixedThreadPool (int nThread) {
	return new ThreadPoolExecutor (nThread, nThread, 0L, TimeUnit.MILLISECONDS,
									new LinkedBlockingQueue<Runnable>());
}

发现创建的队列为LinkedBlockingQueue,是一个无界阻塞队列(最大是21亿个任务),如果使用该线程池执行任务,如果任务过多就会不断的添加到队列中,任务越多占用的内存就越多,最终可能耗尽内存,导致OOM。

	// 短信关于创建线程池的实践,线程池的大小要结合具体的场景来确定。
    private static final ExecutorService executor;

    static {
        Integer corePoolSize = DeviceConfig.getInstance().getInteger("route.exec.corePoolSize", 16);
        Integer maximumPoolSize = DeviceConfig.getInstance().getInteger("route.exec.maximumPoolSize", 16);
        Integer queueCapacity = DeviceConfig.getInstance().getInteger("route.exec.queueCapacity", 1000);
        executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 0L,
                TimeUnit.SECONDS, new LinkedBlockingQueue<>(queueCapacity),
                Executors.defaultThreadFactory(), new CallerRunsPolicyWithCounter());
    }
    
// 拒绝策略,计数
public class CallerRunsPolicyWithCounter implements RejectedExecutionHandler {

    private AtomicLong count = new AtomicLong(0L);

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        if (!executor.isShutdown()) {
            count.incrementAndGet();
            r.run();
        }
    }

    public long report() {
        return count.getAndSet(0L);
    }

}
  1. 线程池有几种状态,分别表示什么?
  1. Running(运行状态):线程池新建或者调用execute()方法后,处于运行状态,能够接收新的任务
  2. ShutDown(关闭状态):调用shutdown()方法后,此时线程池不再接收新的任务,但会执行已提交的等待队列中的任务.
  3. Stop(停止状态):调用shutdownNow()方法时,线程的状态会变为Stop。此时线程池不再接收新的任务,并且会中断正在处理中的任务
  4. Tidying(整理状态):中间状态不做任何处理
  5. Terminated(终止状态):线程池内部的所有线程都已经终止时,线程池进入Terminated状态

在这里插入图片描述

  1. Synchronized和ReentrantLock有哪些不同点?
  1. Sync的底层锁升级策略?
  2. Lock的中断方式?

在这里插入图片描述
在这里插入图片描述

  1. ThreadLocal 有哪些应用场景?它底层是如何实现的?

线程隔离
结构如下,每个线程都会关联一个ThreadLocalMap
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. ReentrantLock分为公平锁和非公平锁,那底层分别是如何实现的?

首先不管是公平锁和非公平锁,他们的底层实现都是使用AQS来进行排队,他们的区别在于线程在使用lock()方法加锁时:

  1. 如果是公平锁,会先检查AQS队列中是否存在线程在排队,如果有线程在排队,则当前线程也进行排队;
  2. 如果是非公平锁,则不会去检查是否有线程在排队,而是直接去竞争锁。

另外,不管是公平锁还是非公平锁,一旦没竞争到锁,都会进行排队,当锁释放时,都是唤醒排在最前面的线程,所以非公平锁只是体现在了线程加锁阶段,而没有体现在线程被唤醒的阶段。

ReentrantLock是可重入锁,不管是公平锁,还是非公平锁都是可重入。

  1. Synchronized 的锁升级过程是什么样的?

在这里插入图片描述

  1. tomcat 为什么要自定义类加载器?

避免因为类名一样而产生冲突。
在这里插入图片描述

  1. 微服务有什么好处?

单体项目的缺点:

  1. 可扩展性受限
  2. 难以维护和更新
  3. 高风险
  4. 技术栈限制
  5. 团队协助复杂

微服务项目的缺点:

  1. 成本挑战
    i. 基础设施成本增加
    ii. 开发和维护成本
  2. 复杂性挑战
    i. 分布式系统复杂性
    ii. 服务发现与治理
  3. 部署挑战
    i. 自动化部署需求
    ii. 版本控制和回滚
  4. 一致性挑战
    i. 数据一致性
    ii. 事务管理
  5. 监控与故障排查挑战
    i. 性能挑战
    ii. 故障排查
  1. 现在有哪些微服务解决方案?
  1. Dubbo + ZK
  2. SpringCloud
    在这里插入图片描述
    在这里插入图片描述
  1. Eureka 实现原理了解吗?

Eureka的实现原理,可以分为以下几个方面:

  1. 服务注册与发现:当一个服务实例启动时,会向Eureka Server发送注册请求,将自己注册到注册中心。Eureka Server会将这些信息保存在内存中,并提供REST接口供其他服务查询。服务消费者可以通过查询服务实例列表来获取可用的服务提供实例,从而实现服务的发现。
  2. 服务健康检查:Eureka通过心跳机制来检测服务实例的健康状态。服务实例会定期向Eureka Server发送心跳,也就是续约,以表明自己的存活状态.如果Eureka Server在一定时间内没有收到某个服务实例的心跳,则会将其标记为不可用,并从服务列表中移除,下线实例。
  3. 服务负载均衡:Eureka客户端在调用其他服务时,会从本地缓存中获取服务的注册信息.如果缓存中没有对应的信息,则会向Eureka Server发送查询请求.Eureka Server会返回一个可用的服务实例列表给客户端,客户端可以使用负载均衡算法选择其中一个去调用。
  1. Eureka Server是怎么保证高可用的?
  1. 多实例部署:通过将多个Eureka Server实例部署在不同的节点上,可以实现高可用性。当其中一个实例发生故障时,其他实例仍然可以提供服务,并保持注册信息的一致性。
    在这里插入图片描述
  2. 服务注册信息的复制:当一个服务实例向Eureka Server注册时,每个Eureka Server实例都会复制其他实例的注册信息,以保持数据的一致性。当某个Eureka Server实例发生故障时,其他实例可以接管其工作,保证整个系统的正常运行.
  3. 自我保护机制:Eureka具有自我保护机制.当Eureka Server节点在一定时间内没有收到心跳时,会进入自我保护模式。在自我保护模式下,Eureka Server 不再剔除注册表中的服务实例,以保护现有的注册信息。这样可以防止由于网络抖动活其他原因导致的误剔除,进一步提高系统的稳定性。
  1. 什么是CAP?为什么三者不能同时拥有?

分布式项目的3个特性:一致性(Consistency),可用性(Availability)、分区容错(Partition-tolerance)

  1. 分区容错性:分布式系统在遇到某节点或者网络分区故障时,仍然能够对外提供服务。
  2. 一致性:所有节点在同一时间的数据完全一致。
  3. 可用性:服务一直可用,而且是正常响应时间。允许读到的是旧的数据。
    在这里插入图片描述
  1. Base理论了解吗?
  1. Basically Available : 基本可用:
  2. Soft state:软状态,即允许多个节点存在数据延迟
  3. Eventually consistent:最终一致性
    在这里插入图片描述
  1. 什么是分布式事务?

ACID

  1. Atomicity: 原子性 一个事务的所有操作,必须全部完成,或者全部不完成。
  2. Consistency: 一致性 在事务开始或结束时,数据库应该在一致状态。
  3. Isolation:隔离性 事务与事务之间不会互相影响
  4. Durability: 持久性 事务一旦完成,就不能返回,变更完全保存到数据库中
    在这里插入图片描述
  1. 分布式事务有哪些常见的实现方案?
  1. 2PC:2阶段 准备-完成 准备-回滚
  2. 3PC:canCommit + 2阶段
  3. TCC:Try-Confirm-Cancel 类似2PC,阻塞粒度小 偏重于代码上解决
  4. SAGA: 流水线事务 == 长事务
  5. 消息队列实现数据最终一致性
  1. 有哪些分布式锁的实现方案?

  2. xxxx

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

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

相关文章

fiddler抓包09_过滤站点请求

课程大纲 1、 界面 Fiddler列表默认显示所有请求&#xff0c;可以设置过滤&#xff0c;按照规则只显示指定的请求。 界面介绍&#xff1a; “Use Filters”&#xff1a;过滤功能开关。勾选&#xff0c;开启过滤&#xff1b;反之不开启。 “Hosts”&#xff1a;根据站点&#xf…

免费ppt模板哪里找?职场必备这些利器

一眨眼&#xff0c;9月份的尾声渐近&#xff0c;无论是学生还是职场人士&#xff0c;都开始准备着新一轮的演讲和报告。在这个忙碌的时期&#xff0c;一份精美的PPT模板能够大幅提升你的工作效率&#xff0c;让你的演示更加引人入胜。 不用担心高昂的版权费用&#xff0c;市场…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时&#xff0c;晶体管会充电或放电电容。充电的电容表示逻辑高&#xff08;1&#xff09;&#xff0c;放电的电容表示逻辑低&#xff08;0&#xff09;。由于电容会随着时间泄漏电荷&#xff0c;因此需要定期刷…

接口测试Postman关联,断言,前置,参数化用法

一、Postman下载 我们直接搜索Postman官网下载即可 Postman API Platformhttps://www.postman.com/ 二、使用 下载安装完成后我们需要登录注册&#xff0c;按照Postman的指示进行注册登录&#xff0c;不登陆可能有些功能无法使用 登陆完成我们就可以开始对接口进行测试了 …

用于体积医学图像分割的跨视角差异依赖网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Cross-view discrepancy-dependency network for volumetric medical image segmentation 用于体积医学图像分割的跨视角差异依赖网络 01 文献速递介绍 医学图像分割的目标是通过为每个像素分配语义类别&#xff0c;从原始图像中描绘出受试者的解剖结构&#x…

Python项目的质量保证

首先来打个不恰当比喻&#xff0c;你在市场上购买苹果时&#xff0c;挑选最好的苹果相当简单。你可以通过触摸它们来挑选&#xff0c;选择最好的颜色、成熟度和没有可见的伤疤。这个过程称为质量控制——你只选择满足你要求的优质产品。当分拣站里有大量苹果时&#xff0c;事情…

利用F.interpolate()函数进行插值操作

函数简介 功能&#xff1a; 利用插值方法&#xff0c;对输入的张量数组进行上\下采样操作&#xff0c;换句话说就是科学合理地改变数组的尺寸大小&#xff0c;尽量保持数据完整。 torch.nn.functional.interpolate(input, sizeNone, scale_factorNone, modenearest, align_c…

Node.JS有什么用?给谁用?怎么学?通俗易懂,超级详细!

现在&#xff0c;nodejs主要是前端的小伙伴来用的。前端小伙伴也不用说去怎么学node&#xff0c;而是把node当做是一个环境。我们利用这个环境去搭建上层的一些应用&#xff0c;去使用一些工具。就像学习Windows一样&#xff0c;我们没有必要深入了解Windows的每一个细节&#…

【解密!】终端安全管理软件究竟是什么?一文给您揭晓答案!

在数字化时代&#xff0c;随着企业信息化程度的不断提升&#xff0c;网络安全问题日益凸显。 终端作为网络连接的最后一环&#xff0c;其安全性直接关系到整个网络体系的安全与稳定。 那么&#xff0c;终端安全管理软件究竟是什么呢&#xff1f;本文将为您深入解析这一重要话…

Image matting入门

概念 matting就是扣图&#xff0c;本质是预测前景与背景&#xff0c;将前景扣出来。主要应用于影视行业&#xff0c;如拍电影绿幕扣图。和图像分割的区别在于多一个模糊地带&#xff0c;非01分类&#xff0c;变成了预测alpha通道。前景F&#xff0c;背景B&#xff0c;图像I可以…

数据结构与算法——Java实现 11.习题——有序链表去重

目录 82. 删除排序链表中的重复元素 II 方法1 方法2 要知道&#xff0c;每一颗钻石在被发现前&#xff0c;都要经受埋藏尘埃的寂寞时光 —— 24.9.23 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0…

ActiveMQ 的传输协议机制

ActiveMQ 通过网络连接器这种连接机制来实现客户端与服务端之间的通信&#xff0c;ActiveMQ支持的传输协议在activeMQ 安装目录的 conf/activemq.xml中的<transportConnectors>标签之内。 ActiveMQ 支持的 client 端和 broker 端的通讯协议有&#xff1a;TCP、NIO、UDP、…

SpringBoot框架下的客户管理策略

1 绪论 1.1研究背景 随着网络不断的普及发展&#xff0c;企业客户管理系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从员工的实际需求出发&#xff0c;通过了解员工的需求开发出具有针对性的首页、个人中心、员工管理、客户信息管理、行业类型管理、项目信息管理、…

Vue(16)——Vue3.3新特性

defineOptions 在 Vue 3.3 之前&#xff0c;如果需要在 <script setup> 中设置组件名&#xff0c;通常需要在额外的 <script> 标签中使用 Options API 进行配置。defineOptions 是 Vue 3.3 版本中引入的一个宏&#xff08;macro&#xff09;&#xff0c;它主要用于…

Oracle数据库中设置账户密码、创建新用户以及授权操作详解

目录 背景: 1.使用命令行方式进入控制台&#xff1a; 2. 连接Oracle数据库 3.修改Oracle数据库管理员的密码 4. 测试密码修改是否成功 5.创建Oracle数据库中的新用户、设置密码并授权 背景: 最近我安装了Oracle数据库&#xff0c;记录一下使用SQL命令来完成迹象关键操作…

Rust格式化输出宏

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 我们编写程序的目的就是对输入进行处理&#xff0c;然后将处理结果反馈给用户&#…

react组件入门

react应用程序就是由一个个组件搭建而成。组件有类组件和函数组件两种。 我们之前使用create-react-app创建了app&#xff0c;src下放的就是我们应用的源代码&#xff0c;我们基于这些已生成的文件&#xff0c;来学习和验证组件。 类组件 这里我们创建PostList.js更改这个ap…

C++ bitset(位图)的介绍和使用

文章目录 一、bitset的介绍1. 位图的引入2. 位图的概念3. 位图的应用场景 二、bitset的使用1. 定义方式2. 成员函数3. 运算符重载 一、bitset的介绍 1. 位图的引入 面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是…

关于TrustedInstaller权限

前言 我们在在删除某些文件时会发现权限不够的情况&#xff0c;那是因为自从 Windows Vista 以来&#xff0c;为了提升安全性&#xff0c;微软对于权限的把控越来越紧。为了对抗恶意软件随意修改系统文件&#xff0c;Trustedinstaller 应运而生。 各权限之间的关系 普通人:Us…

鞋类分类系统源码分享

鞋类分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …