面试必考题-数据库自增主键,自增主键用完

  • 时间:2022-03-15 15:10 作者:城边编程_认真写技术 来源: 阅读:689
  • 扫一扫,手机访问
摘要:无论是做PHP开发还是做JAVA开发甚至前台开发,只需是开发,面试的时候都必考数据库。为什么前台也要考数据库?由于数据库课程是计算机的基础课程,同样的基础课程还有操作系统,数据结构。只需写代码就永远跳不出这三门基础课。面试官和面试者都知道要考数据库,都会去刷题,数据库的知识点其实很少,一天就能刷完。

无论是做PHP开发还是做JAVA开发甚至前台开发,只需是开发,面试的时候都必考数据库。为什么前台也要考数据库?由于数据库课程是计算机的基础课程,同样的基础课程还有操作系统,数据结构。只需写代码就永远跳不出这三门基础课。

面试官和面试者都知道要考数据库,都会去刷题,数据库的知识点其实很少,一天就能刷完。长久以往面试流程会变成背书流程,面试官题目没说完,答题者已经了然于心,这样根本选不出合适的CRUD boy。很多大厂意识到了这点,所以一直在改革,比方宇宙大厂字节跳动就需要手写算法(红黑树是必背题)。怎样改呢?可以参考高考,拿高考数学来说,每年考察的知识点都差不多,这就会导致考满分的人逐年递增(优秀的人和更优秀的人无法拉开差距)。和机器学习很像,样本量越大,考生越不需要靠「运气」做出「好」的结果。所以出题人要想办法考察答题人的解题思路。

wxchat.pngwxchat (1).pngwxchat (2).png

面试谈到数据库一定会谈到数据库引擎,不同索引的数据结构实现,SQL优化等。假如面试官直接问这几个问题,面试者一定对答如流。由于网上的面试宝典早已把这些问题分析的入木三分,配上少量形象的例子,比读修仙小说还精彩。但优秀的面试官从不按套路出牌。

正常来说程序员是不会关心自增ID用完的,阿里的编程规范广为流传,里面严格要求自增ID为unsigned bigint,程序员和DBA都默认遵守这个规范。unsigned bigint究竟有多大?The unsigned range is 0 to 18446744073709551615,想把这个值用完太难了。

那面试官究竟想理解什么?

一. 自增ID用完了会报什么错?

具体报错信息是什么?面试官自己都不肯定知道。不同的数据库底层实现不一样,不同版本也有差异。我测试不同版本的MySQL就有两个答案

1. Duplicate entry '*****' for key 'PRIMARY'2. SQL Error (167): Out of range value for column 'id'.

大家都知道会报错,但是没人能一定具体报错信息是什么。可能是数据越界,也可能是主键冲突,那就没有了标准答案,最后看谁的知识储备更多。一般来说一面面试官的技术不肯定比面试者强。

二. 自增ID为什么用不完?

第一个问题是为了引出第二个问题。由于自增主键通常会设置为unsigned bigint,最大值为18446744073709551615,假设我们的项目需要每秒记录100万条数据,这个自增ID使用100万年后都用不完。全球也没几家公司能达到这个量级。

假如面试官问200万年后不会用完吗?这是个好问题。

参照当前的数据库软件和服务器硬件来说,MySQL单机单表的解决能力是千万级别。意思是当单表数据达到1千万时,MySQL性能就会开始下降,需要着手优化,这里的瓶颈主要是查询耗时。我们可以通过分区再撑一段时间,当数据量到10亿时,基本到了MySQL的极限,不分表分库的话,业务难以持续。假如分表分库的话自增ID很难保证唯一性,这时候必需弃用自增ID,采用其余算法。最后从业务的角度来讲自增ID不可能用完,单表支撑不了那么大的数据量。

三. 自增ID如何优化

当数据量达到千万时,数据库的单表性能会开始下降。这时为了优化性能,同时保证数据有唯一ID,又要考察另一个知识点了,这里不开展讲,大家看下这篇文章。

最后

感谢有朋友监督我升级文章,明天会再发一篇,分享我近期挖到的一个CSS漏洞,特别有意思,可以劫持很多网站的流量。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部