首页 > 其他分享 >背点八股

背点八股

时间:2024-08-13 23:28:25浏览次数:15  
标签:八股 -- 自增 ID 分片 背点 主键 时钟

1、在Mysql的分布式环境中,为什么不推荐使用自增主键?
--自增主键在分布式环境下有严重问题,例如有一张商品表:
有3个表分片,分别是表分片1(0-1亿),表分片2(1-2亿),表分片3(2-3亿)

自增主键必须连续,只能采用‘范围分片’形式,会产生‘尾部热点’效应
--当有表A、B、C三个数据库时,存储数据时都是通过自增来进行存储的,那么当A库没有存满时,那么B库和C库就不会存储数据,那么某一个时间段,数据库的压力是集中在其中一个数据库的,并没有做到负载均衡
--当我们将数据同步到其他库的时候,那么由于采用了自增ID,在进行插入的过程中,入非常损耗性能,因为在同步过程中是加锁来进行实现的
--每个库都维护一份自己的自增序列,那么当进行跨库查询的时候,就会产生ID重合的冲突。

2、UUID可以用来做主键吗?会存在什么问题?
--UUID是不能用来作为主键的,因为UUID是无序的,作为主键会涉及大量的索引重排

3、雪花算法可以用做主键吗?原理是什么?有什么优缺点?如何解决缺点?
--可以用来作为主键
是由符号位+时间戳+工作进程+序列号位的自增组成
优点:1、不会重复
2、有序 不会造成空间浪费
3、生成速度快
缺点:1、依赖机器时钟,如果机器时钟回拨,会导致重复ID生成
2、在单机上是递增的但是由于涉及到分布式环境,每个机器的时钟不可能完全同步,有时会出现不是全部递增的
--解决:
时钟回拨问题的解决思路:
1、直接抛出异常
if (currentTimestamp < lastTimestamp) { throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - currentTimestamp)); }
2、使用Map<machine_id,max_id>保存过去一段时间内每一台机器在当前这一毫秒产生的ID的最大值,当某台机器发生时钟回拨,直接在这台机器对应的max_id的基础上继续自增生成ID
3、将原本10位机器码拆分成3位时钟序列及机器码,发生变化,那么这时将时钟序列新增一位,重新定义整个雪花id,同时为了避免实例重启引用时间序列丢失,因此时钟序列存到DB或者缓存中
// 处理时间回拨 if (currentTimestamp < lastTimestamp) { clockSequence = (clockSequence + 1) & CLOCK_SEQUENCE_MASK; }

标签:八股,--,自增,ID,分片,背点,主键,时钟
From: https://www.cnblogs.com/Proxy009/p/18357939

相关文章

  • “八股文”在实际工作中是助力、阻力还是空谈?
    “八股文”在实际工作中是助力、阻力还是空谈?作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考什么?是工作能力、工作经验还是背题能力?还有程序员吐......
  • Java最新面试题2024,Java八股文2024
    一.基础篇1.Java语言特点1、简单易学、有丰富的类库2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)4、可靠安全5、支持多线程2.面向对象和面向过程的区别面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步......
  • 一些八股:1.fetch 的理解。2.let、const、var
    一、说说你对Fetch的理解,它有哪些优点和不足?FetchAPI是现代JavaScript中用于进行网络请求的接口,旨在替代传统的XMLHttpRequest。它提供了一种更简单、更灵活的方法来获取资源和与服务器进行交互。下面,我将详细介绍Fetch的优点和不足。Fetch的优点:语法简洁直观:Fetch......
  • 2024最全 Java 面试八股文(程序员必备)
     一、Java基础篇1.接口和抽象类的区别相似点:(1)接口和抽象类都不能被实例化(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法不同点:(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,(2)抽象类可以有构造方法,而接口没有(3)抽象类中的成员变......
  • 【“八股文”面试现象的利弊】深化教育改革,培养未来IT精英
    深化教育改革,培养未来IT精英https://blog.csdn.net/weixin_42661676/article/details/140818713在探讨了“八股文”面试现象的利弊之后,我们不得不将目光放得更远,思考如何通过教育改革来培养更符合未来IT行业需求的精英人才。这不仅是对当前面试制度的一种反思,更是对整个教育......
  • 程序员面试“八股文”:助力成长还是应试枷锁?
    程序员面试“八股文”:助力成长还是应试枷锁?引言在当今快速迭代的IT行业中,程序员面试作为选拔人才的关键环节,其内容与形式一直备受关注。其中,“八股文”式面试题,作为一类标准化、模式化的问题集合,已成为众多企业面试程序员的标配。然而,围绕其实际效果与价值的争议也日益激烈......
  • 八股文无用?也许是计算机大学生的重要人生指南!
        大家所说的"八股文"其实指的是那些固定、标准化的面试问题和答案,通常涉及特定的知识点和技术概念。    博主本人也是一枚大学生,个人也记背过相关的八股文,比如计算机网络里的TCP和UDP的区别、TCP三次握手和四次挥手的具体过程等等,实际上许多八股文的问题......
  • 6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
    目录冒泡排序算法的平均时间复杂度和最坏时间复杂度分别是多少?在什么情况下使用冒泡排序较为合适?选择排序算法是稳定的排序算法吗?为什么?插入排序在近乎有序的数组中表现如何?为什么?快速排序的基本思想是什么?它在最坏情况下的时间复杂度是多少?归并排序的空间复杂度是多少?如......
  • 八股文”在实际工作中是助力、阻力还是空谈?
    “八股文”在实际工作中是助力、阻力还是空谈?作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考什么?是工作能力、工作经验还是背题能力?还有程序员吐......
  • 程序员如何准备既符合“八股文“又展现实力的面试?
    在当今竞争激烈的IT行业中,面试已成为程序员求职路上的一道重要关卡。而在这个过程中,"八股文"这个词频频出现,引发了业内人士的热议。本文将深入探讨"八股文"在程序员面试中的角色,以及它对实际工作的影响。目录1.程序员面试八股文的利弊分析什么是"八股文"?一个真......