当前位置: 首页 > news >正文

总结的一些MySql面试题

目录

一:基础篇

二:索引原理和SQL优化

三:事务原理

四:缓存策略


一:基础篇

1:定义:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合;

2:MySql中含有内部连接池用来管理缓冲用户的连接,以及线程处理需要缓存的需要。并且使用IO多路复用的select + 阻塞IO。并且他的命令处理是在多线程中并发处理的。

3:数据库三范式:先保持原子性不可分割 / 确保表中的每列和主键完全依赖 / 确保每列和主键直接相关不是间接相关。但是有时候没有必要使用三范式,会导致数据库业务涉及到的表变多,造成更多的连表查询,导致整个性能降低。因此需要考虑反范式。

4:五大约束:非空约束,自增约束,唯一约束,主键约束包括非空且唯一,外键约束。其中外键约束在 innodb 中支持,并且满足事务。

5:删除数据

drop(DDL):速度快,删除整张表结构和表数据,包括索引,约束,触发器等。但是删除后不能回滚,会进行释放空间。

truncate(DDL):速度比较快,会删除表数据,其他字段会保留(自增字段置为1),但是也不能回滚,会释放空间,以页单位进行删除。

delete(DML):速度慢,删除部分字段或者全部字段,其他保留,他是一个条件删除,可以进行回滚,是标记删除(实际并未删除),可以进行逐行删除。

6:去重是group by ,select distinct 。条件判断是:where,group by ... having , ...join ... on ... 。三种

7:视图:视图是逻辑表,自身不含数据,内容是通过查询得到。安全:使用视图,用户只能看到他们被允许查询到的结果集,而对表的权限管理无法做到限制某些行和列,视图却可以。数据独立,源表中的数据修改,对视图没有影响。视图可以减少重复语句的书写,并且还是个重构利器:如果需要将一个表进行拆分成两个表,我们可以使用视图来进行操作,创建出两个视图,这样我们只需要更改数据库结构,而不用修改应用程序。

8:触发器:触发器的执行是由事件自动触发,而不是程序调用和手工启动。比如当DML操作的时候,就会激活执行。

二:索引原理和SQL优化

MySql索引原理和SQL优化_mysql 全文索引sql-CSDN博客

1:索引是什么:索引是一种有序的存储结构,它将单个或多个列的值进行排序。

2:索引分类:主键索引,唯一索引,非空索引,普通索引,组合索引,全文索引。在主键索引的B+数种中包含数据的全部信息。全文索引是将存储在数据库中的整本书整篇文章的任意内容信息查找。关键词是:FULLTEXT。

3:为什么使用B+数索引,而不使用红黑树结构?

        首先B+数相对于高瘦的红黑树来说,B+树是胖矮的,在叶子节点中存放数据,并且叶子节点还串联在一起,而非叶子节点中存放索引信息。无论是叶子节点还是非叶子节点都是存放在页中的。这样当我们查找数据的时候,我们会拥有更少的磁盘IO,而且更方便范围查找,因为叶子节点是串联在一起的,找到第一个叶子节点后,可以相继找出其他节点。但是对于红黑树来说,需要不断进行搜索。并且每个索引都对应一个B+树。

为什么采用多路的树结构?一个节点有多条链路,相较于平衡二叉搜索树是一个更加矮胖的结构,树的高度更低,可以较少的磁盘io次数来索引数据。

为什么非叶子节点只存储索引信息?B+树节点映射固定的大小磁盘数据,可以包含更多的索引信息。能快速锁定数据所在叶子节点的位置。

为什么叶子节点依次相连?便于范围查询,避免中序遍历回溯回去查找下一个节点。

4:什么时候使用索引呢?

        首先我们的索引使用的位置是在where,group by ,order by 的后面使用索引。那么不适合使用索引:就是没有这一些判断条件以及区分度不高的列(数据很相似的),需要经常修改的列,表数据量少的。我们创建B+树类型的索引就是为了通过比较来找到我们所需要的数据,但是当区分度不高的时候,反而会降低速度,如果经常修改这个列,那么我们的B+的结构就要经常变化,更加影响速率,表的数据较少的时候,没有必要去创建索引,创建索引反而会浪费空间。

5:索引方式:

每一个索引都有一个B+树结构。

聚集索引:我们主键构造出的B+树,叶子节点中存放数据,数据也是索引的一部分。并且主键索引就是聚集索引,没有主键那就是唯一索引作为聚集索引。

辅助索引(二级索引):我们在辅助索引B+树中,叶子节点并不是存储的数据,而是存储的主键id。当通过辅助索引查找到主键id后,我们再根据主键去查找聚集索引。这里也叫回表查询。
覆盖索引:是索引包含了查询所需的所有列,即索引本身能够覆盖查询的字段需求,无需再通过回表操作来获取数据。通过使用覆盖索引,可以提高查询性能,减少不必要的磁盘I/O和数据传输。也就是我们不要select * 而是select 。。。什么的。
最左匹配规则:对于组合索引来说,我们使用必须要满足从左往右的规则:id,name,age。这三个只能使用:id,name,age;id,name;id;这三种方式来使用索引。

6:索引的失效和索引原则

索引失效:

1:当where  A and B 的时候,其中一个没有索引,那么就会失效。

2:当索引字段参与了运算。

3:索引字段发生隐式转换。

4:LIKE模糊匹配,通配符以“%”开头。

5:在索引字段上使用NOT <> != 

6:组合索引中,没有满足最左匹配。

索引原则:

1:查询频次较高且数据量大的表建立索引,索引选择使用频次较高,过滤效果好的列或者组合。

2:使用短索引,这样节点包含的信息多,有较少的磁盘IO操作。

3:很长的动态字符串,考虑使用前缀索引。

4:组合索引中,考虑最左匹配原则,和覆盖索引。

5:选择区分度高的列,也就是值相同的越少越好。

6:扩展索引,在现有索引的基础上,添加复合索引,最多6个索引。

7:不要select * ,尽量列出所需要的列,方便使用覆盖索引。

8:索引列尽量设置为非空

9:可以开启自适应hash索引。

三:事务原理

MySql 事务原理 - 面试_面试题 mysql事物实现原理-CSDN博客

1:事务

事务是什么:本质是一个并发的控制单元,用户定义的一个操作序列,这些操作要么都做要么都不做,满足原子操作。

什么时候使用事务:并发连接访问的时候。

事务的目的:从一种一致性状态转变成另一种一致性状态的时候,保证系统始终处于一个完整且正确的状态。

2:ACID特性中的隔离性

脏读,不可重复读,幻读。以及持久性中使用redolog写入物理日志,写入磁盘。

undolog:通过MVCC记录事务DML操作提交后产生的行数据版本信息。记录DML操作步骤,用于回滚业务,通过逆运算回滚。

redolog:事务提交后,记录DML操作对应物理页修改的内容。

3:隔离级别

read_uncommitted(读未提交):读(不做任何处理),写(自动加X锁)。脏读、不可重复读、幻读。

read_committed(读已提交)(RC):读(通过MVCC,读取最新版本的数据),写(自动加X锁)。不可重复读、幻读。

repeatable_read(可重复读)(RR):读(通过MVCC,读取开启事务前的行数据),写(自动加X锁)。幻读。

serializable(可串行化):读(自动加S锁),写(自动加X锁)。

4:隔离级别的并发异常

脏读:一个事务读到另一个未提交事务修改的数据。

不可重复读:一个事务内两次读取同一个数据不一样。一个事务提交之后,另一个事务中也会发现这个被修改的变量。

幻读:一个事务内两次读取同一个范围内的记录得到的结果集不一样,当前读和快照读不一致。我们在一个事务中插入一个数据,我们另一个事务在查询的时候并未看到这个数据,但是插入的时候发现报错。

我们数据库默认的隔离级别就是RR,也就是可以发生幻读。我们可以不用提升隔离级别就能解决这个问题,那就是手动加锁。具体加锁操作看文章即可。

5:MVCC

MVCC是多版本并发控制,保证数据的一致性和并发性。可以使多个事务在同时访问数据的时候,各自看到不同版本的数据,不会互相打扰,这样就可以避免锁和等待了。

read_view 是一个事务开始时创建的视图,他决定了事务能够看到的数据库版本中的数据版本,其中包括自身的事务id,已启动但未提交的事务id列表。

其中聚集索引记录的隐藏列存储在行中,这个行中包括该事务id。以及数据会指向之前的数据版本,用于回滚操作。

6:事务的可见性问题

事务可以看到自身事务的修改。事务之间的可见性是:已经提交的事务是可以看到的,后启动的事务是不可见的,在事务列表中已启动但未提交的不可见,已提交可见的。

7:RC和RR的区别

因为RC和RR都采用了MVCC,但是RC是读已提交,每次读取数据就会产生一个read_view。而RR是开启事务的时候才会生成一个read_view,一直用到事务结束,也就是一直能看到一个数据版本。因此RC每次读都能看到最新数据,所以产生了不可重复读,而RR中解决了。

8:什么是快照读和当前读:快照读就是从之前拍摄的一个快照中进行读取数据,而当前读就是直接读取最新数据。快照读并未采用锁,当前读加锁了。

四:缓存策略

MySQL的缓存策略_mysql 数据库的缓存策略-CSDN博客

1:MySQL 缓存方案用来干什么?

首先是MySql的缓存方案,他自己的缓存方案和业务层面是没有关系的,虽然MySQl也是用来缓存热点数据的,但是这些热点数据并不是用户自定义的,而是索引,记录等。他的缓存是从它自身出发的。

2:redis缓存方案:redis是内存数据库读取速度十分快,因此我们采用redis作为我们的缓冲数据库,用来缓存用户定义的热点数据,用户直接从缓存中读取热点数据,降低数据库的读写压力。而MySql是主要作为数据的落盘。

3:提升MySql访问性能的方式

1:读写分离:利用MySql的主从复制,我们设置多个从数据库,一个主数据库,我们进行主从复制的操作,然后主数据库主要负责写的操作,而其他从数据库负责读的操作。这样读写分离之后,会降低主数据库读的压力。但是当碰到对于读的时效性很强的时候,我们不得不读取主数据库了。

2:连接池:我们MySql中存在连接池的组件,会开启多个线程去服务这几个连接。有了连接池可以大大提高并发访问数据库的能力。并且网络模型为select + 阻塞IO模型。我们当开启事务的时候,我们要保证这事务中的sql语句全部在一个线程中执行。

3:异步连接:可以采用非阻塞IO的方式,也就是异步方法。

4:热点数据的读写策略(redis)

1:安全为主

 如果要以安全为主,我们就要避免主数据库和从数据库读取的数据不同的问题。当我们先写入MySQL后,必然会出现MySQL与Redis数据不同的问题,那么我们就不能先写入MySQL。而是要先删除Redis中的数据,然后再写入MySQL,最后将MySQL中的数据同步到Redis中去,这样就保证两方的数据一致了。但是我们的缓存方案就是为了提升效率,现在却为了安全而降低了效率,这是我们不愿看到的。

2:速度为主

如果要以效率为主,我们可以先写入缓存,并且设置过期时间(大约是200毫秒),然后再写入MySQL,当写入MySQL后,我们再将MySQL中的数据同步到Redis中去。当同步到Redis中去的时候,这个过期时间也就到期了。过期时间是与MySQL网络传输时间+MySQL处理时间+MySQL同步到Redis的时间。有个问题是如果当写入MySQL写入失败,这个时候Redis中含有数据,那么他就会提供脏数据。但是这个问题也就200毫秒的存活时间,因为从数据库会找主数据库进行同步。

5:缓存问题的解决方法

1:缓存穿透

问题:如果黑客让客户端一直读取MySQL和Redis中都不存在的数据,那么所有的读取操作都落在了MySQL中,那么就会造成MySQL中访问的性能急剧降低。

解决:如果在Redis和MySQL中读取的数据都不存在,那么就在Redis中设置一个<Key,nil>,代表查找的这个热点数据不存在。或者部署布隆过滤器(类似于哈希表),使这些数据只能增加,不能删除,具体可以搜一搜。

2:缓存击穿

问题:如果Redis中没有,但是MySQL中有,也就是说本来一个热点数据,在Redis中存在,但是过期了,那么大量的并发请求读取操作就会落到MySQL中,这样就造成MySQL访问的性能急剧降低。

解决:我们可以将过热的数据设置成不过期的状态。或者是添加分布式锁,将并发的请求操作,变成串行执行。

3:缓存雪崩

问题:我们在写入Redis中的数据是需要加入过期时间的,但是当我们不小心将多个过热数据的过期时间设置成统一时间,就会面临大量热点数据集中失效的问题,虽然失效,但是在MySQL中还是存在这个数据,所以大量的请求读取操作就会落到MySQL中去,就会造成MySQL访问性能急剧降低。

解决:我们可以将这个过期时间给错开,避免同时过期。当然我们可以在重启MySQL的时候,先将一些热数据先缓存到Redis中。

五:一些小问题

1:MySQL的集群是用什么样的方式去增加并发量

使用连接池技术,合理使用索引,优化SQL语句,分库分表,使用存储过程。

2:B树和B+树的区别

1.B树只适合随机检索,B+树支持随机检索和顺序检索

2.B+树空间利用率高,可以减少IO次数,磁盘读写代价更低。 一般来说索引本身也很大,往往以索引文件的形式存储在磁盘上,这样索引查找过程就要产生磁盘IO消耗。B+树的内部节点只作为索引使用,其内部节点(非叶子节点)比B树更小,判断能容纳的节点中关键字更多,一次读取到的键更多。 3.B+树查询效率更稳定,因为数据存放在叶子节点。

4.B树在一定程度上也提高了磁盘IO性能,但没有解决遍历效率低下的问题。B+树的叶子节点都使用指针顺序连接在一起,只要遍历叶子节点就可以实现所有值。

5.增删文件时,B树需要重新调整树结构。B+树不需要调整树结构,因此B+树效率更高。

3:数据库的ACID怎么实现

1:原子性:要么都发生要么都不发生,所以需要实现回滚的操作,那么我们就要实现undolog的回滚日志。我们在数据库执行操作的时候,我们生成一个undolog,里面包含的是数据库的SQL,当执行失败的时候,我们通过我们的undolog进行回滚,也就是当插入insert的话,那我们就执行delete,如果是update,那我们就反向执行update。反正就是通过undolog进行回滚操作。

2:一致性:是数据库的完整性和一致性,我们使用其他三个特性来完成这一个特性。

3:隔离性:对于隔离性需要实现MVCC

4:持久性:对于持久性就是我们实现redolog,我们采用预先写的方法,也就是我们在修改之前先将操作写入日志,然后再写入bufferpool,这样mysql宕机之后的话,我们重启就可以读取到redolog的数据。

4:mysql的binlog是什么

binlog是二进制日志,他记录了数据库上的所有改变,并以二进制的形式保存在从磁盘中。它可以用来查看数据库的变更历史,数据库增量备份和恢复,mysql的主从数据库的复制。

5: 当前读和快照读

当前读:像select lock in share mode ,select for update ,update ;insert; delete 。这些操作都是一种当前读,为什么叫当前读,就是他读取的是当前记录的最新版本,读取时还要保证其他事务不能修改当前记录,所以会对记录进行加锁。

快照读:像不加锁的select就是快照读。快照读的实现是基于MVCC的操作实现的,他的操作避免了加锁的操作,只是拿取一个数据版本。

6:数据库锁

在MySQL中,锁可以分为共享锁和排它锁两种类型。共享锁用于读取数据,而排它锁用于修改数据。当一个事务获得了排它锁后,其他事务就不能再对该数据进行修改,直到该事务释放锁为止。

7:项目怎么进行死锁检测

可以使用jstack工具

或者写死锁检测的代码:Linux下的死锁检测组件(分模块讲解)_linux死锁检测-CSDN博客

8:什么时候使用读已提交

        读已提交是一种常见的隔离级别,它可以提高并发性和数据准确性:订单系统
        假设有一个在线商店,它需要处理大量订单。多个用户可能同时提交订单,如果不使用读已提交隔离级别,有可能会出现数据混乱或错误的情况。例如,一个用户提交订单时,第二个用户同时查看订单,但却看到了已提交但未完成的订单,导致订单重复或缺失。使用读已提交隔离级别可以避免这种情况,确保每个用户都只看到已经提交并生效的订单。

9:搜索慢怎么解决

        我们通过使用 EXPLAIN 来查看 SQL 语句的具体执行过程。 原理:模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理 SQL 语句的。

        首先我们需要找到SQL这个语句在哪里,通过 show processlist 列出较慢的连接通道来 以及使用慢查询日志来找到具体的SQL语句。再分析SQL中我们要先查看在where、group by、order by中是否使用索引,如果没有使用,那么就可以考虑是否添加索引,然后继续优化SQL语句中in和not in 变成联合查询,并且减少整体的联合查询。以及一个隐形的问题:age问题,应该存储出生年月,让客户端进行计算年纪。

https://github.com/0voice

相关文章:

总结的一些MySql面试题

目录 一&#xff1a;基础篇 二&#xff1a;索引原理和SQL优化 三&#xff1a;事务原理 四&#xff1a;缓存策略 一&#xff1a;基础篇 1&#xff1a;定义&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的…...

【实验15】LSTM的记忆能力实验

目录 1 模型构建 1.1 LSTM层 1.1.1 自定义LSTM算子 1.1.2 nn.LSTM 1.1.3 将自定义LSTM与pytorch内置的LSTM进行对比 1.2 模型汇总 2 模型训练 2.1 训练指定长度的数字预测模型 2.2 多组训练 2.3 损失函数展示 3 模型评价 4 完整代码 5 LSTM模型门状态和单元状态的…...

SSH克隆github项目

1、生成密钥 ssh-keygen -t rsa -C "你的邮箱xxx.com" 全程回车即可&#xff08;不用输入ras文件名及密码&#xff09;、为了方便下面的公钥查看 2、配置公钥 查看公钥内容 cat c:\Users\xxx\.ssh\id_rsa.pub(修改为自己的路径及名字) 将公钥内容复制并粘贴至…...

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网&#xff0c;并模拟Internet的典型Web服务过程。通过此次课程设计&#xff0c;可以进一步理解Internet的工作原理和协议过程&#xff0c;并提高综合知识的运用能力和分析能力。具体目标包括&#xff1a; &#xff08;1&#xff09;掌握网络拓扑的…...

Node.js系统模块

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 2.2.1 什么是系统模块 由于Node.js运行环境提供的API都是以模块化的方式进行开…...

React - useActionState、useFormStatus与表单处理

参考文档&#xff1a;react18.3.1官方文档 一些概念&#xff1a; React 的 Canary 和 Experimental 频道是 React 团队用于发布和测试新功能的渠道。 useActionState useActionState 是一个可以根据某个表单动作的结果更新 state 的 Hook。 const [state, formAction, isPe…...

GC常见垃圾回收算法,JVM分代模型

如何判断是垃圾&#xff1f;引用计数器和Root可达性算法 如何进行清除&#xff1f;标记清除、复制、标记整理 堆分代模型&#xff1f;Eden&#xff0c;Surevivor&#xff0c;Tenuring 一个对象从创建到消亡的过程&#xff1f; 对象什么时候进入老年代&#xff1f; 一、GC&a…...

深入探索 JVM:原理、机制与实战

一、JVM 概述 JVM&#xff08;Java Virtual Machine&#xff09;是 Java 程序运行的核心组件&#xff0c;它提供了一个独立于硬件和操作系统的执行环境&#xff0c;使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成&#xff1a; 类装载器&#xf…...

前端成长之路:HTML(2)

HTML中有两个非常重要的标签——表格和表单&#xff0c;在介绍之前需要先了解表格和表单的区别&#xff1a;表格是用于展示数据的&#xff1b;表单是用于提交数据的。本文主要介绍表格。 表格标签 表格主要是用于显示、展示数据的&#xff0c;并非是页面布局。它可以使本来难…...

python基础:(七)类

目录 一.创建和使用类二.使用类和实例2.1给属性指定默认值2.2修改属性的值2.2.1直接修改属性的值2.2.2通过方法修改属性的值2.2.3通过方法对属性的值进行递增 三.继承3.1子类的方法__init__()3.2给子类定义属性和方法3.3重写父类的方法 四.导入类4.1语法--1:4.2语法--2 前言 p…...

Spring AOP基础、快速入门

介绍 AOP&#xff0c;面向切面编程&#xff0c;作为面向对象的一种补充&#xff0c;将公共逻辑&#xff08;事务管理、日志、缓存、权限控制、限流等&#xff09;封装成切面&#xff0c;跟业务代码进行分离&#xff0c;可以减少系统的重复代码和降低模块之间的耦合度。切面就是…...

Golang使用etcd构建分布式锁案例

在本教程中&#xff0c;我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性&#xff0c;防止竞争条件&#xff0c;并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…...

深度学习:基于MindSpore的极简风大模型微调

什么是PEFT&#xff1f;What is PEFT&#xff1f; PEFT(Parameter Efficient Fine-Tuning)是一系列让大规模预训练模型高效适应于新任务或新数据集的技术。 PEFT在保持大部分模型权重冻结&#xff0c;只修改或添加一小部份参数。这种方法极大得减少了计算量和存储开销&#x…...

如何在 Android 项目中实现跨库传值

背景介绍 在一个复杂的 Android 项目中&#xff0c;我们通常会有多个库&#xff08;lib&#xff09;&#xff0c;而主应用程序&#xff08;app&#xff09;依赖所有这些库。目前遇到的问题是&#xff0c;在这些库中&#xff0c;libAd 需要获取 libVip 的 VIP 等级状态&#xf…...

HTML:表格重点

用表格就用table caption为该表上部信息&#xff0c;用来说明表的作用 thead为表头主要信息&#xff0c;效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 &#xff0c;一般表格第一行的数据都是table heading...

STM32 出租车计价器系统设计(一) 江科大源码改写

STM32 出租车计价器系统设计 功能目标 驱动步进电机模拟车轮旋转&#xff0c;并实现调速功能。 设置车轮周长和单价&#xff0c;检测车轮转速和运转时间。 计算并显示行驶里程和价格。 硬件材料 28BYJ48 五线四相步进电机和 ULN2003 驱动板模块 测速传感器模块 嵌入式小系统…...

Git基础操作快速入门

Git是一个免费开源分布式版本控制工具&#xff0c;是由Linux的作者Linus开发的第二个伟大作品。2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。Linus迫不得己自己开发了一个分布式版本控制工具&#xff0c;从而Git诞生了 目前使用Git作为版本控制的开源软件&#…...

vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

在Windows操作系统中,安装了nodeJs之后,并且也安装了vue依赖包,但是在cmd控制台运行vue的时候,会报错:vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。针对这个问题我提供如下解决办法,并且是有效的。 一、原因分析 关于尝试这个问题的主要原因,我分析主要…...

JAVA安全—SpringBoot框架MyBatis注入Thymeleaf模板注入

前言 之前我们讲了JAVA的一些组件安全&#xff0c;比如Log4j&#xff0c;fastjson。今天讲一下框架安全&#xff0c;就是这个也是比较常见的SpringBoot框架。 SpringBoot框架 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提…...

Milvus向量数据库05-常见问题整理

Milvus向量数据库05-常见问题整理 1-什么是PipeLine 这张图展示了一个文档处理和搜索系统的架构&#xff0c;主要分为两个部分&#xff1a;Ingestion Pipeline&#xff08;摄取管道&#xff09;和 Search Pipeline&#xff08;搜索管道&#xff09;。下面是对图中各部分的详细…...

strncpy在复制含有多个\0的字符串时遇到的问题

strncpy在复制含有多个\0的字符串的时候&#xff0c;会产生截断&#xff0c;因为strncpy在读取源字符串的时候&#xff0c;遇到了\0&#xff0c;函数会认为该字符串已经结束了&#xff0c;然后会向目标字符串内填充\0。 char buffer[100] "ak\0jl";for (int i 0; i…...

C++作业3

作业1&#xff1a; 1.定义一个矩形类Rec&#xff0c;包含私有属性length、width&#xff0c;包含公有成员方法&#xff1a; void set_length(int l);//设置长度 Void set_width(int w);//设置宽度 Int get_length();//获取长度&#xff0c;将长度的值返回给调用处 Int get_widt…...

重生之我在学Vue--第1天 Vue 3 基础与开发环境搭建

重生之我在学Vue–第1天 Vue 3 基础与开发环境搭建 文章目录 重生之我在学Vue--第1天 Vue 3 基础与开发环境搭建前言一、Vue 3 的特点与核心概念二、搭建开发环境1. 安装 Node.js2. 使用 Vite 创建 Vue 3 项目创建项目进入项目目录并安装依赖启动开发服务器 3. 理解项目结构 三…...

企业经营数据分析系统:提升决策能力的利器

搭建企业经营数据分析系统是当今企业绕不开的话题&#xff0c;企业想要在竞争激烈的市场当中突围而出&#xff0c;需要对于企业内部的各种数据了然于胸&#xff0c;同时对于外部的数据也有敏锐的把握能力&#xff0c;因此企业构建自身的经营性数据分析系统就显得尤其重要。作为…...

Linux笔记9 DNS域名解析服务器

简介 DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分 布式数据库&#xff0c;能够使人更方便的访问互联网。 DNS使用的是53端口&#xff0c; 通常DNS是以UDP这个较快速的数据传输协议来查询的&#x…...

鸿蒙高级开发者认证的主观题试题及答案

以下是一份鸿蒙高级开发者认证的主观题试题及答案示例,涵盖了鸿蒙开发中的多个关键技术和应用场景相关内容,希望对你有所帮助: 一、论述题(每题 20 分,共 60 分) 1. 阐述鸿蒙操作系统中分布式软总线的工作原理、核心优势以及在多设备协同应用开发场景下的应用方式,并举…...

leetcode_547 省份数量

该题主要运用了图的连通性 接着使用染色法解决该问题 染色法:标记所有节点为false 访问后 将其标记位true class Solution {int n; // 代表n个数据bool colors[201]; // 标记是否访问到void dfs(vector<vector<int>>& isConnected, int u) { // …...

【开源】一款基于SpringBoot 的全开源充电桩平台

一、下载项目文件 下载源码项目文件口令&#xff1a;动作璆璜量子屏多好/~d1b8356ox2~:/复制口令后&#xff0c;进入夸克网盘app即可保存&#xff08;如果复制到夸克app没有跳转资源&#xff0c;可以复制粘贴口令到夸克app的搜索框也可以打开&#xff08;不用点搜索按钮&#…...

react antd tabs router 基础管理后台模版

在构建 React 后台管理系统时&#xff0c;使用标签页的方式展示路由是一种高效且用户友好的设计模式。这种实现方式通常允许用户在多个页面之间快速切换&#xff0c;并保留页面的状态&#xff0c;类似于浏览器的多标签页功能。 需求分析 1.动态标签页&#xff1a;根据用户的导…...

uniapp uni-table最简单固定表头

需求&#xff1a;固定表头数据&#xff0c;在网上找了半天&#xff0c;啥都有&#xff0c;就是一直实现不了&#xff0c;最后更改代码实现 1.效果 2.主要代码讲解完整代码 表格的父级一定要设置高度&#xff0c;不然会错位&#xff0c;我看网上说设置position&#xff1a;fixed…...

从0到1实现项目Docker编排部署

在深入讨论 Docker 编排之前&#xff0c;首先让我们了解一下 Docker 技术本身。Docker 是一个开源平台&#xff0c;旨在帮助开发者自动化应用程序的部署、扩展和管理。自 2013 年推出以来&#xff0c;Docker 迅速发展成为现代软件开发和运维领域不可或缺的重要工具。 Docker 采…...

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka&#xff08;付费&#xff09; 视频播放IINA 视频下载Downie&#xff08;付费&#xff09; 屏幕刘海TopNotchMediaMate&#xff08;付费&#xff09;NotchDrop&#xff08;付费&#x…...

No.4 笔记 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代&#xff0c;网络安全无处不在。了解Web安全的基本知识&#xff0c;不仅能保护我们自己&#xff0c;也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界&#xff0c;掌握那些必备的安全知识&#xff01; 1. 客户端与WEB应用安全 前端漏洞&#xff1…...

Unity-Webview 使用指南

Unity-Webview 使用指南 Unity-Webview 主に gree/unity-webview のリファクタリング。本家を元に改良してく&#xff01; [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/uni/Unity-Webview Unity-Webview 是一个专为 Unity 开发的 WebView 插件&#xff0c;使开…...

【Vue】自定义指令、插槽

目录 自定义指令 是什么 作用 使用方法 定义 使用 自定义指令配合绑定数据 语法 自定义指令的简写 语法 使用时机 插槽 什么是插槽 默认&#xff08;匿名&#xff09;插槽 ​编辑插槽的默认值 具名插槽 使用方法 简写 使用示例 作用域插槽 自定义指令 是什…...

AI - RAG中的状态化管理聊天记录

AI - RAG中的状态化管理聊天记录 大家好&#xff0c;今天我们来聊聊LangChain和LLM中一个重要的话题——状态化管理聊天记录。在使用大语言模型(LLM)的时候&#xff0c;聊天记录&#xff08;History&#xff09;和状态&#xff08;State&#xff09;管理是非常关键的。那我们先…...

微服务网关SpringCloudGateway、Kong比较

网关产品 1. Spring Cloud Gateway 基本信息 Spring Cloud Gateway是Spring Cloud生态系统中的一个组件&#xff0c;基于Spring 5、Project Reactor和Spring Boot 2构建。它旨在为微服务架构提供一种简单而有效的API网关解决方案。 功能特点 路由功能强大&#xff1a;使用Rou…...

MVC基础语法

文章目录 项目地址一、MVC的传值方式1.1 ViewBag和ViewData传值1.1.1 ViewBag1.1.2 ViewData 1.2 视图模型传值&#xff08;ViewModel&#xff09; 二、HttpConntext上下文三、中间件 项目地址 教程作者&#xff1a;誉尚学教育教程地址&#xff1a; https://www.bilibili.com…...

Web day09 会话技术 JWT令牌 Filter Interceptor

目录 会话技术&#xff1a; 1.Cookie&#xff1a; 2.Session&#xff1a; 3.令牌技术&#xff1a; JWT令牌&#xff1a; 生成JWT令牌&#xff1a; 校验JWT令牌&#xff08;解析生成的令牌&#xff09; 登陆时下发令牌&#xff1a; 过滤器Filter&#xff1a; 拦截器Inte…...

OpenCV相机标定与3D重建(14)用于组合两个旋转和平移(R|T)变换函数composeRT()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::composeRT 是 OpenCV 库中的一个函数&#xff0c;用于组合两个旋转和平移&#xff08;R|T&#xff09;变换。这个函数可以将两个连续的刚体变…...

leetcode33.搜索旋转排序数组

整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..…...

TMS Software:TMS BIZ产品——TMS XData

TMS XData 用于多层REST/JSON HTTP/HTTPS应用服务器开发和ORM远程处理的Delphi框架。 TMS扩展数据可同时用于以下框架&#xff1a; VCLWEBFMX TMS XData可同时用于以下操作系统/浏览器&#xff1a; TMS XData可同时用于以下IDE&#xff1a; 功能概述 基于REST/JSON架构风格的…...

leecode中的面试100题

isalnum函数用于检查一个字符是否为字母或数字。它的参数是一个int类型 isupper() 是大写 islower() 是小写 toupper() 变成大写 tolower() 变成小写 do while 首先不管怎么 先执行do一次 然后执行完了之后 在判断while如果符合while里面就继续执行do vector容器中insert…...

不同类型的集成技术——Bagging、Boosting、Stacking、Voting、Blending简述

目录 一、说明 二、堆叠 2.1 堆叠的工作原理&#xff1a; 2.2 例子&#xff1a; 2.3 堆叠的优点&#xff1a; 三、投票&#xff08;简单投票&#xff09; 3.1 例子&#xff1a; 3.2 投票的优点&#xff1a; 四、装袋和投票之间的区别 五、混合 6.1 混合的主要特征&#xff1a; …...

【从零开始入门unity游戏开发之——C#篇01】理论开篇

文章目录 前言前置条件什么是编程&#xff1f;什么是代码&#xff1f;什么是编程语言&#xff1f;常见的编程语言什么是C#&#xff1f;学习Unity为什么要先学习C#&#xff1f;选择适合自己的IDE集成开发环境VSCode安装和环境配置VSCode调试模式专栏推荐完结 前言 这个系列我想…...

TCP的“可靠性”(上)

目录 TCP的“可靠性”&#xff08;上&#xff09;确认应答&#xff08;可靠性传输的基础&#xff09;超时重传连接管理&#xff08;三次握手&#xff0c;四次挥手&#xff09; TCP的“可靠性”&#xff08;上&#xff09; 想必大家都或多或少的听说过TCP的特性&#xff1a;有连…...

Windows平台Unity3D下如何低延迟低资源占用播放RTMP或RTSP流?

技术探讨 自2017年我们发布跨平台的低延迟Unity下的RTSP|RTMP直播播放器后&#xff0c;Unity下的直播体验有了质的提升&#xff0c;特别是RTMP&#xff0c;从大家认知里面的几秒钟&#xff0c;直接缩减到100-300ms&#xff0c;满足了绝大多数场景下低延迟的技术诉求。今天就Un…...

burp的编解码,日志,比较器

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

Vercel部署前端部署

Vercel 部署 今天要讲的是如何对别人向自己的开源仓库提的PR进行自动代码审核 1. 注册并登录Vercel 访问 Vercel官网点击右上角的"Sign Up"选择使用GitHub、GitLab、Bitbucket或邮箱注册完成注册流程并登录 2. 连接代码仓库 在Vercel仪表板,点击"New Proje…...

Jenkins相关的Api接口调用详解

Jenkins API是Jenkins持续集成和持续部署(CI/CD)平台提供的一组接口,允许外部程序通过HTTP请求与Jenkins进行交互。以下是对Jenkins API使用的简介: 一、Jenkins API的主要功能 作业管理:通过API,可以创建、配置、删除以及查询作业(Job)。构建触发:可以远程触发新的构…...