Fei

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

1. 核心功能

1.1 MQ介绍

RocketMQ基本组件

  • Topic: 消息归类的基本单元
  • Queue: 消息队列
  • Producer
  • Consumer
  • ConsumerGroup:
  • NameServer:可以理解为注册中心,负责更新和发现Broker
  • Broker集群:Broker 可以有一个或多个,每一个Brocker就是一个Kafka实例(RacketMQ实例)

1.2 RocketMQ环境搭建

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
51
52
#[Step 1] :拉取 RocketMQ 镜像
docker pull apache/rocketmq:5.1.0

# [Step 2] : 创建容器共享网络 rocketmq
docker network create rocketmq

# [Step 3] : 部署 NameServer 前提条件
# 创建目录
mkdir -p /data/rocketmq/nameserver/{bin,logs}

# 授权文件
chmod 777 -R /data/rocketmq/nameserver/*

# 创建容器
docker run -d \
--privileged=true --name rmqnamesrv \
apache/rocketmq:5.1.0 sh mqnamesrv

# 拷贝启动脚本
docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh /data/rocketmq/nameserver/bin/

# 删除容器 NameServer
docker rm -f rmqnamesrv


# [Step 4] : 启动容器 NameServer
# 启动容器 NameServer
docker run -d --network rocketmq \
--privileged=true --restart=always \
--name rmqnamesrv -p 9876:9876 \
-v /data/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /data/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh \
apache/rocketmq:5.1.0 sh mqnamesrv

# 部分命令解释 :
1. -e "MAX_HEAP_SIZE=256M" 设置最大堆内存和堆内存初始大小
2. -e "HEAP_NEWSIZE=128M" 设置新生代内存大小




# [Step 5] : 查看 NameServer 启动日志
# 查看启动日志
docker logs -f rmqnamesrv
# 成功,则进行下一步

# [Step 6] : 部署 Broker + Proxy
mkdir -p /data/rocketmq/broker/{store,logs,conf,bin}
chmod 777 -R /data/rocketmq/broker/*

# [Step 7] : 创建broker.conf文件
vim /data/rocketmq/broker/conf/broker.conf
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
# nameServer 地址多个用;隔开 默认值null
# 例:127.0.0.1:6666;127.0.0.1:8888
namesrvAddr = 192.168.56.2:9876
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称. 主节点的名称必须要和从节点名称一致
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId = 0
# Broker服务地址 String 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.56.2
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 禁用 tsl
tlsTestModeEnable = false

# 下面是没有注释的版本, 记得修改"namesrvAddr", "brokerIP1"的地址
# namesrvAddr = 192.168.56.2:9876
# brokerClusterName = DefaultCluster
# brokerName = broker-a
# brokerId = 0
# brokerIP1 = 192.168.56.2
# brokerRole = ASYNC_MASTER
# flushDiskType = ASYNC_FLUSH
# deleteWhen = 04
# fileReservedTime = 72
# autoCreateTopicEnable=true
# autoCreateSubscriptionGroup=true
# tlsTestModeEnable = false

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
# [Step 8] : 拷贝启动脚本
# 启动 Broker 容器
docker run -d \
--name rmqbroker --privileged=true \
apache/rocketmq:5.1.0 sh mqbroker

# 拷贝脚本文件
docker cp rmqbroker:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh /data/rocketmq/broker/bin

# [Step 9] : 启动容器 Broker
# 删除容器 Broker
docker rm -f rmqbroker

# 启动容器 Broker
docker run -d --network rocketmq \
--restart=always --name rmqbroker --privileged=true \
-p 10911:10911 -p 10909:10909 \
-v /data/rocketmq/broker/logs:/root/logs \
-v /data/rocketmq/broker/store:/root/store \
-v /data/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-v /data/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
apache/rocketmq:5.1.0 sh mqbroker --enable-proxy -c /home/rocketmq/broker.conf

# 查看启动日志
docker logs -f rmqbroker


# [Step 10] : 部署RocketMQ控制台(rocketmq-dashboard)
docker pull apacherocketmq/rocketmq-dashboard:latest


# [Step 11] : 启动容器 Rocketmq-dashboard
docker run -d \
--restart=always --name rmq-dashboard \
-p 8080:8080 --network rocketmq \
-e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
apacherocketmq/rocketmq-dashboard

# 日志
docker logs -f rmq-dashboard

整合springboot

1. 认识AI

1.1 神经元

介绍

LangChain4j入门到实战项目: 项目地址

软件架构

前端:

  • 静态页面

基础

1
2
3
4
5
6
# mysql启动
net start mysql80
net stop mysql80

# 客户端连接
mysql -h 172.168.0.1 -P 3306 -u root -p

数据模型:

  • 数据库

1. SQL

1.1 通用语法

1.2 SQL分类

[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 的团队则被称为“三友”