我出一道面试题,看看你能拿 3k 还是 30k!

news/2024/9/23 9:37:07/文章来源:https://www.cnblogs.com/yupi/p/18331905

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中级(15k)还是高级(30k)!

请听题:

 

题目

MySQL 数据库中的 count(1)、count(*)、count(字段)有什么区别?

 

请回答

1、它们在功能上有区别么?

A:有区别

B:没区别

 

答案

有区别。虽然在 MySQL 中,count(*)、count(1) 和 count(字段名) 都是用来 统计行数的聚合函数

但 count(*) 和 count(1) 会统计表中所有行的数量,包括 null 值(不会忽略任何一行数据);而 count(字段名) 只会统计指定字段不为 null 的行数。

恭喜答对的朋友,3k 的 offer 到手啦!

 

2、count(*) 和 count(1) 谁更快?

A:count(*)

B:count(1)

C:没区别

 

答案

效率一致,没区别。

关于 count(1) 和 count(*) 谁更快的问题,网上众说纷纭,如果背了不专业的八股文,可能答案就选错咯~

有点经验的程序员,在遇到不确定的问题时,当然要去源头亲自求证,得去看官网怎么说。如图:

官网表示 There is no performance difference ,即二者没有性能上的区别!

对于 count(字段) 的查询就是全表扫描,正常情况下它还需要判断字段是否是 null 值,因此理论上会比 count(1) 和 count(*) 慢。

但是如果字段不为 null,例如是主键或具有非空约束,那么理论上性能也差不多。而且本质上它们的统计功能不一样,在需要统计 null 的时候,只能用 count(1) 和 count(*),不需要统计 null 的时候只能用 count(字段),所以也不用太纠结性能问题。

恭喜答对的朋友,10k 的 offer 到手啦!

 

3、用 count(*) 统计有千万条记录的表的总数据量,快不快?

A:快

B:慢

C:其他

 

答案

这是一道简单的场景题,有经验的程序员,本能地会想到 具体情况具体分析

MySQL 有 2 个主流的存储引擎 MyISAM 和 InnoDB。

在 MyISAM 引擎中,有一个内部计数器来维护表的记录数,查询时可以直接返回表的行数,而无需扫描整个表,所以 count(*) 非常快。

但是在 InnoDB 引擎中无法维护记录总数,需要扫描整个表,所以表越大、记录越多,count(*) 就越慢。

为什么 InnoDB 引擎不维护记录总数呢?因为它支持行锁,会有很多并发修改表数据的操作,难以维护总数,还会带来额外的性能开销;而 MyISAM 只有表锁,对单个表的修改串行执行,所以能维护总数。所以要针对业务场景选择不同的 MySQL 引擎。

恭喜答对的朋友,15k 的 offer 到手啦!

 

4、InnoDB 引擎中,count(id) 和 count(二级索引) 哪个成本更低?

A:count(id)

B:count(二级索引)

C:其他

 

答案

count(二级索引) 通常成本更低。是不是没想到?

这是对上一问的进一步追问,虽然 InnoDB 引擎中 count(*) 统计总数性能不高,但它也针对这个操作进行了一定的优化。

id 通常是主键索引,在 InnoDB 中,主键索引是聚簇索引,它存储了实际的数据行。执行 count 时,InnoDB 需要遍历整个聚簇索引来统计行数。

二级索引是指存储了索引列和主键列的指针,而不包含实际的数据行。因此,二级索引相对来说更小。执行 count 时,InnoDB 只需要遍历这个较小的二级索引,而不是整个聚簇索引,需要读取的数据页更少,所以成本更低。

当然,理论归理论,具体情况具体分析,具体的性能差异取决于索引的大小和表的结构,可以用 explain 语句查看查询计划和成本。

恭喜答对的朋友,30k 的 offer 到手啦!

哦不对,恭喜摸到了 30k 的门槛,继续努力,说不定下一个技术专家就是你~

最后

通过这道题目可以发现,其实面试的时候,很多题目都是可以深挖的,挖的越深,越能体现出候选人的水平。

有同学表示:自己面试题目都答上来了,为啥还是通过不了?

别灰心,可能只是差点儿运气,同场面试有同学比你答的更深、表达更流畅罢了。

不管怎么样,大家在准备面试八股文的时候,有时间的话,多思考一点、再深入一点,自己也能学到很多东西。欢迎多到我们的 面试刷题神器 - 面试鸭 上看看。

你答对了几问呢?欢迎大家在评论区留言~

 

更多

💻 编程学习交流:编程导航

📃 简历快速制作:老鱼简历

✏️ 面试刷题神器:面试鸭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773968.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维管理平台化:运维体系为什么要基于平台化建设

本文来自腾讯蓝鲸智云社区用户:CanWay摘要:笔者根据自身的技术和行业理解,分享嘉为蓝鲸数据与智能运维场景实践。 涉及关键字:一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。 本文作者:嘉为蓝鲸运维产品及解决方案负责人 张敏、嘉为蓝鲸平…

flask定制登入过程 显示中文登录信息

默认情况下,当未登录的用户尝试访问一个 login_required 装饰的视图,Flask-Login 会闪现一条消息并且重定向到登录视图。(如果未设置登录视图,它将会以 401 错误退出。) 登录视图的名称可以设置成 LoginManager.login_view。例如:login_manager.login_view = "users.lo…

BUUCTF GWCTF2019 re3

挺有意思的一题,记录一下 主要思路为smc解密 + AES算法 扔进ida后找到主函数:发现函数地址异或,推测为smc,先按d转化为数据,然后直接使用python脚本解密: from ida_bytes import *ea = 0x402219 for i in range(0,224):patch_bytes(ea + i, bytes(ea + i) ^ 0x99)选中按p…

DedeCMS图片水印设置

入口: 系统 > 系统设置 > 图片水印设置扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复…

帝国CMS网站Fatal error: Call to undefined function sys_ShowTextPage…

Fatal error: Call to undefined function sys_ShowTextPage…解答:1、请确认你的程序是从官方下载2、提示这个错误是因为你的包少了内容,重新从官方下载e/class/t_functions.php到本地扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通…

帝国CMS网站刷新所有信息内容页面时提示“Table *.phome_ecms_news_data_ doesnt exist”

刷新所有信息内容页面时提示“Table *.phome_ecms_news_data_ doesnt exist”答:原因是数据本身有问题,信息索引表phome_ecms_表名_index有不存在ID的记录。解决办法:进数据库删除索引表中不存在的ID记录即可解决。扫码添加技术【解决问题】专注中小企业网站建设、网站安全1…

adobe acrobat DC如何彻底解决自动更新的问题

有客户反应已经按照adobe acrobat DC下载安装界面的教程删除了升级文件,但是还是会时不时的跳出更新,只能重新安装,有没有其他的更好的方法呢? 解决方法如下: 一、首先删除/Library/Application Support/Adobe/ARMDC/Application路径下的update文件,具体方法如下: 1.点击…

我用Awesome-Graphs看论文:解读PowerGraph

这次向大家分享发表在OSDI 2012上的一篇经典图计算框架论文PowerGraph,旨在通过点切分解决图数据幂律分布导致的计算倾斜问题,并提出了区别于Pregels VC(以点为中心)的GAS(以边为中心)计算框架。PowerGraph论文:《PowerGraph: Distributed Graph-Parallel Computation o…

时区

我国地跨五个区,但是为了统一国家事务,将北京东八区所在时间作为全国统一时间。注:中央经线是每个时区中间的经度的位置。 目前前后端分离对时区的方案,后端服务器不管接收到哪个时区的前端请求,都统一以本时区为主。然后各个时区的前端程序在读取后端时间时,根据自己所在…

[USACO1.5] 八皇后 Checker Challenge 题解

[USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列 \(2\ 4\ 6\ 1\ 3\ 5\) 来描述,第 \(i\) …

HTTP 缓存

避免发送 HTTP 请求的方法就是通过缓存技术,HTTP 设计者早在之前就考虑到了这点,因此 HTTP 协议的头部有不少是针对缓存的字段。HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。 强制缓存 只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的…

记一次WPS目录多一级,更新目录之后多出一级没出现在目录中的解决方案

背景:拿着别人写的文章做模板,别人只有三级目录,我多了一级,即我有四级目录 文章写完之后,更新目录,第四级标题没有展示 解决办法:选择引用,目录,自定义目录然后在显示级别处增加一个(点击向上箭头)