面试每日三题

MySQL篇

MySQL为什么使用B+树索引

B树每个节点可以包含关键字和对应的指针,即B树的每个节点都会存储数据,随机访问比较友好,B树的叶子节点之间是无指针相连接的

B+树所有关键字都存储在叶子节点上,非叶子节点只存储索引列和指向子节点的指针,叶子节点通过指针连接形成有序双向链表,顺序访问和范围查询比较友好。叶子节点只存储索引列,假设整行数据(关键字)是16KB,索引1KB,那么相对于B树,B+树每个节点就可以存更多的数据,MySQL一次加载是把整个节点的数据全部加载到内存中

回答:

范围查询效率高:B+树的叶子节点形成了有序链表,范围查询效率较高

顺序访问性能高:B+树的叶子节点形成了双向有序链表,查找不需要经过父节点,减少了磁盘IO次数

磁盘IO更少:B+树非叶子节点只存储索引列和指针,所以每次加载数据页(节点)的时候,就能加载更多的数据,减少IO次数

内存友好:B+树的内部节点只包含键值,可以节省内存空间

索引是什么?

回答:

索引是数据库为了加快数据访问速率而创建的额外的数据结构

  1. 最左前缀法则
    如果索引了多列(联合索引),要遵循最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃了某一列,索引将部分失效(后面的索引失效)。

只要最左边的索引存在就可以走索引,跟sql语句中的位置无关

  1. 范围查询
    联合索引中,出现范围(>,<),范围查询右侧的列索引失效

​ 要想不失效,在业务允许的范围内,尽量把><替换成>=,<=

  1. 索引失效情况

①在索引列上进行运算操作,索引将会失效

​ ②字符串类型使用时,sql语句没加单引号,索引会失效

​ ③模糊查询,头部模糊匹配的时候,索引将会失效

​ ④or分割开的条件,一个有索引,一个没有索引,则涉及的索引都不会被用到

​ ⑤MySQL评估使用索引比全表扫描更慢,则不适用索引

数据库连接方式

1.内连接:只要两个表中存在匹配的行,两个表中所有字段都会返回

2.左连接:返回左表的所有行以及右表中匹配到的行,右表没有匹配的就返回null

3.右连接:返回右表的所有行以及左表中匹配到的行,左表没有匹配的就返回null

4.全连接:返回左表和右表中的所有行,如果没有匹配返回null

varchar和char

varchar可变长度,只占用实际存储的字符的长度

char长度固定,长度未满则补位

datetime和timestamp

相同点:

存储格式相同都为 yyyy-MM-dd HH:mm:ss

不同点:

日期范围不同:datetime是1000-01-01 00:00:00.000000 ~ 9999-12-3123:59:59.999999

​ timestamp是1970-01-01 00:00:01.000000 ~ 2038-01-09 23:59:59.999999

时区不同:datetime不依赖时区,timestamp依赖时区

默认值不同:datetime默认值为null,timestamp默认值是当前时间

最左前缀法则

最左前缀原则是指在联合索引中只有从最左侧列开始连续使用时,索引才能被有效利用。如果一个查询只用了联合索引中的部分列,只有从索引的最左侧开始连续使用才有效,间隔的后面的列是不走索引的

最左前缀原则不限制查询条件的顺序,但如果查询条件不满足最左前缀原则,就不会走索引

索引覆盖

简单来说,当需要查询的数据列都含于我们创建的联合索引中,在查询过程中只使用索引而不需要回表查询到数据页来获取查询结果,避免额外的磁盘读取操作,提高查询性能

需要注意的是,索引覆盖并不适用于所有的优化方案,当需要返回大量数据列,我们单纯的创建多列的联合索引,那么索引维护成本过高,得不偿失

聚集索引和二级索引

聚集索引B+树最下面的叶子节点挂的是这一行的数据

二级索引B+树最下面的叶子节点挂的是索引列和对应的主键id

Redis篇

Java基础篇

Java 和 C++ 的区别?

Java 不提供指针来直接访问内存,程序内存更加安全

Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多实现

Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存

C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载

面向对象思想

面向对象思想其实就是我们去指挥别人或者使用工具帮我们去把要做的事情完成。

比如说我们现在的需求是扫地,那么我们可能要做很多事情,拿扫把,扫地,拿拖把,拖地,拿抹布,抹桌子。那么运用面向对象的思想就是我们可以去让保洁员去做这件事情,完成的效果是一样的,即房间变干净了。区别是我们更加轻松了,交给保洁员做,甚至会做的更好

类和对象

类:对一类事物共同点的描述

对象:对象是某类事物的一个个体

我们具体指挥的是对象

类中不被static修饰的方法是成员方法

类中方法外的变量是成员变量

构造方法

构造方法会对类中的成员变量进行默认初始化,调用有参构造方法之后,执行赋值之前,jvm会自动帮我们初始化成员变量

如果我们没有写构造方法,系统默认会送我们一个无参构造方法

封装

封装其实就相当于把不需要用户了解的细节,隐私或者特别复杂的细节,包装起来,只对外提供公共访问方式

this关键字

this代表当前对象

this用来在局部变量和成员变量重名的时候区分他们,加了this的就是成员变量

我们只能在一个类的成员方法或者构造方法中去使用this

继承

  • 继承可以理解为让两个类产生从属关系,有了从属关系后子类会具有父类的特征(非私有成员),这样我们用类去描述一些事物会更加方便

  • Java只支持单继承,继承可以是多层次的

  • 继承的优点:代码复用性更高

  • 继承的缺点:类之间耦合度增高

继承后的语法规则

  • 继承后的非私有的成员变量才会继承给子类。所以我们看到使用子类对象的某个成员变量时,有可能这个成员变量是定义在子类中,也有可能是定义在其父类中

  • 父类非私有的成员方法会继承给子类。所以我们看到使用子类对象的某个成员方法时,有可能这个成员方法是定义在子类中,也有可能是定义在其父类中。父子类中成员方法可以同时存在并且名字相同,这种现象叫做方法重写

  • 父类中已经有了某个成员变量,我们不应该在子类中定义同名的成员变量,否则可能会导致bug

  • 父类的构造方法是不会继承给子类的

  • 子类的构造中必须调用父类的构造,并且要求在第一行

  • 子类的构造默认都会在第一行调用父类的无参构造,所以当父类没有无参构造的时候子类中会报错。解决方法是给父类加上无参构造或者在子类构造中显式的调用父类的有参构造

多态

多态就是事物的多种形态,一个对象在不同条件下所表现的不同形式

多态存在的三个必要条件

1.继承或实现:在多态中必须存在有继承或实现关系的子类和父类
2.方法的重写:子类对父类中的某些方法进行重新定义(重写,使用@Override注解进行重写)
3.父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型

父类类型 变量名 = new 子类类型();
然后通过 变量名.方法名()调用在子类中重写的方法

多态中的成员特点

  • 多态成员变量:编译运行看左边

  • 多态成员方法:编译看左边,运行看右边

  1. 多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量
  2. 多态情况下,子父类存在同名的非静态成员方法时,访问的是子类中重写的方法
  3. 多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员函数
  4. 多态情况下,不能访问子类独由的方法

抽象类

  1. 使用abstract修饰的类或方法,就抽象类或者抽象方法
  2. 抽象类是不能具体的描述一个对象,不能用抽象类直接实例化对象
  3. 抽象类里面的成员变量和成员方法,都是和普通类一样的,只不过就是不能进行实例化了
  4. 当一个普通类继承这个抽象类后,那么这个普通类必须重写抽象类当中的所有的抽象方法

包装类型的缓存机制了解么

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能

Byte,Short,Integer,Long,这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回True or False

如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡

两种浮点数类型的包装类 Float,Double 并没有实现缓存机制

Integer i1 = 33;
Integer i2 = 33;
System.out.println(i1 == i2);// 输出 trueFloat i11 = 333f;
Float i22 = 333f;
System.out.println(i11 == i22);// 输出 falseDouble i3 = 1.2;
Double i4 = 1.2;
System.out.println(i3 == i4);// 输出 false
Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2); // 输出falseInteger i1=40 这一行代码会发生装箱,也就是说这行代码等价于 Integer i1=Integer.valueOf(40) 。因此,i1 直接使用的是缓存中的对象。而Integer i2 = new Integer(40) 会直接创建新的对象

所有整型包装类对象之间值的比较,全部使用 equals 方法比较

image-20231213172634943

静态变量有什么作用?

静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存

静态变量是通过类名来访问的,通常情况下,静态变量会被 final 关键字修饰成为常量
的比较,全部使用 equals 方法比较**

[外链图片转存中…(img-0henVwVN-1702972322213)]

静态变量有什么作用?

静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存

静态变量是通过类名来访问的,通常情况下,静态变量会被 final 关键字修饰成为常量

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

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

相关文章

计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

文章目录 1 域名系统DNS1.1 域名vsIP&#xff1f;1.2 域名结构1.3 域名到IP的解析过程域名服务器类型 2 文件传送协议2.1 FTP 文件传输协议2.2 NFS 协议2.3 简单文件传送协议 TFTP 3 万维网WWW3.1 统一资源定位符URL3.2 超文本传送协议HTTP3.2.1 HTTP工作流程3.2.2 HTTP报文结构…

真实进行软件测试面试中,自动化测试面试到底会问那些?

作者&#xff1a;川石信息 链接&#xff1a;https://www.zhihu.com/question/342170872/answer/813076226 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 自动化测试面试1&#xff1a; 1、使用什么测试框架做的上…

7.串口通信uart编写思路及自定义协议

前言&#xff1a; 串口是很重要的&#xff0c;有许多模块通信接口就是串口&#xff0c;例如gps模块&#xff0c;蓝牙模块&#xff0c;wifi模块还有一些精度比较高的陀螺仪模块等等&#xff0c;所以学会了串口之后&#xff0c;这些听起来很牛批的模块都能够用起来了。此外&#…

MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces&#xff08;单独表空间&#xff09;File-per-table tablespaces&#xff08;单独表空间&#xff09;相关变量&#xff1a;innodb_file_per_table使用TABLESPACE子句指定表空间变量innodb_file_per_table设置…

Git系统有哪些优势

在现在的这个软件开发领域&#xff0c;版本控制是一项非常重要的工作。Git作为比较流行的分布式版本控制系统&#xff0c;他有着独特的优势成为了很多开发者们的首选。那Git系统都有哪些优势呢&#xff0c;下面我以自己的理解简单的介绍一下。 分布式版本控制的优势 Git用的是…

标准地址门牌管理系统:提升地址管理效率与准确性的关键

在信息化社会的今天&#xff0c;地址管理的重要性日益凸显。无论是商业活动、物流配送&#xff0c;还是公共安全&#xff0c;都需要精确、高效的地址管理。然而&#xff0c;传统地址管理方式往往存在地址不规范、信息不全等问题&#xff0c;这无疑增加了管理难度和工作量。为此…

linux 中 C++的环境搭建以及测试工具的简单介绍

文章目录 makefleCMakegdb调试 与 coredumpValgrind 内存检测gtest 单元测试 makefile 介绍 安装 : sudo apt install make makefile 的规则: 举例说明 包括&#xff1a;目标文件 、 依赖文件 、 生成规则 使用 &#xff1a; make make clean CMake : CMake是一个…

046.Python包和模块_导入相关

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

『番外篇五』SwiftUI 进阶之如何动态获取任意视图的 tag 和 id 值

概览 在某些场景下,我们需要用代码动态去探查 SwiftUI 视图的信息。比如任意视图的 id 或 tag 值: 如上图所示:我们通过动态探查技术在运行时将 SwiftUI 特定视图的 tag 和 id 值显示在了屏幕上。 这是如何做到的呢? 在本篇博文,您将学到如下内容: 概览1. “如意如意,…

手敲MyBatis(十三章)-返回Insert操作自增索引值

1.目的 这一章的目的主要是插入语句以后返回插入记录的id&#xff0c;因为插入语句可分为要返回记录id&#xff0c;不要返回记录id的以及不同数据源类型执行的时机也不同&#xff08;如&#xff1a;oracle不支持主键&#xff0c;需要先插入序列再增加&#xff0c;Mysql支持主键…

SQL指南:掌握日期函数来查询和管理数据

文章目录 1. 引言2. 建立数据库表2.1 建表语句2.2 数据插入 查询案例3.1 查询当前日期的订单3.2 查询过去一周内的订单3.3 查询明天的日期3.4 查询今年的订单3.5 查询特定月份的订单 总结 1. 引言 在数据库管理中&#xff0c;处理日期和时间是一项基本但重要的任务。本指南将通…

数智金融技术峰会|数新网络受邀分享《金融信创湖仓一体数据平台架构实践》,敬请期待

12月23日&#xff0c;数新网络参加DataFunSummit 2023&#xff1a;数智金融技术峰会。会上&#xff0c;数新CTO原攀峰将为大家带来《金融信创湖仓一体数据平台架构实践》 主题分享。 本次峰会由DataFun联合火山引擎、蓝驰等知名企业举办&#xff0c;将共同为大家带来一场数智金…

玩转Instagram Shop只需要学会这些功能

Instagram Shop作为Instagram下属的电商购物平台。用户可以通过浏览Instagram上的推荐产品和品牌&#xff0c;在无需离开应用的情况下了解并购买新的商品。对于经常使用Instagram的用户来说是个很便捷的购物渠道。面对这个新渠道&#xff0c;我们又该如何玩转它呢。这篇文章就会…

【沐风老师】3dMax篮球建模方法详解

3dMax足球、排球和篮球建模系列之&#xff1a;篮球建模。对于足球和排球建模&#xff0c;思路是从一个基础模型开始&#xff0c;利用这个基础模型与最终的足球&#xff08;或排球&#xff09;模型的某些相似之处&#xff0c;经过修改编辑&#xff0c;最终完成目标模型的建模。但…

ansible的playbook

1、playbook的组成部分 &#xff08;1&#xff09;task任务&#xff1a;在目标主机上执行的操作&#xff0c;使用模块定义这些操作&#xff0c;每个任务都是一个模块的调用 &#xff08;2&#xff09;variables变量&#xff1a;存储和传递数据&#xff08;变量可以自定义&…

Java可变参数(学习推荐版,通俗易懂)

定义 可变参数本质还是一个数组 示例代码 注意事项 1.形参列表中&#xff0c;可变参数只能有一个 2.可变参数必须放在形参列表的最后面 注意是最后面。 name也可以为int类型

【C#】TimeSpan

文章目录 概述属性时间计算拓展来源 概述 TimeSpan结构&#xff1a;表示一个时间间隔。 它含有以下四个构造函数&#xff1a; TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。&#xff08;DateTime.Tick:是计算机的一个计时周期&#xff0c;单位是一百纳秒&…

3. 行为模式 - 迭代器模式

亦称&#xff1a; Iterator 意图 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。 尽管如此&#xff0c; 集合只是一组对象的…

数据结构(八):图介绍及面试常考算法

一、图介绍 1、定义 图由结点的有穷集合V和边的集合E组成。其中&#xff0c;结点也称为顶点。一对结点&#xff08;x&#xff0c; y&#xff09;称为边&#xff08;edge&#xff09;&#xff0c;表示顶点x连接到顶点y。边可以包含权重/成本&#xff0c;显示从顶点x到y所需的成…

深入解析Python装饰器及*args, **kwargs的妙用

深入解析Python装饰器及*args, **kwargs的妙用 简介&#xff1a; ​ 装饰器&#xff08;Decorator&#xff09;是 Python 中一种强大的语法特性&#xff0c;它允许在不修改原始函数代码的情况下&#xff0c;动态地扩展函数的功能。装饰器是函数或类&#xff0c;用于包装其他函…