自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(398)
  • 资源 (1)
  • 收藏
  • 关注

原创 【MyBatis-Plus】MyBatis-Plus快速入门 && 常见注解 && 条件构造器 && 自定义sql操作

本文介绍了MyBatis-Plus框架的快速上手方法和复杂操作技巧。首先展示了SpringBoot2/3环境下引入依赖的配置方式,以及MySQL数据库连接设置。详细说明了如何通过继承BaseMapper实现单表CRUD操作,并介绍了@TableName、@TableField和@TableId等核心注解的使用方法。文章还讲解了条件构造器Wrapper的使用,包括QueryWrapper和LambdaQueryWrapper等不同实现方式,通过示例代码演示

2025-12-23 11:53:50 615

原创 【MyBatis】MyBatis操作动态sql && MyBatisGenerator

本文介绍了MyBatis动态SQL的常用标签及其应用场景。主要包括<if>标签处理非必填字段,<trim>标签灵活控制SQL片段,<where>标签智能添加查询条件,<set>标签处理更新操作,以及<foreach>标签遍历集合。此外还介绍了<include>标签实现SQL片段复用,以及MyBatisGenerator自动生成代码工具的使用。这些动态SQL特性能够有效简化开发,提高SQL语句的灵活性和可维护性。

2025-12-23 11:48:18 770

原创 【MyBatis】MyBatis入门 && 基础操作 && XML配置文件开发 && 多表查询 && 注入问题 && 数据库连接池

MyBatis是一款优秀的持久层框架,简化JDBC开发,用于数据库操作。其入门使用包括:1)配置数据库连接信息;2)通过@Mapper注解声明接口,使用@Select等注解编写SQL;3)支持参数传递(#{}和@Param);4)提供增删改查操作,可通过@Options获取自增主键;5)配置日志打印SQL执行详情。MyBatis通过对象属性与数据库字段自动映射,提高开发效率。

2025-12-20 13:14:53 797

原创 【SpringBoot】配置文件 && 日志输出 && lombok

本文对比了Spring Boot中.properties和.yml配置文件的差异。.properties采用键值对格式,而.yml使用树形结构,通过缩进和冒号加空格组织层级关系。文章详细介绍了如何通过@Value注解读取配置内容,并展示了.yml文件支持的不同数据类型(字符串、布尔值、数字、空值等)、Map和List的配置方式。此外还提到.properties和.yml可以共存,但.properties优先级更高。最后介绍了@ConfigurationProperties注解用于批量绑定配置到Java对象的

2025-12-19 09:51:23 717

原创 【SpringBoot】Spring IOC && DI && 五大注解 && Bean && 扫描路径 && 依赖注入

本文介绍了Spring框架中IOC(控制反转)和DI(依赖注入)的核心概念及实现方式。IOC通过将对象创建和依赖管理交给容器,实现解耦、易测试和灵活替换等优势。文章详细讲解了五大注解(@Component、@Controller、@Service、@Repository、@Configuration)的作用和使用场景,以及@Bean注解的注意事项。此外还介绍了@ComponentScan扫描路径配置和三种依赖注入方式(属性注入、构造方法注入、Setter注入),其中构造方法注入是官方推荐的方式。通过合理使用

2025-12-19 09:43:51 1124

原创 【SpringBoot】SpringMVC && 请求注解详解 && 响应注解详解 && Lombok

Spring MVC是基于MVC设计模式的Web框架,通过@RequestMapping注解实现请求路由映射,支持类与方法级别的路径定义,并可指定请求方法、参数约束等属性。核心组件包括视图(View)、模型(Model)和控制器(Controller),其中控制器负责请求分发。Spring Boot整合了Spring MVC,简化了配置与开发流程。常用注解如@GetMapping、@PostMapping等是@RequestMapping的简化版本。参数传递时需注意类型匹配与必传规则,@Reques

2025-12-18 11:07:04 867

原创 【JavaSE】Stream API && Optiona类 && 正则表达式

本文介绍了Java 8 Stream API和Optional类的核心用法。Stream API分为创建、中间操作和终止操作三类,支持链式调用和延迟执行,提供丰富的集合处理功能。Optional类用于安全处理可能为null的值,通过明确的方法避免空指针异常。文中详细列举了Stream的创建方式、中间操作方法(如filter、map等)和终止操作方法(如collect、reduce等),以及Optional的常用方法(如ofNullable、orElse等),帮助开发者更优雅地处理集合和空值问题。

2025-12-18 10:58:26 814

原创 【JavaSE】二十、垃圾回收GC && 垃圾回收算法 && 垃圾回收器 && 对象的生命周期

垃圾回收(GC)是JVM自动管理内存的机制,负责回收不再使用的对象,防止内存泄漏或溢出。主要作用于堆和方法区,通过可达性分析法(基于GC Roots)判断对象存活状态。常见垃圾回收算法包括:标记-清除(产生碎片)、复制算法(新生代使用)、标记-整理(老年代使用)和分代收集(结合不同算法)。分代算法将堆分为新生代(Eden、Survivor区)和老年代,采用不同策略:新生代用复制算法快速回收短期对象,老年代用标记-整理处理长期存活对象。Minor GC清理新生代,Major GC/Full GC清理老年

2025-12-17 13:47:13 1274

原创 【JavaSE】十九、JVM运行流程 && 类加载Class Loading

JVM内存分为五大区域: 程序计数器:线程私有,存储下条指令地址 虚拟机栈:线程私有,存储方法调用栈帧 本地方法栈:线程私有,支持Native方法调用 堆:线程共享,存储对象实例,GC主要区域 方法区:线程共享,存储类元信息(Java8后改为元空间) JVM运行流程: 类加载:加载→验证→准备→解析→初始化 执行引擎:解释执行与JIT编译结合 内存管理:运行时数据区维护程序状态 本地接口:支持JNI调用 垃圾回收:自动管理堆内存 类加载过程严格遵循五阶段顺序,确保类安全正确地加

2025-12-17 13:36:40 1224

原创 【JavaSE】十八、URL && HTTP请求格式 && 常见报头 && 状态码 && 会话保持

摘要 URL(统一资源定位符)是互联网上资源的唯一标识,由协议、主机、端口、路径等部分组成。HTTP报文由请求行/状态行、报头和正文构成,通过Content-Type和Content-Length解决TCP粘包问题。常见HTTP方法包括GET(获取资源)、POST(提交数据)等,GET通常无正文而POST有,GET幂等可缓存而POST不幂等。通用报头如Cache-Control控制缓存,请求报头如Host指定服务器,User-Agent标识客户端信息。GET和POST本质无区别,但使用习惯不同。

2025-12-17 13:29:16 729

原创 【JavaSE】十七、UDP套接字编程 && TCP套接字编程

本文对比了UDP和TCP协议的主要区别,并详细介绍了Java中UDP套接字编程的实现方法。TCP是面向连接的可靠协议,适用于文件传输等场景;UDP是无连接的快速协议,适合视频直播等实时应用。在Java中,通过DatagramSocket和DatagramPacket类实现UDP通信,文章列举了这两个类的常用构造方法及功能,包括数据报的发送接收、地址端口设置等操作要点,并提供了使用InetAddress和SocketAddress处理网络地址的注意事项。

2025-12-16 13:12:22 832

原创 【JavaSE】十六、文件IO && File类 && 字节流 && 字符流

Java IO主要分为传统IO(java.io包)和NIO(java.nio包)。传统IO基于流(Stream)处理,适合小数据量阻塞式操作;NIO基于缓冲区和通道,支持非阻塞IO,适合高并发场景。文件操作主要使用传统IO,网络通信则多用NIO(已被主流框架集成)。核心类包括File类(文件元数据操作)、字节流/字符流及其缓冲流、转换流和对象流。File类用于文件路径操作但不读写内容,提供创建、删除、重命名等方法。实际开发中,字符流处理推荐使用FileInputStream/FileOutputStream

2025-12-16 13:07:27 834

原创 【JavaSE】十五、线程同步wait | notify && 单例模式 && 阻塞队列 && 线程池 && 定时器

本文介绍了Java多线程编程中的线程同步机制、单例模式和阻塞队列。主要内容包括: 线程同步:详细讲解了wait()和notify()方法的使用场景、注意事项,以及与sleep()的区别。重点强调必须在synchronized块中使用,建议用while而非if包裹wait()防止虚假唤醒。 单例模式:对比了饿汉模式(类加载时创建实例,线程安全但启动慢)和懒汉模式(延迟加载,需双重检查锁定和volatile保证线程安全)。提供了两种模式的代码实现示例。 阻塞队列:阐述了阻塞队列的特性及其在生产者消费者模型中的应

2025-12-15 10:26:16 745

原创 【JavaSE】十四、线程创建多种方式 && Thread类 && 线程状态与生命周期 && 线程安全synchronized && 编译器优化问题 && volatile && JMM

Java创建线程的五种方式:1)继承Thread类重写run();2)实现Runnable接口;3)匿名内部类继承Thread;4)匿名内部类实现Runnable;5)lambda表达式(推荐)。Thread类提供start()启动线程、join()等待线程、interrupt()中断线程等方法。注意继承Thread时this指线程对象,实现Runnable时需用Thread.currentThread()获取线程对象。可通过jconsole工具观察线程运行状态。

2025-12-15 10:18:20 863

原创 【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法

枚举类: 所有枚举类隐式继承Enum抽象类,包含name()、ordinal()等方法 枚举常量本质是单例对象,构造方法默认为private且不可反射实例化 支持自定义属性和方法,通过枚举值调用 编译器自动生成values()方法获取所有枚举值 Lambda表达式: Java 8引入的简洁函数式编程语法 基本形式:(参数) -> 表达式 或 (参数) -> {代码块} 常见用法:替代单方法接口实现 支持参数类型推断,可省略参数类型声明 枚举类保证了类型安全

2025-12-13 08:56:19 659

原创 【JavaSE】十二、Collection工具类 && 反射 详解

Java集合与反射机制摘要 Collection工具类: Collections提供了操作Collection接口集合的工具方法,包括排序(sort)、反转(reverse)、查找(max/min)、拷贝(copy)等。使用时需注意自定义类型需实现比较器,且与Collection接口不同。 反射机制: 反射允许运行时动态获取类信息、创建对象、访问属性和调用方法。核心类包括Class、Field、Method、Constructor等。Class类是反射起点,可通过类名.class、对象.getClass()

2025-12-12 11:16:45 950

原创 【JavaSE】十一、Stack && Queue && Deque && PriorityQueue && Map && Set

本文介绍了Java中常用的集合框架Stack、Queue、Deque和PriorityQueue的使用方法及注意事项。Stack类已不推荐使用,建议用Deque接口的实现类如ArrayDeque或LinkedList替代。Queue接口常用LinkedList等实现类,并指出队列可实现栈但反之不行。Deque作为双端队列接口,详细列出了其操作方法及异常处理版本。PriorityQueue使用时需注意元素必须可比较大小,默认是小堆结构,并提供了自定义大小堆的比较器实现示例。

2025-12-12 11:12:20 720

原创 【JavaSE】十、ArrayList && LinkedList

本文介绍了Java集合框架中的ArrayList和LinkedList。ArrayList是基于动态数组的顺序表,支持随机访问,但非线程安全;LinkedList是双向链表结构,插入删除效率高但不支持随机访问。文章对比了两者的区别,包括底层实现、访问方式和适用场景。同时详细讲解了ArrayList的注意事项(如subList的影响、迭代器使用等)以及五种遍历方式(下标、for-each、迭代器等),并提供了LinkedList特有的双向迭代器遍历方法。最后通过表格对比了两者在插入、删除、查找等操作上的性能差

2025-12-11 09:36:15 442

原创 【JavaSE】九、常见集合类 && 包装类 && 泛型

介绍Java集合框架核心接口和实现类,包括List(ArrayList/LinkedList)、Set(HashSet/TreeSet)、Map(HashMap/TreeMap)等数据结构及其特性。 包装类:解析基本类型与包装类的关系,自动装箱/拆箱机制,重点分析Integer缓存机制在[-128,127]范围内的特殊处理。 泛型:详解泛型类、泛型方法的使用,通配符(?)及上下界(extends/super)的应用,并探讨类型擦除导致的数组初始化问题及解决方案。 技术要点:涵盖集合底层实

2025-12-11 09:31:43 893

原创 【JavaSE】八、异常处理 throw && throws && try-catch && 自定义异常类

Java异常处理机制详解 本文系统介绍了Java中的异常处理机制。异常是程序执行过程中的不正常行为,可分为Error(严重问题)和Exception(程序员可处理的问题)。异常又分为编译时异常和运行时异常。 文章详细讲解了三种异常处理方式: throw主动抛出异常 throws声明可能抛出的异常 try-catch捕获并处理异常 异常处理流程遵循调用栈向上传递原则,直到被处理或程序终止。此外,文章还介绍了如何自定义异常类来满足特定需求。异常处理使正常流程和错误流程分离,提高代码可读性和健壮性。 关键点:异常

2025-12-10 12:03:45 757

原创 【JavaSE】七、String && StringBuilder && StringBuffer

本文介绍了Java中String类的常用方法及StringBuilder的使用。String类是不可变对象,构造方法包括常量字符串、new关键字和字节数组构造。常用方法涵盖字符串判断、比较、查找、转换、替换、拆分、截取等操作,强调字符串不可变特性及其设计优势。StringBuilder则用于高效字符串修改,支持增删改操作而不产生新对象,适合频繁修改字符串的场景。文章通过代码示例和图示详细说明了各类方法的使用及注意事项。

2025-12-10 11:59:35 617

原创 【JavaSE】六、抽象类abstract && 接口interface && Object 类

本文介绍了Java中抽象类和接口的核心概念与用法。抽象类通过abstract关键字定义,不能实例化对象,可以包含抽象方法和普通方法,强制子类重写抽象方法。接口使用interface定义,是一种行为规范标准,默认包含public abstract方法和public static final变量,通过implements实现。两者都支持多态特性,但接口更强调行为规范,而抽象类侧重类层次关系。文中通过USB接口示例展示了接口的实际应用,演示了如何通过向上转型实现多态调用。这些特性为Java面向对象编程提供了灵活的

2025-12-09 12:56:50 1052

原创 【JavaSE】五、继承 && 多态 && extends && super && override && instanceof

本文介绍了Java中继承的概念与使用要点。继承通过extends关键字实现代码复用和多态,子类可继承父类的成员变量和方法。super关键字用于访问父类成员,构造方法中必须优先调用父类构造。文章对比了super与this的异同,分析了初始化顺序(先父类静态→子类静态→父类实例→父类构造→子类实例→子类构造)。protected关键字为不同包子类提供访问权限,final可修饰变量、类和方法使其不可变或不可继承/重写。Java支持单继承和多层继承但不支持多继承。继承体现了面向对象层次化设计思想。

2025-12-06 11:26:01 758

原创 【JavaSE】四、类与对象 && this引用 && static成员 && 代码块 && 内部类

本文介绍了Java中类的定义、实例化、this引用以及对象构造与初始化的关键知识点。主要内容包括: 类定义规范:类名采用大驼峰命名,一个文件通常只定义一个类,public类需与文件名相同。 实例化过程:通过new关键字创建对象实例,使用点操作符访问成员变量和方法,未初始化的成员变量有默认值。 this引用:指向当前对象,用于区分成员变量与局部变量,编译器会自动处理this引用。 构造方法:特殊成员方法,与类同名,在对象创建时自动调用,支持重载和this()相互调用。 初始化机制:成员变量有默认初始化值,而局

2025-12-05 12:03:12 586

原创 【JavaSE】三、数组的定义与使用

本文介绍了Java中数组的创建、初始化、使用和销毁方法,重点讲解了数组与引用类型的关系及JVM内存分布。主要内容包括: 数组的两种初始化方式(动态和静态)及注意事项 数组的三种遍历方法和默认值规则 JVM内存区域划分及作用 基本类型变量与引用类型变量的区别 引用变量的赋值操作示例分析 null空引用的概念和使用注意事项 文章通过代码示例和内存图解,详细说明了数组在Java中的使用原理,特别强调了引用类型变量存储的是对象地址而非对象本身的特点。

2025-12-04 10:51:17 687

原创 【JavaSE】二、数据类型 && 运算符 && 程序逻辑控制

本文介绍了Java中的数据类型,包括字面常量、基本数据类型和变量的定义与使用。主要内容包括: 字面常量的6种分类:字符、字符串、整型、浮点型、布尔型和空常量。 Java基本数据类型: 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节) 浮点型:float(4字节)、double(8字节) 字符型:char(2字节) 布尔型:boolean 变量的定义语法及注意事项: 变量必须初始化后才能使用 整型变量有严格的数值范围限制 浮点型运算特点 char类型使用Unicode编码

2025-12-01 13:48:08 879

原创 【贪心】合并区间

本文介绍了合并重叠区间的算法,采用排序+贪心策略。首先将区间按左端点排序,确保从左到右线性合并。遍历时维护当前合并区间的左右端点,若遇到不重叠的区间则加入结果集,否则扩展当前区间的右端点。该方法保证局部最优(能合并就扩展)最终达到全局最优(最少不重叠区间)。时间复杂度O(nlogn)(排序)+O(n)(遍历),空间复杂度O(n)存储结果。示例代码展示了Java实现,通过比较和更新区间端点完成合并。

2025-11-29 09:31:49 365

原创 【c++中间件】CMake介绍 && CMake的使用

CMake是一个跨平台的开源构建系统,通过CMakeLists.txt配置文件控制编译过程,可生成不同平台的构建文件(如Makefile、Visual Studio项目等)。它具有开源、跨平台、高效管理大型项目等特点。使用CMake时通常采用外部构建方式,即在build目录下执行cmake命令生成构建文件,避免污染源码目录。CMakeLists.txt基本语法包括指定最低版本(cmake_minimum_required)、定义项目名称(project)和添加可执行文件(add_executable)。CM

2025-11-28 12:36:04 737

原创 【c++中间件】语音识别SDK && 二次封装

百度语音识别SDK使用指南 本文介绍了百度语音识别SDK的完整使用流程。首先通过百度云平台创建应用并获取API密钥,然后安装SDK及依赖库(jsoncpp、libcurl、openssl)。提供了基础测试代码示例,展示如何调用SDK进行语音识别,包括音频文件读取和结果处理。文章还介绍了二次封装方案,通过ASRClient类简化接口调用,支持错误处理和日志记录。最后给出了命令行参数配置方法,便于灵活调整运行模式。

2025-11-28 12:28:50 401

原创 【单调队列】滑动窗口最大值

本文介绍了LeetCode 239题"滑动窗口最大值"的解法,重点分析了使用单调队列的两种实现方式。题目要求在长度为n的数组中,找出所有大小为k的滑动窗口中的最大值。 解法核心在于使用单调队列维护窗口内元素的顺序: 维护数组下标法:队列存储元素下标,保证队头始终是当前窗口最大值。通过判断下标范围确保元素在窗口内,新元素入队时移除破坏单调性的元素。 维护元素值法:队列直接存储元素值,同样保持单调递减。需额外判断队头元素是否仍在窗口范围内。 两种方法时间复杂度均为O(n),相比暴力解法

2025-11-27 11:19:30 940

原创 【c++中间件】短信验证码SDK && 二次封装

本文介绍了阿里云短信服务的安装使用与二次封装方法。首先详细说明了环境搭建步骤,包括注册账号、开通服务、购买套餐等操作。然后演示了控制台发送短信测试流程,重点介绍了如何绑定测试手机号。接着指导用户通过API调用短信服务,包括创建AccessKey、安装C++ SDK、编写测试代码等关键步骤。最后展示了如何对短信功能进行二次封装,提供了DMSClient类的实现代码,便于开发者集成到项目中。文章配有详细的截图和代码示例,帮助读者快速掌握阿里云短信服务的开发流程。

2025-11-27 10:07:26 400

原创 【c++中间件】RabbitMQ介绍 && AMQP-CPP库的使用 && 二次封装

RabbitMQ 安装与 C++ 客户端开发指南 本文介绍了 RabbitMQ 消息队列服务的安装配置及 C++ 客户端开发方法。主要内容包括: RabbitMQ 服务安装 通过 apt 安装 RabbitMQ 服务 创建管理员用户并设置权限 启用 Web 管理界面(端口 15672) C++ 客户端开发 安装 AMQP-CPP 库(支持 C++17) 两种开发模式:原生 TCP 实现或使用 libev/libevent 等异步组件 RabbitMQ 核心概念 基于 AMQP 协议的通信机制 关键组件:连接

2025-11-27 10:03:27 1158

原创 【c++中间件】ODB的介绍与安装 && 常见操作

ODB 是对象数据库(Object Database)的缩写。它是一种将对象模型直接映射到数据库中的数据库管理系统,与传统的关系型数据库(RDBMS)相比,ODB 允许开发者直接存储、查询和操作对象,而不需要像关系型数据库那样将对象转换成行和列的形式。​ 简单的说就是 ODB 可以将数据结构与数据库操作进行映射,之后通过操作数据结构来完成数据库对应操作!

2025-11-26 10:44:47 840

原创 【c++中间件】redis介绍 && redis-plus-plus库使用

Redis是一款高性能键值对数据库,支持多种数据结构,具有内存存储、持久化、原子操作等特性。本文介绍了Redis的安装配置方法,包括设置远程连接和使用redis-plus-plus库进行C++开发。重点讲解了字符串键值对的基本操作接口,如set、get、del等,为构建聊天室等应用提供数据存储支持。通过简单命令即可实现Redis服务的启动、停止和管理,开发时可链接相关库文件快速集成Redis功能。

2025-11-25 11:42:14 729

原创 【动态规划:似包非包】组合总和 Ⅳ

本文探讨了LeetCode 377题"组合总和Ⅳ"的解题思路。题目要求从不同整数数组中找到总和为目标值的元素组合个数,且顺序不同的序列视为不同组合。作者指出该问题本质是排列问题而非组合问题,传统的背包问题解法不适用。 文章提出动态规划解法:定义dp[i]表示总和为i时的排列组合个数。状态转移方程为dp[i] += dp[i-nums[j]](需满足i >= nums[j]),初始化dp[0]=1。通过从左到右遍历填充dp表,最终返回dp[target]。值得注意的是,为避免整数溢出

2025-11-24 12:11:37 1187

原创 【c++中间件】WebSocket介绍 && WebSocketpp库的使用

WebSocket是一种支持双向通信的HTML5协议,通过HTTP升级实现,解决了传统HTTP轮询的实时性问题。其特点包括轻量数据格式、跨域通信、支持文本和二进制传输等。WebSocketpp是一个跨平台C++库,实现了WebSocket协议,提供事件驱动接口和灵活依赖管理,适用于构建HTTP/WebSocket服务器。安装方法简单,使用apt-get安装相关依赖即可验证是否成功。该库支持多种网络协议和平台,适合开发实时通信应用。

2025-11-24 12:09:45 1197 1

原创 【动态规划:背包问题】完全平方数

本文介绍了LeetCode第279题「完全平方数」的动态规划解法。题目要求找到和为整数n的完全平方数的最少数量。通过构建二维DP表,其中dp[i][j]表示前i个平方数中和为j的最小数量,利用状态转移方程逐步求解。初始化时,第一行非首元素设为极大值以避免干扰。最终优化为一维DP表,空间复杂度降低。时间复杂度为O(n√n),空间优化后为O(n)。代码示例展示了两种实现方式。

2025-11-23 16:08:21 531

原创 【c++中间件】cpp-httplib 介绍 && 使用

cpp-httplib是一个轻量级的C++ HTTP客户端/服务器库,具有跨平台、支持HTTP/1.1、SSL/TLS等特点。只需包含单个头文件即可使用,安装简单。该库通过哈希表存储URL路径与回调函数的映射关系,当收到请求时会调用对应的处理函数。文章提供了核心类接口说明(Request、Response、Server、Client)和一个简单示例,展示了如何创建服务器、注册GET请求处理函数并启动监听。最后通过Makefile编译运行,在8080端口提供网页服务。

2025-11-23 16:06:50 509

原创 【动态规划:背包问题】零钱兑换Ⅱ && 优化

本文介绍了LeetCode 518题「零钱兑换 II」的动态规划解法。题目要求计算使用无限数量的不同面额硬币凑成指定总金额的组合数。通过状态表示dp[i][j](前i个硬币凑成金额j的组合数),推导出状态转移方程。初始化时dp[0][0]=1,其余为0。采用二维DP表或优化后的一维数组实现,遍历顺序为从上到下、从左到右。最终返回dp[n][amount]作为结果。代码展示了两种实现方式,并验证了其正确性。

2025-11-21 16:08:16 604

原创 【c++中间件】Elasticsearch介绍与安装 && 核心概念 && Kibana && 二次封装

Elasticsearch是一个开源分布式搜索引擎,具有分布式、自动发现、索引分片等特点。它通过RESTful API隐藏Lucene复杂性,实现全文搜索功能。安装步骤包括添加仓库秘钥、安装ES服务、配置外网访问等。Kibana是ES的数据分析与可视化平台,提供交互式控制台。核心概念包括索引(类似数据库)、文档(数据单元)和字段(数据属性)。ES支持多种数据类型,如字符串、整数、日期等。安装完成后可通过Kibana进行数据管理和分析。

2025-11-21 16:06:37 1011

c/c++实现高并发内存池

项目介绍:参考了谷歌的开源项目 tcmalloc,实现了一个高并发的内存池。该项目利用了 ThreadCache、CentralCache、PageCache 三级缓存结构,基于多线程申请释放内存的场景,最大程度地提高了效率,解决了绝大部分内存碎片问题。 开发环境:Visual Studio 2022 项目技术:C++11、多线程、TLS 机制、单例模式、池化技术、桶锁机制、基数树、链表、哈希等。

2025-01-25

嵌入式软件服务器开发的毕业实习总结:温湿度监测系统的设计与实现

内容概要:本文详述了一位学生在嵌入式软件服务器开发的毕业实习中的经验。重点介绍了如何基于服务器-客户端模型构建温湿度监测系统。通过此项目,作者深入了解并掌握了Linux环境、C语言编程、多线程编程、网络编程以及SQLite3数据库管理等关键技能。文中详细记录了从项目初期的需求分析到最后的模块化编程实现的具体步骤和技术细节,展示了温湿度数据的生成、传输和存储的全流程。同时,也反映了实习过程中遇到的实际问题及解决方案,特别是随机数生成、Socket通信和数据存储等方面的难题攻克。 适合人群:对嵌入式系统和服务器开发感兴趣的计算机专业在校生、初入职场的研发人员。 使用场景及目标:适用于希望通过实际项目加深对计算机科学领域核心技术(如嵌入式开发、网络编程、多线程、数据库)理解和应用的学生群体,旨在帮助他们掌握项目规划与实施的方法论,培养解决复杂工程问题的能力。 阅读建议:该实习报告提供了详细的实践指南和技术要点解析,读者可以在研读时对照每个技术点进行实践,尤其是Linux环境配置、服务器架构设计以及各个功能模块的调试,有助于更好地理解理论背后的工程意义和应用价值。

2025-01-25

(校内课程设计)c/c++实现停车场管理系统

在该文档中总结了包括了一、实验目的 二、原理与方案 三、步骤 四、函数功能模块 五、数据记录与处理 六、结果分析 七、实验心得 八、源代码

2025-01-25

(校内课程设计)c/c++实现操作系统核心算法模块

进程管理模块、存储器管理模块、虚拟存储器管理模块、文件管理模块,全在文档内要图片和流程详解,包括源码也在文档中!

2025-01-25

c++实现在线版五子棋(包含Websocket++、JsonCpp、Mysql、c++11、BlockQueue阻塞队列、HTML / CSS / JS / AJAX等技术栈的使用)

直接在项目中使用make命令即可进行编译然后执行可执行文件即可!一些环境安装的方法可以私聊我的csdn博客来问我就行!

2025-01-25

C语言easyx图形编程小项目--飞机大战

1.运行环境为vs2022 2.此版本为入门版本,适合新手学习。

2022-02-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除