秋招突击——7/9——字节面经

文章目录

    • 引言
    • 正文
      • 八股
        • MySQL熟悉吗?讲一下MySQL索引的结构?
        • 追问:MySQL为什么要使用B+树?
        • 在使用MySQL的时候,如何避免索引失效?
        • 讲一下MySQL的事物有哪几种特征?
        • MySQL的原子性可以实现什么效果?
        • MySQL几种隔离级别?常用的隔离级别是什么?
        • 为什么电商是读已提交?
        • 如果主要采用读已提交的话,怎么样防止超卖?库存有限的时候?秒拍的场景下?单说隔离级别的情况!以买票为例子,比如说一张票!实际业务系统里怎么防止超卖?
        • 你对飞书了解吗?
    • 总结

引言

  • 这是我面试体验感最好的一次,腾讯、拼多多、华为都没有这个好,不仅仅是单方面接受拷打,是会和我讨论我的方法有什么不对,然后还会认真听我的研究方向,然后探讨如何改良。之前所有的面试,基本上没啥人会认真听我的研究方向,以后我应该还会投字节,能去那里工作真的不错,很棒!主要是飞书部门!
  • 正常面试下来我发现我的八股不行并且算法也不行
    • 八股是只会背这一道题,一旦跟我深入讨论,我就不能顺利答出来了
    • 算法是紧张了,没写出来,没有考虑好!
  • 今天主要是把八股过一遍,算法已经过过了!

正文

八股

MySQL熟悉吗?讲一下MySQL索引的结构?

我的回答

  • 帮助查询数据的一种数据结构,底层是用B+数保存索引,是否需要展开讲一下B+树的具体内容?
追问:MySQL为什么要使用B+树?
  • 多叉树,相同节点的情况下,树的层高更低,磁盘IO次数更少,查询效率更快
  • 叶子节点使用双项链表保存,适用于范围查找
  • 非叶子节点保存索引,叶子节点存储数据,B数全部都存数据,搜索更快

个人问题

  • MySQL会将索引加入到内存中吗?如果可以加载到内存中的话,就是会更快,如果没有的话,就没有意义了。
  • MySQL会将索引加载到内存中,从而提高查询速度。具体来说,MySQL使用一种叫做“缓存”的机制来将索引数据存储在内存中。这些缓存主要包括:
    • InnoDB Buffer Pool:这是InnoDB存储引擎使用的主要缓存区,用于缓存数据页和索引页。通过将索引加载到缓冲池中,MySQL可以更快速地访问和处理索引,从而加快查询速度
在使用MySQL的时候,如何避免索引失效?
  • 这个题目一下子忘记了,太久没背了,而且没有具体使用过索引,底层并不了解,所以这里没回答出来!或者说在胡扯!
    • 不能使用聚合函数的操作?扯淡,这个用不到!

**这里暂时先贴一下GPT的回答,这里每次都挂,今天准备抽时间,把这个索引这个章节从使用到原理都看一遍,再重写一篇,这里先放在这里,今天写完了,在贴链接! **
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

讲一下MySQL的事物有哪几种特征?
  • 原子性:一个操作要么成功要么失败,
  • 隔离性:
  • 持久性:保证事物不会因为执行失败的断电
  • 一致性:保证一个SQL语句执行前后的结果是一致的

这里说的不够详细,或者说不够具体,很混乱,没有一开始的那种从容和淡定了!紧张了!

  • 原子性

    • 确保事务中的所有操作要么全部完成,要么完全不执行。如果事务中的任何操作失败,整个事务将回滚,数据库会回到事务开始前的状态。
  • 一致性(Consistency)

    • 一致性保证事务将数据库从一个一致状态转移到另一个一致状态。在事务开始和结束时,数据库的完整性约束没有被破坏。
  • 隔离性(isolated)

    • 隔离性确保并发事务彼此之间不会互相干扰。每个事务在其执行过程中所做的更改对其他事务是不可见的,直到该事务提交。
  • 持久性(Durability):

    • 持久性保证一旦事务提交,其结果将永久保存在数据库中,即使发生系统崩溃也不会丢失
MySQL的原子性可以实现什么效果?
  • 网购购买成功,减库存操作
  • 原子性主要是通过undolog保证实现的,事物执行失败进行回滚,要么执行失败,要么全部执行。
MySQL几种隔离级别?常用的隔离级别是什么?
  • 电商常用的是读已提交,MySQL的InoDB默认的隔离级别是可重复读
  • 4种隔离级别,列举出来了
为什么电商是读已提交?
  • 电商对于并发性的要求比较高,然后可重复读的会限制并发性,对于数据不一致可以容忍。
    在这里插入图片描述
  • 1、性能考虑
    • 减少锁争用:在高并发环境下,“读已提交”隔离级别减少了锁的持有时间和范围,避免了长时间的行级锁定,从而减少了锁争用和死锁的风险。相比于“可重复读”或“串行化”隔离级别,“读已提交”对系统性能的影响较小。
    • 提高吞吐量:降低锁的粒度和持有时间有助于提高系统的并发处理能力,从而提高整体吞吐量。这对于高流量的电商平台至关重要。
    1. 业务需求
    • 及时性要求:电商平台需要及时反馈用户的操作结果,如订单创建、库存查询等。在“读已提交”隔离级别下,用户可以更快地看到最新的已提交数据,满足了业务的及时性需求。
    • 一致性要求相对较低:对于许多电商业务场景,如商品浏览和搜索,对数据一致性的要求相对较低,允许一定程度的脏读。
    1. 事务冲突减少
    • 降低事务冲突:在“读已提交”隔离级别下,读操作不会阻塞写操作,写操作也不会阻塞读操作,减少了事务之间的冲突,提高了系统的并发处理能力。
    1. 适当的并发控制
    • 乐观锁和悲观锁的结合使用:在需要严格控制并发的场景,如库存扣减和订单处理,可以结合使用乐观锁或悲观锁,以确保数据的一致性和正确性。通过这种方式,可以在保持较高性能的同时,防止关键业务场景下的数据冲突和不一致
如果主要采用读已提交的话,怎么样防止超卖?库存有限的时候?秒拍的场景下?单说隔离级别的情况!以买票为例子,比如说一张票!实际业务系统里怎么防止超卖?
  • 通过redis这种分布式锁,通过锁来控制访问
  • 查的时候可以查有票,但是实际购买的时候,使用分布式锁进行处理。

搜索回答
悲观锁

  • 读取库存的时候,锁住相应的记录,防止其他事物同时获取或者修改记录,使用select 。。。。for update实现
start transaction

select stock from ticks where ticket_id = 1 for update;
-- 检查库存是否足够
IF stock > 0 THEN
    -- 执行购买操作
    UPDATE tickets SET stock = stock - 1 WHERE ticket_id = 1;
    -- 提交事务
    COMMIT;
ELSE
    -- 库存不足,回滚事务
    ROLLBACK;
END IF;

乐观锁

  • 在更新库存时,通过检查库存的版本号或者是时间戳来保证数据的一致性,在更新账号时发现版本好发生变化,说明其他事物已经更新过了,需要重试
START TRANSACTION;

-- 读取库存和版本号
SELECT stock, version FROM tickets WHERE ticket_id = 1;

-- 检查库存是否足够
IF stock > 0 THEN
    -- 尝试更新库存和版本号
    UPDATE tickets SET stock = stock - 1, version = version + 1 
    WHERE ticket_id = 1 AND version = @version;
    
    -- 检查是否有行受影响
    IF ROW_COUNT() > 0 THEN
        -- 更新成功,提交事务
        COMMIT;
    ELSE
        -- 更新失败,回滚事务并重试
        ROLLBACK;
        -- 重试逻辑(如重新开始事务)
    END IF;
ELSE
    -- 库存不足,回滚事务
    ROLLBACK;
END IF;

原子操作

  • 使用数据的原子操作,如update中的判断语句,在高并发的情况下,确保操作的原子性
START TRANSACTION;

-- 尝试更新库存
UPDATE tickets SET stock = stock - 1 WHERE ticket_id = 1 AND stock > 0;

-- 检查是否有行受影响
IF ROW_COUNT() > 0 THEN
    -- 更新成功,提交事务
    COMMIT;
ELSE
    -- 更新失败(库存不足或其他原因),回滚事务
    ROLLBACK;
END IF;

分布式锁

  • 在分布式系统中,使用分布式锁,确保同一时间只能有一个实例在操作数据库。
你对飞书了解吗?
  • 不了解
  • 尴尬!

补充

  • 企业级协同办公平台
  • 特点
    • 即时消息
    • 文档协作,提供强大的文档挂你和权限控制功能,支持多人同时编辑和评论
    • 任何和项目管理
      • 提供任务管理 工具,创建、分配和跟踪任务管理
      • 支持甘特图等
    • 集成应用
      • 支持与第三方应用的集成,github和JIRA等
      • 提供API和Webhook,方便企业进行自定义开发和集成

总结

  • 大概率是进不去了,不过我学到了很多东西,后续会进一步进行改良,今天就加把劲,把MySQL的东西给补上,尤其是索引这一块。
  • 也许这就是不断面试的作用吧,不断面试,不断补全自己的知识网络,然后不断提高自己的能力!加油!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

27.数码管的驱动,使用74HC595移位寄存器芯片

PS:升腾A7pro系列FPGA没有数码管外设,因此以AC620FPGA为例展开实验。 (1)共阳极数码管和共阴极数码管示意图: AC620中的数码管属于共阳极数码管,段选端口(dp,g,f,e,d,c,b,a)低电平即可点亮led。人眼的视觉…

在亚马逊云科技AWS上利用SageMaker机器学习模型平台搭建生成式AI应用(附Llama大模型部署和测试代码)

项目简介: 接下来,小李哥将会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon …

【割点 C++BFS】2556. 二进制矩阵中翻转最多一次使路径不连通

本文涉及知识点 割点 图论知识汇总 CBFS算法 LeetCode2556. 二进制矩阵中翻转最多一次使路径不连通 给你一个下标从 0 开始的 m x n 二进制 矩阵 grid 。你可以从一个格子 (row, col) 移动到格子 (row 1, col) 或者 (row, col 1) ,前提是前往的格子值为 1 。如…

【经典链表OJ】环形链表

一、题目要求 给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

NSAT-8000电源检测软件测试砖式电源模块的方案及优势

砖式电源模块类型 砖式电源,顾名思义其外观尺寸像块砖,具有体积小、功率大、安装方便等特点。砖式电源模块具备高可靠性和高稳定性,能够为设备提供稳定的电力输出,在通信、工业、医疗等领域广泛应用。 根据尺寸大小,砖…

《WebGIS快速开发教程》第7版发布

老规矩先看封面: 可以看到我们在封面上加了“classic”的字样,这意味着第7版将会是经典版本,或者说具有里程碑意义的一个版本。 拿到新书我们可以看到第7版的整体风格是以“业务场景”为核心,所有讲解的知识点和案例都是围绕着业…

window下载安装clang

执行clang报错: c:/>clang test.cclang: warning: unable to find a Visual Studio installation; try running Clang from a developer command prompt [-Wmsvc-not-found] clang: error: unable to execute command: program not executable clang: error: li…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十七章 Linux 环境变量

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【竞技宝 】欧洲杯:赛事水货盘点

本届欧洲杯接近尾声,有些球员抓住机会趁势崛起,踢出了身价。可惜还有一些球员的表现无法让球迷和媒体满意,下面我们就来盘点下本届欧洲杯的水货球员,看看哪些人因为糟糕的表现上榜? 格瓦迪奥尔(克罗地亚) 本届欧洲杯是克罗地亚黄金一代球员的谢幕之战,原本格瓦迪奥尔作为球队…

24/07/08数据结构(2.1203)顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…

重磅来袭!MoneyPrinterPlus一键发布短视频到视频号,抖音,快手,小红书上线了

MoneyPrinterPlus开源有一段时间了&#xff0c;已经实现了批量短视频混剪&#xff0c;一键生成短视频等功能。 有些小伙伴说了&#xff0c;我批量生成的短视频能不能一键上传到视频号,抖音,快手,小红书这些视频平台呢&#xff1f;答案是必须可以。 下面上干货。 软件准备 当…

【Android】基于 LocationManager 原生实现定位打卡

目录 前言一、实现效果二、定位原理三、具体实现1. 获取权限2. 页面绘制3. 获取经纬度4. 方法调用5. 坐标转换6. 距离计算7. 完整代码 前言 最近公司有个新需求&#xff0c;想要用定位进行考勤打卡&#xff0c;在距离打卡地一定范围内才可以进行打卡。本文将借鉴 RxTool 的 Rx…

sdwan是硬件还是网络协议?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;并不是一个硬件产品或单一的网络协议&#xff0c;而是结合了软件、硬件和网络技术的一种解决方案。SD-WAN的核心在于其软件定义的特性&#xff0c;它通过软件来控制和管理广域网的…

如何压缩pdf文件大小,怎么压缩pdf文件大小

在数字化时代&#xff0c;pdf文件因其稳定的格式和跨平台兼容性&#xff0c;成为了工作与学习中不可或缺的一部分。然而&#xff0c;随着pdf文件内容的丰富&#xff0c;pdf文件的体积也随之增大&#xff0c;给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…

@RequestPart 与 @RequestBody、@RequestParam 注解的异同点

前言 RequestPart 注解是我们在JavaEE 开发中&#xff0c;比较常见的一个注解。它经常会与 RequestBody 、RequestParam 注解进行比较&#xff0c;这篇博文我们以案例和源码相结合&#xff0c;分析这几个注解的异同点。 案例演示 创建实体类 User Data NoArgsConstructor A…

Python requests爬虫

Python的requests库是一个强大且易于使用的HTTP库&#xff0c;用于发送HTTP请求和处理响应。它是Python中最受欢迎的网络爬虫框架之一&#xff0c;被广泛用于从网页中提取数据、爬取网站和进行API调用。 使用requests库&#xff0c;你可以轻松地发送各种HTTP请求&#xff0c;包…

提示词工程(Prompt Engineering)是什么?

一、定义 Prompt Engineering 提示词工程&#xff08;Prompt Engineering&#xff09;是一项通过优化提示词&#xff08;Prompt&#xff09;和生成策略&#xff0c;从而获得更好的模型返回结果的工程技术。 二、System message 系统指令 System message可以被广泛应用在&am…

linux自动化内存监控与告警

文章目录 前言一、脚本实现1. shell脚本实现2. 脚本功能概览 二、设置定时执行1. 编辑cron任务表2. 设置定时任务 三、通知结果示例总结 前言 在当今数字化与网络化日益普及的时代&#xff0c;系统管理与维护成为了确保业务连续性和数据安全的关键环节。其中&#xff0c;监控系…

大模型时代:人工智能与大数据平台的深度融合

在当今的大数据时代&#xff0c;数据已经成为驱动业务增长和创新的关键因素。与此同时&#xff0c;随着人工智能技术的不断进步&#xff0c;AI在大规模数据处理和分析方面的能力日益强大。因此&#xff0c;将人工智能与大数据平台相结合&#xff0c;可以为企业带来巨大的商业价…

linux信息收集与提权

目录 版本信息收集 kali得一些exp网站 kali自带的searchsploit工具 脏牛提权漏洞&#xff08;改写没有写权限的文件&#xff09; 测试靶场下载链接 sudo提权 上传恶意C脚本进行编译生成dirty的elf文件&#xff0c;也可以在攻击机编译好上传 启动&#xff0c;123456是设…