Docker 单机快速部署大数据各组件
文章目录
- 一、Spark
- 1.1 NetWork 网络
- 1.2 安装 Java8
- 1.3 安装 Python 环境
- 1.4 Spark 安装部署
- 二、Kafka
- 三、StarRocks
- 四、Redis
- 五、Rabbitmq
- 六、Emqx
- 6.1 前言
- 6.2 安装部署
- 七、Flink
- 八、Nacos
- 九、Nginx
一、Spark
1.1 NetWork 网络
docker network lsdocker network create --driver=bridge hadoop-network
1.2 安装 Java8
下载基础镜像:
docker pull centos:7
1.3 安装 Python 环境
Miniconda3 安装:
root@hadoop:~# apt install wgetroot@hadoop:~# wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shroot@hadoop:~# bash Miniconda3-latest-Linux-x86_64.shroot@hadoop:~# source .bashrc
(base) root@hadoop:~# python
Python 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:12:24) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
可参考:Miniconda安装教程
1.4 Spark 安装部署
上传安装包:
docker cp spark-2.4.0-bin-hadoop2.7.tgz ubuntu-java8:/usr/localdocker cp scala-2.11.12.tgz ubuntu-java8:/usr/local
解压:
# 解压
tar -zxf spark-2.4.0-bin-hadoop2.7.tgz
tar -zxf scala-2.11.12.tgz# 删除
rm -rf spark-2.4.0-bin-hadoop2.7.tgz
rm -rf scala-2.11.12.tgz
修改配置(要运行本地模式的话可忽略):
cd /usr/local/spark-2.4.0-bin-hadoop2.7/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh# 添加内容
export JAVA_HOME=/usr/java/jdk1.8.0_212
export SCALA_HOME=/usr/local/scala-2.11.12
export SPARK_HOME=/usr/local/spark-2.4.0-bin-hadoop2.7
export HADOOP_INSTALL=/usr/local/hadoop-3.0.0
export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop
注:默认没有 vi 和 vim 命令,需要安装,安装命令:apt install vim
环境变量:
root@hadoop:~# vim .bashrc
# SPARK_HOME
export SPARK_HOME=/usr/local/spark-2.4.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
测试命令:
spark-submit --master local[*] --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.11-2.4.0.jar 20
二、Kafka
下载镜像:
docker pull bitnami/kafka:3.6.0
启动容器:
docker run -d --name kafka \
-p 9092:9092 \
--network hadoop-network \
-e KAFKA_ADVERTISED_PORT=9092 \
-e KAFKA_ENABLE_KRAFT=yes \
-e KAFKA_CFG_PROCESS_ROLES=broker,controller \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@127.0.0.1:9093 \
-e KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_CFG_NODE_ID=1 \
bitnami/kafka:3.6.0-d:选项以守护程序模式运行容器。
--name kafka:为容器指定一个名称。
-p 9092:9092:将容器中的 9092 端口(后面的)映射到主机的 9092 端口(前面的)。
要验证 Kafka 是否正在运行,请使用以下命令检查容器的日志:
docker logs kafka。。。
[2024-09-25 09:02:34,287] INFO Kafka version: 3.6.0 (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,287] INFO Kafka commitId: 60e845626d8a465a (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,287] INFO Kafka startTimeMs: 1727254954286 (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,289] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)
创建主题:
docker exec -it kafka /bin/bash# data解析
kafka-topics.sh --create --topic xiaoqiang-result-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1kafka-topics.sh --bootstrap-server localhost:9092 --list
三、StarRocks
集群部署参考文档:通过 docker-compose 快速部署 StarRocks 保姆级教程
下载官方镜像:
docker pull starrocks/allin1-ubuntu:3.1.13
运行容器:
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd --name starrocks starrocks/allin1-ubuntu:3.1.13# 进入容器
docker exec -it starrocks mysql -P 9030 -h 127.0.0.1 -u root
四、Redis
下载镜像:
docker pull redis
编辑配置文件 /home/bigdata/redis/redis.conf
,使 Redis 支持数据持久化:
protected-mode noport 6379tcp-backlog 511
#redis密码 强烈建议设置复杂一些
requirepass ABCabc123timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yessave 900 1
save 300 10
save 60 10000stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdbdir ./replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay noreplica-priority 100lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush noappendonly yesappendfilename "appendonly.aof"no-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mbaof-load-truncated yes
aof-use-rdb-preamble yeslua-time-limit 5000
slowlog-max-len 128notify-keyspace-events ""hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512zset-max-ziplist-entries 128
zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096
stream-node-max-entries 100activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动容器:
sudo docker run --restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6379:6379 \
--name redis \
-v /home/bigdata/redis/redis.conf:/etc/redis/redis.conf \
-v /home/bigdata/redis/data:/data \
-itd redis:latest redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass qwe123
参数的意义:
- 【 --restart=always】 开机启动,失败也会一直重启;
- 【–log-opt max-size=100m】意味着一个容器日志大小上限是100M;
- 【–log-opt max-file=2】意味着一个容器有2个日志,分别是id+.json、id+1.json;
- 【-p 6379:6379】 将宿主机6379端口与容器内6379端口进行映射;
- 【-v】 将宿主机目录或文件与容器内目录或文件进行挂载映射;
- 【-itd】
i:以交互模式运行容器,通常与 -t 同时使用;
t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
d:表示后台启动redis; - 【–name】 给容器命名;
- 【–appendonly yes】 开启redis 持久化;
- 【–requirepass 123456】 强烈建议设置密码,并且将密码设置为高强度复杂;
- 【redis-server /etc/redis/redis.conf】 以配置文件启动redis,加载容器内的conf文件;
查看启动日志(是否正常启动):
docker logs redis # 后面跟容器名 or 容器ID 都可以
docker logs --since 30m redis # --since 30m 是查看此容器30分钟之内的日志情况。
查看本机 Docker 运行的容器:
docker ps -a | grep redis
查看 redis 命令是否正常:
docker exec -it redis redis-cli
测试连接:
127.0.0.1:6379> select 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set k1 v1
OK
127.0.0.1:6379[1]> get k1
"v1"
127.0.0.1:6379[1]>
参考:Docker安装redis(保姆级教程&图文并茂)
五、Rabbitmq
拉取 RabbitMQ 镜像:
docker pull rabbitmq:3.8-management
创建目录,授权文件夹
# 创建目录
mkdir -p /data/rabbitmq/{conf,data,log}
# 授权文件夹
chmod -R 777 /data/rabbitmq/{conf,data,log}
创建 RabbitMQ 容器:
docker run --restart=always --name rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=rabbit \
-e RABBITMQ_DEFAULT_PASS=rabbit \
-v /data/rabbitmq/data:/var/lib/rabbitmq \
-v /data/rabbitmq/conf:/etc/rabbitmq \
-v /data/rabbitmq/log:/var/log/rabbitmq \
-d rabbitmq:3.8-management
相关参数解释:
- docker run: 启动一个新的 Docker 容器。
- –restart=always: 容器意外退出或 Docker 服务重启,Docker 将始终自动重新启动该容器。
- –name rabbitmq: 给容器命名为 rabbitmq,以便于管理和引用该容器。
- -p 15672:15672 -p 5672:5672: 端口映射。将主机的 5672 端口映射到容器的 5672 端口。
- -e RABBITMQ_DEFAULT_USER=rabbit: 指定默认的 RabbitMQ 用户名为 rabbit。
- -e RABBITMQ_DEFAULT_PASS=rabbit: 指定默认的 RabbitMQ 密码为 rabbit。
- -v /data/rabbitmq/data:/var/lib/rabbitmq: 数据持久化
- -v /data/rabbitmq/conf:/etc/rabbitmq: 配置文件持久化
- -v /data/rabbitmq/log:/var/log/rabbitmq: 日志文件持久化
- -d: 容器将在后台运行,而不是占用当前的终端会话。
查看 RabbitMQ 启动日志:docker logs -f rabbitmq
访问 RabbitMQ 控制台:
服务器IP / 虚拟机静态IP : 15672
例如我的控制台地址为 : http://172.29.32.233:15672/
访问发现无法访问,开启控制台管理 : 进入 RabbitMQ 容器后开启控制台管理:
# 进入 RabbitMQ 容器
docker exec -it rabbitmq bash
# 开启控制台管理
rabbitmq-plugins enable rabbitmq_management
登录 RabbitMQ 控制台:
进入 RabbitMQ 容器,添加管理员账号,授权账号管理员权限,查看账号列表:
# 进入 RabbitMQ 容器
docker exec -it rabbitmq bash
# 添加管理员账号
rabbitmqctl add_user 用户名 密码
# 授权账号管理员权限
rabbitmqctl set_user_tags 用户名 administrator
# 查看账号列表
rabbitmqctl list_users
重启 RabbitMQ 容器,再次访问,成功访问 !
# 重启容器
docker restart rabbitmq
参考:
Docker 部署 RabbitMQ (图文并茂超详细)
Docker之安装RabbitMq_docker 安装rabbitmq
六、Emqx
6.1 前言
什么是 MQTT?
- MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
- 是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议
- 关键词:通讯协议
什么是EMQ(emqx的简称)?
- EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。
- 关键词:消息服务器
端口 | 描述 |
---|---|
18083 | web端后台管理页端口 |
1883 | MQTT TCP 端口 |
8883 | MQTT TCP TLS/SSL 端口 |
8083 | HTTP and WebSocket 端口 |
8084 | HTTPS and WSS 端口 |
8080 | MGMT API 端口 |
MGMT 端口 :MGMT是网络管理端口,可以直接用网线连接,登陆进防火墙以网页模式管理。
6.2 安装部署
获取 Docker 镜像:
docker pull emqx/emqx-enterprise:5.7.1
运行以下命令启动 Docker 容器:
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.7.1
如果需要持久 Docker 容器 ,请将以下目录挂载到容器外部,这样即使容器被删除数据也不会丢失:
/opt/emqx/data
/opt/emqx/log
启动容器并挂载目录:(挂载失败,后续排查)
docker run -d --name emqx-enterprise \-p 1883:1883 -p 8083:8083 \-p 8084:8084 -p 8883:8883 \-p 18083:18083 \-v $PWD/data:/opt/emqx/data \-v $PWD/log:/opt/emqx/log \emqx/emqx-enterprise:5.7.1
参考:
通过 Docker 运行 EMQX
docker实现搭建emqx服务
EMQX的docker部署与使用(mqtt)
七、Flink
拉取镜像:
docker pull flink:1.17.2
编辑 docker-compose.yml
文件:
version: "3"
services:jobmanager:image: flink:1.17.2expose:- "6123"ports:- "8081:8081"command: jobmanagerenvironment:- JOB_MANAGER_RPC_ADDRESS=jobmanagertaskmanager:image: flink:1.17.2expose:- "6121"- "6122"depends_on:- jobmanagercommand: taskmanagerlinks:- "jobmanager:jobmanager"environment:- JOB_MANAGER_RPC_ADDRESS=jobmanagerscale: 3 #指定taskmanager数量
在文件夹路径下执行:
docker-compose up -d
通过在浏览器的地址栏中输入 localhost:8081
即可打开 Flink 的 UI 页面:
参考:
手把手教你在Docker中如何使用flink,实现将mySQL数据同步写入kafka中
Docker下的Flink
八、Nacos
拉取镜像:
docker pull nacos/nacos-server:v2.1.1
创建目录,创建容器,拷贝文件,授权文件,删除容器:
# 创建目录
mkdir -p /data/nacos/{conf,logs,data}# 创建容器
docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.1.1# 拷贝文件
docker cp nacos:/home/nacos/conf /data/nacos
docker cp nacos:/home/nacos/data /data/nacos
docker cp nacos:/home/nacos/logs /data/nacos# 授权文件
chmod 777 /data/nacos/{conf,logs,data}# 删除容器
docker rm -f nacos
参考:
Docker 部署 Nacos (图文并茂超详细)
九、Nginx
拉取镜像:
docker pull nginx:1.16.1
首先测试下 nginx 镜像是否可用,使用 docker run -d --name nginx -p 80:80 nginx:1.16.1
创建并启动 nginx 容器:
- -d 指定容器以守护进程方式在后台运行
- –name 指定容器名称,此处我指定的是mynginx
- -p 指定主机与容器内部的端口号映射关系,格式 -p
- [宿主机端口号]:[容器内部端口],此处我使用了主机80端口,映射容器80端口
- 0839 是nginx的镜像IMAGE ID前4位
页面展示如下,那么恭喜你 Nginx 已经成功安装并运行啦!
参考:
使用docker安装nginx
手把手教你在Docker中安装Nginx(图文超详细)
相关文章:

Docker 单机快速部署大数据各组件
文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…...

CSS笔记基础篇01——选择器、文字控制属性、背景属性、显示模式、盒子模型
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodeshttps://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d3666…...
pytest全局配置文件pytest.ini
pytest.ini 改变 pytest 的默认行为,一般放在项目的根目录,不能包含中文符号。不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。 [pytest] ;配置命令行参数,用空格进行分隔。addopts 中的选项会被命…...

PyTest自学-认识PyTest
1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么? PyTest是一个自动化测试框架,支持单元测试和功能测试,有丰富的插件,如,pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…...

【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中,制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动,旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…...

自旋锁与CAS
上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…...
数组-二分查找
目录 算法思想: 实践: 备注: 二分查找是一种高效的查找算法,适用于在 有序数组 或列表中快速定位目标元素的索引。 重要事情说三遍:使用前提:数组有序,无重复,如果数组未排序&am…...
如何使用 Python 进行文件读写操作?
大家好,我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法,这在学习 Python 时是必不可少的技术点,希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法: 一、文件读取࿱…...
springcloud中的Feign调用
目录 一、基础应用 1.feign使用 1.增加feign依赖 2.编写feign接口 3.启用feign 4.调试 5.可能出现的异常信息 1.404 可能原因: 2.503 可有原因: 2.feign自定义配置 1.创建Feign配置类 2.feign接口 3.调试结果 3.feign多参数请求 Feign是Netflix开发的声明…...
【部署】将项目部署到云服务器
目录 1.获得服务器 2.连接到云服务器 3.配置环境 3.1.Java(运行后端所需) 3.2.MySQL数据库 3.3.Nginx(运行前端所需) 3.4. Node.js(构建前端所需) 4.打包项目 4.1.打包后端项目 4.2.打包前端项目…...

2024年AI大模型技术年度总结与应用实战:创新与突破并进
前言 回顾2024年,我一共发布了286篇博文,粉丝数也达到了43000多。这一年里,我收获颇丰,始终坚持AI大模型的研究方向,并且积极开展大模型的实战应用,也取得了一系列令人振奋的突破。 在286篇博文中&#…...

docker离线安装及部署各类中间件(x86系统架构)
前言:此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本:docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面,这里放在…...

SuperdEye:一款基于纯Go实现的间接系统调用执行工具
关于SuperdEye SuperdEye是一款基于纯Go实现的间接系统调用执行工具,该工具是TartarusGate 的修订版,可以利用Go来实现TartarusGate 方法进行间接系统调用。 该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号,然后使用它来执行间接系统调…...

PCL 新增自定义点类型【2025最新版】
目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…...

Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...

PyTorch使用教程(9)-使用profiler进行模型性能分析
1、简介 PyTorch Profiler是一个内置的性能分析工具,可以帮助开发者定位计算资源(如CPU、GPU)的瓶颈,从而更好地优化PyTorch程序。通过捕获和分析GPU的计算、内存和带宽利用情况,能够有效识别并解决性能瓶颈。 2、原…...

SpringBoot中使用MyBatis-Plus详细介绍
目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…...

PCL 部分点云视点问题【2025最新版】
目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…...

【Linux】常见指令(三)
Linux常见指令 01.nano02.cat03.cp04.mv 我的Linux专栏:【Linux】 本节Linux指令讲解的基本框架如下: 大家可以根据自己的需求,自行进行跳转和学习! 01.nano nano Linux 系统中一款简单易用的命令行文本编辑器,适合…...
第5章:Python TDD定义Dollar对象相等性
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
这是一个典型的 构造器注入 封装资源的用法 🧩 代码片段 return new TransactionManagerImpl(raf, fc);✅ 简单解释: 这行代码的意思是: 使用已经打开的 RandomAccessFile 和 FileChannel,创建并返回一个新的 TransactionManag…...

机器学习基础相关问题
机器学习相关的基础问题 K-means是否一定会收敛 K-means是否一定会收敛 K-means算法在有限步数内一定会收敛,但收敛到的可能是局部最优解而非全局最优解。以下是详细分析: K-means 的优化目标是最小化 样本到其所归属簇中心的距离平方和(SSE…...

ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载
ChatterBox 是一个近期备受关注的开源语音克隆与文本转语音(TTS)模型,由 Resemble AI 推出,具备体积轻巧及超快的推理速度等特色。它也是首个支持情感夸张控制的开放源代码 TTS 模型,这一强大功能能让您的声音脱颖而出…...

前端开发面试题总结-HTML篇
文章目录 HTML面试高频问答一、HTML 的 src 和 href 属性有什么区别?二、什么是 HTML 语义化?三、HTML的 script 标签中 defer 和 async 有什么区别?四、HTML5 相比于 HTML有哪些更新?五、HTML行内元素有哪些? 块级元素有哪些? 空(void)元素有哪些?六、iframe有哪些优点…...
Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料
JAVAaccess综合测评系统毕业设计 一、系统概述 本系统采用Java Swing开发前端界面,结合Access数据库实现数据存储,专为教育机构打造的综合测评解决方案。系统包含学生管理、题库管理、在线测评、成绩分析四大核心模块,实现了测评流程的全自…...

深入理解 Spring IOC:从概念到实践
目录 一、引言 二、什么是 IOC? 2.1 控制反转的本质 2.2 类比理解 三、Spring IOC 的核心组件 3.1 IOC 容器的分类 3.2 Bean 的生命周期 四、依赖注入(DI)的三种方式 4.1 构造器注入 4.2 Setter 方法注入 4.3 注解注入(…...
Windows 系统安装 Redis 详细教程
Windows 系统安装 Redis 详细教程 一、Redis 简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值存储系统,常被用作数据库、缓存和消息中间件。相比传统数据库,Redis 具有以下优势: 超高性能…...

springMVC-11 中文乱码处理
前言 本文介绍了springMVC中文乱码的解决方案,同时也贴出了本人遇到过的其他乱码情况,可以根据自身情况选择合适的解决方案。 其他-jdbc、前端、后端、jsp乱码的解决 Tomcat导致的乱码解决 自定义中文乱码过滤器 老方法,通过javaW…...

51单片机基础部分——矩阵按键检测
前言 上一节,我们说到了独立按键的检测以及使用,但是独立按键每一个按键都要对应一个IO口进行检测,在一些需要多按键的情况下,使用过多的独立按键会过多的占用单片机的IO资源,为了解决这个问题的出现,我们…...
Scade 语言概念 - 方程(equation)
在 Scade 6 程序中自定义算子(Operator)的定义、或数据流定义(data_def)的内容中,包含一种基本的语言结构:方程(equation)(注1)。在本篇中,将叙述 Scade 语言方程的文法形式,以及作用。 注1: 对 Scade 中的 equation, 或 equation…...