数据库之事务隔离级别详解
事务隔离级别详解
- 一、事务的四大特性(ACID)
- 1. 原子性(atomicity):
- 2. 一致性(consistency):
- 3. 隔离性(isolation):
- 4. 持久性(durability):
- 二、事务的四种隔离级别
- 1. 读未提交(Read uncommitted):
- 1.1 简述
- 1.2 事例
- 1.3 分析
- 2. 读已提交(Read committed):
- 2.1 简述
- 2.2 事例
- 2.3 分析
- 3. 可重复读(Repeatable read)
- 3.1 简述
- 3.2 事例
- 3.3 分析
- 3.4 什么时候会出现幻读?
- 3.4.1 简述
- 3.4.2 事例
- 3.4.3 那怎么解决幻读问题?
- 4. 串行化(Serializable)
- 5. 小结
- 三、MySql默认隔离级别
- 1.版本说明
- 2. 查询mysql全局事务隔离级别
- 2.1 查询命令
- 2.2 默认隔离级别如下
- 3. 注意事项
- 四、不同隔离级别演示
- 演示准备
- 创建sql语句准备
- 数据准备
- 读未提交----->脏读
- 设置当前会话隔离级别为读未提交
- 1、a 事务(客户端1) 修改 、未提交
- 2、b事务(客户端2) 读该数据
- 3、a事务(客户端1) 回滚
- 4、b事务(客户端2) 再读该数据 和 2步不一致,脏读
- 读已提交----->不可重复读
- 设置当前会话隔离级别为读已提交
- 1、a事务(客户端1) 修改 、未提交
- 2、b事务(客户端2) 读该数据
- 3、a事务(客户端1) 提交
- 4、b事务(客户端2) 读该数据 , 不可重复读
- 可重复读----->幻读
- 设置当前会话隔离级别为可重复读
- 1、a 事务(客户端1) 修改、未提交
- 2、b 事务(客户端2) 读该数据
- 3、a 事务(客户端1) 提交
- 4、b 事务(客户端2) 读该数据 和之前一样可重复读
- 串行化
- 设置当前会话隔离级别为串行化
- 1、a 事务(客户端1) 读取id = 1的数据
- 2、b 事务(客户端2) 修改id = 1的数据,直接阻塞住
- 3、a 事务(客户端1) 提交
- 4、b 事务(客户端2) 获取行锁更新成功、串行执行
- 五、MVCC(Multi-Version Concurrency Control)
- MVCC原理底层就是通过read view 以及undo log来实现
- 为什么会有MVCC
- MVCC在哪个隔离级别下才生效
- InnoDB行数据默认隐藏列
- ReadView是什么
- read view 参数解释
- 1.creator_trx_id: 当前事务id
- 2.m_ids:所有活跃事务的事务id
- 3.min_trx_id: m_ids里最小的事务id值
- 4.max_trx_id: 最大事务id
- Read View快照的生成时机
- repeatable read级别
- read committed级别
- 版本链比对规则
- 一句话概括MVCC
- MVCC比对练习题
- 在同一个事务里,针对id=1的记录,当前事务ID分别为200,99,38,15,5的行记录能查询到么,是可见的么?
- 思考题:为啥要把最小的事务id值单独作为一个字段?
- 六、Mysql解决了幻读么,当前读呢
一、事务的四大特性(ACID)
1. 原子性(atomicity):
事务是一个原子操作,要么全部执行成功,要么全部执行失败。 事务的原子性确保一组逻辑操作,要么全部完成,要么完全不起作用。
2. 一致性(consistency):
执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。
3. 隔离性(isolation):
事务的隔离性是指在并发执行的多个事务中,每个事务的执行互不影响,每个事务都有自己独立的空间进行操作。事务隔离级别越高,数据冲突的可能性就越小,但并发性能也会受到一定的影响。
4. 持久性(durability):
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障,应用重启,也不应该对其有任何影响。
二、事务的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。在事务的并发操作中可能会出现脏读,不可重复读,幻读。
1. 读未提交(Read uncommitted):
1.1 简述
一个事务读到了另一个事务还没有提交的数据。
1.2 事例
父亲要给儿子转账。但是转账时父亲不小心按错了数字,按成10万/月,该钱已经打到儿子的账户,但是事务还没有提交,就在这时,儿子去查看自己的储蓄卡,发现转多了9万,以为凭空多了9万非常高兴。但是父亲及时发现了不对,马上回滚差点就提交了的事务,将数字改成1万再提交。
1.3 分析
实际父亲给儿子转的还是1万,但是儿子看到的是10万。儿子看到的是父亲还没提交事务时的数据。这就是脏读。
2. 读已提交(Read committed):
2.1 简述
一个事务要等另一个事务提交后才能读取数据。
2.2 事例
儿子拿着父亲的信用卡去消费(卡里目前有10),当他买单时(父亲事务开启),收费系统事先检测到他的卡里有10万,就在这个时候!!父亲要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待父亲转出金额事务提交完)。儿子就会很郁闷,明明卡里是有钱的…
2.3 分析
这就是读已提交,若有事务对数据进行更新操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两次相同的查询却返回了不同数据,这就是不可重复读。
3. 可重复读(Repeatable read)
3.1 简述
同一事务下,事务在执行期间,多次读取同一数据时,能够保证读取到的数据是一致的。
3.2 事例
儿子拿着信用卡去享受生活(卡里只有10万),当他买单时(事务开启,不允许其他事务的UPDATE修改操作),收费系统事先检测到他的卡里有10万。这个时候父亲不能转出金额了。接下来收费系统就可以扣款了。
3.3 分析
可重复读解决了不可重复读的问题。说到这里,应该明白的一点就是,不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。
3.4 什么时候会出现幻读?
3.4.1 简述
一个事务读取到了另一个事务新增的数据
3.4.2 事例
儿子某一天去消费,花了8千元,然后他的父亲去查看他今天的消费记录(全表扫描,儿子事务开启),看到确实是花了8千元,就在这个时候,儿子花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当父亲打印儿子的消费记录清单时(儿子事务提交),发现花了1.8万元,似乎出现了幻觉,这就是幻读。
3.4.3 那怎么解决幻读问题?
串行化
4. 串行化(Serializable)
它是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率最低,比较耗费数据库性能,一般不推荐使用。
5. 小结
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 可能出现 | 可能出现 | 可能出现 |
读已提交 | 不会出现 | 可能出现 | 可能出现 |
可重复读 | 不会出现 | 不会出现 | 可能出现 |
串行化 | 不会出现 | 不会出现 | 不会出现 |
三、MySql默认隔离级别
1.版本说明
这里是8.0.33
2. 查询mysql全局事务隔离级别
2.1 查询命令
select @@global.transaction_isolation;
2.2 默认隔离级别如下
3. 注意事项
低版本的查询语句是select @@global.tx_isolation;
四、不同隔离级别演示
演示准备
创建sql语句准备
CREATE TABLE user (--自增IDid INT NOT NULL AUTO_INCREMENT,--姓名name VARCHAR(50) NOT NULL,--年龄age INT NOT NULL,--主键PRIMARY KEY (id)
);
数据准备
--插入一条记录,id为1,name为'张三',age为20
INSERT INTO user(id, name, age) VALUES (1, '张三', 20);
-- 插入一条记录,id为2,name为'李四',age为30
INSERT INTO user(id, name, age) VALUES (2, '李四', 30);
-- 插入一条记录,id为3,name为'王五',age为25
INSERT INTO user(id, name, age) VALUES (3, '王五', 25);
-- 插入一条记录,id为4,name为'赵六',age为28
INSERT INTO user(id, name, age) VALUES (4, '赵六', 28);
读未提交----->脏读
设置当前会话隔离级别为读未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
1、a 事务(客户端1) 修改 、未提交
2、b事务(客户端2) 读该数据
3、a事务(客户端1) 回滚
4、b事务(客户端2) 再读该数据 和 2步不一致,脏读
读已提交----->不可重复读
设置当前会话隔离级别为读已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
1、a事务(客户端1) 修改 、未提交
2、b事务(客户端2) 读该数据
3、a事务(客户端1) 提交
4、b事务(客户端2) 读该数据 , 不可重复读
可重复读----->幻读
设置当前会话隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
1、a 事务(客户端1) 修改、未提交
2、b 事务(客户端2) 读该数据
3、a 事务(客户端1) 提交
4、b 事务(客户端2) 读该数据 和之前一样可重复读
串行化
设置当前会话隔离级别为串行化
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
1、a 事务(客户端1) 读取id = 1的数据
2、b 事务(客户端2) 修改id = 1的数据,直接阻塞住
3、a 事务(客户端1) 提交
4、b 事务(客户端2) 获取行锁更新成功、串行执行
五、MVCC(Multi-Version Concurrency Control)
MVCC原理底层就是通过read view 以及undo log来实现
为什么会有MVCC
频繁加锁会导致数据库性能低下,引入了MVCC多版本控制来实现读写不阻塞,提高数据库性能,在多版本并发控制中,为了保证数据操作在多线程过程中,保证事务隔离的机制,降低锁竞争的压力,保证较高的并发量。在每开启一个事务时,会生成一个事务的版本号,被操作的数据会生成一条新的数据行(临时),但是在提交前对其他事务是不可见的,对于数据的更新(包括增删改)操作成功,会将这个版本号更新到数据的行中,事务提交成功,将新的版本号更新到此数据行中,这样保证了每个事务操作的数据,都是互不影响的,也不存在锁的问题。
MVCC在哪个隔离级别下才生效
MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。其他两个隔离级别和MVCC不兼容,因为 READ UNCOMMITTED 总是读取最新的数据行,而不是符合当前事务版本的数据行。而 SERIALIZABLE 则会对所有读取的行都加锁。
InnoDB行数据默认隐藏列
InnoDB在每行数据都增加三个隐藏字段:一个唯一行号,一个记录创建的版本号,一个记录回滚的版本号。
ReadView是什么
在我们平时执行一个事务的时候,就会生成一个ReadView,ReadView的组成结构大致如下:
read view 参数解释
1.creator_trx_id: 当前事务id
没什么可解释,就是当前事务ID
2.m_ids:所有活跃事务的事务id
当前所有未提交的事务id构成的集合
3.min_trx_id: m_ids里最小的事务id值
当前所有未提交的事务id构成的集合里的最小的哪个事务id
4.max_trx_id: 最大事务id
下一个即将创建的事务id
Read View快照的生成时机
repeatable read级别
语句级快照
read committed级别
事务级的快照
版本链比对规则
- 如果被访问版本的trx_id属性值与rv中的creator_trx_id值相同 可见
- 如果被访问版本的trx_id属性值小于rv中的min_trx_id值 可见
- 如果被访问版本的trx_id属性值大于或等于rv中的max_trx_id值 不可见
- 如果被访问版本的trx_id属性值在rv的min_trx_id和max_trx_id之间
4.1 trx_id在m_ids中 不可见
4.2 trx_id不在m_ids中 可见
一句话概括MVCC
MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。
MVCC比对练习题
在同一个事务里,针对id=1的记录,当前事务ID分别为200,99,38,15,5的行记录能查询到么,是可见的么?
200不可见、99可见、38可见、15不可见、5可见
思考题:为啥要把最小的事务id值单独作为一个字段?
时间复杂度,难道要从所有未提交的集合中去找么,依次遍历
六、Mysql解决了幻读么,当前读呢
在InnoDB引擎下的的repeatable read (可重复复读)隔离级别下,快照读MVCC影响下,已经解决了幻读的问题(因为它是读历史版本的数据),而如果是当前读(指的是 select * from table for update),则需要配合间隙锁来解决幻读的问题。
相关文章:
数据库之事务隔离级别详解
事务隔离级别详解 一、事务的四大特性(ACID)1. 原子性(atomicity):2. 一致性(consistency):3. 隔离性(isolation):4. 持久性(durability): 二、事务的四种隔离级别1. 读未提交(Read uncommitted)࿱…...
守护进程、僵尸进程、孤儿进程
守护进程、僵尸进程、孤儿进程 守护进程(Daemon Process) 定义 守护进程又称Daemon进程(精灵进程),是Linux中的后台服务进程。 它的生命周期较长,通常独立于控制终端并且周期性地执行某种任务或者等待处…...
软件设计师笔记
软件设计师笔记 计算机组成与体系结构 数据的表示、计算机结构、Flynn分类法、CISC与RISC、流水线技术、存储系统、总线系统、可靠性、校验码 1. 数据的表示 (一)进制转换 R进制转十进制使用按权展开法: 十进制转R进制使用短除法 二进制…...
4_用dockerfile制作镜像
Docker 镜像原理 思考: Docker 镜像本质是什么? Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G? Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MBÿ…...
肝一肝设计模式【四】-- 建造者模式
系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…...
从设计到产品
从设计到产品 最近上的一些课的笔记,从 0 开始设计项目的角度去看产品。 设计系统 设计系统(design system) 不是 系统设计(system design),前者更偏向于 UI/UX 设计部分,后者更偏向于实现部分。 个人觉得,前端开发与 UI/UX 设…...
《疯狂Python讲义》值传递的细节
函数的参数包含着整个程序的规范性,之前还是没有那么去注意重要的细节,读完书中函数值传递篇章,还是有所收获的。 参数有两种形式,一种是形参一种是实参,形参可以理解为实参的载体,函数当中的关键词也是描…...
【7. ROS 中的 IMU 惯性测量单元消息包】
欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳 2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空&#…...
pcie m.2固态硬盘装机后无法识别到启动盘
1、第一种情况《系统版本过低》 原因: 使用m.2固态硬盘的电脑,最好安装iwn8.1以上的系统,因为win7系统及其win xp系统 没有自带NVME驱动。 搞定办法: 比较简单的方式就是直接开运行快启动u盘启动盘制作工具将系统升级到win10系…...
Java Web应用开发 ——第四章:JavaBean技术测验
一.单项选择题(共13题,55.9分) 1 在 JSP 中调用 JavaBean 时不会用到的标记是:( ) A、 < jsp:javabean> B、 < jsp:useBean> C、 < jsp:setProperty> D、 < jsp:getProperty> 正确答案&a…...
CTF权威指南 笔记 -第二章二进制文件- 2.4 -动态链接
目录 静态文件的缺点 动态链接 位置无关代码 延迟绑定 _dl_runtime_reslove 函数定义 深入审视 静态文件的缺点 随着可执行文件的增加 静态链接带来的浪费空间问题就会愈发严重 如果大部分可执行文件都需要glibc 那么在链接的时候就需要把 libc.a链接进去 如果一个libc…...
C++:计算机操作系统:多线程:高并发中的线程
高并发中的线程 一切要从CPU说起PC 程序计数器从CPU到操作系统从进程到线程 从这篇开始,我将会开启高性能,高并发系列,本篇是给系列的开篇,主要关注 多线程以及线程池。 一切要从CPU说起 你可能会有疑问,讲多线程为何…...
大数据Doris(十一):Aggregate 数据模型
文章目录 Aggregate 数据模型 一、导入数据聚合 二、保留明细数据...
osg::Drawable类通过setDrawCallback函数设置回调函数的说明
osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生,并重写drawImplementation函数,以实现自己特定的需求。这个回调函数在每次帧事件中都会被调用(如:在帧的…...
Python基础合集 练习17(类与对象)
class Dog: pass papiDog() print(papi) print(type(papi)) 构建方法 创建类过后可以定义一个特殊的方法。在python中构建方法是__init__(),init()必须包含一个self参数 class pig(): #def__init__(self) -> None: print(‘你好’) pipgpig() 属性和方法 cl…...
再多猜一次就爆炸(小黑子误入)
目录 猜数字游戏 游戏设计思路 1.电脑随机生成一个数 2.猜数字 3.输入我是ikun,泰裤辣! 否则电脑将在一分钟后关机 游戏运行效果 源码 代码分析 代码实现关键语句 strcmp() rand()与srand() 时间戳time() 寄语 猜数字游戏 游戏设计思路 1.电脑随机生…...
图像超分辨率简单介绍
文章目录 图像超分辨率简单介绍什么是图像超分辨率?常见的图像超分辨率算法插值算法基于边缘的图像重建算法局部线性嵌入(LLE)拉普拉斯正则化 基于深度学习的超分辨率算法超分辨率CNN超分辨率GAN 步骤1. 收集数据2. 选择算法3. 训练模型4. 测…...
【Liunx】进程的程序替换——自定义编写极简版shell
目录 进程程序替换[1~5]1.程序替换的接口(加载器)2.什么是程序替换?3.进程替换的原理4.引入多进程5.系列程序替换接口的详细解析(重点!) 自定义编写一个极简版shell[6~8]6.完成命令行提示符7.获取输入的命令…...
c++标准模板(STL)(std::array)(三)
定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起 std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组…...
c#笔记-创建一个项目
创建一个项目 创建控制台程序 在你安装完成Visual Studio后打开它,你会的到一个启动窗口 点击创建新项目,选择右上角c#的没有Framework的控制台应用。 项目名称,位置自己随意。 目标框架选择NET7.0。 项目创建完成后应该你的界面应该类似…...
Photoshop如何使用图像调色之实例演示?
文章目录 0.引言1.将一张偏冷调的图像调整成暖调2.将图像调整成不同季节色彩倾向3.变换花朵的颜色4.创建人像轮廓风景5.修饰蓝天白云6.调换花草颜色 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其配…...
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。 问题背景: 在IDEA中,使用Git提交代码到远程仓库时,结果弹出一个警告窗口 问题原因: …...
ArduPilot之开源代码LibrarySketches设计
ArduPilot之开源代码Library&Sketches设计 1. 简介1.1 Core libraries1.2 Sensor libraries1.3 Other libraries 2. 源由3. Library Sketches设计3.1 设计框架3.2 Example Sketches3.3 AP_Common Sketches3.3.1 配置sitl环境3.3.2 编译AP_Common3.3.3 运行AP_Common3.3.4 代…...
第一章:概述
1,因特网概述 1.网络、互联网和英特网 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是“网络的网络…...
MySQL --- DDL图形化工具表结构操作
一. 图形化工具 1. 介绍 前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。大家在练习的时候应该也感受到了,在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点:…...
归一化处理(2023寒假每日一题 14)
在机器学习中,对数据进行归一化处理是一种常用的技术。 将数据从各种各样分布调整为平均值为 0 0 0、方差为 1 1 1 的标准分布,在很多情况下都可以有效地加速模型的训练。 这里假定需要处理的数据为 n n n 个整数 a 1 , a 2 , ⋯ , a n a_1,a_2,⋯…...
无公网IP,外网远程连接MySQL数据库
哈喽~大家好,这篇来看看无公网IP,外网远程连接MySQL数据库。 文章目录 前言1. 检查mysql安装状态2. 安装配置cpolar内网穿透3. 创建tcp隧道,映射3306端口4. 公网远程连接4.1 图形化界面4.2 使用命令行远程连接 5. 配置固定tcp端口地址5.1 保留…...
OJ刷题 第十四篇(递归较多)
23204 - 进制转换 时间限制 : 1 秒 内存限制 : 128 MB 将一个10进制数x(1 < x < 100,000,000)转换成m进制数(2< m < 16) 。分别用 ABCDEF表示10以上的数字。 输入 x m (1 < x < 100,000,000, 2< m < 16) 输出 m进制数 样例 输入 31 16 输出 1F 答…...
FileZilla读取目录列表失败(vsftpd被动模式passive mode部署不正确)
文章目录 现象问题原因解决方法临时解决(将默认连接方式改成主动模式)从根本解决(正确部署vsftpd的被动模式) 现象 用FileZilla快速连接vsftpd服务器时,提示读取目录列表失败 问题原因 是我vsftpd服务端的被动模式没…...
【Java面试八股文】数据库篇
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 请你说说MySQL索引,以及它们的好处和坏处 请你说说MySQL的索引是什么结构,为什么不用哈希表 请你说说数据库索引的底…...
大专学历怎么自考/建站优化
钢板桩的拔除基坑回填后,要拔除钢板桩,以便重复使用。拔除钢板桩前,应仔细研究拔桩方法顺序和拔桩时间及土孔处理。否则,由于拔桩的振动影响,以及拔桩带土过多会引起地面沉降和移位,会给已施工的地下结构带…...
网站制作百度/营销型网站的公司
跟着官网的教程学lvgl,在画圆弧的时候发现不知道怎么设置圆弧的粗细。 官网教程没用到,查百度半天也没找着。最后翻函数手册发现原来 lv_style_set_arc_width() 这个函数就是用来设置圆弧的粗细的。(我以为是用来设置宽度的) LV…...
互联业务登录页 网站/百度网址大全设为主页
空姐梅梅入住酒店,意外发现房间内装有针孔摄像头。梅梅认为自己的个人隐私被严重侵犯,要求酒店担责,但酒店却称并不知情,而且摄像头早已陈旧损坏,并没有实际摄录功能。近日,法院经审理认定酒店方侵权&#…...
苹果手机如何做微电影网站/游戏优化大师下载安装
vxe-table官网...
移动互联网站开发与维护/网络营销企业网站优化
工作时长两年的算法工程师来答一波!学习方向主要分为 4 个部分:数学基础、编程能力、算法基础、实战。1、数学基础在机器学习算法中,涉及到最为重要的数学基本知识有两个:线性代数和概率论。这两也是大学的必修课了,如…...
浙江网站建设电话/石家庄网站建设就找
最近有人问说,自我管理需要哪些工具。问题一出,群里一片热火朝天的,基本上还是在讨论Omnifocus和Doit.im哪个好、为知笔记和印象笔记哪个好。 我认为,一个问题的解决,要看逻辑、看思路,而不是比谁的声音响、…...