快手二面准备【面试准备】
快手二面准备【面试准备】
- 前言
- 版权
- 快手二面准备
- 秋招一面中的问题
- 实习一面中的问题
- 计算机网络和操作系统
- 论坛项目登录注册
- ThreadLocal代替session存储用户
- 秒杀项目登录注册->阿里验证码->rpc
- session为什么改为token实现,redis存储用户信息
- 由binlog的用法->缓存和数据库的一致性
- 3种缓存更新策略是怎样的?
- ES搜索->Mysql全文索引
- MySQL8的索引新特性
- redis的高级数据结构
- 代理模式->设计模式
- 为什么使用mq
- mq
- es的构成
- 倒排索引的理解:
- mq的消息类型
- 缓存相关的问题
- kafka的角色
- rocketmq的角色
- 最后
前言
2023-8-1 17:33:53
公开发布于
2024-5-21 13:07:32
以下内容源自《【面试准备】》
仅供学习交流使用
版权
禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话
快手二面准备
秋招一面中的问题
rpc
远程过程调用
kafka为啥会丢消息
rocketmq怎么保证不丢消息
RocketMQ通过以下几种机制来保证消息不丢失:消息持久化:RocketMQ将消息写入磁盘中进行持久化存储,即使在发生系统故障或重启时,消息也能够被恢复。内存双写:RocketMQ在将消息持久化到磁盘之前,先将消息写入内存中的PageCache中。这种方式可以提高写入速度,并且在发生宕机时,可以通过从磁盘中加载消息来进行快速恢复。同步刷盘:RocketMQ提供了同步刷盘机制,即在消息写入磁盘之前,会等待消息被写入磁盘后才返回发送成功的响应。这样可以确保消息被持久化到磁盘中,避免消息丢失。主从同步:RocketMQ支持主从模式,即一个主节点和多个从节点。主节点负责将消息发送给消费者,从节点负责备份主节点的消息。当主节点宕机时,可以通过从节点快速切换来提供高可用性,并避免消息丢失。高可靠性队列:RocketMQ提供了高可靠性的队列机制,确保消息的可靠传输。通过设置消息的发送模式为同步模式,发送方在消息发送完成之前会等待Broker的确认响应,确保消息可靠传输。消息重试机制:RocketMQ提供了消息重试机制,当消息发送失败时,会自动进行重试。可以通过设置重试次数和重试间隔来控制重试的策略,确保消息最终被正确处理。综上所述,RocketMQ通过持久化、内存双写、同步刷盘、主从同步、高可靠性队列和消息重试机制等多种机制来保证消息不丢失。开发人员也可以根据自己的需求和业务场景,选择适当的配置和策略来保证消息的可靠性。
Rocketmq中Broker的刷盘策略有哪些?同步刷盘
SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
异步刷盘
ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种异步的方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
秒杀为什么选择rocketmq
rocketmq支持发布事务性消息
实习一面中的问题
es与数据库之间的同步
使用的是kafka来实现的redis是在刷新帖子分数时
点赞评论之后,记录需要刷新的帖子id
供Quartz定时计算帖子分数,然后刷新到数据库
动态代理
基于接口的代理:jdk
基于类的代理:cglib
了解过监听binlog吗
计算机网络和操作系统
http
https
tcp和upd
dns
论坛项目登录注册
一个问题,验证邮箱丢失问题
提供重新发送激活邮箱的服务
ThreadLocal代替session存储用户
拦截器
@preHandle
获取登录凭证@postHandle
前端添加loginUser@afterCompletion
清除HostHold
四种对象引用
本地线程存储
内存泄漏问题
秒杀项目登录注册->阿里验证码->rpc
原来验证码输出到控制台里
session为什么改为token实现,redis存储用户信息
由binlog的用法->缓存和数据库的一致性
数据库和缓存如何保证一致性?
它的用法:
主从复制
数据库恢复
还有一个,订阅binlog解决缓存和数据库的一致性
缓存和数据库一致性:
先更新数据库,后删除缓存。
可能还会有问题
延迟双删
但是更新数据库和删除缓存是两个操作
万一删除失败了,怎么办?
- 重试,消息队列
- 订阅binlog
3种缓存更新策略是怎样的?
面试官:3种缓存更新策略是怎样的?
Cache Aside(旁路缓存)策略是最常用的,应用程序直接与「数据库、缓存」交互,并负责对缓存的维护,该策略又可以细分为「读策略」和「写策略」。

Read/Write Through(读穿 / 写穿)策略原则是应用程序只和缓存交互,不再和数据库交互,而是由缓存和数据库交互,相当于更新数据库的操作由缓存自己代理了。
下面是 Read Through/Write Through 策略的示意图:

Write Back(写回)策略在更新数据的时候,只更新缓存,同时将缓存数据设置为脏的,然后立马返回,并不会更新数据库。对于数据库的更新,会通过批量异步更新的方式进行。
实际上,Write Back(写回)策略也不能应用到我们常用的数据库和缓存的场景中,因为 Redis 并没有异步更新数据库的功能。

ES搜索->Mysql全文索引
MySQL全文检索临时代替ES实现快速搜索
模糊查询:like '%关键词'
MySQL 中使用全局变量ngram_token_size来配置ngram中n的大小,它的取值范围是1到10,默认值是2。通常ngram_token_size设置为要查询的单词的最小字数。如果需要搜索单字,就要把ngram_token_size设置为1。在默认值是2的情况下,搜索单字是得不到任何结果的。因为中文单词最少是两个汉字,推荐使用默认值2。
CREATE FULLTEXT INDEX idx_名 ON 表(字段) WITH PARSER ngram;
select - from -
where MATCH (columnName) AGAINST ('keywords')
MySQL8的索引新特性
降序索引
隐藏索引
redis的高级数据结构
拦截器:记录uv,dau访问过一次判断其为活跃
hyperLogLog
统计uv
key:uv_日期
value:ip
add()
指定日期范围统计union()之后再size返回
bitmap
统计dau
key:dau_日期
value:userId
setBit()
统计指定日期范围内的DAU OR运算 bitCount()
代理模式->设计模式
单例模式
工厂模式
为什么使用mq
解耦 异步 削峰
比如:论坛项目中的,关注,点赞或评论帖子,做系统通知
如果写出一个方法的话,还需要保证事务,设置事务的传播行为
但是别人点赞了,和你收到系统通知,其实是两个业务
别人点赞了,系统通知的业务执行失败,你也不能回滚
这两个操作也是异步的
削峰,秒杀项目的
mq
【消息队列】五个问题详解消息中间件
【RocketMQ】原理分析:消息存储机制
【RocketMQ】消息可靠性保证
【Kafka】原理分析:消息的文件存储机制
【Kafka】消息可靠性保证
同步刷盘
es的构成
Elasticsearch由以下几个主要组件构成:
-
节点(Nodes):节点是Elasticsearch的基本组成单位,每个节点代表一个运行的实例。一个Elasticsearch集群可以由多个节点组成,每个节点都有自己的名称和唯一的ID。节点之间可以通过集群通信进行相互发现、数据同步和协作。
-
索引(Indexes):索引是一种用于组织和存储数据的逻辑容器。它类似于数据库中的表,可以包含多个文档(documents)。每个索引都具有唯一的名称,用于标识它所包含的数据类型或内容。
-
类型(Types):在早期版本的Elasticsearch(5.x及以前的版本),索引可以包含多个类型。类型是索引中的一个逻辑类别,用于区分不同类型的文档。然而,在5.x以后的版本中,Elasticsearch不再推荐使用多个类型,建议将不同类型的数据拆分为独立的索引。
-
文档(Documents):文档是Elasticsearch中的基本数据单元。它可以是任意结构的JSON对象,类似于数据库中的记录。每个文档都有一个唯一的ID,用于标识它在索引中的位置。文档可以被索引、搜索和修改。
-
分片和副本(Shards and Replicas):为了实现高可用性和扩展性,Elasticsearch将索引分割成多个分片(shards),每个分片可以在集群中的不同节点上进行分布。分片允许索引数据被并行处理和存储。为了提高数据的冗余性和可靠性,每个分片可以有多个副本(replicas),副本是分片的精确拷贝。
以上是Elasticsearch的基本构成,它们一起工作来提供高效的分布式搜索和分析功能。
倒排索引的理解:
倒排索引(Inverted Index)是一种用于快速定位文档的索引结构。在倒排索引中,每个关键词都维护了一个包含包含该关键词的文档列表。通过倒排索引,可以快速地找到包含特定关键词的文档,而无需遍历所有文档。
倒排索引的构建过程包括以下几个步骤:
文档分词:将每个文档拆分为一个个的词语(或称为术语,terms),这通常是通过分词器(tokenizer)来实现的。分词器可以根据各种规则和算法将文本切分为合适的词语。
构建倒排索引:对于每个词语,将它出现的文档ID记录到倒排索引中。倒排索引的数据结构通常是一个关联数组(Associative Array),其中词语作为键,文档ID的列表作为值。
优化倒排索引:为了提高查询性能和减少索引的大小,通常还会对倒排索引进行优化。例如,可以使用压缩算法对文档ID列表进行压缩,或者使用数据结构如跳表(Skip List)来加速查找过程。
通过倒排索引,可以在搜索时快速定位包含特定关键词的文档。比如,当用户在搜索引擎中输入一个关键词时,搜索引擎可以通过倒排索引找到包含该关键词的文档,并返回给用户相关的搜索结果。倒排索引是大部分搜索引擎(包括Elasticsearch)的核心组成部分,它能够提供快速、灵活和准确的搜索功能。
mq的消息类型
缓存相关的问题
缓存和数据库的一致性
先更新数据库再删除缓存
库存的一致性是mq实现事务消息
缓存穿透
场景:
场景查询根本不存在的数据,使得请求直达存储层
导致其负载过大,甚至宕机。
解决方案:
1.缓存空对象存储层未命中后,仍然将空值存入缓存层。再次访问该数据时,缓存层会直接返回空值。
2.布隆过滤器将所有存在的key提前存入布隆过滤器,在访问缓存层之前,先通过过滤器拦截,若请求的是不存在的key,则直接返回空值。
缓存击穿
场景:
一份热点数据,它的访问量非常大。在其缓存失效瞬间,大量请求直达存储层,导致服务崩溃。
解决方案:
1.加互斥锁对数据的访问加互斥锁,当一个线程访问该数据时,其他线程只能等待。这个线程访问过后,缓存中的数据将被重建,届时其他线程就可以直接从缓存取值。
2.永不过期不设置过期时间,所以不会出现上述问题,这是“物理”上的不过期。为每个value设置逻辑过期时间,当发现该值逻辑过期时,使用单独的线程重建缓存。
缓存雪崩
场景:
由于某些原因,缓存层不能提供服务,导致所有的请求直达存储层,造成存储层宕机。
解决方案:
1.避免同时过期设置过期时间时,附加一个随机数,避免大量的key同时过期。
2.构建高可用的Redis缓存部署多个Redis实例,个别节点宕机,依然可以保持服务的整体可用。
3.构建多级缓存增加本地缓存,在存储层前面多加一级屏障,降低请求直达存储层的几率。
4.启用限流和降级措施对存储层增加限流措施,当请求超出限制时,对其提供降级服务。
kafka的角色
Kafka的角色包括以下几个:
- 生产者(Producer):负责将消息发送到Kafka集群,并且可以选择将消息发送到特定的主题(Topic)。
- 消费者(Consumer):从Kafka集群中读取消息,并且可以选择订阅一个或多个主题。
- 主题(Topic):是消息的逻辑容器,可以理解为消息的分类或者主题。
- 分区(Partition):每个主题可以被分为一个或多个分区,每个分区对应一个日志文件。
- 消费者组(Consumer Group):消费者可以组成一个或多个消费者组,每个组可以订阅一个或多个主题。
- Kafka集群(Kafka Cluster):由多个Kafka实例组成的集群,用于存储和处理消息。
- Broker:Kafka集群中的每个节点就是一个Broker,负责存储和处理消息。
- ZooKeeper:Kafka使用ZooKeeper来管理集群的元数据,包括主题、分区等信息。
- 消息(Message):Kafka中的基本单位,由键(Key)和值(Value)组成。
- 日志(Log):Kafka使用日志文件来存储消息,每个分区对应一个日志文件。
以上是Kafka的主要角色,每个角色在Kafka中都扮演着不同的角色和功能。
rocketmq的角色
RocketMQ的角色包括以下几个:
- 生产者(Producer):负责将消息发送到RocketMQ集群,并且可以选择将消息发送到特定的主题(Topic)。
- 消费者(Consumer):从RocketMQ集群中读取消息,并且可以选择订阅一个或多个主题。
- 主题(Topic):是消息的逻辑容器,可以理解为消息的分类或者主题。
消费者组(Consumer Group):消费者可以组成一个或多个消费者组,每个组可以订阅一个或多个主题。 - Broker:RocketMQ集群中的每个节点就是一个Broker,负责存储和处理消息。
- 消息(Message):RocketMQ中的基本单位,由键(Key)和值(Value)组成。
- 消息队列(Message Queue):每个主题可以被分为一个或多个消息队列,每个消息队列对应一个消费者线程。
- 消息存储(Message Store):RocketMQ使用消息存储来存储消息,包括内存存储和磁盘存储。
- NameServer:RocketMQ使用NameServer来管理集群的元数据,包括主题、消费者组等信息。
- 消息消费进度(Offset):RocketMQ可以跟踪每个消费者组在每个主题的消费进度,以确保消息的顺序性和可靠性。
以上是RocketMQ的主要角色,每个角色在RocketMQ中都扮演着不同的角色和功能。
最后
2023-8-1 21:18:19
我们都有光明的未来
祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦
相关文章:
快手二面准备【面试准备】
快手二面准备【面试准备】 前言版权快手二面准备秋招一面中的问题实习一面中的问题计算机网络和操作系统论坛项目登录注册ThreadLocal代替session存储用户秒杀项目登录注册->阿里验证码->rpcsession为什么改为token实现,redis存储用户信息由binlog的用法->…...
贪心算法2(c++)
最大子矩阵 描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1*1)子矩阵。 比如,如下4*4的矩阵 0- 2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0-2 的最大子矩阵是 9 2 -4 1 -18 这个子矩阵的大小是15。 输入…...
Bugku Crypto 部分题目简单题解(四)
目录 python_jail 简单的rsa 托马斯.杰斐逊 这不是md5 进制转换 affine Crack it rsa python_jail 启动场景 使用虚拟机nc进行连接 输入print(flag) 发现报错,经过测试只能传入10个字符多了就会报错 利用python中help()函数,借报错信息带出flag变…...
软考备考三
操作系统 操作系统概述 功能:组织和管理软件,硬件资源以及计算机系统中的工作流程,控制程序的执行,向用户提供接口。 分类: 1.批处理操作系统 单道批 多道批(宏观上并行,微观上串行)…...
Fortran: select type
Fortran: select type 实现类似C的template函数功能 module M_reduceuse mpi_f08interface reducemodule procedure reduce_scalar,reduce_arrayend interface reducecontains!!https://docs.open-mpi.org/en/v5.0.x/man-openmpi/man3/MPI_Reduce.3.htmlsubroutine reduce_ar…...
QEMU启动Linux内核
在QEMU环境下启动linux内核命令如下: QEMU_AUDIO_DRVnone qemu-system-arm -m 256M -nographic -M versatilepb -kernel /home/yukeyang/myfile/linux-6.6.30/arch/arm/boot/zImage -append "consolettyAMA0 rdinit/bin/sh" -dtb arch/arm/boot/dts/arm/…...
Golang | Leetcode Golang题解之第109题有序链表转换二叉搜索树
题目: 题解: var globalHead *ListNodefunc sortedListToBST(head *ListNode) *TreeNode {globalHead headlength : getLength(head)return buildTree(0, length - 1) }func getLength(head *ListNode) int {ret : 0for ; head ! nil; head head.Next…...
Qt快速入门到熟练(电子相册项目(一))
经过一段时间的学习,相信大家对QT的基本用法都有所了解,从这篇文章开始,我准备记录一下电子相册的项目的一个学习过程。 实现项目创建功能 对于这个电子相册的项目,我并没有在一开始就把所有可能用到的功能模块去事无巨细的考虑周…...
机械臂与Realsense D435 相机的手眼标定ROS包
本教程主要介绍机械臂与 Realsense D435 相机手眼标定的配置及方法。 系统:Ubuntu 20.0.4 ◼ ROS:Noetic ◼ OpenCV 库:OpenCV 4.2.0 ◼ Realsense D435:librealsense sdk(2.50.0)、realsense-ros 功能包&…...
ubuntu使用记录——如何使用wireshark网络抓包工具进行检测速腾激光雷达的ip和端口号
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言wireshark网络抓包工具1.wireshark的安装2.wireshark的使用3.更改雷达ip 总结 前言 Wireshark是一款备受赞誉的开源网络协议分析软件,其功能之强大…...
C#学习指南:重要内容与实用技巧
学习C#编程是一段充满挑战但又非常充实的旅程。以下是我在学习过程中积累的一些经验,希望能对大家有所帮助。 一、掌握基础概念 类及其成员 C#中的类是编程的基础模块。理解类的结构、属性、方法和构造函数是至关重要的。每个类都有其特定的功能,学会如…...
display(a,b)什么意思
在Python中,如果你看到display(a,b)这样的代码,它通常意味着有人正在使用IPython.display模块中的display函数来同时显示两个对象。 IPython.display是Jupyter Notebook和JupyterLab等交互式计算环境的一部分,它提供了一种在笔记本中显示各种…...
SpringBoot3整合阿里云短信服务-1(配置阿里云短信服务)
SpringBoot3整合阿里云短信服务-1(配置阿里云短信服务) 一、开通阿里云短信服务 阿里云官网:阿里云官网 选择产品中企业服务与云通信中的短信服务 选择免费开通 选择快速学习和测试 根据这几个全部配置一下我这里是配置好了所以学习进度是100% 1.1 添加资质 首先选择新增资质 …...
基于HAL库控制LED流水灯
一. 了解并掌握HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务: 1、重做上一个LED流水灯作业,用GPIO端口完成2只LED灯的周期闪烁。 2、接上,再用GPIO端某一管脚接一个开关(用杜邦…...
利用kubeadm安装k8s集群 以及跟harbor私有仓库下载镜像
目录 环境准备 master(2C/4G) 192.168.88.3 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.88.4 docker、kubeadm、kubelet、kubectl、flannel node02(…...
明天(周六)下午!武汉Linux爱好者线下沙龙,我们在华中科技大学等你!
2024 年 5月 25 日(周六)下午,我们将在「武汉市洪山区」 珞喻路 1037 号华中科技大学南五楼 613 室举办武汉 Linux 爱好者线下沙龙(WHLUG),欢迎广大 Linux 爱好者来到现场,与我们一同交流技术&a…...
MySQL主从复制(五):读写分离
一主多从架构主要应用场景:读写分离。读写分离的主要目标是分摊主库的压力。 读写分离架构 读写分离架构一 架构一结构图: 这种结构模式下,一般会把数据库的连接信息放在客户端的连接层,由客户端主动做负载均衡。也就是说由客户…...
阿里巴巴 EasyExcel 真正的高效与通用导入(亿级数据秒级导入)
需要lombok、hutool、alibaba EasyExcel 相关依赖包 基于Lamba表达式的通用监听器 import cn.hutool.core.util.StrUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import lombok.experimental.UtilityClass…...
32.5k star!!替换 postman?【送源码】
在软件开发过程中,API(应用程序接口)扮演着至关重要的角色。为了确保 API 的可靠性和性能,开发人员需要一种高效的方式来测试和调试它们。这方面的工具,大家经常用到的应该就是 postman 了。不过,今天了不起…...
课时135:awk实践_逻辑控制_综合实践
1.3.8 综合实践 学习目标 这一节,我们从 网络实践、文件实践、小结 三个方面来学习 网络实践 简介 所谓的网络实践,主要是借助于awk的数组功能,进行站点的信息统计操作。准备网络环境 安装软件 yum install nignx -y重启nginx [rootloca…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
