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

news2024/9/28 3:29:07

文章目录

    • 引言
    • 正文
      • 八股
        • 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.coloradmin.cn/o/1914254.html

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

相关文章

为什么使用 Lumion 3D 渲染软件进行建筑可视化?

如今,建筑可视化的需求量很大。一些报告指出,到 2025 年,建筑可视化作品的市场规模可能达到 57.2 亿美元。这只能说明 3D 渲染和建筑可视化在当今的重要性日益增加。如今,它已成为广告、营销、沟通等诸多领域前所未有的工具。 Lu…

从生物学到机械:人眼如何为机器人视觉系统提供无尽灵感?

人眼激发了相机机制的发展,该机制改善了机器人对周围世界的观察和反应方式。 该摄像头系统由马里兰大学(UMD)计算机科学家领导的团队开发,模仿人眼用于保持清晰稳定的视力的不自主运动。 该团队对相机的原型设计和测试称为…

【网络安全】Oracle:SSRF获取元数据

未经许可,不得转载。 文章目录 前言正文漏洞利用 前言 Acme 是一家广受欢迎的播客托管公司,拥有庞大的客户群体。与许多大型运营公司一样,Acme 采用了Apiary的服务,使用户能够安全高效地管理他们的播客。 Apiary 于2017年初被Or…

[Linux安全运维] Linux用户以及权限管理

Linux用户以及权限管理 Linux用户和组 用户信息文件pasawd /etc/passwd文件用于存储用户的信息 :用于分割不同的字段信息 字段示例(第一行)含义说明1root用户名2x密码占位符x代表用户有密码存储在shadow文件中无内容代表用户登录系统不需要密码30UID…

Elastic Stack--15--聚合查询(SUM、MAX、MIN、AVG)案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 ES的聚合查询(SUM、MAX、MIN、AVG)1.求和查询2.求平均值3.最大最小值查询4.唯一值查询 (类似于sql中的distinct 去重)5.stats聚合 ES的聚合查询(SUM、MAX、MIN、AVG…

Ubuntu22.04.4系统/安装python3.9/pytorch/torchvision【GPU版】

1.安装python3.9 1.1 创建python3.9的虚拟环境 conda create -n QwenChat python3.9 1.2 输入“y” 1.3 创建成功 2.安装pytorch和torchvision 2.1 进入虚拟环境 进入刚刚创建的虚拟环境 conda activate QwenChat 2.2 conda安装 查看cuda的版本 浏览器打开网址PyTorch鼠标往…

Matlab方差分析

为了使生产过程稳定,达到优质、高产,需要对影响产品质量的因素进 行分析,找出有显著影响的那些因素,除了从机理方面进行研究外,常常要作许多试验, 对结果作分析、比较,寻求规律。用数理统计分析…

JVM是如何创建一个对象的?

哈喽,大家好🎉,我是世杰。 本文我为大家介绍面试官经常考察的**「Java对象创建流程」** 照例在开头留一些面试考察内容~~ 面试连环call Java对象创建的流程是什么样?JVM执行new关键字时都有哪些操作?JVM在频繁创建对象时,如何…

大连网站制作需要注意哪些问题

在制作大连网站时,需要注意以下几个问题: 1. 目标受众:首先要明确网站的目标受众是谁,根据受众的特点和需求来设计网站的内容和结构。比如,如果目标受众是年轻人,网站的设计风格可以更加时尚和前卫&#xf…

windwos下mysql的udf提权

MySql UDF提权介绍 UDF(User Defined Functions)即用户自定义函数,通过这种方式可以实现命令执行,其原理是通过lib_mysqludf_sys提供的函数可以执行系统命令 攻击场景:同之前利用日志写WebShell的场景,即堆叠注入或MySQL终端权限或类似phpMy…

使用Vue3、Pinia和Vite5打造高度还原的抖音仿制项目

douyin-vue 是一个模仿 抖音|TikTok 的移动端短视频项目。Vue 在移动端的"最佳实践",媲美原生 App 丝滑流畅的使用体验。使用了最新的 Vue 技术栈,基于 Vue3、Vite5 、Pinia实现。数据保存在项目本地,通过 axios-mock-adapter 库拦…

【Hec-HMS】第一期:模型简介及软件安装

HEC-HMS模型简介及软件安装 HEC-HMS模型简介建模思路 HEC-HMS软件安装步骤1:安装InstallShield Wizard步骤2:安装HEC-HMS 参考 HEC-HMS模型简介 HEC-HMS(The Hydrologic Engineering Center’s-Hydrologic Modelimng System),美国陆军工程兵…

邮件推送服务的自动化流程设置与优化技巧?

邮件推送服务如何定制化?邮件推送的安全性如何保障? 无论是大型企业还是小型企业,通过精准的邮件推送服务,可以实现客户关系管理的有效增强,提升品牌认知度和销售转化率。AokSend将探讨如何通过自动化流程设置与优化技…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划(Matlab)。 蚁群算法(Ant Colony Optimization,ACO)是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…

【MPPT太阳能升压控制器方案】远翔升压恒流驱动芯片FP7209单节电池升压24V,30V,36V,42V,48V全系列方案,高转换效率,输出带短路保护功能

高转换效率,太阳能控制器方案——详解太阳能控制器PWM / MPPT极简方案其设计要点,升压30V,36V,42V,48V 使用单颗芯片FP7209即实现两级升压到30V,36V,42V,48V,相对于单极升…

Milvus核心组件(1)

cluster 模式 上一篇其实已经说过 standalone 模式,其实集群模式大同小异,只是在不同机子间使用Kafka或者其他消息中间件保证数据及逻辑的一致性。 Log Broker,如Pulsar这样的系统,是专门设计来处理和管理日志数据的中间件。它主…

windows10开启防火墙,增加入站规则后不生效,还是不能访问后端程序

一、背景: 公司护网要求开启防火墙,开启防火墙后,前后端分离的项目调试受影响,于是增加入站规则开放固定的后台服务端口,增加的mysql端口3306和redis端口6379,别人都可以访问,但是程序的端口808…

AMEYA360:国民技术推出多款高能专用MCU产品

2024年7月8日,国民技术推出多款高能专用MCU产品。N32H482(通用控制)、N32H487(高性能互联)、N32GH473(电机控制)、N32H474(数字电源控制)四大系列高性能MCU新品,以及基于Arm Cortex M0内核实现的N32G052系列高性价比通用MCU新品。 全新一代高性能MCU新品…

JavaSE 面向对象程序设计进阶 IO流 字符输入输出流及底层原理

目录 字符输入流FileReader 空参的read方法 带参的read方法 字符输出流FileWriter 字符输入流底层原理 字符输出流底层原理 字符输入流FileReader 输入流 一次读一个字节 遇到中文时 一次读多个字节 输出流 底层会把数据按照指定的编码方式进行编码 在变成直接写到文件当…

企业化运维(7)_Zabbix企业级监控平台

官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution ###1.Zabbix部署### (1)zabbix安装 安装源 修改安装路径为清华镜像 [rootserver1 zabbix]# cd /etc/yum.repos.d/ [rootserver1 yum.repos.d]# vim zabbix.r…