java 面试消息题1-13

news2025/6/16 21:36:49

1. Redis 线程模型, 及为什么redis 这么快?


1.Redis虽然是一条一条处理命令的(单线程),但是redis把每一条命令分成了很多个小命令,对这些小命令是多线程执行的。

2. IO 多路复用 - 可以用别人用过的IO。

3. 基于内存的key-value 的nosql数据库。

Redis 的数据类型:

 2. 消息中间件作用,存在的问题, 如何解决这些问题?


重复消费:

比如kafka一下子会消费10条数据然后提交,告诉kafka当前这个Consumer A 在这个Broker B的 Partition 1上消费到offset 10上面了。 结果在第消费完第3条时候挂了,或切换到一个backup的Broker上面了。这时候又会从第一天开始消费, 前三条就会重复。

解决方案:

1 业务上解决(幂等性), db 里面加unique key constraint

2 用分布式锁,redis set Nx , 保证每相同的消息只能有一个拿到redis锁。

丢消息:

主从切换的时候, 发送到主broker上的消息A还没来的及同步的从broker上面, 也没有来得及被consuser 消费掉。这时候切换到从broker上时消息就会丢失。

使用acks 参数配置解决丢消息的问题: 

acks = 0 ,leader收到消息,但是还没有来得及被消费就挂了。

acks = 1 ,leader收到消息并写入磁盘但是这里有一个问题,万一Partition Leader刚刚接收到消息,Follower还没来得及同步过去,结果Leader所在的broker宕机了,此时也会导致这条消息丢失,因为人家客户端已经认为发送成功了。

acks = all ,Partition Leader接收到消息之后,还必须要求ISR列表里跟Leader保持同步的那些Follower都要把消息同步过去,才能认为这条消息是写入成功了。

kafka没有丢消息但是你的业务处理失败了,也相当于丢消息了。可以修改为自己提交,等业务也处理完成后才手动commit。

消息积压:

 解决思路: kafka 把当前的consumer 改一点代码不作任何业务, 直接转发到其他拥有多个partition的broker上面去-> 在被多个其他的consumer去处理业务代码。

顺序消费:

自己写业务代码, 将相关的需要有顺序的消息发到同一个partition里面去。

3. 什么是分布式锁?


用一个锁来保证每次只有一个线程在执行一段代码,就行jvm中的synchronized代码块,有些代码段不能被多个线程同事执行,例如减库存。

分布式锁一般用redis 的setnx来实现,setnx 只有返回true的那个线程才算拿到锁了。

利用的是redis执行命令是单线程的原理, 同一时间多个命令发送到redis,redis内部一定是排好序按顺序一个一个的执行。所以只有最前面的那个才能拿到锁。

setnx实现分布式锁也会存在一定问题,例如如果一个线程拿到了锁,但是他又挂掉了,其他线程就永远无法拿到锁了。 解决问题 + 超时事件, 必须同一行加, 后面追加的会存在原子性问题。

+ 超时事件也存在问题, 超时事件设置多长呢 ?

设置太长了, 如果其挂了, 需要让其他线程等待太长时间了

设置太短了,有些程序就行需要执行比较长事件

假如你设置了一个固定的超时时间, 但是程序的运行时间就是比你设置的时间长,到时间之后就需要把锁释放了,这时候其他的程序就行进到这段加锁的代码里面来。

1. Redission - 解决分布式锁的问题。

 2. Zookeper - 解决Redisson 锁同步问题,即redisson1刚刚给Redis(Master)加好锁还没来的及同步到Slave,这时候Master挂了。当Slave切换成Mater以后,锁就不存在了,其他的Redission可以加到锁了,这时候就出现了多个线程同时进入锁的问题呢。

Zookeper 解决分布式锁问题- zookeeper原生特性就行为分布式锁定制的

为什么可以解决问题 ?

1. 选举机制会选举日志最多的那个follower作为下一个leader

2. 只有半数以上的follower日志写成功后才算redission对redis的加锁成功。

(1)用create 同一个临时节点来实现分布式锁的加锁问题, create成功的那个算加锁成功

(2)用create 临时有序节点 + watcher监听通知机制,可以代替自旋的问题,临时节点序号最小的拿到锁。

3. 用create临时节点加上失效时间来失效超时效果

 

4. 什么是分布式事务 ?


5. 什么是分布式session?


spring session

tomcat-redis-session-manager

6. Mybatis ?


Mybatis 的四种mapper 方式:

package  (priority)

resourse

url

class

myBatis 一级缓存基于sqlsession的, 二级缓存, 跨sql session的。

7. 什么是java的死锁,如何排查死锁?


java 死锁:拥有锁的两个线程相互等对方的锁

 如何排查找出死锁:

在idea 离有个快照可以生成堆栈信息:

在server中使用 jstack 命令后面跟要检查的进程号码如下8480

jstack <pid>

 

8. java 如何保证线程顺序执行? 


使用join来保证线程顺序

thread1.join()意思是让main线程等待thread1结束,然后再继续往下执行。

9. Zookeeper中集群角色有哪些?


Leader :负责读,写,选举投票权

follower:负责读,选举投票权

observer:负责读,没有投票权

 10. Zookeeper节点有哪些?


持久(有序),临时(有序)

客户端断开节点是否会被删除

11. 集群支持动态增加机器码 ?


zk 支持, 但是支持不是很好,停机器,加配置

全部重启,影响服务

挨个重启:zab zk 原则广播协议

12. 有哪几种集群方式 ?Redis 有哪些适合的场景?Redis相比memcached相比有哪些优势 ?


单机,集群,伪集群(所有节点在一台机器上)

分布式session, 接口幂等性(唯一性),缓存,排行榜,队列(订阅)

memcached: 字符串,没有持久化,速度慢,并发

Redis: 其他类型,可持久化,熟得快,单线程

13. 什么是缓存击穿,什么时候缓存雪崩 ?什么是布隆过滤器?


缓存击穿 - 用户查询的数据在redis里面没有,必须进数据库查询。(恶意攻击)

缓存雪崩 - 大量数据在redis里面同时失效了,例如大量的数据设置的有效时间是一样的(系统本本身)。

 缓存null值,下次请求,虽然你请求的值在数据库找不到,但是可以在缓存里面找到值,值为null。

布隆过滤器 - gauwa,可能在集合中,绝对不在集合中。

简单的说,当需要判断一个值(“abc”)是否存在时候,把这个值进行取hash值,用三个不同的函数可以算出三个不同的数值,再把这三个值对应的二进制数字位数上的值标记为1.只有判断处这三个位置的值都为1的时候这个值才有可能存在。只要有一个位上的值为0则表明该值肯定不存在。

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

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

相关文章

RK3568平台开发系列讲解(调试篇)Oops 日志分析

🚀返回专栏总目录 文章目录 一、OOPS 日志分析二、OOPS 上的跟踪转储三、使用 objdump 识别内核模块中的错误代码行沉淀、分享、成长,让自己和他人都能有所收获!😄 📢编写代码并不总是内核开发中最难的方面。 调试是真正的瓶颈,即使对于经验丰富的内核开发人员也是如此…

Java同学入职环境安装全讲解

一、简述 最近入职一家新公司&#xff0c;拿到新电脑&#xff0c;那肯定有绕不开的装开发环境流程。下面我就从安装jdk、maven、git、idea四个方面讲解&#xff08;主要提供各个软件官方的下载网址&#xff0c;因为百度搜出来的东西大家懂的都懂我就不多说了&#xff09;。如果…

windows下安装虚拟环境保存在C盘之解决方案

正常在研究深度学习算法模型时&#xff0c;会现去创建一个配置软件包的虚拟环境&#xff0c;在windows下&#xff0c;一般新建的虚拟环境保存在Anaconda的安装目录下&#xff0c;比如我的安装目录是在 D:\program\Anaconda3\,然后虚拟环境将安装在anaconda中的envs文件夹中&…

钉钉机器人单聊实现互动卡片推送

钉钉开发机器人单聊业务实现背景钉钉待办钉钉卡片卡片类型的工作通知创建并投放卡片机器人发送互动卡片实现过程搭建1. 授权2. 创建机器人3. 创建卡片变量创建链接问题4. 卡片投放测试5. web端调用机器人发送卡片接口6. 生成待办并封装接口新发现总结背景 特定业务场景下的对具…

Spark对正常日志文件清洗并分析

目录 日志文件准备&#xff1a; 一.日志数据清洗&#xff1a; 第一步&#xff1a;数据清洗需求分析&#xff1a; 二.代码实现 2.1 代码和其详解 2.2创建jdbcUtils来连接Mysql数据库 2.3 运行后结果展示&#xff1a; 三、留存用户分析 3.1需求概览 3.2.代码实现 3…

港科夜闻|香港科大(广州)副校长吴宏伟教授与150余位高教界人士分享两会期间见闻及体会...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大(广州)副校长吴宏伟教授与150余位高教界人士分享两会期间见闻及体会。港专学院及香港高等教育评议会合办“港区高等教育界全国政协委员2023全国两会见闻分享”活动。吴宏伟教授在会上发言表示&#xff0c;全国两会令…

Apple Xcode 14.3 (14E222b) 正式版发布下载

Command Line Tools for Xcode 14, tvOS 16 & watchOS 9 Simulator Runtime 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-14/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Xcode 14 包含了在所有 Ap…

上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪大小指数今日走势分化&#xff0c;沪指向上震荡反弹&#xff0c;创业板指一度跌近1%&#xff0c;黄白二线大幅背离。…

强大到让人无法想象的ChatGPT-5即将发布,上千名人士却紧急叫停

目录 【ChatGPT 5简介】 【ChatGPT 5的潜在应用】 【ChatGPT 5的潜在危险】 ChatGPT4还没有好好体验&#xff0c;比GPT4强大1000倍的ChatGPT5又即将发布&#xff01;届时将彻底改变人工智能领域&#xff0c;并改变我们现有的世界 【ChatGPT 5简介】 OpenAI计划在2023年12月发…

接入丰桥,下单到打印面单到配送开发流程

顺丰开放平台地址&#xff1a;顺丰开放平台 一、了解官网 1.1、开发文档 开发接口之前可以先查看熟悉文档&#xff0c;尤其是API文档仔细阅读。进入之后是如下图&#xff0c;根据自己需要开发的接口&#xff0c;先查看文档&#xff0c;然后根据文档要求来请求并处理响应。 1.2…

在 Linux 上使用 Pigz 更快地压缩文件,真的快!

Pigz是一款快速压缩文件的工具&#xff0c;它能够使用多个CPU核心进行压缩&#xff0c;使得压缩速度得到了极大的提升。在本文中&#xff0c;我们将介绍如何在Linux上使用Pigz来更快地压缩文件。 安装Pigz 在开始使用Pigz之前&#xff0c;我们需要先安装它。在大多数Linux发行…

11. unity 物理系统和碰撞检测+射击游戏案例

1. 物理系统 也就是在游戏场景中添加日常的重力&#xff0c;碰撞等到物理属性 1.1 刚体组件&#xff08;Rigidbody&#xff09; 给模型添加刚体组件后&#xff0c;模型会具备一些物理属性&#xff0c;比如重力&#xff0c;速度&#xff0c;加速度等&#xff0c;在属性窗口中…

CSS基础知识点-01

【01】标准CSS盒模型和IE盒模型的区别 盒模型的区别在于设置width和height时&#xff0c;所对应的范围不同。标准盒模型宽高属性的范围只包含content&#xff0c;而IE盒模型的宽高属性范围包含了border、padding和content。 一般来说&#xff0c;我们可以通过修改元素的box-siz…

AcWing 245. 你能回答这些问题吗(线段树)

AcWing 245. 你能回答这些问题吗&#xff08;线段树&#xff09;一、题目二、分析1、节点定义2、函数分析&#xff08;1&#xff09;pushup函数&#xff08;2&#xff09;build函数&#xff08;3&#xff09;modify函数&#xff08;4&#xff09;query函数三、代码一、题目 Ac…

COM 对象析构函数是非常敏感的函数

如果你试图在 COM 对象的析构函数中做太多事情&#xff0c;你会发现自己有麻烦。 此话怎讲? 举个例子&#xff0c;如果析构函数将自身引用交给其他函数&#xff0c;则这些函数可能会决定调用 IUnknown::AddRef 和 IUnknown::Release 方法作为其内部操作的一部分。考察下面的…

解码行业新趋势:2023晶球益生菌与肠内营养健康高峰论坛圆满落幕

后疫情时代&#xff0c;国人自身健康管理意识日益提高&#xff0c;越来越多的人认识到到微生物组、营养吸收与免疫健康的密切联系&#xff0c;并逐渐认可微生态和肠内营养在临床应用过程中的积极作用&#xff0c;使得营养治疗研究成果进一步落地转化。消费升级新时代&#xff0…

项目6:实现数据字典的展示与缓存

项目6&#xff1a;实现数据字典的展示与缓存 1.数据字典如何展示&#xff1f; 2.前后端如何设计&#xff1f; 3.前端设计代码&#xff1f; 4.后端设计代码&#xff1f; 5.实现数据字典缓存到redis 项目6&#xff1a;实现数据字典的展示与缓存 1.数据字典如何展示&#xf…

WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类

目录 一、序列化和反序列化 二、为什么会出现反序列化漏洞 三、序列化和反序列化演示 <演示一> <演示二> <演示二> 四、漏洞出现演示 <演示一> <演示二> 四、ctfshow靶场真题实操 <真题一> <真题二> <真题三> &l…

C++入门到入土(一)

C语言中&#xff0c;我们这样定义&#xff0c;输出100。 因为局部作用域的访问权限大于全局作用域的。 当我们加入头文件#include <time.h>的时候&#xff0c;就会报错 看报错&#xff0c;我们也知道&#xff0c;time重定义&#xff0c;因为我们头文件time.h里面有time函…

验证码识别过程中切割图片的几种方案

目录 方案一&#xff1a;图片均分 方案二&#xff1a;寻找轮廓并截取 方案三&#xff1a;聚类算法 方案四&#xff1a;垂直投影法 源码下载 在用机器学习识别验证码的过程中&#xff0c;我们通常会选择把验证码中的各个字符切割出来然后单独识别&#xff0c;切割质量会直接…