Java-servlet(四)详细讲解Servlet类层次结构与生命周期
Java-servlet(四)详细讲解Servlet和生命周期
- 前言
- 一、Servlet类层次结构
- 1.Servlet包
- 2.Servlet 与 ServletConfig 与 Serializable 的关系
- 1. 三者分别是什么
- 2. 三者之间的关系
- 3.如何让类具有 Servlet 功能
- 二、Servlet 生命周期
- 1.初始化阶段
- 2.服务阶段
- 3.销毁阶段
- 总结
前言
- Servlet 是 Java Web 开发的核心组件,负责处理客户端请求并生成响应。
- 理解 Servlet 的生命周期,能帮助我们写出更高效的 Web 应用。
- 今天,我们就来深入探讨一下 Servlet 的类层次结构,以及它的生命周期。
我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482
一、Servlet类层次结构
首先我们来说一说Servlet 功能是什么
- 处理请求:接收客户端(如浏览器)的各种请求,像 GET、POST 请求等。
- 生成响应:根据请求进行业务逻辑处理,生成 HTML、JSON 等形式的响应内容返回给客户端。
- 管理会话:能跟踪客户端的会话状态,比如用户登录后,可在多个页面维持登录状态。
- 与数据库交互:连接数据库,进行数据的增删改查操作,为客户端提供数据服务。
1.Servlet包
在 Java Web 开发中,Servlet 主要涉及两个包:
- javax.servlet :这是 Servlet 的核心包,包含了所有 Servlet 开发的基础接口和类
- javax.servlet.http :这个包扩展了 javax.servlet ,提供了与 HTTP 协议相关的类和接口,比如 HttpServletRequest 和 HttpServletResponse 。
2.Servlet 与 ServletConfig 与 Serializable 的关系
下面我们来介绍介绍 Servlet、ServletConfig 和 Serializable 之间的关系。
1. 三者分别是什么
-
Servlet
- Servlet 是 Java 中用于处理 Web 请求的组件。当客户端(比如浏览器)向服务器发送一个请求时,服务器会把这个请求交给对应的 Servlet 来处理,Servlet 处理完后再把响应返回给客户端。就好比你去餐厅吃饭,把点菜的需求告诉服务员(客户端请求),厨师(Servlet)就会根据你的需求做菜(处理请求),最后把做好的菜端给你(返回响应)。
-
ServletConfig
- ServletConfig 是 Servlet 的配置信息对象。当 Servlet 被创建时,服务器会为每个 Servlet 实例创建一个对应的 ServletConfig 对象,这个对象包含了 Servlet 的初始化参数和 Servlet 的名称等信息。可以把它想象成厨师做菜时需要的菜谱和特殊要求,这些信息帮助厨师更好地完成做菜的任务(Servlet 更好地处理请求)。
-
Serializable
- Serializable 是 Java 中的一个接口,它没有任何方法,只是一个标记接口。当一个类实现了 Serializable 接口,就表示这个类的对象可以被序列化。序列化就是把对象的状态信息转换成可以存储或传输的形式,比如可以把对象保存到文件中,或者通过网络传输到其他地方。这就像你要把一件东西寄给别人,需要把它打包(序列化),对方收到后再拆开(反序列化)。
2. 三者之间的关系
- Servlet 和 ServletConfig 的关系
- ServletConfig 是为 Servlet 服务的。在 Servlet 的生命周期中,当 Servlet 被初始化时,服务器会把 ServletConfig 对象传递给 Servlet 的
init(ServletConfig config)
方法,Servlet 可以通过这个对象获取初始化参数等配置信息。例如:
- ServletConfig 是为 Servlet 服务的。在 Servlet 的生命周期中,当 Servlet 被初始化时,服务器会把 ServletConfig 对象传递给 Servlet 的
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;public class MyServlet implements Servlet {private ServletConfig config;@Overridepublic void init(ServletConfig config) throws ServletException {this.config = config;// 获取初始化参数String paramValue = config.getInitParameter("paramName");System.out.println("初始化参数值: " + paramValue);}@Overridepublic ServletConfig getServletConfig() {return config;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 处理请求}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {// 销毁操作}
}
- Servlet 和 Serializable 的关系
- Servlet 本身不一定需要实现 Serializable 接口。但是在某些情况下,比如服务器需要把 Servlet 对象序列化到磁盘上(例如进行会话迁移或者服务器重启时保存 Servlet 状态),那么 Servlet 类就需要实现 Serializable 接口。不过在实际开发中,这种情况比较少见,因为 Servlet 主要是处理请求和响应,通常不需要进行序列化操作。
综上所述,ServletConfig 是辅助 Servlet 完成初始化配置的,而 Serializable 是为了让 Servlet 对象可以被序列化,只有在特定需求下 Servlet 才会和 Serializable 产生关联。
对比项 | Servlet | ServletConfig | Serializable |
---|---|---|---|
类型 | 接口(需实现) | 接口(容器实现) | 标记接口(无方法) |
作用 | 处理客户端请求(核心功能) | 存储Servlet配置参数(如初始化参数) | 标识对象可序列化/反序列化 |
常见用途 | - 实现Web业务逻辑 - 处理HTTP请求响应 | - 在init() 中读取配置参数 | - 对象持久化(如文件存储、网络传输) |
实现方式 | - 继承HttpServlet (推荐)- 实现 Servlet 接口 | 由容器自动注入(无需手动实现) | 直接实现Serializable 接口(无需方法) |
与Servlet关系 | 核心处理组件 | 初始化时通过init() 方法注入 | 通常不需要实现(除非需分布式复制) |
- 在 Java Web 中, Servlet 是一个接口,定义了所有 Servlet 应该实现的基本方法。但直接实现这个接口可能会比较麻烦,因为我们需要手动处理很多细节。为了简化开发,Java 提供了两个抽象类:
- GenericServlet :这是一个通用的 Servlet 实现,它实现了 Servlet 接口和 ServletConfig 接口,并且还实现了 Serializable 接口。 Serializable 接口的作用是让 Servlet 可以被序列化,方便在分布式环境中使用。
- HttpServlet :这是 GenericServlet 的一个子类,专门用于处理 HTTP 请求。它提供了 doGet() 和 doPost() 等方法,分别用于处理 GET 和 POST 请求。
在 Web 开发中,GET 和 POST 是 HTTP 协议中两种常见的请求方法,用于客户端(如浏览器)向服务器发送请求并获取响应。
- GET 请求是 HTTP 协议中最常用的请求方法之一,主要用于从服务器获取资源。
- POST 请求主要用于向服务器提交数据,例如用户注册、登录、表单提交等操作。
3.如何让类具有 Servlet 功能
- 直接实现 Servlet 接口:这是最基础的方法,但需要手动实现所有方法,比较繁琐。
- 继承 GenericServlet 类:这种方式相对简单,因为 GenericServlet 已经实现了大部分方法,我们只需要重写 service() 方法即可。
- 继承 HttpServlet 类:这是最常用的方式,尤其是当我们需要处理 HTTP 请求时。我们只需要重写 doGet() 或 doPost() 方法即可。
二、Servlet 生命周期
- Servlet 的生命周期由容器(如 Tomcat)管理,主要分为三个阶段:初始化、服务和销毁。
1.初始化阶段
当 Servlet 被加载到容器中时,容器会调用 init() 方法来初始化 Servlet。这个方法只会被调用一次,通常用于加载配置文件、初始化数据库连接等操作。
@Override
public void init() throws ServletException {// 初始化代码
}
2.服务阶段
当客户端发送请求到 Servlet 时,容器会调用 service() 方法来处理请求。 service() 方法会根据请求的类型(GET 或 POST)调用对应的 doGet() 或 doPost() 方法。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 处理 GET 请求
}@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 处理 POST 请求
}
3.销毁阶段
当 Servlet 不再被使用时,容器会调用 destroy() 方法来销毁 Servlet。这个方法也只会被调用一次,通常用于释放资源,比如关闭数据库连接
@Override
public void destroy() {// 销毁代码
}
总结
Servlet 类层次结构与核心功能
-
核心功能
- 处理客户端请求(GET/POST 等),生成响应(HTML/JSON 等)。
- 管理会话状态,支持数据库交互。
-
关键包
javax.servlet
:基础接口(如Servlet
、ServletConfig
)。javax.servlet.http
:HTTP 扩展(如HttpServletRequest
、HttpServlet
)。
-
类关系与实现方式
- Servlet:核心接口,定义生命周期方法(
init()
、service()
、destroy()
)。 - ServletConfig:存储 Servlet 初始化参数,通过
init()
注入。 - Serializable:可选实现,支持对象序列化(如分布式场景)。
- HttpServlet:常用子类,简化 HTTP 请求处理(覆盖
doGet()
/doPost()
)。
- Servlet:核心接口,定义生命周期方法(
-
实现方式对比
- 直接实现
Servlet
:需手动实现所有方法,灵活性高但繁琐。 - 继承
GenericServlet
:通用实现,需重写service()
。 - 继承
HttpServlet
:推荐方式,专注处理 HTTP 请求。
- 直接实现
Servlet 生命周期(容器管理)
-
初始化阶段
- 容器调用
init(ServletConfig config)
,仅执行一次。 - 用途:加载配置、初始化资源(如数据库连接)。
- 容器调用
-
服务阶段
- 容器调用
service()
,根据请求类型(GET/POST)分发到doGet()
/doPost()
。 - 核心逻辑:处理业务、生成响应。
- 容器调用
-
销毁阶段
- 容器调用
destroy()
,仅执行一次。 - 用途:释放资源(如关闭数据库连接)。
- 容器调用
图示
生命周期阶段:
初始化 → 服务 → 销毁
对应方法:
init() → service() → destroy()类层次结构:
Servlet(接口)
├─ GenericServlet(抽象类)
│ └─ HttpServlet(抽象类) → 常用子类
└─ ServletConfig(接口)
以上就是这篇博客的全部内容,下一篇我们将继续探索 Java-servlet 的更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
非常感谢您的阅读,喜欢的话记得三连哦 |
相关文章:
Java-servlet(四)详细讲解Servlet类层次结构与生命周期
Java-servlet(四)详细讲解Servlet和生命周期 前言一、Servlet类层次结构1.Servlet包2.Servlet 与 ServletConfig 与 Serializable 的关系1. 三者分别是什么2. 三者之间的关系 3.如何让类具有 Servlet 功能 二、Servlet 生命周期1.初始化阶段2.服务阶段3.…...
python基础课程整理--字典的基础
字典的特点 定义:使用花括号 {} 包裹,存储键值对(key-value pairs)。特点: 无序:字典中的元素没有固定的顺序,但可以通过键来访问。可变:字典中的键值对可以被添加、修改或删除。键…...
doris: MySQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。 使用须知 要连接到 MySQL 数据库,您需要 MySQL 5.7, 8.0 或更高版本 MySQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载最新或指定版本的…...
推荐一个基于Koin, Ktor Paging等组件的KMM Compose Multiplatform项目
Kotlin Multiplatform Mobile(KMM)已经从一个雄心勃勃的想法发展成为一个稳定而强大的框架,为开发人员提供了在多个平台上无缝共享代码的能力。通过最近的稳定版本里程碑,KMM已成为跨平台开发领域的改变者。 环境设置 带有Kotli…...
Tomcat 新手入门指南
Tomcat 新手入门指南 Apache Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,广泛用于部署和运行 Java Web 应用程序。以下是 Tomcat 的入门指南,帮助你快速上手。 1. 安装 Tomcat 步骤 1: 下载 Tomcat 访问 Apache Tomcat 官网。选择适合的版…...
游戏引擎学习第138天
仓库:https://gitee.com/mrxiao_com/2d_game_3 资产:game_hero_test_assets_003.zip 发布 我们的目标是展示游戏运行时的完整过程,从像素渲染到不使用GPU的方式,我们自己编写了渲染器并完成了所有的工作。今天我们开始了一些新的内容&#…...
c++ 类特殊成员函数的编译器隐式声明规则
c 类特殊成员函数的编译器隐式声明规则 特殊成员函数编译器隐式声明规则关键术语说明:核心规则总结:示例场景: 特殊成员函数 编译器隐式声明规则 用户声明的成员函数默认构造函数析构函数拷贝构造函数拷贝赋值移动构造函数移动赋值无声明默…...
综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
目录 1.结构化数据挖掘 1.1依赖库导入和数据读取 1.2各品牌机型及售价统计 1.3视频录制规格与价格关联性分析 2.结构化数据预处理 2.1筛选特征 2.2特征标签归一化及编码 1.结构化数据挖掘 1.1依赖库导入和数据读取 导入必要的依赖库,读取 csv 格式数据集转化为 Data…...
day21-API(算法,lambda,练习)
常见的七种查找算法: 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构…...
Linux : 进程地址空间
目录 一 前言 二 进程地址空间是什么 1.现象 2.虚拟地址空间 3. 现象解释 4. 写时拷贝 三 为什么要存在进程地址空间 四 进程地址空间是如何实现的 1 操作系统如何管理进程地址空间 一 前言 进程地址空间图: 在学习C语言的内存管理的时候,我…...
wordpress鼠标特效笔记+npm问题解决
在WordPress网站上添加鼠标点击特效和网页背景特效_wordpress鼠标特效-CSDN博客 学习设置文章浏览量的插件超详细图解:如何使用 WordPress搭建一个个人博客?-CSDN博客 ------------------2025.03.06------------------------------- npm 运行时报错“因…...
大模型——使用 Embedding 模型和向量数据库的 Spring AI RAG
大模型——使用 Embedding 模型和向量数据库的 Spring AI RAG 本文主要介绍以下内容: 嵌入式模型简介。使用 DocumentReader 加载数据。在 VectorStore 中存储 Embedding。实现 RAG(Retrieval-Augmented Generation,检索增强生成),又名 Prompt Stuffing。你可以在 GitHub…...
Spring Boot 缓存最佳实践:从基础到生产的完整指南
Spring Boot 缓存最佳实践:从基础到生产的完整指南 引言 在现代分布式系统中,缓存是提升系统性能的银弹。Spring Boot 通过 spring-boot-starter-cache 模块提供了开箱即用的缓存抽象,但如何根据业务需求实现灵活、可靠的缓存方案…...
vue3,Element Plus中隐藏树el-tree滚动条
el-tree,节点过多,默认会出现垂直滚动条,显得不美观 可以使用隐藏组件 el-scrollbar 将 el-tree 包裹,就可以隐藏垂直滚动条 <el-scrollbar> <el-tree> ... </el-tree> </el-scrollbar> /* 滚动条禁用鼠…...
《机器学习数学基础》补充资料:过渡矩阵和坐标变换推导
尽管《机器学习数学基础》这本书,耗费了比较长的时间和精力,怎奈学识有限,错误难免。因此,除了在专门的网页( 勘误和修订 )中发布勘误和修订内容之外,对于重大错误,我还会以专题的形…...
掌握高效大模型任务流搭建术(二):链式流程如何赋能 AI 处理能力提升
前言: 在上一篇文章中,我们初步探索了 LangChain 的基础链式操作——LLMChain。它巧妙地将大语言模型(LLM)与提示模板(Prompt Template)相结合,为模型交互逻辑的封装提供了一种简洁而高效的方式…...
Linux——Docker容器内MySQL密码忘记了如何查看
目录 查看正在运行的MySQL的容器ID 方法一:查看MySQL容器的日志里的密码 方法二:通过环境变量密码登录 方法三:修改密码 查看正在运行的MySQL的容器ID docker ps 方法一:查看MySQL容器的日志里的密码 docker logs [MySQL的容器…...
深入剖析 Kubernetes 弹性伸缩:HPA 与 Metrics Server
引言 在 Kubernetes (K8s) 集群中,如何根据应用的实际负载自动调整 Pod 数量,实现资源的弹性利用,是保障服务稳定性和成本效益的关键。Horizontal Pod Autoscaler (HPA) 和 Metrics Server 正是实现这一目标的核心组件。本文将深入探讨 HPA …...
Qt5 C++ QMap使用总结
文章目录 功能解释代码使用案例代码解释注意事项代码例子参考 功能解释 QList<T> QMap::values() const Returns a list containing all the values in the map, in ascending order of their keys. If a key is associated with multiple values, all of its values wi…...
如何改变怂怂懦弱的气质(2)
你是否曾经因为害怕失败而逃避选择?是否因为不敢拒绝别人而让自己陷入困境?是否因为过于友善而被人轻视?如果你也曾为这些问题困扰,那么今天的博客就是为你准备的。我们将从行动、拒绝、自我认知、实力提升等多个角度,…...
【CVTE】嵌入式软件开发-Linux方向{一面}
文章目录 数组和链表的区别?特点?使用场景?**1. 数组(Array)****特点:****使用场景:** **2. 链表(Linked List)****特点:****使用场景:** **3. 数…...
自律linux 第 35 天
之前学习了UDP编程,UDP是可以实现多个用户向一个用户发送的,但是TCP一个服务端在同一时刻只能对应一个客户端,因为TCP的通信是使用管道通信的,如果要使用TCP实现一对多的通信,有如下几种办法:多进程&#x…...
云原生系列之本地k8s环境搭建
前置条件 Windows 11 家庭中文版,版本号 23H2 云原生环境搭建 操作系统启用wsl(windows subsystem for linux) 开启wsl功能,如下图 安装并开启github加速器 FastGithub 2.1 下载地址:点击下载 2.2 解压安装文件fastgithub_win-x64.zip 2…...
Cursor实战:Web版背单词应用开发演示
Cursor实战:Web版背单词应用开发演示 需求分析自行编写需求文档借助Cursor生成需求文档 前端UI设计后端开发项目结构环境参数数据库设计安装Python依赖运行应用 前端代码修改测试前端界面 测试数据生成功能测试Bug修复 总结 在上一篇《Cursor AI编程助手不完全指南》…...
每日一题----------枚举的注意事项和细节
注意事项: 1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,利用javap反编译可查。 2.public static Season SPRING new Season("春天", "温暖");简化成SPRING("春天&qu…...
【Java学习】异常
一、异常的处理过程 异常类的似复刻变量被throw时,会立即中止当前所在的这层方法,即当层方法里throw异常类似复刻变量之后的语句就不会执行了,如果throw异常语句在当层方法中被try{}包裹,则中止就先发生被包裹在了try{}层…...
使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)
1.打开STM32CubeMX,点击File->New Project,新建一个新工程。 2.搜索芯片型号,选择正确的芯片封装规格,准备对芯片的引脚进行配置。 进行上面的操作后,跳转到如下的页面。 3.选择要配置的引脚进行配置。此处我的LED是…...
FastGPT 引申:如何基于 LLM 判断知识库的好坏
文章目录 如何基于 LLM 判断知识库的好坏方法概述示例 Prompt声明抽取器 Prompt声明检查器 Prompt 判断机制总结 下面介绍如何基于 LLM 判断知识库的好坏,并展示了如何利用声明抽取器和声明检查器这两个 prompt 构建评价体系。 如何基于 LLM 判断知识库的好坏 在知…...
rabbitmq版本升级并部署高可用
RabbitMQ版本升级 先检查是否已经安装rabbitmq rpm -qa|grep rabbitmq|wc -l //如果结果是0,表示没有安装 rpm -e --nodeps $(rpm -qa|grep rabbitmq) //如安装了,则进行卸载 先检查是否已经安装erlang rpm -qa|grep erlang|wc -l //如果结果…...
了解JVM
目录 一、内存区域划分 1.方法区(元数据区) 2.堆 3.栈 4.程序计数器 5.本地方法栈 总结: 二、类加载 1.加载 2.验证 3.准备 4.解析 5.初始化 三、双亲委派模型 四、垃圾回收 1.找到垃圾 1)引用计数 2)…...
Linux - 工具
一、 代码编译(g/gcc) 1) 预处理 g –E hello.c –o hello.i宏替换 条件编译 头文件展开 去注释 2) 编译 g –S hello.i –o hello.s检查语法将代码转为汇编 3) 汇编 g –c hello.s –o hello.o将汇编转为二进制代码 4) 链接 g hello.o –o …...
ASP.NET Core 6 MVC 文件上传
概述 应用程序中的文件上传是一项功能,用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件,然后根据需要对文件进行一些验证,最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…...
大模型LoRA微调训练原理是什么?
环境: LoRA 问题描述: 大模型LoRA微调训练原理是什么? 解决方案: LoRA(Low-Rank Adaptation)微调是一种高效的参数优化技术,专门用于大型语言模型的微调,旨在减少计算和内存需求…...
Ubuntu系统上部署Node.js项目的完整流程
以下是在Ubuntu系统上部署Node.js项目的完整流程,分为系统初始化、环境配置、项目部署三个部分: 一、系统初始化 & 环境准备 bash # 1. 更新系统软件包 sudo apt update && sudo apt upgrade -y# 2. 安装基础工具 sudo apt install -y buil…...
vue3:七、拦截器实现
一、前言 拦截器可以很好的统一处理请求和响应 请求拦截器:可以在请求发送之前对请求进行统一处理,比如添加认证信息(如 token)、设置请求头、添加公共参数等。响应拦截器:可以在响应返回之后对响应数据进行统一…...
K8S高可用集群-小白学习之二进制部署(ansible+shell)
一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…...
学生管理信息系统的需求分析与设计
伴随教育的迅猛演进以及学生规模的不断扩增,学生管理信息系统已然成为学校管理的关键利器。此系统能够助力学校管控学生的课程成绩、考勤记载、个人资讯等诸多数据,提升学校的管理效能与服务品质。 一.需求分析 1.1 学生信息管理 学生信息在学校管理体…...
010---基于Verilog HDL的分频器设计
文章目录 摘要一、时序图二、程序设计2.1 rtl2.2 tb 三、仿真分析四、实用性 摘要 文章为学习记录。绘制时序图,编码。通过修改分频值参数,实现一定范围分频值内的任意分频器设计。 一、时序图 二、程序设计 2.1 rtl module divider #(parameter D…...
Pytorch使用手册—雅可比矩阵、海森矩阵、hvp、vhp 等:组合函数变换(专题四十四)
计算雅可比矩阵或海森矩阵在许多非传统深度学习模型中是非常有用的。使用 PyTorch 的常规自动微分 API(Tensor.backward(),torch.autograd.grad)计算这些量是困难的(或者很麻烦)。PyTorch 的受 JAX 启发的函数变换 API 提供了高效计算各种高阶自动微分量的方法。 注意: 本…...
OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对选定区域内的梯度场应用适当的非线性变换,然后通过泊松求解器重新积分,可以局部修改图像的表观照明。 cv::illuminati…...
WPF框架---MvvmLight介绍
目录 1. MvvmLight 框架准备 2. MvvmLight 中的相关基类 3. MvvmLight 中的数据绑定与通知 a. 核心功能 b. 关键方法与属性 c. 完整示例 d. 高级用法 4. MvvmLight 中的命令对象 a. 命令对象的作用 b. 核心接口:ICommand c. MvvmLight 中的 RelayCommand…...
C语言基础之【指针】(下)
C语言基础之【指针】(下) 指针和字符串字符指针字符指针做函数参数const修饰的指针变量指针数组做为main函数的形参项目开发常用字符串应用模型while和do-while模型两头堵模型字符串反转模型 字符串处理函数strchr()strrchr()strstr()strtok()strcpy()st…...
Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
大家好,我是微学AI,今天给大家介绍一下动态可变参数激活MoE架构(Dynamic Variable Parameter-Activated MoE, DVPA-MoE)的架构与实际应用,本架构支持从7B到32B的等多档参数动态激活。该架构通过细粒度难度评估和分层专家路由,实现“小问题用小参数,大问题用大参数”的精…...
【0012】Python函数详解
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 编写代码往往是为了实现特定的功能,如果需要使用功能多次,也要写同样的代码多次吗…...
Stable Diffusion教程|快速入门SD绘画原理与安装
什么是Stable Diffusion,什么是炼丹师?根据市场研究机构预测,到2025年全球AI绘画市场规模将达到100亿美元,其中Stable Diffusion(简称SD)作为一种先进的图像生成技术之一,市场份额也在不断增长&…...
鸿蒙应用开发深度解析:API 14核心特性与实战指南
文章目录 一、HarmonyOS API 14架构升级解析1.1 系统架构演进1.2 核心能力对比 二、ArkUI 3.0开发实战2.1 声明式UI完整示例2.2 自定义组件开发 三、分布式能力深度开发3.1 跨设备数据同步流程3.2 分布式数据库操作 四、系统能力扩展开发4.1 后台任务管理4.2 硬件服务调用 五、…...
docker中kibana启动后,通过浏览器访问,出现server is not ready yet
问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现ÿ…...
2025年天梯赛第1场选拔赛
目录 A:徐老师的积木山峰 B:徐老师的最长上升子序列 C:徐老师的机器命令 D:徐老师的地下堡 E:徐老师的新鲜羊腿 F:徐老师的黄金矿工 G:徐老师的成绩统计 H:春节糖果 I:幸运函数 J:好坏钥匙 A:徐老师的积木山峰 徐老师有 n 块积木排成一排,从左往右数编号依次为 1∼…...
28-文本左右对齐
给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可…...
SpringBoot校园管理系统设计与实现
在现代校园管理中,一个高效、灵活的管理系统是不可或缺的。本文将详细介绍基于SpringBoot的校园管理系统的设计与实现,涵盖管理员、用户和院校管理员三大功能模块,以及系统的部署步骤和数据库配置。 管理员功能模块 管理员是系统的核心管理…...