亲宝宝 实习 面经

news2024/12/26 11:19:44

目录

    • 1.char varchar 长度是字符数还是字节数 编码格式
    • 2.整型数据类型
    • 3.decimal及其实现
    • 4.慢查询
    • 5.索引失效
    • 6.explain
    • 7.for foreach性能差异
    • 8.数据库事务隔离级别
    • 9.binlog redolog 二阶段提交
    • 10.redis数据类型
    • 11.redis实现消息队列
    • 12.mybatis传参方法
    • 13.insert返回主键

1.char varchar 长度是字符数还是字节数 编码格式

CHAR和VARCHAR数据类型的长度是以字节数为单位来计算的。
编码格式:UTF-8

2.整型数据类型

在这里插入图片描述

3.decimal及其实现

在MySQL中,DECIMAL是一种用于存储精确数字的数据类型。它可以存储固定精度的小数,即指定小数点前后的位数。DECIMAL类型的语法如下:

DECIMAL(M, D)

其中,M表示数字的总位数,D表示小数点后的位数。例如,DECIMAL(10, 2)可以存储10位数字,其中小数点后有2位。

4.慢查询

如果不熟悉可以看这篇
Mysql查询截取分析_慢查询日志

开启慢查询

set global slow_query_log=1

设置慢查询的时间

SET GLOBAL long_query_time=0.1;

假如运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。
使用mysqldumpslow去分析,查找sql,然后在使用explain进行分析
在这里插入图片描述

5.索引失效

最佳左前缀法则
过滤条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法被使用。
计算、函数导致索引失效
范围条件右边的列索引失效
建议:将可能做范围查询的字段的索引顺序放在最后
不等于(!= 或者<>)索引失效
is not null无法使用索引,is null可使用索引
like以通配符%开头索引失效

6.explain

常用的字段id,type,key_len,rows,extra

7.for foreach性能差异

性能差异需要分情况讨论
1、循环ArrayList时
结果:普通for循环比foreach循环花费的时间要少一点
原因:使用下标访问效率本身很高.foreach内部的循环直接封装下标,自己实现的for比foreach更直接,效率稍高些,但差别不会太大,仍然在一个数量级上。
2、循环LinkList时
结果:普通for循环比foreach循环花费的时间要多很多。
原因:如果使用插入和删除效率高的LinkedList,for基于下标访问会每次从头查询,效率会很低.foreach循环子使用高效的地址运算,效率会高.其差距将很大,完全不在一个数量级别.如果数组很大,差别可能会几百甚至上千倍

8.数据库事务隔离级别

  1. 未提交读(Read uncommitted):是最低的隔离级别,允许一个事务读取另一个事务未提交的数据。这种隔离级别会导致脏读、不可重复读和幻读等问题。

  2. 已提交读(Read committed):是大多数数据库的默认隔离级别。它允许一个事务读取另一个事务已经提交的数据,避免了脏读的问题。但是,不可重复读和幻读问题仍然可能出现。

  3. 可重复读(Repeatable read):保证在一个事务执行期间,多次读取同一数据时,其值不会发生改变。这种隔离级别避免了脏读和不可重复读的问题,但是仍然可能现幻读问题。

  4. 串行化(Serializable):是最高的隔离级别,它通过强制事务串行执行来避免脏读、不可重复读和读等问题。但是,这种隔离级别会导致并发性能下降,因为它会对数据进行加锁,从而限制并发访问。

9.binlog redolog 二阶段提交

MySQL事务提交的时候,需要同时完成redolog和binlog的提交,为了保证两个日志的一致性,需要用到两阶段提交(与分布式的两阶段提交不同,这里的两阶段提交是发生在数据库内部)

数据库两阶段提交的流程
假设执行一条SQL语句:

update T set c=c+1 where ID=2;

在这里插入图片描述
两阶段流程
从图中可以看出,在最后提交事务的时候,需要有3个步骤:

  • 写入redo log,处于prepare状态
  • 写binlog
  • 修改redo log状态为commit

ps: redo log的提交分为prepare和commit两个阶段,所以称之为两阶段提交

为什么需要两阶段提交?
假设当前 ID=2 的行,字段 c 的值是 0,再假设执行 update 语句过程中在写完第一个日志后,第二个日志还没有写完期间发生了 crash,会出现什么情况呢?

先写 redo log 后写 binlog。假设在 redo log 写完,binlog 还没有写完的时候,MySQL 进程异常重启。由于我们前面说过的,redo log 写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行 c 的值是 1。但是由于 binlog 没写完就 crash 了,这时候 binlog 里面就没有记录这个语句。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。
先写 binlog 后写 redo log。如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以这一行 c 的值是 0。但是 binlog 里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog 来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。
可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。

如何完成崩溃恢复
流程中崩溃可能导致问题如下图:
在这里插入图片描述
崩溃恢复
如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。这时候,binlog 还没写,所以也不会传到备库。

如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:

a. 如果是,则提交事务;
b. 否则,回滚事务。

10.redis数据类型

String
List
Hash
Set
ZSet

11.redis实现消息队列

Redis 实现 MQ 主要有三种方案:
(1)List 结构;
(2)Pub/Sub 模式;
(3)Stream 结构。

12.mybatis传参方法

第一种情形,传入单个参数 userId
第二种情况,传入多个参数 userId,sex 使用索引对应值(不建议)
第三种情形,传入多个参数 userId,sex 使用注解@Param
第四种情形,传入多个参数 使用User实体类传入
第五种情形,传入多个参数 使用Map类传入

13.insert返回主键

使用useGeneratedKeys属性和keyProperty属性来获取自动生成的主键值。以下是一个例子:

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO users (username, password) VALUES (#{username}, #{password})
</insert>

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

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

相关文章

数据库实验一 数据库和数据表的建立、修改和删除

任务描述 本关任务&#xff1a;建立数据库 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 如何创建数据库&#xff0c;显示已经建立的数据库 相关知识 创建数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理。 命令格式&#xff1a; CREATE DATABA…

粮油智能制造MES追溯系统源码

粮油生产加工MES追溯系统源码 粮油生产加工MES追溯系统&#xff0c;实现从种植、加工、检验、销售各个环节的数据采集。 粮油MES质量管控防伪溯源系统可广泛用于粮油生产加工领域。实现种植主体、种植基地、生产计划、压榨、精炼、包装、销售、物料管理、检验检测等各个环节的…

Java对象拷贝MapStruct

介绍 编译期即可生成对象复制代码。简单理解&#xff0c;功能定位org.springframework.beans.BeanUtils。 官网&#xff0c;GitHub-MapStruct。 入门 maven项目引入依赖&#xff1a; mapstruct&#xff1a;包含必要注解&#xff0c;如Mappingmapstruct-processor&#xff1…

Cereal 靶机

环境准备 靶机链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;bcj2 虚拟机网络链接模式&#xff1a;桥接模式 攻击机系统&#xff1a;kali linux 2021.1 信息收集 1.探测目标靶机 arp-scan -l 2.nmap -p- -A -T4 192.168.1.107 探测目标靶机开放端口和服务 漏…

我是如何入门网络安全?有什么自学心得?

我是如何入门&#xff0c;网络安全的 那年我高三毕业的时候要填志愿前几天 我妈问我想学什么专业。 我说&#xff0c;想学网络设计、或者计算机、网络安全工程师 那时候还比较年轻&#xff0c;也对网络&#xff0c;计算机这方面感兴趣嘛 于是我妈和我爸决定让我学网管。 我…

卡尔曼滤波与组合导航原理(十三)无迹卡尔曼滤波UKF

一、蒙特卡洛仿真 蒙特卡洛仿真的基本原理是通过生成大量的随机样本&#xff0c;以近似地估计实际事件的概率和预测结果。 它是以蒙特卡洛赌场命名的&#xff0c;因为它使用随机数和概率统计的方法来模拟现实世界中的各种情况和结果&#xff0c;就像在赌场中抛骰子或发牌一样。…

LeetCode_Day6 | 有效的字母异位词、两个数组的交集、快乐数、两数之和!

LeetCode_哈希表 242.有效的字母异位词1.题目描述2.题解 349.两个数组的交集1.题目描述2.题解 202.快乐数1.题目描述2.题解思路(官方题解啊&#xff01;看了好几遍真难) 3.算法4.代码实现5.复杂度分析 1.两数之和1.题目描述2.哈希表法3.代码实现 242.有效的字母异位词 1.题目描…

《三》TypeScript 中函数的类型

TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义&#xff1a;function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…

CAN总线竞争与仲裁机制分析

1、CAN总线的接口 (1)CAN总线是串行、差分信号、异步总线&#xff0c;传输数据用两根信号线组成的差分信号线&#xff1b; (2)CANH和CANL是一组双绞线&#xff0c;两根线的电平差值表示逻辑1和0&#xff1b; 2、CAN总线显性、隐形电平 显性电平代表逻辑0&#xff0c;隐形电平代…

【Prometheus】mysqld_exporter+Grafana+AlertManager预警

环境 prometheus-2.44.0 mysqld_exporter-0.14.0 grafana-enterprise-9.1.2-1.x86_64.rpm alertmanager-0.25.0. 简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的&#xff0c;mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署&#xff0c;…

08.JavaWeb-SpringMVC

2.SpringMVC Spring框架是一个开源的轻量级框架&#xff0c;SpringMVC是Spring的一个子框架 2.1SpringMVC工作机制 2.1.1 DispatcherServlet前端控制器 【不需要程序员开发】 作用&#xff1a;作为接受请求&#xff0c;响应结果&#xff0c;相当于转发器&#xff0c;中央处理…

『Jenkins』最新版Jenkins安装与Git集成—CentOS 7安装的详细教程

&#x1f4e3;读完这篇文章里你能收获到 图文形式安装Jenkins在Jenkins集成Git并进行的配置感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 安装Java Development Kit (JDK 11) 二、安装Jenkins1. 下载和安装最新版的Jenkins2. 启动Jenkins服务3. 将Jenkin…

【线性代数】

求解线性方程组 右乘向量/矩阵 把左边的矩阵拆成一个个列向量&#xff0c;右边的向量表示对左边列向量组的线性组合。 [ c o l 1 c o l 2 c o l 3 ] [ 3 4 5 ] [ 3 c o l 1 4 c o l 2 5 c o l 3 ] \left[\begin{array}{c} col_{1} & col_{2} & col_{3} \end{array}\…

类的三大特性——>封装

目录 理论知识 数据抽象&#xff1a; 封装&#xff1a; 细节知识 访问控制与封装 访问控制 STL使用封装 理论知识 类的基本思想是数据抽象、和封装。 数据抽象&#xff1a; 是一种依赖接口和实现分离的一种编程技术&#xff1a; 接口&#xff1a;包括用户所能执行的操…

点燃创作灵感:Prompt 实践指南揭秘!让 ChatGPT 更智能的六种策略(上)

在和 ChatGPT 对话中&#xff0c;Prompt 提示词的选择&#xff0c;如果遵循以下六种策略&#xff0c;我们将获得更好、更符合要求的回答。 这些策略&#xff0c;后几种更适合在编程调用 ChatGPT API 时使用&#xff0c;不过也适用直接和 ChatGPT 对话&#xff0c;让它更好的理解…

【LeetCode】HOT 100(7)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

C语言之基于链表实现排序

题目&#xff1a;通过链表实现从小到大进行排序 代码&#xff1a; #include <stdio.h> #include <stdlib.h> #define N 9//通过链表实现从小到大排序 typedef struct node {int data;struct node *next; } NODE;//fun函数实现是将头结点的单向链表节点…

chatgpt赋能python:Python怎么倒序输出中文字典?

Python怎么倒序输出中文字典&#xff1f; 作为一门高效、易上手的编程语言&#xff0c;Python在数据处理、科学计算、机器学习等领域都有广泛应用。而对于SEO工程师来说&#xff0c;Python也是一款非常实用的工具。那么今天&#xff0c;我们就来探讨一下Python怎么倒序输出中文…

Sqlite 比较,安装,使用,个人总结

文章目录 什么是sqlite&#xff0c;和别的数据库有什么差别&#xff1f;sqlite介绍什么是边缘存储&#xff1f; sqlite存储上限sqlite和别的数据库的区别 Sqlite本地安装sqlite 在C# .net webapi 软件中的使用 什么是sqlite&#xff0c;和别的数据库有什么差别&#xff1f; sq…

【JavaSE】Java(五十七):核心要点总结

文章目录 1. HashMap 的实现原理2. Set 有哪些实现类3. HashSet 的实现原理4. 如何实现数组和List之间的转换5. Java中的迭代器 1. HashMap 的实现原理 HashMap 是一种基于哈希表的数据结构&#xff0c;它的实现原理简单来说就是将键值对存储在一个数组中&#xff0c;并通过哈希…