我出一道面试题,看看你能拿 3k 还是 30k!
大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 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 的门槛,继续努力,说不定下一个技术专家就是你~
最后
通过这道题目可以发现,其实面试的时候,很多题目都是可以深挖的,挖的越深,越能体现出候选人的水平。
有同学表示:自己面试题目都答上来了,为啥还是通过不了?
别灰心,可能只是差点儿运气,同场面试有同学比你答的更深、表达更流畅罢了。
不管怎么样,大家在准备面试八股文的时候,有时间的话,多思考一点、再深入一点,自己也能学到很多东西。欢迎多到我们的 面试刷题神器 - 面试鸭 上看看。
你答对了几问呢?欢迎大家在评论区留言~
更多
💻 编程学习交流:编程导航
📃 简历快速制作:老鱼简历
✏️ 面试刷题神器:面试鸭
相关文章:
我出一道面试题,看看你能拿 3k 还是 30k!
大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…...
fluent动网格profile udf 注意事项
案例一: ((profile_name transient 2 0) ....第一行 (time 0 15.0) ....第二行 (v_x 1.2 1.2)) …...
【工厂方法模式】深度解析:从原理到实战的全方位指南(开发者必备)
文章目录 工厂方法模式在Java中的应用与实践引言1.1 设计模式简介1.2 为什么使用设计模式?1.3 本文的目标读者 第一部分:面向对象编程基础1. 封装2. 继承3. 多态4. 抽象类与接口 第二部分:工厂方法模式定义1. 模式的定义2. 适用场景3. 与其他…...
阴晴不定的大橘学长
题目链接:阴晴不定的大橘学长 思路:离散化树状数组 首先求出他们的前缀和,然后再开一个数组也保存前缀和,对该数组排序,然后一个个枚举前缀和,查找小于等于pre[i]-x 有多少数,最后加上该位置。…...
19个运维工程师面试集锦
第一部分:Linux基础 题目1: 有一百个图片文件,它们的地址都是 http://down.xiaomi.com/img/1.png http://down.xiaomi.com/img/2.png … 一直到 http://down.xiaomi.com/img/100.png 如何批量下载这100个图片文件,并找出其中大…...
第六周:机器学习
目录 摘要 Abstract 一、深度学习的优化算法 1、SGD 2、SGDM 3、Adagrad 4、RMSProp 5、Adam算法 二、分类器 三、卷积神经网络 总结 摘要 接着上周学习率在训练中的影响,本周对深度学习常见的几种优化算法做了总结,着重分析Adam算法的优缺…...
打扫朋友圈
我把上周写的一篇文章,发到了老家的一个群里,结果有个多年没联系的亲戚,立马私信给我说,让我不要在群里发,说我写的东西不行,他自己看了两行就看不下去了,然后给我讲了一堆大道理。 哎呦我去&a…...
基于Transformer的语音识别与音频分类
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...
【人工智能】NLP入门指南:自然语言处理基础全解析
文章目录 前言一、NLPNLP(自然语言处理)NLU(自然语言理解)NLG(自然语言生成) 二、分词1.什么是分词2.常见的分词工具3.jieba分词 三、词向量1.什么是词向量2.文本张量表示方法3.常见的词向量模型3.1 ont-ho…...
【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题
目录 📕 单例模式 🌳 饿汉模式 🚩 线程安全 🎍 懒汉模式 🚩 懒汉模式-单线程版 🚩 懒汉模式-多线程版 🎄 指令重排序 📕 单例模式 单例模式是一种经典的设计模式,…...
设计原则——依赖倒转原则(Dependence Inversion Principle)
以下总结自b站尚硅谷视频 1、高层模块不依赖低层模块,二者都应该依赖其抽象 2、抽象不依赖细节,细节应该依赖抽象 3、依赖倒转的中心是面向接口编程 4、依赖倒转原则是基于以下设计理念: 相对于细节的多变性,抽象的东西要稳定得…...
C#中DataTable新增列、删除列、更改列名、交换列位置
C#中DataTable新增列、删除列、更改列名、交换列位置 一、新增列 1.1、新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型")); /*比如添加【name】列,string类型的内容*/ dataTable.Columns.Add("name&…...
微分方程的数值解法——Runge-Kutta (RK4)
Runge-Kutta (RK4) The Runge-Kutta (RK4) methods are used to solve the solution of the non-liner ordinary differential equation. Here, we will simply summary this method. Assume the Intial Value Piont (IVP) is satisfied: y ′ f ( t , y ) , y ( t 0 )…...
ansible 配置yum源
ansible配置yum源 有两种方式,一种是可以写好sh脚本,然后ansible去执行sh文件 另外一种就是使用yum_repository库 本文讲使用库的方式 本文使用的环境是centos7 ,配置也是按照7去配置的,没有写动态配置 直接上代码 [rootvm-2 ~…...
CountDownLatch简介
CountDownLatch简介 CountDownLatch 是 Java 并发包 java.util.concurrent 中的一个类,它允许一个或多个线程等待其他线程完成一组操作。CountDownLatch 是一种同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直…...
笔试练习day2
目录 BC64 牛牛的快递题目解析解法模拟代码方法1方法2 DP4 最小花费爬楼梯题目解析解法动态规划状态表示状态转移方程代码 数组中两个字符串的最小距离题目解析解法方法1暴力解法(会超时)方法2贪心(动态规划)代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接…...
LabVIEW水下根石监测系统
开发了一种基于LabVIEW平台开发的水下根石监测系统。该系统利用高精度姿态传感器与位移传感器,实现了水下根石状态的实时自动监测,提高了水利工程安全管理的现代化和精细化水平,具有高精度、高稳定性和良好的操作性。 项目背景: …...
苹果折叠屏设备:创新设计与技术突破
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 苹果折叠屏设备:创新设计与技术突破 在科技迅速发展的今天,苹果公司以其一贯的创新精神和对产品质量的严格把控&#x…...
了解Java中的反射,带你如何使用反射
反射的定义 反射(Reflection)是Java的一种强大机制,它允许程序在运行时动态地查询和操作类的属性和方法。通过反射,Java程序可以获取类的信息,比如类的名称、方法、字段,以及可以动态地创建对象、调用方法…...
mybatis-plus雪花算法
苞米豆mybatis-plus已实现雪花算法,若项目中使用雪花算法生成自增主键,可直接引用相关jar实现其工具类,若不想再单独引用jar也可将其Sequence类直接复制到自己项目中定义为工具类使用 官方文档:https://baomidou.com/ Git地址&am…...
Docker Remote API 未授权访问漏洞
Docker Remote API 未授权访问漏洞 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的LINUX机器上,也可以实现虚拟化。 Docker swarm 是一个将docker集群变成单一虚拟的docker…...
【Spring】详细了解静态代理和动态代理的使用
目录 1.代理模式介绍 2. 静态代理 3.动态代理 3.1 JDK动态代理 3.2 CGLIB动态代理 4. 动态代理和静态代理的区别 1.代理模式介绍 代理模式分为动态代理和静态代理,目的是在不直接暴露真实对象的情况下,通过代理对象来间接访问真实对象,从…...
htsjdk库Allele接口及相关类介绍
在 HTSJDK 库中,Allele 是一个接口,用于表示基因组中的等位基因。Allele 接口定义了处理等位基因的基本方法和属性,而具体的实现类则实现了这些接口方法,以提供等位基因的实际功能和行为。 Allele 接口 Allele 接口主要用于表示基因组中一个位置的等位基因。等位基因可以…...
<Qt> 常用控件
目录 一、控件概述 二、QWidget 核心属性 (一)QWidget的核心属性概览 1. enabled 2. geometry 3. WindowFrame的影响 4. windowTitle 5. window Icon 6. windowOpacity 7. cursor 8. font 9. toolTip 10. focusPolicy 11. styleSheet 三、…...
C#:通用方法总结—第13集
大家好,今天继续讲解我们的通用方法系列。 下面是今天要介绍的通用方法: (1)这个通用方法为ug获取选择圆边的圆心 /// <summary> /// ug获取选择圆边的圆心 /// </summary> /// <param name"a">&l…...
很简单的Win10+Win7双系统教程|UEFI篇
前言 前段时间有写过一篇关于Windows10Windows7双系统安装教程,但这个教程为了比较保险,就进入了WinPE维护系统进行操作。 但有很多小伙伴就有点搞不懂了,都不知道WinPE是什么系统,也不知道怎么去解决这个问题。 今天咱们就来讲…...
【C++】函数重载
在C中,函数重载(Function Overloading)是指在同一作用域内,可以有一组具有相同名字的函数,这些函数的参数列表必须不同,可以是参数的数量不同,也可以是参数的类型不同。编译器会根据传递给函数的…...
【Java】Java银行信息管理系统(源码+报告)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
【mongodb】mongodb副本集的搭建和使用
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
Redis应用笔记
Redis应用笔记 一、 前言二、 Redis八种常用数据类型2.1 Redis的五种基本数据类型2.2 Redis的三种特殊数据类型 三、发现Redis热Key方案3.1 使用 Redis 自带的 --hotkeys 参数来查找3.2 使用MONITOR 命令3.3 借助开源项目 四、解决 hotkey 一、 前言 夯实Redis基础的笔记~ 二…...
C#:通用方法总结—第11集
大家好,今天继续分享我们的通用方法系列。 下面是今天要分享的通用方法: (1)这个通用方法为Ug’校验选中体的个数: /// <summary> /// 输出选中体个数 /// </summary> public int CheckOneBody() { int …...
三十种未授权访问漏洞复现 合集( 三)
未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…...
SpringBoot项目详细整合邮箱服务
springboot 版本:2.6.3 Java版本:1.8 一、应用场景 用户注册发送激活邮箱 注册登录时用邮箱接收验证码 用户密码重置 向用户发送相关系统消息 … 二、添加依赖 <!-- 邮箱 --> <dependency><groupId>org.springframework.b…...
Golang是如何实现动态数组功能的?Slice切片原理解析
Hi 亲爱的朋友们,我是 k 哥。今天,咱们聊一聊Golang 切片。 当我们需要使用数组,但是又不能提前定义数组大小时,可以使用golang的动态数组结构,slice切片。在 Go 语言的众多特性里,slice 是我们经常用到的数…...
TypeScript 模块详解
目录 介绍 导出 导出声明 导出语句 重新导出 聚合重新导出 导入 导入一个模块中的某个导出内容 导入具有副作用的模块 默认导出 适用场景 注意事项 export 和 import require() 区别与注意事项 生成模块代码 ECMAScript 模块 (ESM) CommonJS 模块 AMD 模块…...
超秒集物:助力品牌商腾飞,共筑强国梦想
在当今竞争激烈的商业世界中,每一个小微企业都怀揣着成为世界 500 强的梦想。它们虽然微小,但都在努力绽放出属于自己的光芒。而超秒集物,以其独特的平台力量,为众多小微企业照亮了前行的道路,助力它们追逐梦想&#x…...
DALI的学习
注重协议的理解 这段代码的主要功能是处理与“制造商模式”相关的操作。以下是对代码逻辑和其各部分意义的详细解释: 文件与宏定义 #include "DALI_CG_APP.h" #define MFM 0x80 #include "DALI_CG_APP.h":引入了DALI(Digital Addressable Lighting…...
微信小程序接口实现语音转文字
一、效果展示 我们有一个按钮,点击“开始录音”按钮,此时按钮变成“停止录音”并开始计时,点击停止录音后,界面上即可展示返回的文字 二、代码实现 完整代码实现见github 1.小程序端代码 // index.js const recorderManager…...
Vue封装分页下拉选择器的组件
在Vue项目中,经常需要实现带有分页功能的下拉选择器组件,以满足用户在大量数据中选择项的需求。本文将介绍如何封装一个Vue组件,该组件结合了分页和搜索功能,使得用户可以在大量数据中快速找到并选择所需项。 组件概述 该组件名…...
【Python机器学习】支持向量机——手写数字识别问题
基于SVM的数字识别步骤: 1、收集数据:提供的文本文件 2、准备数据:基于二值图像构造向量 3、分析数据:对图像向量进行目测 4、训练算法:采用两种不同的核函数,并对径向基核函数采用不同的设置来运行SMO算法…...
【2024蓝桥杯/C++/B组/传送阵】
题目 问题代码 #include<bits/stdc.h> using namespace std;const int N 1e610; int n; int porter[N]; int ans; int sign[N]; bool used;void dfs(int now, int cnt) {if(sign[now] && used){ans max(ans, cnt);return;}if(!sign[now]){cnt, sign[now] 1; …...
SystemServer 进程的启动流程
一、SystemServer 进程简介 1. SystemServer 进 程 主 要 的 作 用 是 启 动 各 种 系 统 服 务 , 比 如ActivityManagerService,PackageManagerService,WindowManagerService 等各种服务。当我们的应用需要使用各种系统服务的时候也是通过…...
牛客JS题(十八)子字符串频次
注释很详细,直接上代码 涉及知识点: 忍者码风正则表达式正向预查&&运算符短路特性编程思维 题干: 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /></head&…...
WEB渗透Web突破篇-XSS
确定XSS 反射型XSS可使用payload:<script>alert(1)</script> 存储型不适宜alert(1) 更好的替代品 <script>alert(document.domain.concat("\n").concat(window.origin))</script> <script>console.log("Test XSS from the searc…...
pip换国内源
由于pip服务器在国外,导致下载速度太慢而中断,所以设置为国内的镜像源,这里使用的清华的pip源,它5分钟同步一次。 https://pypi.tuna.tsinghua.edu.cn/simple windows下,直接在user目录中创建一个pip目录,…...
自闭症儿童无法上学?专业康复机构是希望的灯塔
面对自闭症儿童因特殊需求而无法融入普通学校的困境,每一位家长的心中都充满了焦虑与无助。然而,在这个充满挑战的时刻,选择一条科学、系统的康复之路,成为了引领孩子走向未来的关键。星启帆,作为国内规模较大全寄宿制…...
polyfit曲线拟合
一、简介 polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接…...
LangChain(八)构建多Agent的AI系统-实战!
系列文章目录 LangChain(二)基础问答大模型,纯新手向-CSDN博客 LangChain(三)基础问答大模型,从LLMchain开始了解chain!纯新手向-CSDN博客 LangChain(四)工具调用的底…...
【C++】一堆数组案例 元素逆置
所谓元素逆置就是把一堆数组的元素顺序反过来 例如一堆数组的为 1,2,3,4 那么它的逆置为 4,3,2,1 逆置过程运用赋值存储的思想,先把第一个数组存贮到一个变量中,然后把末尾数组…...
爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(二)
前文爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(一)-CSDN博客 目录 . AES算法 1. 算法简介 2. JavaScript 实现 3.Python 实现# RC4# 算法简介 JavaScript 实现# Python 实现# Rabbit# 算法简介 JavaSc…...