Fei

非淡泊无以明志,非宁静无以致远

[TOC]

1. 设计模式相关内容介绍

1.1 设计模式概述

设计模式分类:

  • 创建者模式: 将对象的创建与使用分离(解耦)

    • 单例
    • 原型
    • 工厂方法
    • 抽象工厂
    • 建造者
  • 结构型模式: 如何将类或对象按照某种布局组成更大的结构

    • 代理
    • 适配器
    • 桥接
    • 装饰
    • 外观
    • 享元
    • 组合
  • 行为型模式: 描述类或对象之间如何相互协作,以及如何分配职责

    • 模板方法
    • 策略
    • 命令
    • 职责链
    • 状态
    • 观察者
    • 中介者
    • 迭代器
    • 访问者
    • 备忘录
    • 解释器

1.2 UML类图

UML是统一建模语言

  • 用例图
  • 类图
  • 对象图
  • 状态图
  • 活动图
  • 时序图
  • 协作图
  • 构件图

类的表示方式

[TOC]

  1. 内存与垃圾回收篇 🛠

  2. 字节码与类的加载篇 ✈

  3. 性能监控与调优篇 🚀

  4. 大厂面试篇

1 JVM与Java体系结构

JVM根本不关心在其内部的程序是由什么语言编写的, 它只关心字节码文件

JVM特点:

  • 自动内存管理
  • 自动垃圾回收功能

1.1 JVM 结构简图

[TOC]

1. 项目概述和环境搭建

1.1 软件开发整体介绍

1.1.1 软件开发流程

  • 需求分析
    • 需求规格说明书(PRD)
    • 产品原型(静态网页)
  • 设计
    • UI设计
    • 数据库设计
    • 接口设计
  • 编码
    • 编写代码
    • 单元测试
  • 测试
    • 测试用例
    • 测试报告
  • 上线运维
    • 软件环境安装、配置

1.1.2 角色分工

1.1.3 软件环境

  • 开发环境: 开发人员在开发阶段使用的环境,一般对外部用户无法访问
  • 测试环境: 专门给测试人员使用的环境,用于测试项目,一般对外部用户无法访问
  • 生产环境: 即线上环境,正式提供对外服务的环境

1.分布式基础(全栈开发篇)

  • 架构图

1.1 项目介绍

1.1.1 项目背景

1)电商模式

市面上有5 种常见的电商模式B2B、B2C、C2B、C2C、O2O;

1、B2B 模式
B2B (Business to Business), 是指商家与商家建立的商业关系。如:阿里巴巴

2、B2C 模式
B2C (Business to Consumer), 就是我们经常看到的供应商直接把商品卖给用户,即“商对客”
模式,也就是通常说的商业零售,直接面向消费者销售产品和服务。如:苏宁易购、京东、
天猫、小米商城

1. Promethues 简介

Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的开发者和用户社区非常活跃,它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了证明这一点,Prometheus 于 2016 年 5 月加入 CNCF 基金会,成为继 Kubernetes 之后的第二个 CNCF 托管项目。Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的开发者和用户社区非常活跃,它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了证明这一点,Prometheus 于 2016 年 5 月加入 CNCF 基金会,成为继 Kubernetes 之后的第二个 CNCF 托管项目。

1.1 Promethues特点

  1. 易于管理
  • Prometheus核心部分只有一个单独的二进制文件,不存在第三方依赖(数据库,缓存等)。唯一需要的就是本地磁盘,因此不会出现级联故障等风险
  • Promethues的pull模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建所需的监控系统
  • 对于复杂情况,可以使用Prometheus的服务发现(Service Discovery)能力动态管理监控目标。 (例如对于新扩展的服务器,自动开始监控)
  1. 监控服务的内部运行状态
  • Prometheus鼓励用户监控服务的内部状态, 基于promethues丰富的Client库。用户可以轻松地在应用程序中添加对Prometheus的支持。从而让用户可以获取应用内部真正的状态。
  1. 强大的数据模型
  • 所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB)。所有的样本除了基本的指标名称外,还有一组用于描述该指标的标签
    1
    2
    3

    # 指标名称(metric){标签}
    http_request_status{code="200",content_path="/api/path",enviroment="production"}

创建和维护一个开源项目是一个非常有意义的工作,它可以帮助你与全球开发者合作,同时建立个人或团队的影响力。以下是详细步骤,帮你从零开始创建一个成功的开源项目。

1. 确定项目目标

解决实际问题:选择一个对你或他人有用的问题作为项目的核心目标。
定义项目范围:明确项目的功能范围,避免过于宽泛。
简单开始:从一个小而实用的功能入手,后续逐步扩展。

2. 选择开源许可证

许可证的作用:它告诉用户和贡献者项目的使用规则。
常见开源许可证:
MIT:最宽松,允许几乎任何用途。
GPL:要求衍生项目也必须开源。
Apache 2.0:允许商业用途,同时保护作者的专利。
添加许可证: 创建一个 LICENSE 文件,并粘贴许可证文本。例如,MIT 许可证可以从 MIT License 模板 获取。

MIT
特点:
非常宽松,允许商业使用、修改、分发。
用户只需保留版权声明和许可证文本。
适用场景:任何开源项目,尤其是工具类、库类项目。
示例:许多现代项目(如 React)使用 MIT 许可证。

GPL(GNU General Public License)
特点:
用户可以自由使用和修改代码,但必须将修改后的代码也开源并使用相同许可证。
不适合希望代码被广泛商业化的项目。
适用场景:想保护代码开源精神的项目。
变体:
GPLv2:更严格。
GPLv3:增加对 SaaS 模型的限制。

Apache 2.0
特点:
类似 MIT,但额外提供专利授权保护。
如果你的代码包含创新算法,Apache 2.0 可以更好地保护你免受专利纠纷。
适用场景:对知识产权较为敏感的大型项目。

统一建模语言(UML)指南

文章来源visual Paradigm

UML 是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。UML主要使用图形符号来表示软件项目的设计,使用UML可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。以下我们将向您详细介绍什么是UML、UML的历史以及每个UML图类型的描述,辅之以UML示例。

然而,在软件工程中,大多数从业者不使用UML,而是产生非正式的手绘图;不过,这些图例中仍往往包括UML的元素

UML 的起源

UML 的目标是提供一个标准的符号,可以被所有面向对象的方法使用,并选择和整合前兆符号的最佳元素。UML可用于广泛的应用程序,它为不同的系统和活动(如分布式系统,分析,系统设计和部署)提供​​了构造。

UML 是由 OMT 统一而来的符号,时序如下:

  1. 对象建模技术OMT [James Rumbaugh 1991] - 最适合分析和数据密集型信息系统。
  2. Booch [Grady Booch 1994] - 强项为设计和写作。Grady Booch 曾经为 Ada 语言方面做过广泛的工作,并且一直是该语言面向对象技术发展的主要参与者。尽管 Booch 方法很强大,但是但并未广为接受 (因为他的模型包含着很多云状,序人不整齐的感觉)
  3. OOSE(面向对象的软件工程[Ivar Jacobson 1992]) - 有一个称为用例的模型。用例是理解整个系统行为的强大技术(OO传统上很弱的领域)。

到了 1995 年,OOSE的创建者 Ivar Jacobson 也加入了Rational,他的想法(特别是有关“用例” (Use Case) 的概念)被整合于统一方法中,成为“统一建模语言”。Rumbaugh,Booch 和 Jacobson 的团队则被称为“三友”

实体关系图(ERD)指南

什么是实体关系图(ERD)?

数据库是软件系统中不可或缺的一个组成部分,若能在数据库工程中好好利用 ER 图,便能让您生成高质量的数据库设计,用于数据库创建,管理和维护,也为人员间的交流提供了具意义的基础。

本文将深入介绍 ER 图表。通过阅读本ERD指南,您将获得有关 ER 图和数据库设计的基本知识和技能。你会学到什么是 ERD,为什么要绘制 ERD,ERD 符号,如何绘制 ERD 等,以及一堆 ERD 示例

实体关系图也被称为 ERD、ER 图、实体联系模型、实体联系模式图或 ER 模型,是一种用于数据库设计的结构图。一幅 ERD 包含不同的符号和连接符,用于显示两个重要的信息: 系统范围内的主要实体,以及这些实体之间的相互关系。

什么是实体?

当我们谈论 ERD 中的实体时,我们经常提到诸如人员/角色(例如学生),有形商业对象(例如产品),无形商业对象(例如日志)等业务对象。“关系”則是这些实体在系统内的相互关联。

在典型的 ER 设计中,可以找到诸如圆角矩形和 (Rounded rectangle) 连接符(具有不同样式的末端)的符号来描述实体,它们的属性和相互关系。

ERD 的符号有哪些?

何时绘制ER图?

SSM

SSM三者的关系

1 Spring IoC容器

父子工程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.learning.springmvc</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>

<!--父工程定义了版本, 子模块不需要再定义版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<!--父项目-->
<!--父项目一般不写代码-->
<!--适用场景:
1. 组织和管理多个子模块的公共配置(如依赖、插件、构建配置)。
2. 聚合子模块,使它们可以通过 mvn install 或 mvn package 一次性构建所有子模块。
3. 父项目自身没有具体的功能实现,仅作为管理和继承的基础。-->

<!--通常情况下,父项目的打包方式是 pom,这是最佳实践-->
<!--当父项目的打包方式为 pom 时,父项目本身不会生成实际的可部署包(如 jar 或 war),而仅作为一个配置聚合的容器-->
<packaging>pom</packaging>
<modules>
<module>ssm-spring-ioc</module>
</modules>

<!--当父工程要统一管理依赖时, 使用<dependencyManagement>进行管理, 子模块引用时, 不用再指定版本-->
<!--<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
</dependencyManagement>-->

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

</project>

1.1 组件到容器

注册组件的方式:

  1. 使用@Import注解标识启动类
1
2
3
4
5
6
7
@Import({Dog.class, Person.class})
@SpringBootApplication
public class Application {
public static void main(String[] args) {
//1. 跑起一个Spring的应用, 获取一个ApplicationContext, 即ioc容器
ConfigurableApplicationContext ioc = SpringApplication.run(Application.class, args);
}

SpringMVC

Demo代码

1 SpringMVC 简介

MVC是一种软件架构思想, 将软件按照模型、视图、控制器来划分
M: Model : 模型层, 指工程中的Java Bean, 作用是处理数据
Java Bean分为两类:

  • 实体类Bean: 专门存储业务数据的, 比如User, Student
  • 业务处理Bean: 指Service或者Dao, 专门用于处理业务逻辑和数据访问

V: View :视图层, 指工程中html或sp等页面, 作用是与用户进行交互, 展示数据
C: Controller : 控制层, 指工程中的servlet, 作用是接受请求和响应浏览器

SpringMVC是一个Spring的子项目, SpringMVC有如下特点:

  • Spring系列原生产品, 与IOC容器等基础设施无缝对接
  • 基于原生的Servlet, 通过功能强大的前端控制器DispatcherServlet, 对请求和响应进行统一处理
  • 表述层各细分领域需要解决的问题全方面覆盖, 提供全面解决方案
  • 代码清晰简洁、组件化程度高、可插拔式组件即插即用、性能卓越..

2. HelloWorld