有关事件独立性内容部分的说明
什么是事件独立性
若事件A,B 满足 P(AB) = P(A)P(B)
则称事件 A 独立于事件 B
这是证明两事件独立的唯一公式
由此定义可知,若A独立于B,则必有B独立于A,从而A,B之间的独立性是相互的。以后就称A,B相互独立,或简称A,B独立。
由此定义,若P(B) =
0,则必有A独立于B。
现将两个事件相互独立的概念推广到n(n ≥ 2)个事件的情形:
设A1, A2, ⋯, An为n(n ≥ 2)个事件,若对其中任意一组事件Ai1, Ai2, ⋯, Aik(2 ≤ k ≤ n),都有
P(Ai1, Ai2, ⋯, Aik) = P(Ai1)P(Ai2)⋯P(Aik)
再则由此定义即可推出如下定理:
关于事件独立性的一些定理
设P(B) > 0,则A与B独立的充要条件是P(A|B) = P(A)。同理,若P(A) > 0,则A与B独立的充要条件是...
概率论常见公式的详细推导和概率公理化的内容描述
关于概率的公理化的一些说明
概率的公理化定义
设有随机试验E,E的样本空间为Ω,记包括Ω在内的E的所有时间组成的集合族为ℱ,若ℱ对中的任意一个事件A都能赋予一个实数P(A),且P(A)满足条件:
非负性:0 ≤ P(A) ≤ 1;
规范性:P(Ω) = 1;
可列可加性:对两两互不相容的事件A1, A2, ⋯,有
$$
P\left(\sum_{i = 1}^{\infty}A_i\right)=\sum_{i = 1}^{\infty}P(A_i)
$$
则称P(A)为事件A的概率
关于概率的公理化定义一些额外内容
其中,设ℱ是由Ω中的子集组成的子集类,若具有
Ω ∈ ℱ
若$\overline{A} \in
\mathscr{F}$,则$\overline{A} = \Omega
- A \in \mathscr{F}$
若An ∈ ℱ(对一切n ≥ 1),则$\bigcup_{n = 1}^{\infty} A_n...
Spring Boot part21-自定义starter
自定义 starter
SpringBoot Starter 场景机制
Spring Boot Starter 是一种简化 Spring Boot
应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。应用者只需要在maven中引入
starter 依赖,Spring Boot
就能自动扫描到要加载的信息并启动相应的默认配置。
starter 让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。Spring
Boot 会自动通过 classpath 路径下的类发现需要的
Bean,并注册进IOC容器。Spring Boot 提供了针对日常企业应用研发各种场景的
spring-boot-starter
依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。
Spring Boot...
Spring Boot part20-事件驱动开发
事件驱动开发
简介
在现代应用程序开发中,事件驱动架构(EDA)越来越受欢迎。它不仅可以提高系统的解耦性,还能提升系统的可扩展性和响应速度。Spring
Boot
中的事件驱动开发是一种解耦业务逻辑的设计模式,核心思想是:通过
“事件发布 - 监听”
机制,让不同组件在不直接依赖的情况下协作。
事件驱动开发是一种软件架构模式,系统通过事件来进行通信和协调。事件可以是系统中发生的任何有意义的事情,如用户点击按钮、数据更新等。事件驱动架构的核心思想是将事件的发布者和事件的处理者解耦,通过事件总线来传递事件。这样可以使得系统更加灵活,易于扩展和维护。
Spring Boot中的事件模型基于 Spring Framework 的 ApplicationEvent 和
ApplicationListener。ApplicationEvent
是所有事件的基类,ApplicationListener
是所有事件监听器的接口。我们可以自定义事件并发布,自定义监听器来处理这些事件。
简单说,事件驱动开发是用 “事件” 作为业务流程的
“粘合剂”,让不同组件在...
Spring Boot part19-生命周期监听与9大事件
观察者模式
观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观察者。
举个实际的例子:
事件源(Event
Source):可以视为“主题(Subject)”,当其状态发生变化时(比如播放新的内容),会通知所有的观察者。想象我们正在听广播,广播电台就是一个事件源,它提供了大量的新闻、音乐和其他内容。
事件(Event):这是主题状态改变的具体表示,对应到广播例子中,就是新闻、音乐和其他内容。每当电台播放新的内容时,就相当于一个新的事件被发布了。
广播器(Event Publisher...
Spring Boot part18-整合JUnit5进行测试
Spring Boot 整合 JUnit5
进行单元测试
SpringBoot 提供⼀系列测试⼯具集及注解⽅便我们进⾏测试。
Spring Test 与
JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而 Spring Boot
Test 是在 Spring Test 之上的再次封装,增加了切片测试,增强了 mock
能力。
spring-boot-test提供核⼼测试能⼒,spring-boot-test-autoconfigure提供测试的⼀些⾃动配置
我们只需要导⼊ spring-boot-starter-test 即可整合测试
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>
Spring...
Spring Boot part17-外部化配置
外部化配置
什么是外部化配置
在软件开发中,外部化配置指的是将应用程序的配置信息(如环境参数、连接地址、业务开关等)与代码逻辑分离,存储在外部资源中(如配置文件、环境变量、数据库等)。Spring
Boot
的外部化配置机制并非凭空产生,而是源于软件开发中一系列实际需求的驱动
Spring Boot 外部化配置 (Externalized Configuration)
提供了一套强大的机制,允许我们将应用的配置
从代码中解耦出来,并通过多种外部来源进行灵活管理,从而打造出
可移植、可扩展、易于维护 的 Spring Boot...
Spring Boot part16-Profile环境隔离
什么是Profiles
介绍
随着软件开发变得越来越复杂,应用程序往往需要在不同的环境中运行,比如开发、测试、生产等。每个环境可能对配置有不同的需求。手动管理这些差异化的配置不仅容易出错,而且效率低下。为了解决这个问题,Spring框架引入了Profiles的概念,它允许开发者根据不同的环境来激活特定的配置设置。
Spring Profiles
是Spring框架提供的一种机制,用来解决多环境配置问题。通过定义不同的profiles,可以在同一套代码库中针对不同的运行时环境(如开发、测试、生产)指定不同的配置属性,这样就提供了一种方式允许我们指定在特定环境下只加载对应的程序配置,每一种环境配置对应一个
Profile,只有当前 Profile 处于激活状态时,才会将该 Profile
所对应的配置和 Bean 加载到 Spring
程序中。这样做的好处是能够保持代码的一致性,同时又能灵活地适应各种环境的变化。
Spring Profiles
就是针对应用程序,不同环境需要不同配置加载的一种解决方案。
Profile 的概念其实很早在 Spring...
快速上手H2数据库进行开发
前言
H2 是一个用 Java
编写的开源关系数据库,特别适合作为嵌入式数据库和内存数据库使用。
针对其特性,我不会太深入讲解什么其他跟原理和很细节方面的东西,本文旨在让大家快速理解什么是内存数据库以及如何使用内存数据库快速进行开发。
什么是内存数据库
内存数据库(In-Memory
Database,IMDB)是一种将数据完全存储在计算机内存中的数据库系统。与传统磁盘数据库不同,它跳过了磁盘
I/O
操作,直接通过内存读写数据,因此具备毫秒级响应速度和高并发处理能力。其核心优势在于:
速度优势:内存访问速度(纳秒级)比磁盘(毫秒级)快
3-4 个数量级,适合实时分析、高频交易等场景。
架构简化:无需复杂的磁盘缓存机制,数据结构设计更贴近内存特性(如哈希表、索引树)。
内存计算融合:数据与计算逻辑在内存中直接交互,减少数据搬运开销。
数据存储与持久化
主要存储在内存:数据加载到内存中运行,减少...
Spring Boot part15-SpringApplication的基础特性及其原理
SpringApplication的基础特性
在 Spring Boot 生态中,SpringApplication
是启动应用的核心类,它封装了繁杂的启动流程,让开发者能以简洁方式启动应用,同时还提供了丰富可扩展点,助力定制化需求实现。
在这里我会先讲基础特性,然后会再将一些 SpringApplication
的基础原理
自定义 banner
什么是 banner
banner 是 Spring Boot
应用启动时,在控制台打印的一段字符图案或文字信息,默认是 Spring Boot
标志性图案。它虽不影响应用功能,却能成为应用独特
“名片”,用于展示团队文化、应用名称等个性化内容。
image-20250613165542529
这个就是 banner
这个东西是可以自定义的
如何自定义 banner
在类路径(一般是 src/main/resources 目录)下添加
banner.txt 文件,Spring Boot 启动时会自动加载该文件内容作为
banner 显示。可借助在线工具(如文中提到的 Spring Boot...