当前位置: 首页 > news >正文

【2024秋招】2023-9-16 贝壳后端开发一面

1 秒杀系统

1.1 如何抗住高并发

1.2 数据一致性你是怎么处理,根据场景来说明你的设计思路

1.3 你们当时系统的架构是怎么样的

秒杀表做节点隔离,

1.4 为了保证数据一致性,引入了redission的锁,你是为了抗住高并发而去为了引入这个锁还是说为了保证数据一致性去引入的

答:主要是为了抗住高并发问题,解决redis的缓存击穿问题,但是也能解决一定的数据一致性问题。

是的,当我们谈到“击穿”问题时,通常指的是缓存击穿,即当某个热点缓存失效时,大量的请求直接涌向底层存储系统(如数据库),可能导致该系统过载。

在这种情况下,引入 Redission 的分布式锁主要是为了抗住这种高并发,即防止大量请求直接涌向底层系统。具体做法是,当缓存失效时,第一个到达的请求获取锁并重新加载数据到缓存,而其他并发请求则需要等待该请求完成数据加载和缓存更新。一旦数据被加载回缓存,那么后续的请求就可以直接从缓存中获取,而不必再次访问底层系统。这样,即使有大量的并发请求,也只有少数请求真正访问底层系统,从而避免了系统过载的问题。

所以,确实,对于缓存击穿问题,引入 Redission 的分布式锁主要是为了应对高并发,保护底层存储系统不被过度访问。

1.5 为了应对缓存击穿,使用redission分布式锁,这里redission有对一致性上起作用吗

为了应对缓存击穿,使用 Redission 分布式锁是为了确保在缓存失效时,只有一个请求去加载数据并更新缓存,防止底层数据库被大量并发请求压垮。但这里的一致性问题也是相关的,尤其是确保正确的数据被加载到缓存中。

在这种场景下,Redission 的作用在一致性上体现在:

  1. 单点加载:分布式锁确保在某一时刻只有一个请求(或一个服务实例)能够去加载数据。这避免了不同的请求可能在微小时间差异内加载到不同版本的数据,并都尝试去更新缓存的情况。例如,考虑一个场景,在某个请求加载数据的过程中,数据在数据库中被修改,紧随其后的另一个请求可能会加载到新版本的数据。如果没有分布式锁,两个请求可能都会尝试更新缓存,导致缓存中的数据在短时间内频繁切换。

  2. 减少竞态条件:没有分布式锁的情况下,多个请求可能会并发地检测到缓存失效,并尝试从数据库加载数据并更新缓存。这可能会导致竞态条件,从而导致不可预测的结果。引入锁后,请求会按照顺序执行,消除了竞态条件,确保数据加载和缓存更新的操作是原子的。

综上所述,Redission 分布式锁在处理缓存击穿的问题时,不仅帮助我们抗住高并发,还确保了数据的一致性。

1.6 你引入缓存后,可以预减库存,那现在引入了一个新的问题,mysql和redis数据的一致性,你是如何保证的

答:库存回退时,就涉及到这个mysql和redis的多级库存回退问题,库存回退涉及到用户取消订单场景,一般是先更新数据库的商品表,然后再删除缓存;另一种策略是先使用redis延时双删的方法。

美团二面:Redis与MySQL双写一致性如何保证

1.7 从整体的架构来描述一下你的秒杀项目

2 mini-spring项目

2.1 讲一下你的迷你版spring项目

1 IOC的本质:spring容器管理IOC的生命周期
2 一些注解

3 一个bean如何托管到IOC容器中

4 spring循环依赖问题的解决

2.2 介绍一下你对AOP的理解

2.3 有没有相应的用到AOP的地方

1 鉴权,打印日志

2 aop解决单体架构下的超卖问题

3 mysql

3.1 mysql的事务以及可以解决的各种问题

3.2 你平常用到是哪一个隔离级别

4 redis

4.1 redis的过期策略

4.2 内存淘汰策略

5 算法

5.1 二叉树根节点到叶子节点的所有路径和

import java.util.*;/** public class TreeNode {*   int val = 0;*   TreeNode left = null;*   TreeNode right = null;*   public TreeNode(int val) {*     this.val = val;*   }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @return int整型*/public int sumNumbers (TreeNode root) {// write code heregetPathSum(root, 0);return res;}int res = 0;void getPathSum(TreeNode node, int s) {if(node==null)return;s = s * 10 + node.val;if (node.left ==null&&node.right==null) {res += s;return;}getPathSum(node.left, s);getPathSum(node.right, s);}
}

6 反问

6.1 你们部门业务是什么

答:房客源啊,交易技术啊,签约交易,比如买卖二手房的合同,签约的过程,如何保证系统的稳定,数据的一致性,挑战还是比较大的;2B和2C的都会遇到,然后贝壳有活水策略,也没有什么负担

6.2 您这边买房,租房和二手都会有吗

答:对

相关文章:

【2024秋招】2023-9-16 贝壳后端开发一面

1 秒杀系统 1.1 如何抗住高并发 1.2 数据一致性你是怎么处理,根据场景来说明你的设计思路 1.3 你们当时系统的架构是怎么样的 秒杀表做节点隔离, 1.4 为了保证数据一致性,引入了redission的锁,你是为了抗住高并发而去为了引入…...

BI是什么?想要了解BI需要从哪些方面入手?

企业为了执行数字化战略,实行数字化转型,实现数据价值,除了需要相关数字化技术及理念、人才等,还需要借助数字化相关应用,例如商业世界中广受企业欢迎的ERP、OA、CRM等业务信息系统,以及上升势头非常迅猛的…...

软件测试---等价类划分(功能测试)

能对穷举场景设计测试点-----等价类划分 等价类划分 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分分类: 1)有效等价类 2)无效等价类步骤:1)明确需求 2)确定有效和无…...

javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片

//前端上传文件 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8;"/><title…...

【Java】Map集合中常用方法

Map集合的常用方法 方法名称作用V put(Key k,V value)添加元素V remove(K key, V value)根据键值删除对应的值void clear()清除所有键值元素boolean containsKey(Object key)判断集合中是否包含指定的键boolean containsValue(Object value)判断集合中是否包含指定的值boolean …...

方太描画未来厨房的模样

作者 | 辰纹 来源 | 洞见新研社 不知不觉中&#xff0c;iPhone已经更新到15代了&#xff0c;家里的电视变成了越来越轻薄的液晶屏&#xff0c;过去被称为“老三样”的富康&#xff0c;捷达、桑塔纳&#xff0c;如今也被以特斯拉为代表的新能源智能汽车们所取代…… 类似以上的…...

ELASTICO-A Secure Sharding Protocol For Open Blockchains

INTRO 在中本聪共识中&#xff0c;通过POW机制来公平的选举leader&#xff0c;不仅非常消耗power&#xff0c;并且拓展性也不好。现在比特币中是7 TPS&#xff0c;和其他的支付系统相比效率相差甚远。 当前的许多拜占庭共识协议&#xff0c;并不支持在一个开放的环境中使用&a…...

【数据结构】Map和Set

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; Map、Set 1. 搜索树1.1 概念1.2 性能…...

Python Flask

Python Flask是一个轻量级的web开发框架&#xff0c;用于快速地构建web应用程序。以下是Python Flask的基本使用步骤&#xff1a; 安装Flask&#xff1a;使用pip安装Flask包。在命令行中输入以下命令&#xff1a; pip install flask创建Flask对象&#xff1a;在Python文件中&am…...

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIM…...

Redis快速上手篇八(redission完善分布式锁)

Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务&#xff0c;其中就包含了各种分布式锁的实现。简单说就是redis在分布式系统上工…...

Dataset文件下载以及使用,以nuswide为例

文章目录 文件夹结构如何使用继承torch.utils.data.Dataset构建新的class构建新的Dataloader 数据集要求以文章 multi-label learning from single positive label为例&#xff1b; 文件夹结构 我是这么放置的&#xff0c;其中含有obs的文件是通过运行文件夹preproc下的genera…...

ZYNQ连载02-开发环境

ZYNQ连载02-开发环境 1. 官方文档 ZYNQ开发使用的软件为Vivado/Vitis/PetaLinux,软件体积比较大&#xff0c;硬盘保留100G以上的空间&#xff0c;赛灵思提供详细的文档&#xff0c;链接如下&#xff1a; ZYNQ文档 2. Vivido和Vitis安装 赛灵思统一安装程序 3. PetaLinux安装…...

前端 :用HTML和css制作一个小米官网的静态页面

1.HTML&#xff1a; <body><div id "content"><div id "box"><div id "top"><div id "top-left"><span id "logo">MI</span><span id "text-logo">小米账…...

modelsim仿真报错:vlog-2388 ‘scl‘ already declared in this scope

问题背景&#xff1a; 1、使用vivado直接仿真的时候没有报错。 2、在vivado中调用modelsim的时候报错。 报错的代码&#xff1a; module iic_write(input clk,input rst,output scl,input en,inout sda);reg scl&#xff1b;……报错的意思是scl已经声明过了&#xff0c;mode…...

C#中通过BeginInvoke()和EndInvoke()来实现异步

.NET Framework允许异步调用任何方法。定义与需要调用的方法具有相同签名的委托&#xff1b;公共语言运行库将自动为该委托定义具有适当签名的 BeginInvoke 和 EndInvoke 方法。以下介绍C#中&#xff0c;通过BeginInvoke()和EndInvoke()来实现异步。 1、异步编程 调用BeginInv…...

github中.gitignore不起作用啦

文章目录 前言两种方法解决清除本地缓存设置不需要 额外注意 前言 提示&#xff1a;人不是靠讲话来生活。每个人都应该靠行动。而行动&#xff0c;是需要时间来证明的。 --《自在独行》 两种方法解决 清除本地缓存 (.gitignore中已经表标明忽略的文件目录下的文件了&#xf…...

同步网盘推荐及挑选指南:便捷、安全、适用的选择

同步网盘是最近热门的文件协同工具之一&#xff0c;因其使用的便捷性受到了诸多用户的青睐。如今网盘市场产品众多&#xff0c;有什么好用的同步网盘&#xff1f;如何挑选同步网盘&#xff1f;是许多需求者关心的问题。 如何挑选同步网盘&#xff1f;在同步网盘挑选过程中要从…...

Java中的QName

javax.xml.namespace.QName代表XML规范中一个限定性名称&#xff08;qualified name&#xff09;&#xff0c;它包含一个命名空间地址&#xff08;Namespace URI&#xff09;、一个本地部分、和一个前缀。QName可以用在xml的元素和属性中。 前缀提供了命名空间地址的前缀&#…...

汇编语言-div指令溢出问题

汇编语言-div指令溢出问题 8086CPU中被除数保存在ax(16位)或ax和dx&#xff08;32位&#xff09;中&#xff0c;如果被除数为16位&#xff0c;进行除法运算时al保存商&#xff0c;ah保存余数。如果被除数为32位时&#xff0c;进行除法运算时&#xff0c;ax保存商&#xff0c;d…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...