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

Mysql面试知识点详解

Mysql面试知识点详解

Mysql 是 Java 开发领域中常用的持久层框架,在面试和实际开发中都占据重要地位。本文将深入剖析 Mysql的核心知识点,并结合实战案例,帮助读者全面掌握相关技能。

一、慢查询定位与分析

(一)定位慢查询

  • 借助 Arthas 工具 :在实际项目中,若怀疑某个服务的数据库操作存在慢查询问题,可使用 Arthas 诊断。例如,对一个电商系统的订单服务进行监控,通过 Arthas 的 trace 命令跟踪数据库查询方法的执行,若发现某个订单查询方法耗时较长,即可初步定位到慢查询的代码位置,进而分析具体原因。
  • 开启数据库慢查询日志 :以 MySQL 为例,在数据库配置文件中设置 slow_query_log = ON ,并设置 long_query_time = 2 (设置超过 2 秒的查询为慢查询)。经过一段时间运行后,通过分析慢查询日志,发现一个查询订单详情的 SQL :SELECT * FROM order_details WHERE order_id = 123456; 执行时间超过了设定的阈值,成功定位到慢查询。

(二)分析 SQL 性能

  • 使用 EXPLAIN 获取执行计划 :针对定位到的慢查询 SQL,执行 EXPLAIN SELECT * FROM order_details WHERE order_id = 123456; ,结果发现 typeALL ,表示全表扫描,且 keyNULL ,说明未使用索引,导致查询缓慢。
  • 实战优化 :在 order_details 表的 order_id 字段上创建索引 CREATE INDEX idx_order_id ON order_details(order_id); ,再次执行 EXPLAIN ,发现 type 变为 refkey 显示新创建的索引,查询性能得到显著提升。

二、索引概念与底层数据结构

索引是帮助数据库快速获取数据的一种数据结构。在 MySQL 中,最常用的底层数据结构是 B+树。这些数据结构通过特定的算法和方法指向数据,从而实现高效的查询性能。下面我们来详细了解一下这些数据结构。

(一) 二叉查找树

二叉查找树是一种简单的树形数据结构,其特点是:

  • 左节点的值总是小于父节点的值。
  • 右节点的值总是大于父节点的值。

例如,假设我们有一组数据 [5, 3, 7, 2, 4, 6, 8],构建的二叉查找树如下:

        5/ \3   7/ \ / \2  4 6  8

在二叉查找树中,最优情况下(树完全平衡),查找效率为 O(log n)。然而,最坏情况下(树退化为链表),查找效率会退化为 O(n)

(二) AVL 平衡二叉树

AVL 树是一种自平衡的二叉查找树,其特点是:

  • 任意节点的左右子树高度差不超过 1。
  • 当插入或删除节点导致高度差超过 1 时,会通过旋转操作来调整平衡。

例如,假设我们在上述二叉查找树中插入一个值为 1 的节点,树会变成:

        5/ \3   7/ \ / \2  4 6  8/1

此时,节点 3 的左右子树高度差为 2,违反了 AVL 树的平衡条件。通过右旋操作,树调整为:

        5/ \2   7/ \ / \1  3 6  8/4

AVL 树的优点是查找效率始终保持为 O(log n)。然而,它的缺点是插入和删除操作需要频繁进行旋转调整,这会消耗一定的系统性能。

(三) 红黑树

红黑树是一种自平衡的二叉查找树,其特点是:

  • 每个节点是红色或黑色。
  • 从任何节点到其每个叶子的所有路径都包含相同数量的黑色节点。
  • 根节点是黑色。
  • 叶子节点是黑色。
  • 红色节点的两个子节点都是黑色(即红色节点不能相邻)。

例如,假设我们有一组数据 [5, 3, 7, 2, 4, 6, 8],构建的红黑树如下:

        5 (B)/   \3 (B)  7 (B)/ \     / \2 (R) 4 (R) 6 (R) 8 (R)

红黑树相比于 AVL 树,对平衡的要求较低,因此需要的旋转次数更少,插入和删除操作的性能更好。

(四) B 树

B 树是一种多路查找树,其特点是:

  • 每个节点可以有多个子节点(最多为 M 个)。
  • 所有叶子节点都在同一层。
  • 每个节点最多有 M-1 个关键字。

例如,假设我们有一组数据 [5, 3, 7, 2, 4, 6, 8],构建的 B 树(假设阶数为 3)如下:

        5/ \2,3  6,7,8

B 树的查找效率为 O(log n),并且由于其多路查找的特性,查找速度比二叉树更快。

(五) B+ 树

B+ 树是 B 树的优化版本,其特点是:

  • 所有数据都存储在叶子节点中,而非叶子节点只存储指针。
  • 叶子节点之间通过双向链表连接,便于范围查询。

例如,假设我们有一组数据 [5, 3, 7, 2, 4, 6, 8],构建的 B+ 树如下:

        5/ \3   7/ \ / \2  4 6  8

在 B+ 树中,叶子节点存储实际数据,而非叶子节点只存储指向叶子节点的指针。这种结构使得 B+ 树在范围查询时更加高效。例如,查询 [3, 7] 范围内的数据,只需从叶子节点 3 开始,沿着双向链表依次查找即可。

( 六) MySQL 中的索引实现

在 MySQL 中,索引主要基于 B+ 树实现。B+ 树的结构非常适合数据库的存储和查询需求:

  • 高效查询 :B+ 树的多路查找特性使得查找效率为 O(log n),并且由于叶子节点存储数据,查询速度更快。
  • 范围查询优化 :B+ 树的叶子节点通过双向链表连接,便于范围查询操作。
  • 数据存储优化 :B+ 树将数据存储在叶子节点,减少了非叶子节点的存储开销,提高了存储效率。

(七) 索引类型及特点

  • 聚簇索引 :InnoDB 引擎默认以主键构建聚簇索引。如对学生表按主键查询 SELECT * FROM student WHERE id = 1001; ,数据库直接通过聚簇索引定位到数据所在位置,快速返回结果。
  • 非聚簇索引(二级索引) :假设在学生表的 name 字段上创建了二级索引。当执行 SELECT * FROM student WHERE name = 'ZhangSan'; 时,先通过二级索引找到对应的主键值,再通过主键进行回表查询,获取完整的学生记录。

三、覆盖索引与超大分页优化

(一)覆盖索引

在学生表中,若查询 SELECT id, name FROM student WHERE id = 1001; ,由于查询的列(idname )都在主键索引(假设主键是 id )中,无需回表查询,这就是覆盖索引。这种情况下,查询性能更高。

(二)超大分页优化

  • 传统分页问题 :对于查询 SELECT * FROM stu LIMIT 1000000, 10; ,数据库需要扫描大量数据才能获取目标分页结果,性能极低。
  • 优化方式 :通过覆盖索引优化,先查询主键范围 SELECT id FROM stu ORDER BY id LIMIT 1000000, 10; ,再关联查询 SELECT * FROM stu WHERE id IN (查询到的主键列表); 。或者利用子查询辅助分页 SELECT * FROM stu a INNER JOIN (SELECT id FROM stu WHERE id > last_id ORDER BY id LIMIT 10) b ON a.id = b.id; ,提高分页效率。

四、索引创建原则与失效场景

(一)创建原则

  • 高查询频次字段优先 :在一个论坛系统中,帖子表 posts 经常按 category_id 查询,可在该字段上创建索引,加速查询速度。
  • 按查询条件字段顺序建索引 :对于查询 SELECT * FROM stu WHERE class_id = 5 AND age > 18; ,可创建复合索引 (class_id, age) ,遵循查询习惯,提升性能。
  • 合理控制索引数量 :过多索引会拖慢数据增删改速度,一般单表索引数控制在 3 - 5 个。

(二)失效场景

  • 违反最左前缀原则 :复合索引 (name, age) ,查询条件仅用 age ,索引失效。如在学生表中查询 SELECT * FROM student WHERE age = 20; ,由于未使用索引的最左前缀 name ,无法利用该复合索引。
  • 隐式转换 :索引列 name 是字符串,查询条件写成 WHERE name = 123 (隐式转为字符串),索引失效。应在查询时保持数据类型一致,如 WHERE name = '123'
  • 索引列运算SELECT * FROM stu WHERE age + 1 = 20; ,age 索引失效,因运算使数据库无法直接用索引匹配。应避免对索引列进行运算,改为直接比较操作。

五、SQL 优化综合策略

  1. 精准选型 :创建表时,根据数据范围、精度选合适类型。如整数优先选 int ,而非 bigint ,节省存储空间。例如,在记录性别时,使用 tinyint 即可满足需求,无需使用 bigint
  2. 优化查询语句 :尽量用 union all 替代 union 。假设有一个查询,需要合并两个子查询结果,且允许重复记录,使用 union all 可提高性能。优先用内连接替代左连接和右连接,如查询学生和对应的成绩,使用内连接 SELECT student.name, score.score FROM student INNER JOIN score ON student.id = score.student_id; ,执行顺序优化更智能。
  3. 避免模糊查询滥用 :前缀模糊查询可用索引,后缀模糊查询尽量避免,或通过全文索引优化。例如,在搜索文章标题时,若用户输入前缀关键词,可使用前缀模糊查询 SELECT * FROM articles WHERE title LIKE '关键字%'; ,若用户输入后缀关键词,可考虑使用全文索引进行优化。

六、事务特性与隔离级别

(一)事务特性

  • 原子性 :如银行转账操作,从张三账户扣款和给李四账户加款要么全做,要么全不做。通过数据库事务控制语句 COMMIT 提交、ROLLBACK 回滚保障。例如,张三账户余额为 1000 元,李四账户余额为 500 元,执行转账 200 元操作,若在扣款后加款前系统故障,事务回滚,确保张三和李四的账户余额仍为转账前的状态。
  • 一致性 :事务执行前后,数据需满足完整性约束。如库存表,商品数量不能为负,通过数据库的外键约束、检查约束等维护一致性。例如,商品表中商品数量字段设置检查约束 CHECK (quantity >= 0) ,确保库存数量始终非负。
  • 隔离性 :不同事务间相互独立。如两个订单同时扣减库存,事务 A 扣减商品 A 的库存,事务 B 扣减商品 B 的库存,它们互不干扰,隔离性确保并发操作的正确性。
  • 持久性 :事务提交后,数据永久存储。即使数据库宕机,利用日志(redo log)恢复数据。例如,事务提交后,数据写入磁盘,即使数据库服务器突然断电,重新启动后可通过 redo log 恢复数据。

(二)事务隔离级别

  • 读未提交 :事务可读其他未提交事务数据,会出现脏读。如事务 A 读到事务 B 未提交的更新数据,B 回滚后,A 读到 “幻影” 数据。例如,事务 A 查询商品价格为 100 元,事务 B 将价格更新为 120 元但未提交,事务 A 再次查询到价格为 120 元,B 回滚后,A 的两次查询结果不一致。
  • 读已提交 :解决脏读,只能读其他已提交事务数据,但存在不可重复读。如事务 A 两次读同一数据,中间事务 B 修改并提交,A 两次读结果不同。例如,事务 A 查询某用户余额为 1000 元,事务 B 给该用户充值 200 元并提交,事务 A 再次查询该用户余额为 1200 元。
  • 可重复读(默认) :保证同一事务多次读数据一致,但可能出现幻读。如事务 A 先查询某表无某记录,事务 B 插入该记录并提交,A 再查询仍看不到新记录(通过 MVCC 实现)。例如,事务 A 查询学生表中没有姓名为 “张三” 的记录,事务 B 插入一条姓名为 “张三” 的记录并提交,事务 A 再次查询学生表仍看不到这条新记录。
  • 串行化 :事务串行执行,完全隔离,但并发性能差。例如,在高并发的电商系统中,若设置事务隔离级别为串行化,可能会导致大量事务排队等待执行,严重影响系统性能。

七、Undo Log 与 Redo Log 关键作用

  • Undo Log(撤销日志) :记录事务操作前数据状态,用于事务回滚。如事务插入一条记录,Undo Log 记录删除该记录的操作,回滚时执行这些操作恢复数据。例如,事务执行 INSERT INTO student(name, age) VALUES('ZhangSan', 20); ,Undo Log 记录对应的删除操作,若事务回滚,数据库执行 Undo Log 中的操作,撤销插入。
  • Redo Log(重做日志) :记录事务操作后数据状态,用于数据库崩溃恢复。如数据库宕机,重启后读取 Redo Log,将未完成事务操作重做,确保数据持久性。例如,事务执行 UPDATE student SET age = 21 WHERE name = 'ZhangSan'; ,Redo Log 记录更新后的数据状态,数据库崩溃后,通过 Redo Log 重新应用该更新操作,保证数据完整性。

八、MVCC 原理解析

MVCC(多版本并发控制)在高并发场景下提升事务性能。以 InnoDB 为例:

  • 版本链构建 :每行记录含多个隐藏字段,如 DB_TRX_ID (最近修改事务 ID)、DB_ROLL_PTR (指向 Undo Log 信息)。每次更新,会在 Undo Log 生成旧版本数据,形成版本链。例如,事务 A 更新某记录的年龄字段,Undo Log 保存更新前的年龄值,记录指向该 Undo Log 的指针。
  • Readview 协同 :Readview 记录当前活跃事务 ID 集合,事务读数据时,根据 Readview 判断可见版本。如事务 A 开始时生成 Readview,若事务 B 在 A 开始后修改数据,A 仍能看到 B 修改前的数据版本,实现非阻塞读。例如,事务 A 查询某记录,事务 B 修改该记录并提交,事务 A 通过 Readview 判断该记录的可见版本,读取到事务 B 修改前的数据,保证读操作不受干扰。

相关文章:

Mysql面试知识点详解

Mysql面试知识点详解 Mysql 是 Java 开发领域中常用的持久层框架,在面试和实际开发中都占据重要地位。本文将深入剖析 Mysql的核心知识点,并结合实战案例,帮助读者全面掌握相关技能。 一、慢查询定位与分析 (一)定位…...

数智读书笔记系列030《曲折的职业道路:在终身工作时代找准定位》与《做自己的教练:战胜工作挑战掌控职业生涯》

书籍简介 《曲折的职业道路:在终身工作时代找准定位》由英国职业发展专家海伦塔珀(Helen Tupper)和莎拉埃利斯(Sarah Ellis)合著,旨在帮助读者应对现代职场中日益普遍的“非直线型”职业路径。两位作者是“神奇的如果”(Amazing If)公司的联合创始人,曾为李维斯、沃达…...

Linux内核之文件驱动随笔

前言 近期需要实现linux系统文件防护功能,故此调研了些许知识,如何实现文件防护功能从而实现针对文件目录防护功能。当被保护的目录,禁止增删改操作。通过内核层面实现相关功能,另外在通过跟应用层面交互从而实现具体的业务功能。…...

【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?

根据你的需求,这里提供一套完整的Python解决方案,支持递归遍历子文件夹、提取Word文档内容(段落+表格),并整合到Excel中。以下是代码实现及详细说明: 一个单元格一个word的全部内容 完整代码 # -*- coding: utf-8 -*- import os from docx import Document import pand…...

IDEA中如何统一项目名称/复制的项目如何修改根目录名称

1、问题概述? 在开发中,有时候为了方便,我们会复制一个新的项目,结果出现如下提示: 会在工程的后面提示工程原来的名字。 这种情况就是复制之后名字修改不彻底造成的。 2、彻底的修改工程的名字 2.1、修改pom.xml中…...

Ubuntu-Linux中vi / vim编辑文件,保存并退出

1.打开文件 vi / vim 文件名(例: vim word.txt )。 若权限不够,则在前方添加 sudo (例:sudo vim word.txt )来增加权限; 2.进入文件,按 i 键进入编辑模式。 3.编辑结…...

如何在idea里创建注释模版

✅ 步骤:创建一个类注释的 Live Template(缩写为 cls) ① 打开设置 IDEA 菜单栏点击:File > Settings(或按快捷键 Ctrl Alt S) ② 进入 Live Templates 设置 在左侧菜单找到:Editor > …...

IntelliJ IDEA 新版本中 Maven 子模块不显示的解决方案

一、问题现象与背景 在使用 IntelliJ IDEA 2024 版本开发 Maven 多模块项目时,我发现一个令人困惑的现象:父模块的子模块未在右侧 Maven 工具窗口中显示,仅显示父模块名称(且无 (root) 标识)。而此前在 IntelliJ IDEA…...

day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)

题目描述 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字…...

美乐迪电玩大厅加载机制与 RoomList 配置结构分析

本篇为《美乐迪电玩全套系统搭建》系列的第三篇,聚焦大厅与子游戏的动态加载机制,深入解析 roomlist.json 的数据结构、解析流程、入口配置方式与自定义接入扩展技巧。通过本篇内容,开发者可实现自由控制子游戏接入与分发策略。 一、RoomList…...

局域网内,将linux(Ubuntu)的硬盘映射成Windows上,像本地磁盘一样使用

如何把同处一个局域网内的Ubuntu硬盘,映射到Windows上,使得Windows就像使用本地磁盘一样使用Ubuntu的磁盘? 要在同一局域网内的Windows上像本地磁盘一样使用Ubuntu硬盘,可以按照以下步骤操作: 1. 在Ubuntu上设置Samba…...

界面控件DevExpress WPF v25.1预览 - 支持Windows 11系统强调色

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

【Hive入门】Hive架构与组件深度解析:从核心组件到生态协同

目录 1 Hive架构全景图 2 核心组件运维职责详解 2.1 Metastore元数据中心 2.2 Driver驱动组件 2.3 Executor执行引擎 3 与HDFS/YARN的协同关系 3.1 HDFS协同架构 3.2 YARN资源调度 4 运维实战案例 4.1 Metastore连接泄露 4.2 小文件合并 5 最佳实践总结 5.1 性能优…...

【图像识别改名】如何批量识别多个图片的区域内容给图片改名,批量图片区域文字识别改名,基于WPF和腾讯OCR的实现方案和步骤

基于WPF和腾讯OCR的批量图像区域文字识别改名方案 本方案适用于以下场景: 大量扫描文档需要根据文档中的特定区域内容(如编号、标题等)进行重命名证件照片需要根据证件号码或姓名进行整理归档企业档案管理需要根据文件上的编号自动分类教育机构需要根据学生试卷上的学号自动…...

从ChatGPT到GPT-4:大模型如何重塑人类认知边界?

从ChatGPT到GPT-4:大模型如何重塑人类认知边界? 在人工智能(AI)领域,近年来最引人注目的进展之一是大型语言模型的发展。从最初的GPT-1到现在的GPT-4,这些模型不仅在技术上取得了显著的进步,而…...

QEMU源码全解析 —— 块设备虚拟化(21)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(20) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析blockdev_init函数,讲到了其中调用的blk_new_open函数,该函数的作用…...

vue2练习项目 家乡特色网站—前端静态网站模板

最近一直在学习前端 vue2 开发,基础知识已经学习的差不多了,那肯定需要写几个项目来练习一下自己学习到的知识点。今天就分享一个使用 vue2 开发的一个前端静态网站,【家乡特色网站】 先给大家看一下网站的样式: 这里就只简单的…...

CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析

论文地址:https://arxiv.org/pdf/2504.11305 目录 一、论文核心贡献 二、创新点详解 2.1 CARAFE动态上采样 工作原理 优势对比 2.2 C2f_FNB轻量模块 计算效率 2.3 Inner-SIoU损失函数 三、实验验证 3.1 消融实验 3.2 对比实验 四、应用部署 4.1 边缘设备部署流程…...

vue3 + element-plus中el-dialog对话框滚动条回到顶部

对话框滚动条回到顶部 1、需要对话框显示后 2、使用 nextTick 等待 Dom 更新完毕 3、通过开发者工具追查到滚动条对应的标签及class“el-overlay-dialog”。追查方法: 4、设置属性 scrollTop 0 或者 执行方法 scrollTo(0, 0) // 对话框显示标识 const dialogVi…...

赛灵思Xilinx FPGa XCKU15P‑2FFVA1156I AMD Kintex UltraScale+

XCKU15P‑2FFVA1156I 是 AMD Kintex UltraScale 系列中的高性能 FPGA,基于 16 nm FinFET UltraScale 架构 制造,兼顾卓越的性能与功耗比,该器件集成 1,143,450 个逻辑单元和 82,329,600 位片上 RAM,配备 1,968 个 DSP 切片&#…...

力扣2492:并查集/dfs

方法一:并查集。如果不仔细读题,可能会想着把每一个一维数组下标为2的位置进行排序即可。但这是不行的。因为有可能有一些节点在其它集合当中。如果这些节点之间存在一个边权值比节点1所在集合的最小边权值还要小,那么求出来的答案就是错的。…...

宝塔面板引发的血案:onlyoffice协作空间无法正常安装的案例分享

今天和客户一起解决:onlyoffice协作空间的安装问题,本来已经发现由于客户用的机械硬盘,某些安装步骤等待的时间不够,已经加了处理。但是安装成功后,登录系统一直提示报错如下 检查docker容器都是正常的,并且health也是正确的,登录就一直报错。后面发现用免费版的安装程序可以正…...

【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人

练习题 【单选题】1. 在调用通义千问大模型时,将API Key存储在环境变量中的主要目的是? A. 方便在代码中引用 B. 提高API调用的速度 C. 增强API Key的安全性 D. 符合阿里云的规定 【多选题】2. 以下哪些属于大模型在问答场景中的工作阶段?( ) A. 输入文本分词化 B. Toke…...

C++中的算术转换、其他隐式类型转换和显示转换详解

C中的类型转换(Type Conversion)是指将一个数据类型的值转换为另一个数据类型的过程,主要包括: 一、算术类型转换(Arithmetic Conversions) 算术类型转换通常发生在算术运算或比较中,称为**“标…...

Python自动化selenium-一直卡着不打开浏览器怎么办?

Python自动化selenium 如果出现卡住不打开,就把驱动放当前目录并指定 from selenium import webdriver from selenium.webdriver.chrome.service import Service import time import osdef open_baidu():# 获取当前目录中的chromedriver.exe的绝对路径current_di…...

AI Agent开发第35课-揭秘RAG系统的致命漏洞与防御策略

第一章 智能客服系统的安全悖论 1.1 系统角色暴露的致命弱点 当用户以"你好"开启对话后追问"你之前说了什么",看似无害的互动实则暗藏杀机。2024年数据显示,93%的开源RAG系统在该场景下会完整复述初始化指令,导致系统角色定义(如电商导购)被完全暴露…...

【MySQL】数据库安装

数据库安装 一. Ubantu下安装 MySQL 数据库1. 查看Linux系统版本2. 添加 MySQL APT 源1. Windows 下载发布包2. 上传发布包到 Linux3. 安装发布包 3. 安装 MySQL4. 查看 MySQL 状态5. 开启自启动6. 登录 MySQL 一. Ubantu下安装 MySQL 数据库 1. 查看Linux系统版本 操作系统版…...

OpenGL shader开发实战学习笔记:第十二章 深入光照

1. 深入光照 1.1. 平行光 我们在前面的章节中,已经介绍了平行光的基本原理和实现步骤 平行光的基本原理是,所有的光都从同一个方向照射到物体上,这个方向就是平行光的方向。 1.2. 点光源 点光源的基本原理是,所有的光都从一个…...

1-1 什么是数据结构

1.0 数据结构的基本概念 数据结构是计算机科学中一个非常重要的概念,它是指在计算机中组织、管理和存储数据的方式,以便能够高效地访问和修改数据。简而言之,数据结构是用来处理数据的格式,使得数据可以被更有效地使用。 数据结构…...

【MySQL】:数据库事务管理

一:学习路径 (1)下载安装mysql (2)学习语言:SQL(操作数据库) (3)mysql集群(提升数据库存储效率) (4)SQL使用,M…...

leetcode 647. Palindromic Substrings

题目描述 代码&#xff1a; class Solution { public:int countSubstrings(string s) {int n s.size();//i<j,dp[i][j]表示子字符串s[i,j]是否是回文子串,i>j的dp[i][j]不定义vector<vector<int>> dp(n,vector<int>(n,false));int res 0;for(int i …...

Linux-scp命令

scp&#xff08;Secure Copy Protocol&#xff09;是基于 SSH 的安全文件传输命令&#xff0c;用于在本地和远程主机之间加密传输文件或目录。以下是详细用法和示例&#xff1a; 基本语法 scp [选项] 源文件 目标路径常用选项 选项描述-P 端口号指定 SSH 端口&#xff08;默认…...

在CSDN的1095天(创作纪念日)

一早上收到CSDN官方的私信&#xff0c;时间飞逝&#xff0c;转眼间3年了…… 一些碎碎念… 算起来也断更一年多了&#xff0c;上一次更博客是去年的3月份&#xff0c;那时候还在实习&#xff0c;同时也是去年的三月份结束了第一段实习回学校准备考研&#xff0c;考完研12月开始…...

STM32——新建工程并使用寄存器以及库函数进行点灯

本文是根据江协科技提供的教学视频所写&#xff0c;旨在便于日后复习&#xff0c;同时供学习嵌入式的朋友们参考&#xff0c;文中涉及到的所有资料也均来源于江协科技&#xff08;资料下载&#xff09;。 新建工程并使用寄存器以及库函数进行点灯操作 新建工程步骤1.建立工程2.…...

【Linux】多线程任务模块

创建多个线程&#xff0c;同时完成任务 task.c #include <sys/types.h> #include <unistd.h> #include<stdio.h> #include <sys/wait.h> int create_process_tasks(Task_fun_t tasks[],int tsak_cnt) {pid_t pid;int i 0;for(i 0;i < 4;i){pid …...

Maxscript调用Newtonsoft.Json解析Json

Maxscript调用Newtonsoft.Json解析Json_newtonsoft.json maxscript-CSDN博客...

【前端】【面试】【业务场景】前端如何获取并生成设备唯一标识

✅ 总结 问题&#xff1a;前端如何获取并生成设备唯一标识&#xff1f; 核心要点&#xff1a;浏览器原生信息有限&#xff0c;但通过组合多个维度可生成设备指纹&#xff08;Device Fingerprint&#xff09;&#xff0c;用于唯一标识设备。 常见方式&#xff1a; 浏览器信息&…...

《Java面试通关宝典:基础篇》——Java面试题系列(持续更新)

《Java面试通关宝典&#xff1a;基础篇》是一篇针对Java编程初学者的面试宝典&#xff0c;旨在帮助大家快速复习Java编程语言的基础知识&#xff0c;提高面试竞争力。本文详细介绍了Java基础知识的各个方面&#xff0c;包括语言基础、面向对象、集合框架、异常处理等内容。同时…...

学习笔记(C++篇)--- Day 3

1.析构函数 析构函数不是完成对对象本身的销毁&#xff0c;C规定对象在销毁时会自动调用析构函数&#xff0c;完成对象中资源的清理释放工作。&#xff08;严格说&#xff0c;Date是不要析构函数的&#xff09; 特点&#xff1a; ①析构函数名是在类名钱加上字符~。 ②无参数&a…...

消息队列知识点详解

消息队列场景 什么是消息队列 可以把消息队列理解一个使用队列来通信的组件&#xff0c;它的本质是交换机队列的模式&#xff0c;实现发送消息&#xff0c;存储消息&#xff0c;消费消息的过程。 我们通常说的消息队列&#xff0c;MQ其实就是消息中间件&#xff0c;业界中比较…...

AI 赋能 3D 创作!Tripo3D 全功能深度解析与实操教程

大家好&#xff0c;欢迎来到本期科技工具分享&#xff01; 今天要给大家带来一款革命性的 AI 3D 模型生成平台 ——Tripo3D。 无论你是游戏开发者、设计师&#xff0c;还是 3D 建模爱好者&#xff0c;只要想降低创作门槛、提升效率&#xff0c;这款工具都值得深入了解。 接下…...

DeepSeek赋能Nuclei:打造网络安全检测的“超级助手”

引言 各位少侠&#xff0c;周末快乐&#xff0c;幸会幸会&#xff01; 今天唠一个超酷的技术组合——用AI大模型给Nuclei开挂&#xff0c;提升漏洞检测能力&#xff01; 想象一下&#xff0c;当出现新漏洞时&#xff0c;少侠们经常需要根据Nuclei模板&#xff0c;手动扒漏洞文章…...

【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计

目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性&#xff1a;经典面试问题&#xff08;进阶问题&#xff09; 1.6 foreign key — 外键约束 1.7…...

学习深度学习是否要先学习机器学习?工程师的路径选择策略

深度学习与机器学习的关系&#xff0c;如同摩天大楼与地基——前者是后者的高阶延伸&#xff0c;但能否绕过地基直接造楼&#xff1f;本文从技术本质、学习曲线、应用场景三个维度剖析这一关键问题。 一、技术血脉的承继关系 概念体系同源&#xff1a; 损失函数、梯度下降、过拟…...

高防服务器适合哪些行业使用

在当今数字化的时代&#xff0c;网络安全就如同城堡的城墙&#xff0c;而高防服务器则是这道城墙中的坚固堡垒。那么&#xff0c;究竟哪些行业特别需要高防服务器这位“守护天使”的庇佑呢&#xff1f; 首先&#xff0c;金融行业绝对是高防服务器的“头号粉丝”。想象一下&…...

【Docker-16】Docker Volume存储卷

Docker Volume(存储卷) 概念比喻镜像程序的光盘&#xff08;安装包&#xff09;容器安装并运行后的 App卷独立的文件夹或硬盘&#xff0c;用来保存数据宿主机装着 Docker 的电脑或服务器&#xff0c;是一切的基础 一、什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在…...

后端如何生成验证码

目录 &#x1f510; 一、验证码类型与用途 &#x1f4f8; 二、图形验证码的原理&#xff08;Image Captcha&#xff09; &#x1f527; 核心流程 &#x1f6e0;️ 示例&#xff1a;用 Python Pillow 生成图形验证码 &#x1f4f1; 三、数字验证码&#xff08;短信/邮箱&a…...

微服务架构下数据库范式的失效与反范式设计的崛起

在传统单体应用中&#xff0c;关系型数据库范式设计被认为是数据库建模的黄金标准。然而&#xff0c;随着企业架构向分布式系统&#xff0c;特别是微服务架构演进&#xff0c;范式化数据库设计的有效性和适应性正受到前所未有的挑战。本文将深入剖析范式设计的设计哲学&#xf…...

Redis专题

前言 一&#xff1a;看到你的简历上写了你的项目里面用到了redis&#xff0c;为啥用redis&#xff1f; 因为传统的关系型数据库如Mysql,已经不能适用所有的场景&#xff0c;比如秒杀的库存扣减&#xff0c;APP首页的访问流量高峰等&#xff0c;都很容易把数据库打崩&#xff0…...

Vue的模板语法——指令语法

2025/4/21 向全栈工程师迈进&#xff01; 一、插值语法 之前通过插值语法&#xff0c;其显示的效果如下。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...