小菜鸟

java菜鸟号正在起航

MySQL 表结构修改全解析:从编码到列定义

在数据库维护过程中,修改表结构是常见操作,包括调整编码、修改列名、增减字段等。MySQL 提供了丰富的 ALTER TABLE 语句支持这些操作,本文详细讲解各类修改场景的语法和注意事项。

修改编码格式(数据库 / 表 / 字段)

编码格式不匹配可能导致中文乱码或表情存储失败,需根据需求调整为 utf8utf8mb4(支持表情)。

1. 修改数据库编码

-- 语法:ALTER DATABASE 数据库名 CHARACTER SET 编码 [COLLATE 校对规则];
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 影响:新表默认使用该编码,已有表不受影响。

2. 修改表编码

-- 语法:ALTER TABLE 表名 CHARACTER SET 编码 [COLLATE 校对规则];
ALTER TABLE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 影响:表的默认编码更新,新添加的字段会继承该编码,已有字段需单独修改。

3. 修改字段编码

-- 语法:ALTER TABLE 表名 MODIFY 字段名 类型 CHARACTER SET 编码 [COLLATE 校对规则];
ALTER TABLE users MODIFY nickname VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
阅读全文 »

XML 命名空间:解决命名冲突的核心机制

在复杂的 XML 文档中,尤其是需要整合多个来源的 XML 片段(如不同标准、不同系统的配置)时,元素或属性重名的情况极为常见。例如,<table>元素在 HTML 中表示表格,在数据库 XML 中可能表示数据表,这种命名冲突会导致解析歧义。XML 命名空间(XML Namespace) 正是为解决此类问题而生,它通过为元素和属性分配唯一的 “命名空间标识”,明确区分相同名称的不同含义。

XML 命名空间的核心概念

  • 命名空间:本质是一个唯一的标识符(通常是 URI,如http://www.springframework.org/schema/beans),用于标识一组 XML 元素和属性的 “归属”。
  • 前缀(Prefix):简化命名空间使用的短别名(如contextmvc),通过前缀与命名空间 URI 绑定,避免在每个元素中重复书写长 URI。
  • 默认命名空间:未指定前缀的元素默认归属的命名空间,简化文档书写。

命名空间的声明方式

XML 命名空间通过xmlns属性声明,有两种核心形式:带前缀的命名空间默认命名空间

带前缀的命名空间(显式声明)

通过xmlns:prefix="URI"的形式声明,其中:

阅读全文 »

Spring MVC Web 上下文初始化机制详解:从 web.xml 到注解配置

Web 上下文(WebApplicationContext)是 Spring MVC 在 Web 环境中的核心容器,负责管理 Bean 的生命周期并与 Servlet 容器集成。其初始化过程与 ServletContext 紧密绑定,生命周期完全一致。从 “传统 web.xml 配置→ContextLoaderListener 工作原理→Servlet 3.0 注解配置” 三个维度,彻底解析 Spring MVC Web 上下文的初始化机制。

Web 上下文与 ServletContext 的关系

在 Web 应用中,ServletContext 是 Servlet 容器(如 Tomcat)提供的全局上下文对象,代表整个 Web 应用,生命周期从应用启动到停止。而 Spring 的 WebApplicationContext 是 Spring 在 Web 环境中的 IOC 容器,依赖 ServletContext 存在,并通过 ServletContext 存储和获取,两者生命周期完全同步。

  • 存储位置WebApplicationContext 初始化后,会以固定键值(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,即 org.springframework.web.context.WebApplicationContext.ROOT)存入 ServletContext 的属性中,方便后续获取。
  • 核心作用WebApplicationContext 管理 Web 相关的 Bean(如 Controller、Service、Repository 等),并整合 Spring 与 Servlet 容器的交互(如请求处理、会话管理等)。

传统配置:基于 web.xml 与 ContextLoaderListener

在 Servlet 3.0 之前,Web 上下文的初始化依赖 web.xml 配置,核心是通过 ContextLoaderListener 触发初始化流程。

web上下文初始化流程

1. web.xml 核心配置

<!-- 1. 配置 ContextLoaderListener:触发 Web 上下文初始化 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 2. 配置上下文配置文件路径(可选,默认有默认值) -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- 多个配置文件用逗号分隔,支持 classpath: 或 /WEB-INF/ 前缀 -->
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
  • ContextLoaderListener:实现 ServletContextListener 接口,监听 ServletContext 的初始化和销毁事件,是 Web 上下文的 “启动器”。
  • contextConfigLocation:指定 Spring 配置文件的位置,若不配置则使用默认路径(/WEB-INF/applicationContext.xml)。

ContextLoaderListener 工作原理

ContextLoaderListener 继承 ContextLoader 类,通过重写 ServletContextListener 的回调方法,将 Web 上下文的初始化与 ServletContext 生命周期绑定。

核心源码解析
阅读全文 »

YARN 工作机制:一个 MapReduce 作业从提交到完成,经历了什么?

你写了一个 MapReduce 作业,打包成 JAR,执行 hadoop jar 提交到集群。

然后呢?这个作业怎么变成了集群上运行的 Map 和 Reduce 任务?YARN 在中间做了什么?

参与的五个角色

在开始之前,先认识一下参与这场”演出”的五个角色:

角色 简称 职责
客户端 Client 提交作业的人
资源管理器 RM 管集群总资源,谁用多少它说了算
节点管理器 NM 管单台机器的资源,启动容器
应用主控 AM 管单个作业的调度,每个作业一个
HDFS 存作业的代码、配置、输入输出数据

它们的关系:RM 管资源,AM 管作业,NM 管节点,Client 提交任务,HDFS 存数据。

分为四个阶段

yarn的工作流程

阶段 1:作业提交(步骤 1-4)

步骤 1:客户端初始化

用户执行 hadoop jar 命令后,客户端创建 YarnRunnerJobSubmitter,检查作业配置(输入输出路径是否存在、Mapper/Reducer 类对不对)。

阅读全文 »

线性规划(LP)问题:定义与求解方法

线性规划(Linear Programming,简称 LP)是运筹学中研究较早、应用广泛的优化模型,核心是在一组线性约束条件下,求解线性目标函数的最大值或最小值。它在资源分配、生产计划、物流优化等领域有重要应用。

LP 问题的核心构成

一个标准的 LP 问题包含三个要素:

  1. 决策变量:需要优化的未知量(通常记为x₁, x₂, ..., xₙ),代表实际问题中的可调整参数(如生产数量、运输量等)。
  2. 目标函数:关于决策变量的线性函数,需最大化(max)或最小化(min)。
    形式:max/min z = c₁x₁ + c₂x₂ + ... + cₙxₙcᵢ为系数,代表各变量对目标的贡献)。
  3. 约束条件:关于决策变量的线性等式或不等式,描述问题的限制(如资源总量、生产能力等)。
    形式:
    • 不等式约束:aᵢ₁x₁ + aᵢ₂x₂ + ... + aᵢₙxₙ ≤ bᵢ≥ bᵢi=1,2,...,m
    • 等式约束:aᵢ₁x₁ + ... + aᵢₙxₙ = bᵢ
    • 非负约束:xᵢ ≥ 0(通常默认决策变量非负)

示例:简单 LP 问题

某工厂生产 A、B 两种产品,A 每件利润 3 元,B 每件利润 5 元。生产 1 件 A 需 2 小时工时,生产 1 件 B 需 3 小时工时,总工时不超过 12 小时。求最大利润。

  • 决策变量:x₁(A 的产量),x₂(B 的产量)。
  • 目标函数:max z = 3x₁ + 5x₂(最大化利润)。
  • 约束条件:
    2x₁ + 3x₂ ≤ 12(工时约束),
    x₁ ≥ 0, x₂ ≥ 0(非负约束)。

LP 问题的求解方法

阅读全文 »
0%