秋招面经——快手
Mysql
mysql事务
共享锁与排他锁
共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(读都允许读,但我在读不允许你去改)
排他锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(我在修改数据,别的操作都被禁止)
事务特性
事务四个特性:ACID
- 原子性(Atomicity):指事务是一个不可分割的最小工作单位,事务中的操作只有都发生和都不发生两种情况
- 一致性(Consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态。
- 隔离性(Isolation):一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability):一个事务一旦提交成功,它对数据库中数据的改变将是永久性的,接下来的其他操作或故障不应对其有任何影响。
如何实现这些特性
- 原子性:靠Undo log实现,即如果一个事务异常或执行失败后进行回滚
- 当事务对数据库进行修改时,InnoDB会生成对应的 undo log;
- 如果事务执行失败或调用了 rollback,导致事务需要回滚,便可以利用 undo log 中的信息将数据回滚到修改之前的样子。
- undo log 属于逻辑日志,它记录的是sql执行相关的信息。
- 当发生回滚时,InnoDB 会根据 undo log 的内容做与之前相反的工作
- 一致性:事务的最终目的,即需要数据库层面保证,又需要应用层面进行保证,并且MySQL底层通过两阶段提交事务保证了事务持久化时的一致性。
- 隔离性:靠锁和MVCC实现
- 锁:
- 在 InnoDB 事务中,行锁通过给索引上的索引项加锁来实现。
- 只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁。
- 行级锁定同样分为两种类型:共享锁和排他锁
- 使用Record Lock和Gap Lock(解决幻读)
- MVCC:多版本并发控制
- DB_TRX_ID:事务 ID,是根据事务产生时间顺序自动递增的
- DB_ROLL_PTR:回滚指针,本质上就是一个指向记录对应的undo log的一个指针,InnoDB 通过这个指针找到之前版本的数据
- MVCC在事务开启时会为事务生成一个ID,并且在查询时生成一个快照,能看到当前活跃的事务,然后通过比较快照的生成时间和活跃事务的提交时间进行对比,判断读取哪个版本的数据。
- 锁:
- 持久性:靠Redo log实现
- mysq|修改数据的时候会在redo log中记录一份日志数据,就算数据没有保存成功,只要日志保存成功了,数据仍然不会丢失
- 当一条数据需要更新时,InnoDB会先将数据更新,然后记录redoLog 在内存中,然后找个时间将redoLog的操作执行到磁盘上的文件上。
mysql隔离级别
mysql具有四种隔离级别
| 隔离级别 | 说明 |
|---|---|
| 读未提交 | 一个事务还没提交时,它做的变更就能被别的事务看到 |
| 读已提交 | 一个事务提交之后,它做的变更才会被其他事务看到 |
| 一个事务提交之后,它做的变更才会被其他事务看到 | 一个事务中,对同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。InnoDB默认级别 |
| 串行化 | 事务串行化执行,每次读都需要获得表级共享锁,读写相互都会阻塞,隔离级别最高,牺牲系统并发性。 |
不同的隔离级别是为了解决不同的问题。也就是脏读、幻读、不可重复读。
| 问题 | 说明 |
|---|---|
| 脏读 | 读到了其他事务未提交的数据 |
| 不可重复读 | 在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况 |
| 幻读 | 在一个事务中,后续读取的数据,在最开始读取的数据中不存在 |
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | 可以出现 | 可以出现 | 可以出现 |
| 读已提交 | 不允许出现 | 可以出现 | 可以出现 |
| 一个事务提交之后,它做的变更才会被其他事务看到 | 不允许出现 | 不允许出现 | 可以出现 |
| 串行化 | 不允许出现 | 不允许出现 | 不允许出现 |
Mysql和MangoDB的比较
Mysql:
- 关系数据库系统,相关信息可能存储在单独的表中,但通过使用关联查询来关联。通过使用这种方式,使得数据重复量被最小化。
- 关系型数据库的最大特点就是事务的一致性
- 为了维护一执行需要消耗大量的性能
MangoDB:
- 少量数据时,数据存在内存中。当内存不够时,只将热点数据放在内存,其他存入磁盘
- 数据存储在类似JSON的文档中,并且文档中每个json串结构可能有所不同
- 使用动态模式,这意味着您可以在不首先定义结构的情况下创建记录,例如字段或其值的类型
- 支持多种存储格式(mysql只支持基本类型)
- 设计了高可用性和可扩展性,并提供了即用型复制和自动分片功能。
- 简化了开发,因为 MongoDB 文档自然映射到现代的面向对象编程语言。使用 MongoDB 可以避免将代码中的对象转换为关系表的复杂对象关系映射(ORM)层。
sql优化
select *浪费资源,减少使用,且不走索引union all比union更快(但是不去重)- 小表驱动大表:大表
in小表 ; 小表exists大表; - 批量插入数据尽量使用
insertBatch,而不是循环(循环会多次请求数据库) - 多使用
limit,减少内存消耗 - 海量数据查询分页,使用条件查询结合
limt size,去替代limit start size - 使用连接查询代替子查询(子查询会为子查询额外创建一个表)
join的表不能太多,否则容易选错索引- 索引不宜太多,因为在增删改查的时候都需要更新索引表(使用联合索引)
- 将
group by后接的having条件适当提到前面的where中
Spring
maven中版本 版本冲突
maven依赖中不允许存在两个不同版本的同名依赖。(添加<exclusion>标签来解决冲突)
Kafka
Kafka和其他消息队列对比
| 对比 | Kafka | RocketMQ | RabbitMQ |
|---|---|---|---|
| 优先级队列 | 不支持 | 通过建立不同的队列 | 通过建立不同的队列 |
| 延迟队列 | 不支持 | 基于队列的延迟 | 基于队列的延迟 |
| 死信队列 | 不支持 | 支持 | 支持 |
| 消费模式 | pull | pull/push | pull/push |
| 广播模式 | 发布订阅 | 发布订阅 | 点对点 (但可以由交换机实现发布订阅模式) |
| 消息回溯 | offset和timestamp | 按时间回溯 | 不支持 |
| 消息堆积&持久化 | 磁盘堆积:所有消息都存在磁盘 每个partition对应一个或多个segment file | 基于磁盘存储 使用commit Log存储消息(顺序写到文章末尾) 后台异步线程同步到consumerQueue 使用内存映射文件加速消息读取 | 内存堆积(换页操作存储到磁盘) (或使用惰性队列将消息持久化到磁盘) |
| 流量控制 | 支持client和user级别 | 多种维度的流量控制 | 流量控制基于credit-base算法,是内部被动触发的保护机制,作用于生产者层面 |
| 顺序性消息 | 同分区内有序 | Broker消息队列锁(分布式锁) Consumer消息队列锁(本地锁) Consumer消息处理队列消费锁(本地锁) | 无法保证全局有序 |
分库分表和滑动秒杀
Redis
缓存穿透
缓存不一致
Redis的优势
Redis面对大量访问时的处理办法
Redis面对大量数据存储
Redis键的设计
Elasticsearch
es的数据格式怎么规定的
为什么使用es
Docker
Docker镜像
Java基础
Hash冲突的解决方式
HashMap和CurrentHashMap的对比
红黑树的特性,以及保持平衡的方式
线程
自定义线程有哪些参数,分别是什么
CAS如何实现
共享锁 分布式锁
ReentrantLock
volitail关键字
JVM
JVM有哪些垃圾回收器
类加载机制
反射
AQS
异常
异常的分类,以及有什么区别
空指针异常如何处理
计算机网络
Https为什么安全
TCP拥塞控制
场景问题
流量大对服务的影响
数据有效期为半年
30分钟延迟任务
在线笔试
保证数据一致性
旋转数组
回文子串
长山脉数组
lc54.螺旋矩阵
lc23.合并k个升序链表
相关文章:
秋招面经——快手
Mysql mysql事务 共享锁与排他锁 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(读都允许读,但我在读不允许你去改) 排他锁:允许一个事务去读一行,阻止其他事务获得相同…...
【STM32RT-Thread零基础入门】 2. 新建RT-Thread项目
硬件:STM32F103ZET6、ST-LINK、usb转串口工具 文章目录 前言一、新建RT-Thread项目二、项目结构三、构建项目四、下载程序(调试器下载)五、终端交互总结 前言 RT-Thread的全称是Real Time Thread,顾名思义,它是一个嵌…...
别人直播的时候怎么录屏?分享一些录屏方法
随着互联网的快速发展,直播已经成为人们日常生活中不可或缺的一部分。但是,有时候我们可能会错过某些重要的直播内容,这时候就需要录屏来保存和观看。那么,如何录屏别人的直播呢?本文将分享一些录屏方法和技巧&#…...
React Native 在高IOS版本下无法显示图片的问题处理
图片在低ios版本下可以看到图片,在高版本ios下显示不了图片 直接上解决方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源码 原代码 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…...
SSH远程连接MacOS catalina并进行终端颜色配置
一、开关SSH服务 在虚拟机上安装了MacOS catalina,想要使用SSH远程进行连接,但是使用“系统偏好设置”/“共享”/“远程登录”开关进行打开,却一直是正在启动“远程登录”: 难道是catalina有BUG?不过还是有方法的&…...
用JSON.toJSONString转JSON时,属性的值为null时,输出的JSON里没有该属性
1、问题 用JSON.toJSONString转JSON时,当属性值为null的话,转出来的JSON里没有了值为null的属性,属性丢失了 2、原因 用fastjson将java对象转json字符串时会默认去除空字段 2、解决办法 在JSON.toJSONString方法加上SerializerFeature这一…...
Java版企业电子招标采购系统源码—企业战略布局下的采购寻源tbms
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…...
轻拍牛头(约数)
题意:求ai在n个数中,ai可以整除的数有多少个,不包括ai自己。 分析:暴力写需要n^2的时间复杂度,此时想一下预处理每个数的倍数,约数和倍数是有关系的,把每个数的倍数都加上1. #include<bits…...
Vc - Qt - 绘制窗口背景色
要在Qt中绘制一个背景颜色,你可以使用Qt的绘图功能来完成。下面是一种简单的方法: 步骤1:在你想要绘制背景颜色的QWidget(例如QMainWindow或QDialog)的派生类中,重写 它的paintEvent函数。步骤2:…...
js和cocos creator学习笔记
1.Javascript有哪些数据类型?举例两个最常见的内置对象数据类型? 常用的数据类型:Number,String,Boolean,Null,Undefined,Object 常见内置对象:Array,Function2.下面代码输出内容是什么? let a []; a[10] 10; console.log(a.length); console.log(a[0]); a[200] undefi…...
Ceph分布式存储系统
Ceph 是一个开源的分布式存储系统,旨在提供高性能、高可靠性和可扩展性的存储解决方案。它被设计用于管理大规模的数据,可以轻松地扩展到数千台服务器和多个存储节点,适用于私有云、公有云、虚拟化环境等多种场景。 Ceph 的主要特点和组件包…...
阿里云SMS,APi接口返回错误码
API错误码 更新时间:2023-06-29 16:33提交缺陷 产品详情 相关技术圈 我的收藏 调用API接口失败时,会返回错误码。本文档为您提供API接口错误码列表,请根据错误码和对应错误信息排查问题。 错误码(Code) 错误信息…...
Floyd算法
正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能ÿ…...
SpringBoot究竟应该如何学习?
如果你有Spring的基础,学习Spring Boot就很简单了。 首先要知道Spring Boot是建立在Spring框架之上的,它旨在简化和加速Java应用程序的开发过程。 Spring Boot的目标是简化Spring应用程序的配置和开发,通过提供自动配置、快速开发和零配置的…...
为什么很多人认为ChatGPT最好的替代工具是Claude?
ChatGPT引领着生成式AI聊天机器人领域,但Claude AI看起来是一个有力的竞争者。 前段时间,ChatGPT的强劲竞争对手Claude2面世。当时很多人认为它可能会取代ChatGPT,在体验过一段时间之后,深以为然。原因如下: 更强大的…...
学习Vue:简介和优势
什么是 Vue.js? Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它专注于视图层,并且可以轻松地集成到现有的项目中。Vue.js 的设计理念是渐进式,这意味着您可以根据项目的需要逐步引入 Vue.js,从而更好地控制应用的复…...
***is not a commit and a branch ‘***‘ cannot be created from it 报错
git执行如下代码 git checkout -b daily/1.0.0 origin/daily/1.0.0遇到报错 fatal: ‘origin/daily/1.0.27’ is not a commit and a branch ‘daily/1.0.27’ cannot be created from it 解决办法: git fetch --all原因: 报错说is not a commit而不是说branch doesn’t exis…...
QT信号槽连接方式
1.QT信号槽主要分两个连接方式,手动和自动: 1.1 使用 connect() 函数手动连接信号和槽: QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot())); 自动: 1.2 使用 lambda 表达式连接信号和槽: connect(s…...
【yml文件的解释】
目录 一、yml的简介二、手写yml文件进行配置三、使用yaml格式导出生成模板四、deployment.yaml文件详解五、Pod yaml文件详解六、Service yaml文件详解 一、yml的简介 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式:主要用于 api 接口之间消息的传递 Y…...
ChatGPT or BingChat
你相信我们对大模型也存在「迷信权威」吗? ChatGPT 的 GPT-4 名声在外,我们就不自觉地更相信它,优先使用它。但我用 ChatALL 比较 AI 大模型们这么久,得到的结论是: ChatGPT GPT-4 在大多数情况下确实是最强…...
告别残差加法,Kimi 给神经网络换了个 “智能引擎”
来源:算法进阶 本文约2800字,建议阅读6分钟本文介绍了 Kimi 团队用 Attention Residuals 替代传统残差机制的成果。只要接触深度学习神经网络的读者们对「」一定不会陌生。自从 2015 年 ResNet 诞生以来,这种「将输入直接加到输出上」的简单逻…...
@Value赋值踩的坑
Spring Boot 配置文件中的科学计数法陷阱 ⚠️ 警惕:YAML 配置中的字符串被误解析为数字的问题 📋 问题场景 1. 配置文件示例 # 测试环境配置 ✅ xunfei:appid: 0e1d789dapisecret: NzE5ZmExxxxxxxTFkNmY1ZWJjZTA1apikey: d228r7t8xxxxxxxc0bebb17e377…...
实战指南:基于快马ai与ubuntu24.04从零部署高可用个人博客系统
今天想和大家分享一个实战项目:在Ubuntu 24.04上从零部署一个高可用的个人博客系统。这个系统不仅前后端分离,还用到了Nginx反向代理和Gunicorn应用服务器,非常适合想学习全栈开发的朋友练手。 系统架构设计 整个博客系统采用经典的前后端分离…...
Stable Yogi Leather-Dress-Collection与智能车结合:生成个性化汽车内饰皮革方案
Stable Yogi Leather-Dress-Collection与智能车结合:生成个性化汽车内饰皮革方案 想象一下,你正坐在一辆智能车的展厅里,面前的巨大屏幕不是用来播放宣传片的,而是一个属于你的“数字裁缝铺”。你用手指轻轻滑动,选择…...
OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备的运行技巧
OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备的运行技巧 1. 为什么需要内存优化 当我第一次尝试在8GB内存的MacBook Pro上运行千问3.5-35B-A3B-FP8模型时,系统几乎立即崩溃了。这让我意识到,想要在资源有限的设备上运行大型语言模型&…...
Label Studio ML Backend架构设计与高可用机器学习服务实现深度解析
Label Studio ML Backend架构设计与高可用机器学习服务实现深度解析 【免费下载链接】label-studio-ml-backend Configs and boilerplates for Label Studios Machine Learning backend 项目地址: https://gitcode.com/gh_mirrors/la/label-studio-ml-backend Label Stu…...
明日方舟游戏资源库:高级游戏数据分析与开发实战指南
明日方舟游戏资源库:高级游戏数据分析与开发实战指南 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 《明日方舟》游戏资源库是一个完整的开源项目,为开发者和数…...
OmenSuperHub:重新定义游戏本性能控制的开源解决方案
OmenSuperHub:重新定义游戏本性能控制的开源解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 痛点解析:你的游戏本是否正遭…...
仅此一场,武汉首发!AICA10期数智创新公开课,邀你共探智造新路径
江城四月,春和景明;智造浪潮,风起荆楚。我们诚挚邀请您与产业同行、领域专家齐聚武汉,共探智能制造新蓝图,共筑数智人才新生态。AI赋能智造,人才决胜未来。当数智浪潮席卷制造业,复合型AI架构师…...
damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式
damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 一、技术赋能&#…...
