20230915java面经记录

news/2024/10/23 10:30:24/

1.mq消息重复消费

rocketmq,kafka,rabbitmq等都保证at least one,至少一次,可能存在重复消费,要靠业务代码解决
原因:生产者发送重复消息or消费者消费重复消息
在这里插入图片描述
也就是说生产者在Broker响应时间后又发了一个(网络波动)
在这里插入图片描述
也就是说消费者走完业务逻辑了但是没有commit就挂了,会重复消费(服务挂掉,或者rocketmq进行rebalance)

2.mq消息堆积

MQ消息堆积是指在MQ队列中积累了大量的未消费消息,导致系统出现性能问题或者消息积压的现象。下面是一些常见的解决方案:

调整MQ参数:可以通过调整MQ参数来优化系统性能,例如增加队列的容量或调整消息的过期时间等。另外,也可以增加消费者线程的数量,以加速消息的消费速度。

定期清理过期消息:定期清理过期消息可以有效地减少MQ队列中的消息数量,避免消息堆积的现象。可以使用MQ提供的清理工具,或者自行编写定时清理脚本来完成。

使用流量控制:流量控制可以有效地限制消息的发送速率,避免消息过多导致的系统性能问题。可以在MQ中配置流量控制策略,根据系统实际情况设置合适的流量控制策略。

增加消费者节点:增加消费者节点可以有效地提高消息的消费速度,从而避免消息堆积的现象。可以根据系统的实际情况,适当增加消费者节点的数量,提高消费能力。

使用异步消息机制:使用异步消息机制可以提高消息的处理效率,避免消息堆积的现象。可以将MQ与异步消息框架结合起来使用,提高消息的处理速度。延迟队列,蓄水池之类的。

3.如何实现mq的幂等性(网站付款成功发货,使用mq做异步通知发货)

来处理重复mq的重复消费问题
幂等:同样的参数或者数据去调用同一个接口,无论重复调用多少次,总能保证数据的业务正确性,不能出错,这就是接口的幂等性
具体业务的解决方法:
在这里插入图片描述

4.log,debug,warn,error,fatal怎么用

debug 级别最低,可以随意的使用于任何觉得有利于在调试时更详细的了解系统运行状态的东东;

info 输出信息:用来反馈系统的当前状态给最终用户的;

后三个,警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态。

warn, 可修复,系统可继续运行下去;

Error, 可修复性,但无法确定系统会正常的工作下去;

Fatal, 相当严重,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话后果严重。

5.java基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前两个b都会拆箱成int形式,所以都是true
第三个拆不了,直接程序报错
两个都是Integer才会使用常量池,而且要在-128 - 127中

6.效率问题

ArrayList a,b;HashSet c,d ;a,b,c,d各自有100w元素。
a.contain(b);c.contian(d);
hashset要比arraylist快得多

7.索引问题

1.user age varchar
select * from user where age =1 走不走索引
2.select * from user where id = 1走不走索引
3.select * from user where id in ( 1,2 )走不走索引
4.select * from user where id in ( 1,200 )走不走索引

1.隐式类型转换不走索引
2.主键走索引
3.in通常是走索引的,当in后面的数据在数据表中超过30%(上面的例子的匹配数据大约6000/16000 = 37.5%)的匹配时,会走全表扫描

8.java中用什么操作redis

jedis:简单,线程不安全,手动管理连接池
spring data redis:集成spring框架,不用管理连接池;api不全面
redisson(线程安全,分布式锁):线程安全,api复杂
lettuce(支持sentinel cluster):支持异步和响应式,api复杂

9.redis中的大value会有什么影响

大 Value
由于 Redis 是单线程运行的,如果一次操作的 value 很大会对整个 redis 的响应时间造成负面影响,因为 Redis 是 Key - Value 结构数据库,大 value 就是单个 value 占用内存较大。

Redis使用过程中经常会有各种大Value 的情况:

单个简单的key存储的value很大
hash, set,zset,list 中存储过多的元素(以万为单位)
由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务上能拆则拆。
大 Value 会造成哪些故障:

数据倾斜问题:大 Value 会导致集群不同节点数据分布不均匀,造成数据倾斜问题,大量读写比例非常高的请求都会落到同一个 redis server 上,该 redis 的负载就会严重升高,容易打挂。
QPS 倾斜:分片上的 QPS 不均。
大 Value 会导致 Redis 服务器缓冲区不足,造成 get 超时
由于值太大而过大,会对性能产生较大影响。读取值时,其他请求处于等待状态。如果该值占用太多内存,则读取速度会很慢。
大 Value,有些 key 访问 QPS 虽然不高,但是由于 value 很大,造成网卡负载较大,网卡流量被打满,单台机器可能出现千兆 / 秒,IO 故障
超级大的一个Value存到redis中去, 这样其实不好, 我们可以把value进行压缩

10.redis的分布式锁

方案一:SETNX + EXPIRE

方案二:SETNX + value值是(系统时间+过期时间)

方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)

方案四:SET的扩展命令(SET EX PX NX)

方案五:SET EX PX NX + 校验唯一随机值,再释放锁

方案六: 开源框架:Redisson

方案七:多机实现的分布式锁Redlock
搞多个Redis master部署,以保证它们不会同时宕掉。并且这些master节点是完全相互独立的,相互之间不存在数据同步。同时,需要确保在这多个master实例上,是与在Redis单实例,使用相同方法来获取和释放锁
在这里插入图片描述

11.redis的锁设置了过期,但是业务没到期,怎么使用watchdog?

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


http://www.ppmy.cn/news/1114654.html

相关文章

2023陇剑杯

2023陇剑杯初赛WP HW hard_web_1 ​ 首先判断哪个是服务器地址 ​ 从响应包看,给客户端返回数据包的就是服务器 所以确定服务器地址是192.168.162.188​ 再从开放端口来看,长期开放的端口 客户端发送一个TCP SYN包(同步请求&#xff…

LED智能家居灯 开关调光 台灯落地灯控制驱动 降压恒流IC AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、内置功率MOS管,适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W,最大电流6A。AP5191可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

mac office2019

目录 简介 macoffice2019 安装步骤 总结 简介 macoffice2019 Mac Office 2019是微软为苹果Mac系统用户推出的办公软件套装。它包括了Word、Excel、PowerPoint等常用应用程序,并且提供了一系列全新的功能和工具,以提升用户的办公效率和创造力。 Mac O…

无涯教程-JavaScript - MUNIT函数

描述 MUNIT函数返回指定尺寸的单位矩阵。 语法 MUNIT (dimension)争论 Argument描述Required/OptionalDimension Dimension是一个整数,指定要返回的单位矩阵的尺寸。 尺寸必须大于零。 Required Notes MUNIT返回一个数组。因此,应将其作为数组公式输入 MUNIT (N)$\begin{m…

kubernetes进阶 (三) 基础练习

前两天朋友给了我几道题,看着挺简单的,但实际做的时候发现坑不少,这里做下笔记 一、镜像构建部署lnmp 1、构建镜像 nginx、php、mysql 要求使用centos7作为基础镜像 2、使用deployment部署上面的容器,要求3个服务要放到一个pod中(虽然这样是…

uni-app tree(树状) 组件

先看效果&#xff1a; 组件代码&#xff1a; <template><view class"next-tree"><view class"next-tree-mask" :class"{show:showTree}" tap"_cancel"></view><view class"next-tree-cnt" :cla…

java随机数

package com.itheima;import java.util.Random;public class 生成随机数字 {public static void main(String[] args) {//创建对象Random r new Random();int number r.nextInt(100);//小括号里为范围 生成随机数(099) 范围一定从0开始 (左闭右开)System.out.println(number…

MyBatis笔记

Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c;iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“intern…