秋招面经——快手
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 在大多数情况下确实是最强…...
无服务器架构与Serverless
无服务器架构与Serverless 1. 技术分析 1.1 无服务器架构概述 无服务器架构是云计算的重要演进: Serverless特点无需管理服务器事件驱动按需付费自动伸缩Serverless服务:FaaS: 函数即服务BaaS: 后端即服务DBaaS: 数据库即服务1.2 FaaS工作原理 FaaS执行流程事件触发…...
使用Taotoken后API调用延迟与账单透明度的实际体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后API调用延迟与账单透明度的实际体验 1. 引言 对于需要调用多种大模型API的开发者而言,统一接入和成本管…...
CSS Transforms与Filters详解:创建视觉效果的利器
CSS Transforms与Filters详解:创建视觉效果的利器 一、CSS Transforms基础 CSS Transforms允许你对元素进行旋转、缩放、倾斜和平移等变换操作。这些变换不会影响文档流,只会改变元素的视觉表现。 1.1 transform属性 transform 属性接受一个或多个变换函…...
如何为嵌入式项目配置大模型API调用使用Taotoken与Python
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何为嵌入式项目配置大模型API调用使用Taotoken与Python 对于嵌入式或物联网开发者而言,在资源受限的开发环境中集成A…...
对比按量计费与Token Plan套餐如何为项目选择更优成本模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按量计费与Token Plan套餐如何为项目选择更优成本模型 在将大模型能力集成到开发项目中时,成本控制是一个绕不开的…...
5个高效模组管理技巧:打造完美的XCOM 2游戏体验
5个高效模组管理技巧:打造完美的XCOM 2游戏体验 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom…...
开源热物理计算库CoolProp:工程计算与科研分析的强大引擎
开源热物理计算库CoolProp:工程计算与科研分析的强大引擎 【免费下载链接】CoolProp Thermophysical properties for the masses 项目地址: https://gitcode.com/gh_mirrors/co/CoolProp CoolProp是一款开源免费的热物理性质计算库,为工程师、科研…...
光声光谱结合机器学习实现乳腺癌早期无创诊断的技术解析
1. 项目概述:当光声光谱遇上机器学习,我们如何“听”出乳腺癌的早期信号?在生物医学检测领域,我们一直在寻找一种能够“透视”组织生化本质的非侵入性“慧眼”。传统的超声看结构,MRI看水分子,但它们对早期…...
Gemini深度研究模式全解析(2024最新版API+多模态检索内参):谷歌内部技术白皮书级拆解
更多请点击: https://codechina.net 第一章:Gemini深度研究模式的核心定位与演进脉络 Gemini深度研究模式并非单纯的功能叠加,而是Google面向复杂知识工作场景构建的推理范式跃迁。它将多跳检索、跨模态证据聚合与可验证推理链生成深度融合&…...
衰老生物学领域首个1站式标准化DNA甲基化数据库
摘要 准确量化生物年龄对于解析衰老机制、研发高效干预手段至关重要。分子衰老时钟(尤其是基于DNA甲基化数据的表观遗传时钟)已成为衰老研究领域的核心工具。然而,目前缺少覆盖多年龄、多组织且格式统一的公开DNA甲基化数据集,导致表观遗传时钟研究难以高效推进。研究者在…...
