黑马面试篇

news2024/12/28 20:01:58

课程地址:新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili

课程名称:新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)

一、面试准备

二、Redis

Redis的面试占很大篇幅,很重要。

1. 布隆过滤器:

1. 自己写

  • 布隆过滤器_百度百科    (这里有自己写的java代码实现布隆过滤器)

2. Google 开发著名的 Guava 库(单机、内存)

  • 【项目实践03】【布隆过滤器】-CSDN博客
  • https://juejin.cn/post/6844904007790673933?searchId=202404272300043574EFFB0E7CD94BEB09
  • 布隆过滤器介绍及实战应用(防止缓存穿透)_布隆过滤器实战-CSDN博客

3. Redisson实现(适用分布式)

  • 最牛一篇布隆过滤器详解-腾讯云开发者社区-腾讯云
  • Redis详解(十三)------ Redis布隆过滤器-腾讯云开发者社区-腾讯云
  • https://juejin.cn/post/7355011549827350555?searchId=202404272300043574EFFB0E7CD94BEB09
  • 布隆过滤器-腾讯云开发者社区-腾讯云
  • 【Redisson】Redisson--布隆(Bloom Filter)过滤器_redisson布隆过滤器-CSDN博客

2. 缓存击穿概念&解决方案

常见的解决方案有两种:

  • 互斥锁:给重建缓存逻辑加锁,避免多线程同时指向

  • 逻辑过期:热点key不要设置过期时间,在活动结束后手动删除。

缓存击穿实现代码:

  • Redis 缓存击穿问题及解决方案_Redis_脚本之家
  • 缓存穿透、雪崩、击穿实践-腾讯云开发者社区-腾讯云

3. 双写一致

总结:

  • 第一种方案:更新数据之后删除缓存,并为缓存设置过期时间。(延迟双删也有不一致风险,反而增加了业务复杂性:黑马微服务课程2-CSDN博客);
  • 第二种方案:采用Redisson提供的读写锁,强一致,性能低,只有要求强一致的场景采用;
  • 第三种方案:最终一致方案,使用MQ中间件。
  • 第四种方案:canal中间件,最终一致方案。

4. 持久化

1)RDB的执行原理?

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存; 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

2)AOF vs RDB

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。

AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件

AOF默认是关闭的。AOF的命令记录的频率也可以通过redis.conf文件来配。

因为是记录命令,AOF文件会比RDB文件大的多,通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,进行文件压缩。Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:

5. 数据过期策略

假如redis的key过期之后,会立即删除吗?

  • 惰性删除:访问key的时候判断是否过期,如果过期,则删除;
  • 定期删除:定期检查一定量的key是否过期( SLOW模式+ FAST模式)
  • Redis的过期删除策略:惰性删除 + 定期删除两种策略进行配合使用

6. 数据淘汰策略

假如缓存过多,内存是有限的,内存被占满了怎么办?

  • Redis提供了8种不同的数据淘汰策略,默认是noeviction不删除任何数据,内存不足直接报错
  • LRU:最少最近使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高
  • LFU:最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高
  • 平时开发过程中用的比较多的就是allkeys-lru(结合自己的业务场景)

数据淘汰策略-使用建议

  • 优先使用 allkeys-lru 策略。充分利用 LRU 算法的优势,把最近最常访问的数据留在缓存中。如果业务有明显的冷热数据区分,建议使用。
  • 如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用 allkeys-random,随机选择淘汰。
  • 如果业务中有置顶的需求,可以使用 volatile-lru 策略,同时置顶数据不设置过期时间,这些数据就一直不被删除,会淘汰其他设置过期时间的数据。
  • 如果业务中有短时高频访问的数据,可以使用 allkeys-lfu 或 volatile-lfu 策略。

关于数据淘汰策略其他的面试问题

1)数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ?

  • 使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据。

2)Redis的内存用完了会发生什么?

  • 主要看数据淘汰策略是什么?如果是默认的配置( noeviction ),会直接报错。

7. 分布式锁

redis分布式锁,是如何实现的?

需要结合项目中的业务进行回答,通常情况下,分布式锁使用的场景: 集群情况下的定时任务、抢单、幂等性场景。

1)抢券:加synchronized可以吗?

如果是单体项目,并且只启动了一台服务,synchronized锁是没问题的。但如果集群部署,也就是将同一份代码部署在多台服务器上,synchronized就不行了。synchronized属于本地锁,JVM锁,只能解决同一JVM下线程的互斥,无法解决多个JVM下线程的互斥,所以在集群下,就不能使用本地锁了,只能使用外部锁解决(分布式锁)。

2)Redis分布式锁setnx

  • 死锁问题 -> 设置失效时间;
  • 锁的失效时长不好控制 -> 自动续期(看门狗线程);
  • 释放别人的锁 -> 设置锁key对应的UUID的value值;

3)Redisson分布式锁

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

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

相关文章

类和对象【下】

本节博客主要围绕构造函数、static成员、友元、内部类、匿名对象等待关于“类和对象”这些细节性知识进行收尾,有需要借鉴即可 类和对象_下目录 1.再谈构造函数1.1初始化列表1.2意义 2.static成员2.1概念2.2特性2.3习题 3.友元3.1友元函数概念3.2友元函数的特性 4.内…

物联网应用技术综合实训室解决方案

一、背景 随着物联网技术的快速发展和广泛应用,物联网产业已经成为新的经济增长点,对于推动产业升级、提高社会信息化水平具有重要意义。因此,培养具备物联网技术应用能力的高素质人才成为了迫切需求。 传统的教育模式往往注重理论教学&…

mPEG-VE,Methoxy-PEG-Vitamin E广泛应用于纳米新材料研究以及细胞培养等领域

【试剂详情】 英文名称 mPEG-Vitamin E,mPEG-VE, Methoxy-PEG-Vitamin E,Methoxy-PEG-VE 中文名称 甲氧基-聚乙二醇-维生素E 外观性状 由分子量决定,液体或者固体 分子量 0.4k,0.6k,1k,2…

LeetCode---394周赛

题目列表 3120. 统计特殊字母的数量 I 3121. 统计特殊字母的数量 II 3122. 使矩阵满足条件的最少操作次数 3123. 最短路径中的边 一、统计特殊字母的数量I 分别统计小写字母和大写字母是否出现,然后求交集即可,这里我们可以用数组统计,但…

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么? 图像的中值滤波是一种非线性图像滤波方法,它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同,中值滤波不会受到极端值的影响,因此在处…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order,本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别(NER)是自然语言处理(NLP)中的一项关键技术,它的目标是从文本中识别出具有特定意义或指代性强的实体,并对这些实体进行分类。这些实体通常包括人名、地名、组织…

【Linux】make 和 makefile

进度条 #pragma once#include <stdio.h>#define NUM 102 #define BODY #define TOP 100 #define RIGHT >extern void processbar(int rate);#include "processBar.h" #include <string.h> #include <unistd.h>const char lable[] "|/-\…

排序试题解析(二)

8.4.3 01.在以下排序算法中&#xff0c;每次从未排序的记录中选取最小关键字的记录&#xff0c;加入已排序记录的 末尾&#xff0c;该排序算法是( A ). A.简单选择排序 B.冒泡排序 C.堆排序 D.直接插入排序 02&#xff0e;简单选择排序算法的比较次数和移动次数分别为( C )。…

苹果可能将OpenAI技术集成至iOS/iPadOS 18

&#x1f989; AI新闻 &#x1f680; 苹果可能将OpenAI技术集成至iOS/iPadOS 18 摘要&#xff1a;苹果正在与OpenAI就将GPT技术部署在iOS/iPadOS 18中进行谈判。这项技术被视为可能增强的Siri功能&#xff0c;即“AI聊天机器人”。除Siri外&#xff0c;新技术还可能改善Spotl…

RFC 6071: IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/96882d1fb67b4383bc77c4dd421f7b

LeetCode 面试题 17.08 —— 马戏团人塔

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先&#xff0c;我们对人的身高按照从小到大排序&#xff0c;特别注意&#xff0c;对于身高相等的人&#xff0c;要按照体重从高到低排序。这时候&#xff0c;序列已经满足了在上面的人要比下面的人矮一点&#…

Blender面操作

1.细分Subdivide -选择一个面 -右键&#xff0c;细分 -微调&#xff0c;设置切割次数 2.删除 -选择一个或多个面&#xff0c;按X键 -选择要删除的是面&#xff0c;线还是点 3.挤出面Extrude -选择一个面 -Extrude工具 -拖拽手柄&#xff0c;向外挤出 -微调&#xff…

【Linux】基础指令

文章目录 基础指令1. pwd 指令2. cd 指令3. ls 指令4. touch 指令5. mkdir 指令6. rmdir 和 rm 指令7. man 指令8. cp 指令9. mv 指令10. cat 指令11. more 和 less 指令12. head 和 tail 指令13. date 指令14. cal 指令15. find 指令16. grep 指令18. zip 和 unzip 指令19. ta…

科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析

多做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一&#xff0c;通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;可以通过真题查漏补缺&#xff0c;更有针对性的补齐知识的短板。 AMC8和AMC10…

元宇宙中的DAPP:你了解多少?

元宇宙是什么&#xff1f;这是一个在当今科技圈炙手可热的话题。而在元宇宙中&#xff0c;DAPP起着至关重要的角色&#xff0c;它作为连接现实世界与虚拟世界的桥梁&#xff0c;为未来的数字世界开启了一个全新的篇章。 一、元宇宙&#xff1a;一个虚拟的数字世界 元宇宙是一…

振弦采集仪在岩土工程监测中的误差分析及提高措施探讨振弦

振弦采集仪在岩土工程监测中的误差分析及提高措施探讨 振弦采集仪是岩土工程监测中常用的一种测量设备&#xff0c;广泛应用于地基沉降、岩土体固结、地下水位变化等监测工作中。然而&#xff0c;在实际应用中&#xff0c;振弦采集仪可能存在一些误差&#xff0c;影响监测结果…

vue学习的预备知识为学好vue打好基础

目录 Vue是什么 &#xff1f;如何使用Vue &#xff1f;Vue ApiVue入口apiVue实例apiVue函数api 无构建过程的渐进式增强静态HTMLVue模块化构建工具npmyarnWebpackvue-cliVite Vue是什么 &#xff1f; 文章基于Vue3叙述。 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于…

基于Springboot的考研资讯平台

基于SpringbootVue的考研资讯平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 考研资讯 报考指南 资料信息 论坛信息 后台登录 考研资讯管理 学生管理 资…

将静态资源解析成组件使用的库

vite版本的vite-plugin-svgr vite-plugin-svgr - npm 使用