概述

毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。

实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。

目录

  • 1.Mysql
  • 2.CHAR 与 VARCHAR 的区别?
  • 3.能说下myisam 和 innodb的区别吗?
  • 4.你能说下事务的基本特性和隔离级别吗?
  • 5.并发问题 – 脏读、不可重复读、幻读?
  • 6.事务的隔离级别?
  • 7.说说自增主键、UUID?
  • 8.mysql 的约束分类?
  • 9.drop、delete 与 truncate 的区别:
  • 10.隐式事务、显式事务?
  • 11.存储过程
  • 12.你们数据量级多大?分库分表怎么做的?
  • 13.那分表后的ID怎么保证唯一性的呢?
  • 14.那分表后的ID怎么保证唯一性的呢?
  • 15.分表后非sharding_key的查询怎么处理呢?
  • 16.说说mysql主从同步怎么做的吧?
  • 总结

1.Mysql 中有哪几种锁?

(1)表级锁:开销小,加锁快。不会出现死锁,锁定粒度大,发生锁冲突的概率高,并发度低。

(2)行级锁:开销大,加锁慢。会出现死锁,锁定粒度小,发生锁冲突的概率低,并发度高。

(3)页面锁:开销时间、加锁时间、锁定粒度在 表级锁 与 行级锁 之间,会出现死锁,并发度中等。

2.CHAR 与 VARCHAR 的区别?

(1)CHAR 长度不可变,范围 1~255。若存储长度未达到定义的长度,则以 空格 填充。存取速度快,但容易浪费空间。

(2)VARCHAR 长度可变,范围 1~65535。若存储长度未达到定义的长度,则存实际长度数据。存取速度稍慢,但节约空间。

3.能说下myisam 和 innodb的区别吗?

myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。

innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。

4.你能说下事务的基本特性和隔离级别吗?

事务:数据库中,对数据的一系列操作可以看成一个整体,称为事务。这个整体要么全部执行、要么全部不执行。
ACID 属性的存在确保了 事务的可靠。
(1)Actomicity(原子性):原子性要求 事务中的操作要么全部完成,要么回退成之前未操作的状态。即事务中某个操作失败后,会相当于什么都没发生,不会出现改了部分数据的情况。

(2)Consistency(一致性):一致性要求 事务执行前后,数据库的状态一致,即从一个一致性状态切换到另一个一致性的状态。

(3)Isolation(隔离性):隔离性要求 并发的事务相互隔离、不可见。即一个事务看不见另一个事务内部的操作以及操作的数据。

(4)Durability(持久性):持久性要求 事务对数据库数据的修改是永久的。即数据一旦修改提交后,其状态将永久不变。

5.并发问题 – 脏读、不可重复读、幻读?

对于同时运行的多个事务,若这些事务访问同一数据时,没有采用必要的隔离机制,则会造成如下的并发问题。
(1)脏读:脏读 指的是当一个事务正在访问某数据,并对这个数据进行的修改,且这条数据还未提交到数据库中,此时若另一个事务也访问到这条数据,获取到的是这条被修改的数据,此时得到的数据不对,即脏读。
比如:tom 年龄为 22,事务 A 修改 tom 年龄为 30,此时还未提交到数据库,此时事务 B 获取 tom 年龄,得到的是 30,事务 A 回滚数据,数据库的数据依旧是 22,但事务 B 拿到的数据是 30,这就是脏读,读错了数据。

(2)不可重复读:指一个事务,多次读取同一条数据,在这个事务还未结束时,另一个事务也访问该数据并对其修改,那么可能造成事务多次读取的数据不一致,即不可重复读。
比如:tom 年龄为 22,事务 A 读取 tom 年龄为 22,事务未结束。此时事务 B 修改 tom 年龄为 30,并提交到数据库,当事务 A 再次读取 tom 年龄为 30,事务 A 两次读取的数据不一致,即不可重复读。

(3)幻读:指事务并不是独立执行时产生的现象。一个事务修改某个表,涉及表的所有行,同时另一个事务也修改表,比如增加或删除一条数据。此时第一个事务发现多出或者少了一条数据。这种情况就是幻读。
比如:事务 A 查询当前表的数据总数为 11, 此时事务 B 向表中插入一条数据,事务 A 再次查询当前表数据总数为 12,即幻读。

注:
    不可重复读、幻读理解起来有些类似。
    不可重复读是对一条数据操作,重点在于修改某条数据。
    幻读是对表进行操作,重点在于新增或删除某条数据。

6.事务的隔离级别?

数据库系统必须具有隔离并发运行的事务的能力,使各事务间不会相互影响,避免并发问题。
  隔离级别:指的是一个事务与其他事务的隔离程度。隔离级别越高,则并发能力越弱。
(1)Read Uncommitted(读未提交):即读取到 未提交的内容。
  一般不使用。此隔离级别下,查询不会加锁,即可能存在两个事务操作同一个表的情况。可能会导致 “脏读”、“不可重复读”、“幻读”。

(2)Read Committed(读提交):即只能读取到 已提交的内容。
  常用(oracle、SQL Server 默认隔离级别)。此隔离级别下,查询采用 快照读 的机制,即不会读取到未提交的数据,从而避免 “脏读”,但是仍可能导致 “不可重复读”、“幻读”。

(3)Repeatable Read(可重复读)
  常用(mysql 默认隔离级别)。此隔离级别下,查询采用 快照读 的机制,且事务启动后,当前数据不能被修改,从而可以避免 “不可重复读”,但是仍可能导致 “幻读”(新增或删除某条数据)。

(4)Serializable(串行化)
  一般不使用。此隔离级别下,事务会串行化执行(排队执行),执行效率差、开销大。可以避免 “脏读”、“不可重复读”、“幻读“。

【举例:】
select @@transaction_isolation; -- 用于查看当前数据库的隔离级别(8.0版本)set session transaction isolation level read committed; --用于设置隔离级别为 read committed

7.说说自增主键、UUID?

(1)自增主键,数据在物理结构上是顺序存储,性能好,占用空间小。可以是 int 和 bigint 类型。int 4字节,bigint 8 字节,项目中理论不应出现 自增主键达到最大值的情况,因为数据太大,效率会大大降低,当出现一定的数据量后,应进行分库分表操作。

(2)UUID,数据在物理结构上是随机存储,性能较差,占用空间大。唯一ID,绝不冲突。

8.mysql 的约束分类?

(1)约束的作用:是一种限制,用于限制表中的数据,为了保证数据的准确性以及可靠性。
(2)约束分类:
  NOT NULL,非空,用于保证某个字段不为空。支持列级约束。
  DEFAULT,默认,用于保证某个字段具有默认值。支持列级约束。
  PRIMARY KEY,主键,用于保证某个字段具有唯一性且非空。支持列级约束以及表级约束。
  UNIQUE,唯一,用于保证某个字段具有唯一性。支持列级约束以及表级约束。
  FORGIEN KEY,外键,用于限制两个表间的关系。支持表级约束。
注:
  列级约束:指的是定义列的同时指定的约束。
  表级约束:指的是列定义之后指定的约束。

外键常用于一对多的关系。即表的某条数据,对应另外一张表的多条数据。
    将 “一” 的一方称为 :主表。将 “多” 的一方称为 :从表。
    通常将 外键 置于从表上,即 从表上增加一列作为外键,并依赖于主表的某列。

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友,点击这里即可免费获取

B)**

[外链图片转存中…(img-wpdPsJEA-1622102260796)]

[外链图片转存中…(img-r99q3GIr-1622102260799)]

[外链图片转存中…(img-bqh3dwHP-1622102260801)]

大牛手把手带你!mysql视频教程百度网盘相关推荐

  1. springboot入门视频教程百度网盘下载

    springboot入门视频教程百度网盘下载地址: 链接:https://pan.baidu.com/s/1EmyWToHaNLSoBFIqgPW0dg 本套视频教程是spingboot视频教程,总共 ...

  2. 手把手教你轻松下载百度网盘超大文件

    前言 玩过百度网盘的都应该清楚它的强大,小编就是靠着百度网盘那强大的功能以及变态的存储空间才获得许多具有纪念价值的东西,比如某些Hacker资料,你懂的. 但是小编一直以来都有一个心结未解开,那就是为 ...

  3. 手把手教如何搭建一个百度网盘目录站点【保姆级】

    如何搭建一个百度网盘目录站点 最近一研究虚拟货源项目,由于资料太多,不得已把硬盘扩容到了300T,但是扩容后问题也出来了,问题1:由于是通过技术手段扩容,百度盘已经爆满,已经无法存储新的资料. 问题2 ...

  4. 工作流 activity 视频教程 + redis 视频教程 百度网盘分享地址

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 云盘下载都没有密码,直接下载,解压有密码:chongxiangmengxiangjiaoyu, 解压 ...

  5. python网盘系统_Python最新全套视频教程百度网盘资源

    idea插件市场列表无法显示 当我们遇到idea插件列表难以显示时,我们必须自动添加软件资源库地址. 首先,我们点击这里: 添加一项资源库地址: 恒宝乐园 6分钟前 Spring Boot(一):入门 ...

  6. python全套教程百度网盘-Python最新全套视频教程百度网盘资源

    idea插件市场列表无法显示 当我们遇到idea插件列表难以显示时,我们必须自动添加软件资源库地址. 首先,我们点击这里: 添加一项资源库地址: 恒宝乐园 6分钟前 Spring Boot(一):入门 ...

  7. Java视频教程百度网盘,Java精选面试Spring全家桶

    Spring 10C原理 Spring APO原理 Spring MVC原理 Spring Boot原理 JPA原理 Mybatis缓存 Tomcat架构 Spring面试题 一**.基本概念面试题集 ...

  8. Element-UI + Vue,孙鑫Java视频教程百度网盘

    },}, } []( )分页功能的实现==========================================================================mysql 分 ...

  9. python视频教程百度云-Python最新全套视频教程百度网盘资源

    idea插件市场列表无法显示 当我们遇到idea插件列表难以显示时,我们必须自动添加软件资源库地址. 首先,我们点击这里: 添加一项资源库地址: 恒宝乐园 6分钟前 Spring Boot(一):入门 ...

  10. access视频教程百度网盘_Office 2010高效办公从入门到精通(光盘)视频教程

    Chapter 01 初识Office 2010 Chapter 02 使用Word 快速制作纯文档 Chapter 03 巧用图片.图形等对象丰富文档 Chapter 04 文档的高效处理 Chap ...

最新文章

  1. clone database and rename
  2. flask sqlalchemy 单表查询
  3. 计算机网络——链路层之流量控制和可靠传输机制
  4. vue用html做报表,Vue配置生成无限分割的表格,可快速实现任意复杂报表
  5. 【更新】Essential Studio for Xamarin更新至2018 v4(二)
  6. 五子棋小游戏(C++)
  7. HDFS 纠删码 EC
  8. 初识马尔科夫链,原来是这样的
  9. Axure绘制开关按钮
  10. Apache Tomcat 文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)
  11. php转jsp,阿里西西Html多功能代码转换器(html转js/jsp/php工具)
  12. 抖音壁纸小程序源码最新版,支持达人入驻和多端发布
  13. ArGIS Engine专题(6)之利用GP水文分析工具实现基于DEM的山脊线提取
  14. 计算机动漫与游戏制作报告,计算机动漫与游戏制作专业课程体系建设总结报告.PDF...
  15. 无线发射芯片A7105在RF短距离通信的应用
  16. aso优化重要ASO优化技巧大全,ASO标题优化技巧:实战案例解析
  17. 根据Email地址跳转到邮箱登录界面
  18. [分布式系统]全面介绍分布式系统
  19. Tuxera NTFS for Mac2020注册机
  20. 如何定时刷新一个View的内容呢? 酷课堂iOS交流群问答(201901期)

热门文章

  1. Linux终端配色和Xshell命令行配色
  2. 微分几何笔记(8) —— 切向量,切空间
  3. 实对称矩阵一定可以对角化
  4. mic in、line inline out、speaker out、headphone out 区别
  5. 如何查看虚拟机ip地址
  6. python中标点符号大全及名字_常见的标点符号大全及名字
  7. Unity Shader学习记录第一章
  8. Ubuntu 20.04 LTS 修改IP地址
  9. 第三方登录微信登录流程
  10. 如何学习PLC编程,有没有什么好的方法?