2024年Java高阶面试题

2024年Java实战面试题(北京)_java 5 年 面试-CSDN博客
一、在面对千万条并发请求的情况下,如果数据库频繁查询导致崩溃,可以采取以下措施来解决问题:
1.缓存数据:可以使用缓存技术来减少对数据库的查询次数。将经常查询的数据存储在缓存中,例如使用Redis等内存数据库,以减少每次查询时对数据库的访问。
2.限流和降级:在高并发场景下,需要对请求进行限流和降级,以防止系统过载。这可以通过使用限流算法(如令牌桶、漏桶等)或者设置接口级别的限流规则来实现。降级则是指当系统负载过高时,自动降低部分服务的可用性,以保护整个系统的稳定性。
扩展答案:自行研究elasticsearch

二、有很多个服务,一个功能出现问题,怎么快速定位是哪个服务出现的问题?
ZIPKIN:分布式链路追踪
Zipkin可以确定对应用程序的请求在哪里花费了更多时间。无论是代码内部的调用,还是对另一服务的内部或外部API调用,您都可以对系统进行检测以共享上下文。
微服务应用的响应时间过长,使用Zipkin的话,就可以轻松了解应用程序是否花费了大部分时间来查询数据库。通过 Zipkin 提供的请求延迟时间可视化,可能会发现导致请求时间过长的原因,是由于高速缓存服务器已关闭,所有调用都直接发送到数据库,从而增加了微服务的延迟。
ZIPKIN:扩展问题(面试官会顺流而下继续问的问题)经常问的,能不能具体说说怎么实现的?
1、搭建zipkin-server
2、Zipkin就会以单个 span的形式将跟踪数据异步发送到 Zipkin 的数据追踪收集器(跟踪是通过带有 context header 的 HTTP 协议发送的)。
3、Zipkin 自带有一个可访问的用户界面,可以通过可视化看出哪里浪费了时间,哪里有问题。

三、Zookeeper是怎么注册的?
1.1、当服务启动时,服务的信息会存储到ZooKeeper临时节点上,这就是Zookeeper的注册。

四、Zookeeper什么是临时节点和什么是持久节点?
临时节点: 服务注册后连接丢失或session超时,注册的节点会自动被移除 。
持久节点: 服务注册后保证节点不会丢失,注册中心重启也会存在 。

五、zookeper的选举机制?
Leader 节点宕机了,Zookeeper中的每一个节点都会向集群里面的其他节点发送一个票据 Vote,每个节点都会选自己当 Leader,所以第一次投票的时候携带的是当前节点的信息。接下来每个节点用收到的票据和自己节点的票据做比较,根据 epoch、zxid、myid的顺序逐一比较,以值最大的一方获胜。比较结束以后这个节点下次再投票的时候,发送的投票请求就是获胜的 Vote 信息。然后,通过多轮投票以后,每个节点都会去统计当前达成一致的票据,以少数服从多数的方式,最终获得票据最多的节点成为 Leader。

六、zookeper和nacos的区别?
1、一致性算法,它是一种基于原子广播的一致性算法。它保证了分布式系统中数据的一致性和顺序性。而 Nacos 使用的是基于 Raft 算法实现的一致性协议,也保证了数据的一致性。
zookeper用的是ZAB算法
2、功能特性
Zookeeper 主要用于分布式协调和共享状态的管理,提供了有序的命名空间和监听机制,支持分布式锁、选举、队列等基础功能。Nacos 不仅提供了服务发现和配置管理,还提供了动态配置、流量管理、服务治理、服务路由等更丰富的功能。
3、数据存储
Zookeeper 将数据存储在内存中,并将数据变更写入磁盘中的事务日志中,因此适合存储较小的元数据和配置信息。Nacos 则使用数据库作为持久化存储,可以存储更大量级的配置数据。
4、生态系统
Zookeeper 作为一个成熟的分布式协调服务,拥有广泛的应用和生态系统支持,被广泛用于大型分布式系统。而 Nacos 是阿里巴巴开源的项目,逐渐发展成为云原生领域的服务发现和配置管理的首选工具,受到越来越多的关注和使用。
5、部署模式
Zookeeper 需要以集群模式运行,至少需要三个节点组成一个 ZK 集群,保证高可用性。Nacos 可以以单机模式或集群模式运行,可以根据实际需求进行部署。

七、zookeper节点为什么是奇数?
防止由脑裂造成的集群不可用
选举机制公式:可用节点数量 > 总节点数量/2 ,所以集群仍然能选举出 leader。很明显4个节点下的(b)脑裂不满足选举条件,不能提供服务。
5个节点
(a) 小集群 A:1个节点,小集群 B:4个节点,或A、B互换
(b) 小集群 A:2个节点,小集群 B:3个节点,或A、B互换
4个节点
(a) 小集群 A:1个节点,小集群 B:3个节点,或 A、B互换
(b) 小集群 A:2个节点,小集群 B:2个节点

八、QPS访问量那么大怎么解决的?
8.1、什么是QPS?
 QPS 是 Queries Per Second 的缩写,意为每秒查询数。它是衡量系统或服务在单位时间内能够处理的查询或请求的数量。QPS 是评估系统性能和承载能力的重要指标之一。
8.2、什么是TPS?
TPS 是 Transactions Per Second 的缩写,意为每秒事务数。与 QPS 类似,TPS 是衡量系统或服务在单位时间内能够处理的事务数量的指标。事务可以是数据库事务、网络事务或其他系统中定义的操作单元。
8.3、统计QPS的工具
Prometheus:一个开源的监控和警报系统,可以通过使用 Prometheus 的客户端库来收集和记录 QPS 数据。
Grafana:一个用于可视化数据的开源工具,可以与 Prometheus 结合使用来创建仪表盘和图表,以展示 QPS 数据。
8.4、面对上万的QPS怎么解决?
硬件方面:增加服务器、增加资源以处理更多的请求。可以考虑使用负载均衡来分发请求,确保每个服务器都能均衡地处理负载。 例如我们负载下游的节点只有3台虚拟机,那么我们就增加节点,或者增加机器配置。
数据库方面:使用适当的索引和查询优化技术。考虑使用缓存技术,如Redis或Memcached,来减轻数据库的负载。
异步处理:将一些耗时的操作转换为异步任务,如使用消息队列来处理后台任务,从而减少请求的响应时间。
代码优化:检查应用程序代码,识别并优化性能瓶颈,如减少不必要的计算、避免重复查询等。
接下来是重点也是面试官愿意听到的
8.5.1、 降级服务:在面对大流量时,可以暂时关闭或降低某些非关键服务的可用性,以减轻服务器负载。例如,可以关闭某些不必要的功能模块或限制某些操作的访问频率。
8.5.2、 限流措施: 通过设置请求频率限制或并发连接数限制,限制系统接受的请求量。可以使用令牌桶算法或漏桶算法等限流算法来控制请求的流量。
8.5.3、 熔断(Circuit Breaking):熔断是一种针对服务间依赖关系的保护机制。当某个服务出现故障或响应时间过长时,可以进行熔断,即暂时断开对该服务的请求,避免故障的扩散和影响其他服务。熔断可以快速失败,减少对故障服务的依赖,保护整个系统的可用性。

九、QPS是多少?每天访问量是多少?多少台服务器?(高频考点)
标准:120QPS
公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器
通过公式得出总访问量为:259.2W(PV即访问量)
单台机器QPS为40QPS
机器数量为:3(120/40 等于3台)
单台机器访问量:86.4W(单台机器PV即访问量)

十、zookeper的缺点?
10.1、单点故障: 在 ZooKeeper 集群中,Leader 是单点,如果 Leader 节点宕机,会导致整个集群的不可用。尽管选举会尽快选出新的 Leader,但仍然存在短暂的不可用性。
10.2、写入性能: 由于所有的写操作都由 Leader 处理,并且需要进行复制,写入性能可能受到影响,特别是在高负载情况下。
10.3、数据限制: ZooKeeper 的数据模型对于每个节点的数据有一定的大小限制,不适合存储大量的数据。
10.4、复杂性: 虽然 ZooKeeper 提供了强大的功能,但对于一些简单的应用场景,使用 ZooKeeper 可能会增加系统的复杂性。

十一、springboot和spring的区别?
11.1、应用程序Spring 是一个开源轻量级框架,广泛用于开发企业应用程序。Spring Boot 建立在传统的 Spring 框架之上,广泛用于开发 RESTAPI。
11.2、Spring 框架最重要的特性是依赖注入。Spring Boot 最重要的特性是自动配置
11.3、Spring有助于创建松散耦合的应用程序。Spring Boot有助于创建一个独立的应用程序,例如微服务等。
11.4、务器要运行 Spring 应用程序,我们需要显式设置服务器。Spring Boot提供Tomcat和Jetty 等嵌入式服务器。
11.5、要运行 Spring 应用程序,需要部署描述符。Spring Boot不需要部署描过符。
11.6、为创建一个 Spring 应用程序,开发人员需要编写大量代码和配置。Spring Boot显著减少了代码和配置行。
11.7、Spring默认不提供内存数据库支持。Spring Boot默认提供了对内存数据库的支持,例如 H2。

十二、redis的哨兵模式?(高频考点)
Redis 官方推荐一种高可用方案,也就是 Redis Sentinel 哨兵模式,它弥补了主从模式的不足。Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时, Sentinel 会自动进行 Failover(即故障转移),并将其监控的从机提升主服务器(master),从而保证了系统的高可用性。
哨兵的作用?
master 状态检测;
如果 master 异常,则会进行 master-slave 切换,将其中一个 slave 作为 master,将之前的 master 作为 slave;
master-slave 切换后,master_redis.conf、slave_redis.conf 和 sentinel.conf 的内容都会发生改变,即 master_redis.conf 中会多一行 slaveof 的配置,sentinel.conf 的监控目标会随之调换。

十三、项目中异步处理的数据失败后如何补偿
消息队列+本地消息表
1、需要发送到消费方的消息的保存和业务处理绑定在同一个本地事务中,需要额外建立一张本地消息表。
2、本地事务提交之后,可以在事务外对本地消息表进行查询并且进行消息推送,或者采用定时调度轮询本地消息表进行消息推送。
3、下游服务消费消息成功可以回调一个确认到上游服务,这样就可以从上游服务的本地消息表删除对应的消息记录。

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

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

相关文章

2024.1.29 GNSS 学习笔记

1.假设只对4颗卫星进行观测定位,卫星的截止高度角是15,那么如何布设这四颗卫星的位置,使其围成的四面体的体积得到最大,以获得最好定位精度? 答:3颗卫星均匀分布在最低仰角面上,第4颗卫星在测站…

华为笔记本matebook pro X如何扩容 C 盘空间

一、前提条件 磁盘扩展与合并必须是相邻分区空间,且两个磁盘类型需要相同。以磁盘分区为 C 盘和 D 盘为例,如果您希望增加 C 盘容量,可以先将 D 盘合并到 C 盘,然后重新创建磁盘分区,分配 C 盘和 D 盘的空间大小。 访…

git push后,如何撤销git log上的错误注释

修改了本地的代码,执行了下面的操作,提交之后,怎么样修改 git add ********(文件名)//git add 添加修改文件名之后 git commit //git commit 在当前分支提交,编写提交注释 git push //git push 提交修…

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画:自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画:拿来吧你!一个app A对另一个app B通过binder跨进程通信,控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…

C++ Qt开发:运用QJSON模块解析数据

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析…

Filter过滤器学习使用

验证token 对外API过滤器 public class APIFilter implements Filter {private static Logger logger LogManager.getLogger(APIFilter.class);private ICachedTokenService tokenService;public APIFilter(ICachedTokenService tokenService) {super();this.tokenService …

echarts:获取省、市、区/县、镇的地图数据

目录 第一章 前言 第二章 获取地图的数据(GeoJSON格式) 2.1 获取省、市、区/县地图数据 2.2 获取乡/镇/街道地图数据 第一章 前言 需求:接到要做大屏的需求,其中需要用echarts绘画一个地图,但是需要的地图是区/县…

C语言系列-整数在内存中的存储大小端字节序

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” 目录 整数在内存中的存储 大小端字节序和字节序判断 什么是大小端 为什么会有大小端 练习 整数在内存中的存储 在讲解操作符的时候,我们就讲过了下面的内容 整数的2…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年,车规MCU国产替代的呼声此消彼长,但仍然集中在低端产品。 从产…

JavaSE-网络编程,正则表达式

1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统…

鸿蒙首批原生应用!无感验证已完美适配鸿蒙系统

顶象无感验证已成功适配鸿蒙系统,成为首批鸿蒙原生应用,助力鸿蒙生态的快速发展。 作为全场景分布式操作系统,鸿蒙系统旨在打破不同设备之间的界限,实现极速发现、极速连接、硬件互助、资源共享。迄今生态设备数已突破8亿台&…

R语言【taxlist】——tax2traits():将分类信息设置为分类单元特征

Package taxlist version 0.2.4 Description 分类法分类可以包含在taxonRelations插槽提供的信息中的 taxlist 对象中。然而,对于统计分析来说,将这些信息插入到插槽taxonTraits中可能更方便。 Usage tax2traits(object, ...)## S3 method for class …

多openssl版本共存,如何再装一个openssl低版本

在编译安装TrinityCore的时候,碰到报错: 报错: CMake Error at cmake/macros/FindOpenSSL.cmake:579 (message): TrinityCore needs OpenSSL version 1.0 but found too new version . TrinityCore needs OpenSSL 1.0.x or 1.1.x to wor…

软考复习之数据结构篇

算法设计 迭代法:用于求方程的近似根。 1、若方程无解,则算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考查方程是否有解,并在程序中对迭代的次数给予限制。 2、方程虽有解&#…

OpenSSH 9.6/9.6p1 (2023-12-18)的发布说明(中文译文)

OpenSSH 9.6/9.6p1 (2023-12-18) OpenSSH 9.6 于 2023 年 12 月 18 日发布。相关镜像位于OpenSSH。OpenSSH 是 100% 完整的 SSH 协议 2.0 实现包括 sftp 客户端和服务器支持。 再次感谢 OpenSSH 社区的帮助,继续支持该项目,特别是那些将代码或补丁、报告的错误、…

第十一篇【传奇开心果系列】BeeWare的Toga开发移动应用示例:Briefcase和Toga 哥俩好

传奇开心果博文系列 系列博文目录BeeWare的Toga开发移动应用示例系列博文目录一、前言二、Briefcase和toga各自的主要功能分别介绍三、使用Toga 开发移动应用Briefcase工具是最佳拍档四、Briefcase搭档Toga创建打包发布联系人移动应用示例代码五、运行测试打包发布六、归纳总结…

二、Vue3文件目录介绍

node_modules: 项目的依赖库; src : 我们主要操作的地方,组件的增加、修改等都在这个文件夹里操作; assets: 放置静态资源,包括公共的 css 文件、 js 文件、iconfont 字体文件、img 图片文件 以及其他资源类文件。之所…

RabbitMQ之三种队列之间的区别及如何选型

目录 不同队列之间的区别 Classic经典队列 Quorum仲裁队列 Stream流式队列 如何使用不同类型的队列​ Quorum队列 Stream队列 不同队列之间的区别 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中,拥有比较高的消息可靠性。 经典队列可以选…

数据库管理-第141期 DG PDB - Oracle DB 23c(20240129)

数据库管理141期 2024-01-29 第141期 DG PDB - Oracle DB 23c(20240129)1 概念2 环境说明3 操作3.1 数据库配置3.2 配置tnsname3.3 配置强制日志3.4 DG配置3.5 DG配置建立联系3.6 启用所有DG配置3.7 启用DG PDB3.8 创建源PDB的DG配置3.9 拷贝pdbprod1文件…

2023年算法CDO-CNN-BiLSTM-ATTENTION回归预测(matlab)

2023年算法CDO-CNN-BiLSTM-ATTENTION回归预测(matlab) CDO-CNN-BiLSTM-Attention切诺贝利灾难优化器优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 切诺贝利灾难优化器Chernobyl Disaster Optimizer (CDO)是H. Shehadeh于202…