面试题总结二
1.mybatis三个范式
- 第一范式:表中字段不能再分,每行数据都是唯一的
- 第二范式:满足第一范式,非主键字段只依赖于主键
- 第三范式:满足第二范式,非主键字段没有传递依赖
2.MySQL数据库引擎有哪些
- InnoDB(默认):支持事务,外键约束,行级锁,mvcc,高并发
- MyISAM:不支持事务和外键约束,查询效率高
- Memery:数据存储到内存中,读写极快,查询块
3.数据库事务–ACID
原子性,一致性,隔离性,持久性
4.索引是什么,怎么用
索引是数据库中用于快速定位数据的一种数据结构,类似于书籍的目录。合理使用索引可以显著提升查询效率,但错误的索引策略会导致性能下降。
原理:通过索引快速定位数据位置,避免全表扫描。常见类型有 B-Tree、哈希、全文索引等。
5.SQL优化的手段有哪些
- 查询语句优化
- 避免全表扫描
问题:SELECT * FROM users WHERE age > 20(无索引时全表扫描)。
优化:为age字段添加索引,改为SELECT id, age FROM …(覆盖索引)。 - 减少子查询
问题:SELECT * FROM orders WHERE user_id IN (SELECT id FROM users WHERE gender=‘女’)。
优化:改用JOIN
- 索引优化
- 表结构优化
- 垂直拆分:将不常用字段拆分到单独表,减少主表数据量
- 水平拆分(分库分表)按时间或 ID 范围拆分大表
- 数据库参数调整
- InnoDB 缓冲池大小
- 查询缓存
6. drop,delete,truncate的区别
- DROP DROP TABLE table_name; 删除整个表结构及数据,释放存储空间。
- DELETE DELETE FROM table_name WHERE condition; 删除符合条件的记录,可带 WHERE 子句。
- TRUNCATE TRUNCATE TABLE table_name; 快速删除表中所有数据,保留表结构。
7.什么是视图
视图(View) 是一种虚拟表,它基于 SQL 查询语句定义,并不实际存储数据。视图像是一个窗口,通过它可以查看或操作数据库中的特定数据,而无需直接访问底层表。
视图是一个预定义的 SQL 查询,存储在数据库中作为对象,但不存储实际数据。每次查询视图时,数据库会动态执行其定义的 SQL 语句并返回结果。
- 作用:
简化复杂查询:将常用的复杂查询封装为视图,简化使用。
数据安全:通过视图暴露部分数据,隐藏敏感字段(如用户密码)。
逻辑隔离:屏蔽底层表结构变化,提供稳定的数据接口。
权限控制:仅授权用户访问视图,而非直接操作表。
8.什么是内连接,左外连接,右外连接
9.并发事务带来哪些问题
脏读,幻读,不可重复读,丢失更新
10.事务隔离级别有哪些,MySQL的默认隔离级别是
数据库的事务隔离级别是控制并发事务之间可见性的机制,用于平衡数据一致性和系统性能。不同隔离级别解决不同的并发问题(如脏读、不可重复读、幻读)。
读未提交:脏读
读已提交:幻读,不可重复读
可重复读:幻读
串行化:最高隔离级别,强制事务串行执行,避免所有并发问题(脏读、不可重复读、幻读、丢失更新)
11.MVCC
MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库实现高并发的核心技术,通过保存数据的多个版本,让读写操作可以并发执行而互不阻塞。
- MVCC 的核心思想
- 读写分离:
读操作不获取锁,直接读取历史版本数据,避免与写操作互斥。 - 无锁读:
读操作不会阻塞写操作,写操作也不会阻塞读操作,提升并发性能。 - 版本管理:
每个数据行维护多个版本,通过事务 ID 和时间戳标识版本顺序。
12.大表如何优化?
- 限定数据的范围
- 读写分离
- 垂直分区
- 水平分区
13.分库分表后,id主键如何处理
在数据库分库分表后,传统的自增主键(如 MySQL 的AUTO_INCREMENT)无法直接保证全局唯一性,需要设计新的 ID 生成方案。
- UUID(通用唯一识别码)
- 数据库自增 ID(分布式 ID 表)
- Redis 生成 ID
14.MySQL中varchar和char区别
特性 VARCHAR CHAR
存储方式 变长存储(动态分配空间) 定长存储(固定分配空间)
存储空间 实际字符串长度 + 1-2 字节(记录长度) 固定为定义的长度(不足补空格)
最大长度 65,535 字节(受行最大长度和字符集限制) 0-255 字符
存储示例 VARCHAR(10)存储’abc’ → 占用 4 字节 CHAR(10)存储’abc’ → 占用 10 字节
15.int(11)代表什么含义
括号内的数字(11) 与存储范围无关,仅表示 显示宽度
jvm知识点汇总
JVM(Java Virtual Machine)是 Java 平台的核心,负责将字节码翻译成机器码并执行。
- JVM 整体架构
JVM 由三个主要部分组成:
- 类加载子系统(Class Loading Subsystem)
负责加载 .class 文件到内存。 - 运行时数据区(Runtime Data Areas)
包含方法区、堆、栈、本地方法栈、程序计数器等内存区域。 - 执行引擎(Execution Engine)
解释 / 编译字节码为机器码并执行,包含即时编译器(JIT)和垃圾回收器。
- 类加载流程
- 加载(Loading)
通过类加载器将 .class 文件加载到内存。 - 链接(Linking)
验证(Verification):确保字节码符合 JVM 规范。
准备(Preparation):为静态变量分配内存并设置初始值。
解析(Resolution):将符号引用转换为直接引用。 - 初始化(Initialization)
执行类构造器 () 方法,初始化静态变量和静态代码块。
- 内存区域
- 堆(Heap)
所有对象实例和数组分配的内存区域。
线程共享,是垃圾回收的主要区域(GC 堆)。
可分为新生代(Eden、Survivor 区)和老年代。 - 方法区(Method Area)
存储类信息、常量、静态变量、即时编译后的代码等。
线程共享,JDK 8 后称为元空间(Metaspace),使用本地内存。 - 栈(JVM Stack)
每个线程私有,存储方法调用的栈帧(局部变量表、操作数栈、动态链接、方法出口)。
抛出 StackOverflowError(栈深度超过限制)或 OutOfMemoryError(栈扩展失败)。 - 本地方法栈(Native Method Stack)
为 Native 方法服务,如使用 C 语言实现的方法。 - 程序计数器(Program Counter Register)
记录当前线程执行的字节码行号,线程私有。
1.jvm类加载和卸载
- 类加载的生命周期
类从被加载到虚拟机内存到卸载,经历以下阶段:
加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载 - 双亲委派模型工作流程
当类加载器收到加载请求时,先委派给父类加载器尝试加载。
父类加载器继续向上委派,直到启动类加载器。
若父类加载器无法加载(查找范围未找到),则子类加载器尝试加载 - 类卸载的条件
JVM 中的类被卸载需同时满足以下三个条件:
该类的所有实例已被垃圾回收。
加载该类的类加载器已被垃圾回收。
该类的 java.lang.Class 对象没有被任何地方引用。
2.方法区和本地方法栈的区别
方法区 本地方法栈
存储内容 类信息、常量、静态变量、JIT 编译后的代码 本地方法(Native Method)的调用栈帧
线程共享性 所有线程共享 每个线程独立拥有
内存位置 JDK 7 前:堆的永久代
JDK 8 后:本地内存(元空间) 通常在 JVM 内存区域内(HotSpot 将其与虚拟机栈合并)
生命周期 与 JVM 生命周期一致(除非使用自定义类加载器) 与线程生命周期一致
3. 堆和栈的区别
特性 堆(Heap) 栈(Stack)
存储对象 实例和数组 方法栈帧
线程安全 需同步机制 天然线程安全
分配方式 动态(运行时) 静态(编译时)
回收方式 GC 自动回收 方法结束后自动释放
性能 较慢 极快
4.什么时候触发Full GC
- 新生代对象经过多次 Minor GC 后仍存活,会晋升到老年代。若老年代空间不足,触发 Full GC。
- 清除算法(如 CMS)会产生内存碎片,当无法为大对象分配连续空间时,触发 Full GC 进行内存整理。
-
如何减少 Full GC 频率?
优化堆内存配置
增大堆空间,合理分配新生代和老年代比例。
避免大对象和长生命周期对象
减少直接进入老年代的大对象,降低晋升压力。
选择合适的 GC 收集器
如 G1 适合大内存场景,CMS 适合低延迟场景。Full GC 的触发通常与内存分配失败、空间不足或碎片问题相关。频繁的 Full GC 会严重影响系统性能,因此需要通过监控工具(如 GCEasy、GCViewer)分析 GC 日志,针对性地调整堆大小、收集器类型或代码逻辑。
5.java被称为平台无关的编程语言原因?
Java 源代码(.java)经编译器编译后生成字节码文件(.class),而非直接生成平台特定的机器码。
每个平台(Windows、Linux、macOS 等)都有对应的 JVM 实现,负责将字节码翻译成具体平台的机器码并执行。
6.什么是jvm?
JVM(Java Virtual Machine)即Java 虚拟机,是 Java 平台的核心组件,负责执行 Java 字节码,实现 “一次编写,到处运行” 的跨平台特性。它是一个抽象的计算机,通过软件模拟实现了计算机的基本功能(如内存管理、指令执行、线程调度等)。
7.描述jvm加载class文件的原理机制
- 类加载的时机
JVM 遵循按需加载原则,在以下情况发生时会触发类的加载:
- 创建类的实例(new操作)
- 调用类的静态方法或访问静态字段
- 使用反射(如Class.forName())
- 初始化子类时会先触发父类加载
- JVM 启动时指定的主类(含main方法的类)
- 双亲委派模型
8. 对象分配规则
- 对象优先在 Eden 区分配
原理:大多数情况下,新创建的对象会被分配到新生代的Eden 区。
触发 GC:当 Eden 区空间不足时,会触发Minor GC(新生代垃圾回收),存活的对象会被移至Survivor 区。 - 大对象直接进入老年代
- 长期存活的对象进入老年代
- 空间分配担保
发生 Minor GC 前,JVM 会检查老年代最大可用连续空间是否大于新生代所有对象总空间。
若成立,Minor GC 安全;否则,查看-XX:HandlePromotionFailure(JDK 6 + 默认允许担保失败)。
若允许,检查老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小:
是:尝试 Minor GC(可能失败)。
否:触发 Full GC。
9.java对象创建过程
-
类加载检查:当 JVM 遇到new指令时,首先检查指令的参数是否能在常量池中定位到一个类的符号引用,并验证这个类是否已被加载、链接和初始化。如果没有,则先执行类的加载过程(见前文类加载机制)
-
分配内存
方式:根据堆内存是否规整,有两种分配方式:
指针碰撞(Bump the Pointer):若内存规整(用过的内存放一边,空闲的放另一边),通过移动指针分配内存。
空闲列表(Free List):若内存不规整,JVM 维护一个记录可用内存块的列表,从中分配。 -
内存初始化
零值初始化:分配到的内存空间初始化为零值(如int为 0,引用类型为null)。
作用:保证对象的实例字段在 Java 代码中可以不赋初始值就直接使用。
10.java对象生命周期
- 创建阶段:
类加载检查:JVM 检查类是否已加载,未加载则触发类加载机制。
内存分配:在堆中为对象分配内存,可能使用 TLAB(线程本地分配缓冲区)优化。
初始化零值:所有字段初始化为默认值(如int为 0,引用为null)。
设置对象头:存储哈希码、分代年龄、锁状态等信息。
执行构造方法:按顺序初始化实例变量和执行构造代码。 - 应用阶段
对象创建后进入应用阶段,此时对象具有以下特征:
可达性:至少有一个引用指向该对象(如栈中的局部变量、静态变量等)。
活跃状态:对象在程序中被使用,参与各种业务逻辑。
内存占用:对象在堆中占据空间,其字段值可能被修改。 - 不可达阶段(Unreachable)
当对象不再被引用时,进入不可达阶段,常见原因:
引用置为null:如person = null。
局部变量超出作用域:方法执行结束后,局部变量引用的对象可能不可达。
对象被集合移除:如list.remove(person)。
弱引用或软引用被 GC 回收:当内存不足时,JVM 会回收这些引用关联的对象。 - 可回收阶段(Finalizable)
当对象不可达时,GC 会标记该对象,并检查是否重写了finalize()方法:
未重写finalize():对象直接进入可回收状态。
重写了finalize():对象会被放入F-Queue队列,由 Finalizer 线程执行finalize()方法(仅执行一次)。
注意:finalize()性能差且不可靠,不推荐使用,建议用try-with-resources或AutoCloseable替代。 - 收集阶段(Collected)
Minor GC:对象在 Eden 区创建,当 Eden 区满时触发 Minor GC,存活的对象被移至 Survivor 区。
晋升老年代:对象在 Survivor 区经历多次 GC 后(默认 15 次),晋升到老年代。
Full GC:老年代空间不足时触发 Full GC,回收整个堆的垃圾对象。 - 终结阶段(Finalized)
当finalize()方法执行完毕(如果有)或对象未重写finalize(),对象进入终结阶段。
此时对象的内存空间已被标记为可回收,但尚未被实际释放。 - 对象内存回收
GC 算法:标记 - 清除、标记 - 整理、复制算法等(取决于 JVM 的 GC 策略)。
分代回收:新生代(Eden、Survivor)和老年代采用不同的回收策略。
内存分配担保:老年代需担保新生代对象晋升的空间。
11.jvm的永久代中会发生垃圾回收吗
在 JVM 中,永久代(PermGen)会发生垃圾回收,但回收条件较为苛刻,且回收效率较低。
- 永久代的垃圾回收对象
永久代主要存储类元数据(如类结构、方法字节码)、常量池和静态变量。 - 触发永久代 GC 的条件
显式调用:执行System.gc()可能触发 Full GC,包含永久代回收。
空间不足:永久代空间满时(如达到-XX:MaxPermSize限制),触发 Full GC。
CMS GC:使用 CMS 收集器时,若CMSClassUnloadingEnabled开启,会在 CMS 周期中回收永久代。
12.你知道哪些垃圾收集算法吗
- 标记 - 清除算法(Mark-Sweep)
流程:
标记阶段:从 GC Roots 出发,标记所有可达对象。
清除阶段:回收未被标记的对象,释放内存空间。 - 标记 - 整理算法(Mark-Compact)
流程:
标记阶段:同标记 - 清除算法,标记所有可达对象。
整理阶段:将存活对象向一端移动,然后直接清理边界外的内存。 - 复制算法(Copying)
流程:
将内存分为Eden 区和两个Survivor 区(通常比例为 8:1:1)。
新对象分配在 Eden 区,当 Eden 区满时,触发 Minor GC。
存活的对象被复制到其中一个 Survivor 区(如 S0),清空 Eden 区。
下次 GC 时,将 Eden 区和 S0 区的存活对象复制到另一个 Survivor 区(S1),然后清空 Eden 和 S0。
对象在 Survivor 区中多次存活后(默认 15 次),晋升到老年代。 - 分代收集算法(Generational Collection)
核心思想:根据对象存活周期将内存分为新生代和老年代,分别采用不同的回收算法。
新生代:对象存活率低,使用复制算法(Minor GC 频繁)。
老年代:对象存活率高,使用标记 - 清除或标记 - 整理算法(Full GC 较少)。
应用:几乎所有现代 JVM(如 HotSpot)都采用分代收集策略。
13.调优命令有哪些
JVM 调优是优化 Java 应用性能的关键环节,涉及内存分配、垃圾回收、线程管理等多个方面。
GC 调优相关参数
-
内存分配参数
bash
-Xms512m # 初始堆大小
-Xmx1g # 最大堆大小
-XX:NewSize=256m # 新生代初始大小
-XX:MaxNewSize=512m # 新生代最大大小
-XX:SurvivorRatio=8 # Eden:Survivor = 8:1
-XX:MetaspaceSize=128m # 元空间初始大小(JDK 8+)
-XX:MaxMetaspaceSize=256m # 元空间最大大小 -
垃圾收集器选择
bash
-XX:+UseSerialGC # 串行收集器(新生代+老年代)
-XX:+UseParallelGC # 并行收集器(新生代)
-XX:+UseParallelOldGC # 并行收集器(老年代)
-XX:+UseConcMarkSweepGC # CMS收集器(老年代)
-XX:+UseG1GC # G1收集器
-XX:+UseZGC # ZGC收集器(JDK 11+) -
GC 日志参数
bash
-verbose:gc # 输出GC简要信息
-XX:+PrintGCDetails # 输出GC详细信息
-XX:+PrintGCDateStamps # 输出GC时间戳
-XX:+PrintHeapAtGC # 输出GC前后的堆信息
-Xloggc:gc.log # 指定GC日志文件
JVM 调优需要结合工具监控和参数调整,常见步骤包括:
- 监控:使用jstat、jmap、VisualVM 等工具收集性能数据。
- 分析:通过 GC 日志、堆转储、线程快照定位问题。
- 调整:根据分析结果调整内存分配、GC 策略等参数。
- 验证:重新运行应用,验证调优效果。
14.Minor GC与Full GC分别在什么时候发生
- Minor GC(新生代 GC)
- 作用范围
仅针对新生代(Eden 区和 Survivor 区)进行垃圾回收。
目标:回收新生代中不再被引用的对象,释放内存空间。 - 触发条件
Eden 区空间不足
当 Eden 区无法容纳新创建的对象时,触发 Minor GC。此时,存活对象会被转移到 Survivor 区(或老年代,若对象年龄足够大)。
动态年龄判定规则
当 Survivor 区中相同年龄的对象大小总和超过 Survivor 区的 50% 时,年龄大于等于该年龄的对象会直接进入老年代。
显式调用System.gc()
虽然System.gc()会触发 Full GC,但在某些场景下(如使用 Serial 收集器时),可能先触发 Minor GC。
- Full GC(全堆 GC)
- 作用范围
针对整个堆内存(新生代、老年代、元空间 / 永久代)进行垃圾回收。
目标:回收老年代和元空间中的垃圾对象,处理跨代引用。 - 触发条件
老年代空间不足
当老年代无法容纳从新生代晋升的对象,或直接在老年代分配大对象(如-XX:PretenureSizeThreshold设置的大对象)时,触发 Full GC。
元空间(MetaSpace)不足(JDK 8+)
元空间用于存储类元数据、常量池等,当空间不足时(如动态生成大量类),触发 Full GC 回收废弃的类元数据。
显式调用System.gc()
调用System.gc()或Runtime.getRuntime().gc()时,会触发 Full GC(可通过-XX:+DisableExplicitGC禁用)。
Minor GC 时的 “担保失败”
新生代 GC 时,若老年代剩余空间不足以容纳所有新生代存活对象,会先尝试触发 Full GC(“安全担保” 机制)。
调用jmap -dump:live等命令
生成堆转储文件时,可能触发 Full GC(仅收集存活对象)。
1.什么是spring?
Spring 是一个开源的 Java 企业级应用开发框架。它旨在简化企业级应用开发,提供全面的基础设施支持,帮助开发者构建高效、可维护的应用程序。
- Spring 的核心优势
IoC(控制反转)与 DI(依赖注入)
通过容器管理对象的生命周期和依赖关系,降低代码耦合度。
AOP(面向切面编程)
支持声明式事务、日志、安全等横切关注点,将通用逻辑与业务逻辑分离。
1.2为什么要用Spring Boot?
Spring Boot 是构建现代 Java 应用的首选框架,它通过自动化配置和约定优于配置(Convention Over Configuration)的理念,彻底简化了 Spring 应用的开发和部署流程。
核心优势
- 快速搭建项目:Starters 依赖管理,内嵌容器
- 自动化配置:零 XML 配置
- 微服务友好:与 Spring Cloud 无缝集成
特性 传统 Spring Spring Boot
依赖管理 手动配置大量依赖及版本 Starter 自动管理依赖
配置方式 大量 XML 或 Java 配置 自动配置 + 少量属性文件
部署方式 需部署 WAR 到外部容器 内嵌容器,直接运行 JAR
监控与运维 需手动集成监控组件 Actuator 开箱即用
开发效率 配置繁琐,启动时间长 快速启动,支持热部署
微服务支持 需额外集成多种组件 与 Spring Cloud 无缝集成
2.spring Boot的核心注解是那个,它主要由哪几个注解组成
Spring Boot 的核心注解是@SpringBootApplication,它是一个组合注解,主要由以下三个注解组成:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan
3.运行springBoot有哪几种方式
- 直接运行主类
条件:IDE(如 IntelliJ IDEA、Eclipse)已安装并配置好 JDK。
步骤:
打开包含main方法的主类(带有@SpringBootApplication注解)。
右键点击main方法,选择 “Run” 或 “Debug”。
2.使用 Maven 插件
命令:mvn spring-boot:run - 打包为可执行 JAR:java -jar myapp-0.0.1-SNAPSHOT.jar
4.如何理解SpringBoot中的starters
在 Spring Boot 中,Starters是一种依赖管理的简化机制,用于快速集成特定功能模块,避免手动配置大量依赖和版本冲突。
5.如何在SpringBoot启动的时候运行一些特定的代码?
PostConstruct:Bean 初始化后立即执行。
ApplicationListener:应用上下文刷新完成后执行。
ApplicationStartedEvent:应用启动过程中触发。
CommandLineRunner/ApplicationRunner:应用上下文完全初始化后执行。
ApplicationReadyEvent:应用完全就绪后触发。
6.springboot需要独立的容器运行吗?
Spring Boot 可以独立运行,也可以部署到外部容器,具体取决于应用类型和部署需求。
- 内嵌容器(默认方式)
Spring Boot 的默认模式是内嵌容器,无需独立的 Servlet 容器(如 Tomcat、Jetty) - 部署到外部容器
若需要将 Spring Boot 应用部署到独立容器(如 Tomcat、WebLogic),需进行以下调整:
修改打包方式,排除内嵌容器依赖
将 pom.xml 中的 改为 war
7.Spring Boot中的监视器是什么?
在 Spring Boot 中,Actuator 是核心的监控与管理组件,它提供了生产级别的功能(如健康检查、指标收集、配置信息、环境信息、日志管理、审计等),帮助开发者在应用运行时监控和管理应用状态。
8.如何使用Spring Boot实现异常处理?
使用 @ControllerAdvice + @ExceptionHandler(推荐)
9.Spring Boot常用的starter有哪些
核心基础类:spring-boot-starter、spring-boot-starter-test
Web 开发类:spring-boot-starter-web、spring-boot-starter-validation
数据访问类:spring-boot-starter-data-jpa、spring-boot-starter-data-mongodb、spring-boot-starter-data-redis
安全类:spring-boot-starter-security
10.Spring Boot实现热部署有哪几种方式
- 使用 DevTools
原理:Spring Boot DevTools 通过两个类加载器实现:基础类加载器(加载不会改变的类,如第三方依赖)和重启类加载器(加载应用代码)。当代码变更时,仅重启类加载器重新加载,大幅缩短重启时间。 - 使用 JRebel(商业工具)
- 使用 IDE 内置热部署(轻量级)
- 使用 Docker 实现热部署
11.如何理解Spring Boot配置加载顺序
后加载的配置优先
Spring Boot 按特定顺序加载配置源,后加载的配置会覆盖先加载的相同属性。
外部配置优先于内部配置
外部配置(如命令行参数、环境变量)优先级高于内部配置(如 application.properties)。
多环境配置优先级
特定环境配置(如 application-prod.properties)优先于通用配置(如 application.properties)。
12.Spring Boot的核心配置文件有哪几个?他们的区别是什么?
- 核心配置文件类型 application.properties/application.yml全局通用配置,适用于所有环境。
- application-{profile}.properties/application-{profile}.yml全局通用配置,适用于所有环境。
- bootstrap.properties/bootstrap.yml优先加载的配置,用于引导应用上下文(如配置中心、服务发现)
13.如何集成Spring Boot和ActiveMQ?
在 Spring Boot 中集成 ActiveMQ(Apache ActiveMQ)可以实现高效的消息传递,支持异步通信、解耦服务等场景。
- 环境准备:添加依赖、配置 ActiveMQ 连接信息
- 消息生产者(Producer):创建消息发送服务
- 消息消费者(Consumer):创建消息监听
相关文章:
面试题总结二
1.mybatis三个范式 第一范式:表中字段不能再分,每行数据都是唯一的第二范式:满足第一范式,非主键字段只依赖于主键第三范式:满足第二范式,非主键字段没有传递依赖 2.MySQL数据库引擎有哪些 InnoDB&#…...
代码随想录算法训练营第六十六天| 图论11—卡码网97. 小明逛公园,127. 骑士的攻击
继续补,又是两个新算法,继续进行勉强理解,也是训练营最后一天了,六十多天的刷题告一段落了! 97. 小明逛公园 97. 小明逛公园 感觉还是有点难理解原理 Floyd 算法对边的权值正负没有要求,都可以处理。核心…...
编程技能:字符串函数07,strncat
专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数06,strcat 回到目录…...
[Java实战]Spring Boot整合RabbitMQ:实现异步通信与消息确认机制(二十七)
[Java实战]Spring Boot整合RabbitMQ:实现异步通信与消息确认机制(二十七) 摘要:本文通过完整案例演示Spring Boot与RabbitMQ的整合过程,深入讲解异步通信原理与消息可靠性保证机制。包含交换机类型选择、消息持久化配…...
数据库中关于查询选课问题的解法
前言 今天上午起来复习了老师上课讲的选课问题。我总结了三个解法以及一点注意事项。 选课问题介绍 简单来说就是查询某某同学没有选或者选了什么课。然后查询出该同学的姓名,学号,课程号,课程名之类的。 sql文件我上传了。大家可以尝试练…...
用 UniApp 开发 TilePuzzle:一个由 CodeBuddy 主动驱动的拼图小游戏
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念:从一个小游戏想法开始 最近在使用 UniApp 做练手项目的时候,我萌生了一个小小…...
golang 安装gin包、创建路由基本总结
文章目录 一、安装gin包和热加载包二、路由简单场景总结 一、安装gin包和热加载包 首先终端新建一个main.go然后go mod init ‘项目名称’执行以下命令 安装gin包 go get -u github.com/gin-gonic/gin终端安装热加载包 go get github.com/pilu/fresh终端输入fresh 运行 &…...
组态王|组态王中如何添加西门子1200设备
哈喽,你好啊,我是雷工! 最近使用组态王采集设备数据,设备的控制器为西门子的1214CPU, 这里边实施边记录,以下为在组态王中添加西门子1200PLC的笔记。 1、新建 在组态王工程浏览器中选择【设备】→点击【新建】。 2、选择设备 和设备建立通讯要通过对应的设备驱动。 在…...
碎片笔记|PromptStealer复现要点(附Docker简单实用教程)
前言:本篇博客记录PromptStealer复现历程,主要分享环境配置过程中的一些经验。 论文信息:Prompt Stealing Attacks Against Text-to-Image Generation Models. USENIX, 2024. 开源代码:https://github.com/verazuo/prompt-stealin…...
Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流
目录 演示视频 前期配置 Docker配置 ffmpeg配置 vlc配置 下载并运行 SRS 服务 推拉流流程实现 演示视频 2025-05-18 21-48-01 前期配置 Docker配置 运行 SRS 建议使用 Docker 配置 Docker 请移步: 一篇就够!Windows上Docker Desktop安装 汉化完整指…...
c++学习之--- list
目录 编辑 一、list的定义: 二、list的模拟实现: 1、list的基本框架: 2、list的普通迭代器: 设计思想: 迭代器的一个特殊需求(c 对于重载->的一颗语法糖): 代码实现: 3、cons…...
【C++】set、map 容器的使用
文章目录 1. set 和 multiset 的使用1.1 set类的介绍1.2 set的构造和迭代器1.3 set 的增删查1.4 insert和迭代器调用示例1.5 find和erase使用示例1.6 multiset和set的差异 2. map 和 multimap 的使用2.1 map 类的介绍2.2 pair 类型介绍2.3 map 的构造和迭代器2.4 map 的增删查2…...
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
实习记录小程序 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码…...
Git从入门到精通
Git 是什么 Git 是一个分布式版本控制系统,主要用于跟踪和管理文件(尤其是代码)的变更。 Git的下载与安装 进入git官网下载界面,选择Windows系统。 点击选择Git for Windows/x64 Setup,进行安装。 注意: Git GUI 是Git提供的一个图形界面工…...
Binary Prediction with a Rainfall Dataset-(回归+特征工程+xgb)
Binary Prediction with a Rainfall Dataset 题意: 给你每天的天气信息,让你预测降雨量。 数据处理: 1.根据特征值构造天气降雨量的新特征值 2.根据时间构造月和季节特征 3.处理缺失值 建立模型: 1.建立lightgbm模型 2.建立…...
【C++】unordered_map与set的模拟实现
unordered系列map和set,与普通区别 用法几乎相同,键值唯一,区别unordered系列迭代器是单向的并且遍历出来不是有序的。unordered系列在数据规模大且无序的情况下性能更优 底层实现: map 和 set :基于平衡二叉树&…...
老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能
在工业自动化领域,ModbusTCP和Profinet是两种常见的通讯协议。Profinet是西门子公司推出的基于以太网的实时工业以太网标准,而Modbus则是由施耐德电气提出的全球首个真正开放的、应用于电子控制器上的现场总线协议。这两种协议各有各的优点,但…...
编译原理--期末复习
本文是我学习以下博主视频所作的笔记,写的不够清晰,建议大家直接去看这些博主的视频,他/她们讲得非常好: 基础知识概念: 1.【【编译原理】期末复习 零基础自学】,资料 2.【编译原理—混子速成期末保过】&…...
软件工程各种图总结
目录 1.数据流图 2.N-S盒图 3.程序流程图 4.UML图 UML用例图 UML状态图 UML时序图 5.E-R图 首先要先了解整个软件生命周期: 通常包含以下五个阶段:需求分析-》设计-》编码 -》测试-》运行和维护。 软件工程中应用到的图全部有:系统…...
Go 与 Gin 搭建简易 Postman:实现基础 HTTP 拨测的详细指南
Go 与 Gin 搭建简易 Postman:实现基础 HTTP 拨测的详细指南 文章目录 Go 与 Gin 搭建简易 Postman:实现基础 HTTP 拨测的详细指南项目简介代码结构各部分代码功能说明: 代码实现:main.go代码解释 handlers/probe.go代码解释 probe…...
层次原理图
层次原理图简介 层次原理图(Hierarchical Schematic)是一种常用于电子工程与系统设计的可视化工具,通过分层结构将复杂系统分解为多个可管理的子模块。它如同“设计蓝图”,以树状结构呈现整体与局部的关系:顶层展现系…...
嵌入式硬件篇---拓展板
文章目录 前言 前言 本文简单介绍了拓展板的原理以及使用。...
Redis的主从架构
主从模式 全量同步 首先主从同步过程第一步 会先比较replication id 判断是否是第一次同步假设为第一次同步 那么就会 启动bgsave异步生成RDB 同时fork子进程记录生成期间的新数据发送RDB给从节点 清空本地数据写入RDB 增量同步 对比ReplicationID不同因此选择增量同步在Rep…...
IIS入门指南:原理、部署与实战
引言:Web服务的基石 在Windows Server机房中,超过35%的企业级网站运行在IIS(Internet Information Services)之上。作为微软生态的核心Web服务器,IIS不仅支撑着ASP.NET应用的运行,更是Windows Server系统管…...
【上位机——WPF】布局控件
布局控件 常用布局控件Panel基类Grid(网格)UniformGrid(均匀分布)StackPanel(堆积面板)WrapPanel(换行面板)DockerPanel(停靠面板)Canvas(画布布局)Border(边框)GridSplitter(分割窗口)常用布局控件 Grid:网格,根据自定义行和列来设置控件的布局StackPanel:栈式面板,包含的…...
使用 C# 入门深度学习:线性代数详细讲解
在深度学习的领域中,线性代数是基础数学工具之一。无论是神经网络的训练过程,还是数据的预处理和特征提取,线性代数的知识都无处不在。掌握线性代数的核心概念,对于理解和实现深度学习算法至关重要。在本篇文章中,我们…...
操作系统之EXT文件系统
1.理解硬件 1.1磁盘、服务器、机柜、机房 机械磁盘是计算机中唯一的一个机械设备 磁盘--- 外设慢容量大,价格便宜 1.1.1光盘 1.1.2服务器 1.1.3机房 1.2磁盘的物理结构 1.3磁盘的存储结构 一个盘片又两个面 每个面都有一个磁头 磁头沿着盘面的半径移动 1.3.1…...
继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元
第一章:AI交互的进化与挑战 1.1 从命令行到智能交互 人工智能的发展历程中,人机交互的方式经历了多次变革。早期的AI系统依赖命令行输入,用户需通过特定指令与机器沟通。随着自然语言处理技术的进步,语音助手和聊天机器人逐渐普…...
Java大厂面试:从Web框架到微服务技术的场景化提问与解析
Java大厂面试:从Web框架到微服务技术的场景化提问与解析 场景: 某知名互联网大厂的面试现场。面试官一脸严肃,对面坐着搞笑的程序员谢飞机。以下是他们的对话: 第一轮:Web框架基础与数据库操作 面试官:谢…...
最新缺陷检测模型:EPSC-YOLO(YOLOV9改进)
目录 引言:工业缺陷检测的挑战与突破 一、EPSC-YOLO整体架构解析 二、核心模块技术解析 1. EMA多尺度注意力模块:让模型"看得更全面" 2. PyConv金字塔卷积:多尺度特征提取利器 3. CISBA模块:通道-空间注意力再进化 4. Soft-NMS:更智能的重叠框处理 三、实…...
leetcode hot100刷题日记——2.字母异位词分组
涉及知识点:vector、哈希表 解答我的解答的时间复杂度分析我的解答的空间复杂度分析复习:排序算法的时间复杂度 和第一题需要的知识点相同,所以知识点复习可见 link1《leetcode hot100刷题日记——1.两数之和》 解题思路:是字母异位词的字符…...
elementUI 单选框存在多个互斥的选项中选择的场景
使用 el-radio-group 来使用单选框组,代码如下: <el-radio-group input"valueChangeHandler" v-model"featureForm.type"><el-radio name"feature" label"feature">业务对象</el-radio><…...
基于区块链技术的智能汽车诊断与性能分析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界…...
基于区块链技术的供应链溯源系统:重塑信任与透明度
在当今全球化的商业环境中,供应链的复杂性不断增加,产品从原材料采购到最终交付消费者手中的过程涉及多个环节和众多参与者。然而,传统供应链管理面临着诸多挑战,如信息不透明、数据易篡改、追溯困难等,这些挑战不仅影…...
基于OpenCV的实时文档扫描与矫正技术
文章目录 引言一、系统概述二、核心代码解析1. 导入必要库2. 辅助函数定义3. 坐标点排序函数4. 透视变换函数5. 主程序流程 三、完整代码四、结语 引言 在日常工作和学习中,我们经常需要将纸质文档数字化。手动拍摄文档照片常常会出现角度倾斜、透视变形等问题&…...
基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发(论文)
基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发 中文摘要 在当今社会信息化进程不断加速的时代背景下,众多领域对于监控系统的需求日益增长,像车内安全监控、电梯运行监控等场景都离不开监控系统的支持。过去,不少领域普遍采用…...
华为云Astro中各种变量与参数的区别与用法
目录 🧠 华为云 Astro 各类变量与参数详解 🧩 一、变量与参数的核心作用是什么? 🖼️ 二、整体分类与结构图 📘 三、逐一详细解析 + 类比说明 + 使用建议 🔹 1. 输入参数(Input Parameter) 🔹 2. 输出参数(Output Parameter) 🔹 3. 变量(本地变量)…...
数字人技术的核心:AI与动作捕捉的双引擎驱动(210)
**摘要:**数字人技术从静态建模迈向动态交互,AI与动作捕捉技术的深度融合推动其智能化发展。尽管面临表情僵硬、动作脱节、交互机械等技术瓶颈,但通过多模态融合技术、轻量化动捕方案等创新,数字人正逐步实现自然交互与情感表达。…...
华为云Astro轻应用创建业务对象(BO)的概念梳理
目录 一、业务对象(BO)是什么?——【详细概念解释】 二、形象理解业务对象(BO) 🍱 类比方式: 📦 举个具体例子:以做一个“智能烟雾报警系统”应用 三、为什么使用BO很重要? 四、小结: 一、业务对象(BO)是什么?——【详细概念解释】 在华为云Astro轻应用…...
MySQL开发规范
目录 一、建表规约 二、索引规约 三、SQL语句 四、 ORM映射 一、建表规约 强制: 1、表达是与否概念的字段,必须使用is_xxx的方式命名(PoJo中不加is前缀),数据类型是unsigned tinyint(1表示是…...
K8s入门教程(一)
Kubernetes(K8s)入门教程:从零开始掌握容器编排 目录 Kubernetes(K8s)入门教程:从零开始掌握容器编排 1. Kubernetes 简介 1.1 什么是 Kubernetes? 1.2 核心功能 2. 环境搭建与 Minikube 安装 2.1 安装 Minikube 安装步骤(以 macOS 为例): 安装 kubectl(Kub…...
k8s备份namespace
在 Kubernetes 中备份 Namespace 有多种方法,以下是几种常见的备份方式: 1.使用 kubectl 命令备份 通过 kubectl 命令可以导出指定 Namespace 中的资源,生成 YAML 文件进行备份。 备份所有资源: kubectl -n <namespace> ge…...
前端动画库 Anime.js 的V4 版本,兼容 Vue、React
前端动画库 Anime.js 更新了 V4 版本,并对其官网进行了全面更新,增加了许多令人惊艳的效果,尤其是时间轴动画效果,让开发者可以更精确地控制动画节奏。 这一版本的发布不仅带来了全新的模块化 API 和显著的性能提升,还…...
OpenHarmony外设驱动使用 (四),Face_auth
OpenHarmony外设驱动使用 (四) Face_auth 概述 功能简介 人脸识别功能是端侧设备不可或缺的一部分,为设备提供一种用户认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。它是基于人的脸部特征信息进行身份识别的一种…...
【Java ee初阶】jvm(1)
一、JVM Java虚拟机 面试中相关的问题有三块: 1.JVM内存区域划分 2.JVM的类加载机制 3.JVM的垃圾回收机制 JDK、JRE 和 JVM 的关系 JDK(Java Development Kit)是 Java 开发工具包,包含了编写、编译和调试 Java 程序所需的所…...
【Java ee初阶】jvm(2)
类加载机制: JVM从最开始的读取.class文件,到最终构造完成 类 对象的整个过程,也就是把 类 从硬盘 加载到内存中的机制。 Java的类加载机制主要分为五个步骤:加载、验证、准备、解析和初始化。 步骤一 加载(Loading…...
Django 项目创建全攻略
目录 一、环境准备 1. 安装 Python 2. 安装虚拟环境(可选但推荐) 3. 安装 Django 二、创建 Django 项目 1. 使用命令创建项目 2. 运行开发服务器 三、创建 Django 应用 1. 创建应用 2. 注册应用 四、配置项目 1. 数据…...
windows11 安装好后右键没有 git bash 命令
win键 R 键,输出 regedit,打开注册表 找到 \HKEY_CLASSES_ROOT\Directory\Background\shell 新建项 git-bash 然后在 git-bash 下在新建项 Command,默认值设为 "C:\Program Files\Git\git-bash.exe" --cd"%v." 在 …...
Java八股文——Java基础篇
目录 1、你是怎样理解OOP面向对象2、重载和重写的区别3、接口与抽象类的区别4、深拷贝与浅拷贝的理解5、sleep和wait区别主要区别 6、什么是自动拆装箱,int和Integer有什么区别自动拆装箱int和Integer的区别Integer缓存机制 7、和equals区别String特殊情况 8、Strin…...
蓝桥杯19682 完全背包
问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi,价值为 wi。每件物品可以使用无限次。 请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。 输入格式 第一行…...