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

学习链接: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);@Overridepublic 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.xdnf.cn/news/1544645.html

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

相关文章

【官方Mamba库】原理简述和代码解析

目录 1 代码原理简述1.1 原始结构——SSM1.2 结构改进——S4&#xff08;Structured State Space for Sequences&#xff09;1.2.1 离散化1.2.2HiPPO 1.3 最终版本——Mamba&#xff08;又称S6或selective SSMs&#xff09; 2 代码库目录结构2.1 mamba_simple.py主体结构2.1.1 …

OLED(2)驱动篇

文章目录 1 概述2 代码简述2.1 OLED 对象2.2 OLEDProtocol 对象2.3 OLEDFont 对象 3 成果展示 1 概述 1&#xff09;代码仓库&#xff1a;这里尝试了两种面向对象的方式&#xff0c;不足之处敬请指正。 OOP 方式&#xff1a;https://gitee.com/luyaocf/demo-jlc_stm32f407_oop.…

Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】

Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】 目录 Unity 设计模式 之 行为型模式-【命令模式】【责任链模式】 一、简单介绍 二、命令模式&#xff08;Command Pattern&#xff09; 1、什么时候使用命令模式 2、使用命令模式的好处 3、使用时的注意事项 三…

FME学习笔记

读取数据 方法一&#xff1a;add reader 通过读模块来进行数据的读取 方法二&#xff1a;FeatureReader Parameters 通过转换器来进行数据的读取 可以通过空间范围进行筛选 在FME中&#xff0c;所有数据处理都要用到的&#xff0c;绝对的重点&#xff1a;转换器&#xff…

【Python】PyCharm: 强大的 Python 开发环境

⭕️宇宙起点 &#x1f4e2; 引言&#x1f3ac; 什么是 PyCharm&#xff1f;&#x1f528; PyCharm 的核心特性1. 智能代码编辑2. 调试和测试3. 项目和代码结构导航4. 集成 AI 助手5. 远程开发6. 集成数据库7. 科学工具8. 版本控制集成9. Web 开发 &#x1f4e6; 安装 PyCharm&…

黑马智数Day4-1

新增月卡 配置路由完成跳转 {path: /cardAdd,component: () > import(/views/car/car-card/add-card) }<el-button type"primary" click"$router.push(/cardAdd)">添加月卡</el-button> 车辆信息表单验证 <el-form :model"carInf…

Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后&#xff0c;关闭ThreadPoolTaskScheduler&#xff0c;CronTask仍然继续执行。 Configuration public class config {Beanpublic String getString() throws InterruptedException {Runnable runnable () -> {try {System.out.println("hello r…

《程序猿之设计模式实战 · 适配器模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【后端开发】JavaEE初阶—线程安全问题与加锁原理(超详解)

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作&#xff08;超详解&#xff09;-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f308;小编会在后端开发的学习中不…

关于javascript中防抖和节流的使用详解

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常见的优化技巧&#xff0c;通常用于控制函数在短时间内频繁触发的场景&#xff0c;尤其是在处理用户输入、滚动、窗口大小调整等事件时。它们的主要目的是减少不必要的函数调用&#xff0c;…

超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)

云风网 云风笔记 云风知识库 一、设计模式开闭原则定义 当应用的需求改变时&#xff0c;在不修改软件实体&#xff08;项目模块、类、接口方法&#xff09;的源代码或者二进制代码的前提下&#xff0c;可以扩展模块的功能&#xff0c;使其满足新的需求。即软件实体应当对扩展开…

【Linux】nginx连接前端项目

文章目录 一、项目编译1.编译文件2.dist文件 二、Linux nginx配置三、启动nginx 一、项目编译 1.编译文件 2.dist文件 二、Linux nginx配置 在Xshell软件中&#xff0c;点击CtrlAltF进入文件传输找到地址&#xff1a;/usr/local/nginx/html将dist文件传入 找到nginx.conf&…

git add成功后忘记commit的文件丢了?

本文目标&#xff1a;开发人员&#xff0c;在了解git fsck命令用法的条件下&#xff0c;进行git add成功但由于误操作导致丢失的文件找回&#xff0c;达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中&#xff0c;分支太多&#xff08;基线分…

CREO教程——2 绘制标准图纸

CREO教程——2 绘制标准图纸 说明&#xff1a;继承第一章设置好的配置文件&#xff0c;这一章进行学习分享如何定制自己的图纸图框&#xff0c;参考国家标准距&#xff0c;定制属于设计师或单位的通用图框。 1.设置工作目录 1.1设置工作目录 1.打开软件设置工作目录&#x…

u盘格式化怎么恢复数据?四款工具来救急!

工作中真的没少碰到过那些让人头疼的数据丢失问题&#xff0c;特别是U盘里的宝贝数据一不小心就“蒸发”了&#xff0c;简直让人欲哭无泪。不过别担心&#xff0c;我作为一个数据恢复的新手小白&#xff0c;最近可是亲测了几款超给力的数据恢复软件&#xff0c;今天就来跟大家分…

19c-TNS-12541: TNS:no listener

有套19c单机&#xff0c;没应用任何的补丁&#xff0c;使用lsnrctl status查看监听是异常的&#xff0c;但是lsnrctl start发现监听已运行&#xff0c;当前业务连接都正常&#xff0c; orcl:/home/oracledb> lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Pro…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

下载与安装|Inventor 2025百度云资源分享附教程

如大家所了解的&#xff0c;Inventor是一款专业的三维可视化实体建模软件&#xff0c;主要用于各类二维机械制图、三维制图的设计和开发等操作&#xff0c;可以广泛地应用于零件设计、钣金设计、装配设计等领域。 不同领域的应用证明了Inventor具有强大的兼容性&#xff0c;基…

监控易监测对象及指标之:全面监控Oracle ODBC数据库

在数字化时代&#xff0c;数据库作为存储和管理企业核心数据的基石&#xff0c;其稳定性和性能直接关系到业务的连续性和效率。Oracle数据库以其强大的功能和稳定性&#xff0c;广泛应用于各行各业。为了确保Oracle数据库的稳定运行和高效性能&#xff0c;对其进行全面监控显得…

备战软考Day04-计算机网络

1、计算机网络的分类 2、七层网络体系结构 3、网络的设备与标准 4、TCP/IP协议族 TCP/IP作为Internet的核心协议&#xff0c;被广泛应用于局域网和广域网中&#xff0c;目前已成为事实上的国际标准 1、TCP/IP分层模型 TCP/IP协议是Internet的基础和核心&#xff0c;和OSI参考…