StarRocks:存算一体模式部署

目录

一、StarRocks 简介        

二、StarRocks 架构

2.1 存算一体

2.2 存算分离

三、前期准备

3.1前提条件

3.2 集群规划

3.3 配置环境

3.4 准备部署文件

四、手动部署

4.1 部署FE节点

4.2 部署BE节点

4.3 部署CN节点(可选)

4.4 FE高可用

4.5 故障排除

五、集群管理

5.1 启动集群

5.2 停止集群


一、StarRocks 简介        

        StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,支持标准 SQL,用户可以轻松地通过 MySQL 客户端连接到 StarRocks 实时查询分析数据。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。

二、StarRocks 架构

        StarRocks 架构简洁明了,整个系统仅由两种组件组成:前端和后端。前端节点称为 FE。后端节点有两种类型,BE 和 CN (计算节点)。当使用本地存储数据时,您需要部署 BE;当数据存储在对象存储或 HDFS 时,需要部署 CN。StarRocks 不依赖任何外部组件,简化了部署和维护。节点可以水平扩展而不影响服务正常运行。此外,StarRocks 具有元数据和服务数据副本机制,提高了数据可靠性,有效防止单点故障 (SPOF)。

2.1 存算一体

        作为典型的大规模并行处理 (MPP) 数据库,StarRocks 支持存算一体架构。在存算一体架构中,FE 负责元数据管理和构建执行计划;BE 执行查询计划并存储数据。将数据存储在 BE 中使得数据可以在当前节点中计算,避免了数据传输和复制,从而提供极快的查询和分析性能。该架构支持多副本数据存储,增强了集群处理高并发查询的能力并确保数据可靠性,非常适合追求最佳查询性能的场景。

  • FE​

        FE 负责元数据管理、客户端连接管理、查询规划和查询调度。每个 FE 在其内存中存储和维护一份完整的元数据副本,保证 FE 之间服务的一致性。FE 分为 Leader FE 节点、Follower 节点和 Observer 节点。Follower 节点可以根据类似 Paxos 的 BDB JE(Berkeley DB Java Edition)协议选举主节点。

  • BE

        BE 负责数据存储和 SQL 执行。

        1)数据存储:BE 具有等效的数据存储能力。FE 根据预定义规则将数据分发到各个 BE。BE 转换导入的数据,将数据写入所需格式,并为数据生成索引。

        2)SQL 执行:FE 根据查询的语义将每个 SQL 查询解析为逻辑执行计划,然后将逻辑计划转换为可以在 BE 上执行的物理执行计划。BE 在本地存储数据以及执行查询,避免了数据传输和复制,极大地提高了查询性能。

2.2 存算分离

        在存算分离架构中,BE 被“计算节点 (CN)”取代,后者仅负责数据计算任务和缓存热数据。数据存储在低成本且可靠的远端存储系统中,如 Amazon S3、GCP、Azure Blob Storage、MinIO 等。当缓存命中时,查询性能可与存算一体架构相媲美。CN 节点可以根据需要在几秒钟内添加或删除。这种架构降低了存储成本,确保更好的资源隔离,并具有高度的弹性和可扩展性。

        存算分离架构与存算一体架构一样简单。它仅由两种类型的节点组成:FE 和 CN。唯一的区别是用户必须配置后端对象存储。

  • 节点​

        在存算分离架构中,FE 提供的功能与存算一体架构中的相同。

        BE 被 CN (计算节点) 取代,存储功能被转移到对象存储或 HDFS。CN 是无状态的计算节点,可以执行除存储数据外所有 BE 的功能。

  • 存储​

        StarRocks 存算分离集群支持两种存储解决方案:对象存储 (例如,AWS S3、Google GCS、Azure Blob Storage 或 MinIO) 和 HDFS。

         在存算分离集群中,数据文件格式与存算一体集群 (存储和计算耦合) 保持一致。数据存储为 Segment 文件,云原生表(专门用于存算分离集群的表)也可以利用存算一体架构中支持的各种索引技术。

  • 缓存

        StarRocks 存算分离集群将数据存储与计算分离,使两方都能够独立扩展,从而降低成本并提高系统弹性扩展能力。然而,这种架构会影响查询性能。 为减少架构对于性能的影响,StarRocks 建立了包含内存、本地磁盘和远端存储的多层数据访问系统,以便更好地满足各种业务需求。

         对于针对热数据的查询,StarRocks 会先扫描缓存,然后扫描本地磁盘。而针对冷数据的查询,需要先将数据从对象存储中加载到本地缓存中,加速后续查询。通过将热数据缓存在计算单元内,StarRocks 实现了真正的高计算性能和高性价比存储。此外,还通过数据预取策略优化了对冷数据的访问,有效消除了查询的性能限制。

        可以在建表时启用缓存。启用缓存后,数据将同时写入本地磁盘和后端对象存储。在查询过程中,CN 节点首先从本地磁盘读取数据。如果未找到数据,将从后端对象存储中检索,并将数据缓存到本地磁盘中。

三、前期准备

3.1前提条件

  • CPU

        StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此,在生产环境中,强烈建议您将 StarRocks 部署于 x86 架构 CPU 的服务器上。

#在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集

cat /proc/cpuinfo | grep avx2

  • 内存

        StarRocks 对内存没有特定要求。关于推荐的内存大小,请参考集群规划章节的CPU 和内存部分。

  • 存储

        StarRocks 支持 HDD 和 SSD 作为存储介质。 在实时数据分析场景、以及涉及大量数据扫描或随机磁盘访问的场景下,强烈建议您选择 SSD 作为存储介质。

  • 网络

        建议使用万兆网络连接(10 Gigabit Ethernet,简称 10 GE)确保 StarRocks 集群内数据能够跨节点高效传输。

  • 操作系统

        StarRocks 支持在 CentOS Linux 7.9 和 Ubuntu Linux 22.04 上部署。

  • JDK

        必须在服务器上安装 JDK 8 以运行 StarRocks。v2.5 及以上版本建议安装 JDK 11。

3.2 集群规划

节点实例数CPU内存存储
FE1~38核+16G+100 GB+
BE3+16核+64G+预估 BE 初始存储空间

        1. FE规划

  • 测试环境可以部署1个节点;生产环境建议至少部署3个节点,防止单节点故障。
  • FE 节点主要负责元数据管理、客户端连接管理、查询计划和查询调度,不会消耗大量的 CPU 和内存资源。生产环境建议为每个 FE 节点分配 8 个 CPU 内核和 16 GB RAM。
  • 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的存储。

        2. BE规划

  • 测试环境可以部署1个节点,生产环境建议您至少部署三个 BE 节点,这些节点会自动形成一个 BE 高可用集群,避免由于发生单点故障而影响数据可靠性和服务可用性。
  • BE 节点负责数据存储和 SQL 执行,需要使用大量 CPU 和内存资源。生产环境建议为每个 BE 节点分配 16 个 CPU 内核和 64 GB RAM。
  • StarRocks 默认维护三个副本,提供 3:1 到 5:1 的数据压缩比。 通过计算得到总存储空间后,可以简单地将之除以集群中的 BE 节点数,估算出每个 BE 节点所需的平均初始存储空间
  • 如果 BE 存储空间随着原始数据的增长而耗尽,可以通过在 BE 节点上添加额外的存储卷在 StarRocks 集群中添加新的 BE 节点以补充存储空间。

3.3 配置环境

  • 端口规划

        StarRocks 为不同的服务使用特定的端口,请检查这些端口是否被占用。

#检查端口是否被占用

netstat -tunlp | grep 8030

节点端口名称默认端口说明
FEhttp_port8030FE HTTP Server 端口
rpc_port9020FE Thrift Server 端口
query_port9030FE MySQL Server 端口
edit_log_port9010FE 内部通讯端口
cloud_native_meta_port6090FE 云原生元数据服务 RPC 监听端口
BEbe_port9060BE Thrift Server 端口
be_http_portbe_http_port8040BE HTTP Server 端口
heartbeat_service_port9050BE 心跳服务端口
brpc_port8060BE bRPC 端口
starlet_port9070BE 和 CN 的额外 Agent 服务端口
CNbe_port9060CN Thrift Server 端口
be_http_port8040CN HTTP Server 端口
heartbeat_service_port9050CN 心跳服务端口
brpc_port8060CN bRPC 端口
starlet_port9070BE 和 CN 的额外 Agent 服务端口
  • 主机名

        如果StarRocks 集群 启用 FQDN 访问,则必须为每个实例设置一个主机名。 在每个实例的 /etc/hosts 文件中,必须指定集群中其他实例的 IP 地址和相应的主机名。

  • JDK 设置​

        StarRocks 依靠环境变量 JAVA_HOME 定位实例上的 Java 依赖项。

  • 文件系统配置​

        建议使用 ext4 或 xfs 日志文件系。

  • 关闭透明大页(Transparent Huge Pages

        Transparent Huge Pages 默认启用。因其会干扰内存分配,进而导致性能下降,建议您禁用此功能。

# 临时变更。
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho madvise > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho madvise > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
  • 关闭 Swap Space

        从 /etc/fstab 文件中注释掉或者直接删除 Swap Space 信息。

# /<path_to_swap_space> swap swap defaults 0 0

  • 禁用 SELinux

# 临时变更。
setenforce 0
# 永久变更。
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sed -i 's/SELINUXTYPE/#SELINUXTYPE/' /etc/selinux/config

  • 关闭防火墙

        如果启用了防火墙,请为 FE、BE 和 Broker 开启内部端口,内网环境可以直接关闭防火墙。

#停掉防火墙
systemctl stop firewalld
#永久关闭防火墙
systemctl disable firewalld
#查看防火墙状态,显示Active: inactive (dead)证明操作成功
 systemctl status firewalld

  • ulimit 设置

        如果最大文件描述符和最大用户进程的值设置得过小,StarRocks 运行可能会出现问题。建议将系统资源上限调大。

cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* hard memlock unlimited
* soft memlock unlimited
EOFcat >> /etc/security/limits.d/20-nproc.conf << EOF 
*          soft    nproc     65535
root       soft    nproc     65535
EOF
  • 修改系统内核参数

#如果系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接
net.ipv4.tcp_abort_on_overflow=1

#设置监听 Socket 队列的最大连接请求数为 1024
net.core.somaxconn=1024

#允许操作系统将额外的内存资源分配给进程,建议启用。
vm.overcommit_memory=1

#Swappiness 会对性能造成影响,因此建议禁用 Swappiness。
vm.swappiness=0

#进程可以拥有的 VMA(虚拟内存区域)的数量。将该值调整为 262144
vm.max_map_count = 262144

#最大线程数
kernel.threads-max = 120000

#进程标识符(PID)最大值
kernel.pid_max = 200000 

3.4 准备部署文件

        目前 镜舟官网提供的 StarRocks 软件包仅支持在 x86 架构的 CPU 上部署。如需在 ARM 架构 CPU 上部署 StarRocks,您需要通过StarRocks Docker 镜像获取部署文件。

四、手动部署

4.1 部署FE节点

1.修改 FE 配置文件

# vi fe/conf/fe.conf

# 将 <meta_dir> 替换为已创建的元数据目录。
meta_dir = <meta_dir>

#为 FE 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

# 如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>

2.启动FE节点

./fe/bin/start_fe.sh --daemon

3.登录FE节点

        通过 MySQL 客户端连接到 StarRocks。您需要使用初始用户 root 登录,密码默认为空。

# 将 <fe_address> 替换为 Leader FE 节点的 IP 地址(priority_networks),
# 并将 <query_port>(默认:9030)替换为您在 fe.conf 中指定的 query_port。
mysql -h <fe_address> -P<query_port> -uroot

        执行以下 SQL 查看 Leader FE 节点状态:

SHOW PROC '/frontends'\G

4.2 部署BE节点

1.修改BE配置文件

vi be/conf/be.conf

# 将 <storage_root_path> 替换为已创建的数据存储路径。
storage_root_path = <storage_root_path>

为 BE 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

# 如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>

2.启动BE节点

./be/bin/start_be.sh --daemon

3.将BE节点加入集群

登录FE节点后,通过以下命令将BE加入集群:

-- 将 <be_address> 替换为 BE 节点的 IP 地址(priority_networks)
-- 并将 <heartbeat_service_port>(默认:9050)替换为在 be.conf 中指定的 heartbeat_service_port。
ALTER SYSTEM ADD BACKEND "<be_address>:<heartbeat_service_port>";

执行以下 SQL 查看 BE 节点状态:

SHOW PROC '/backends'\G

4.在其他 BE 实例上重复以上步骤,即可启动新的 BE 节点

        在一个 StarRocks 集群中部署并添加至少 3 个 BE 节点,形成一个 BE 高可用集群。 如果只想部署一个 BE 节点,必须在 FE 配置文件 fe/conf/fe.conf 中设置 default_replication_num 为 1

4.3 部署CN节点(可选)

        Compute Node(CN)是一种无状态的计算服务,本身不存储数据。可以通过添加 CN 节点为查询提供额外的计算资源。自 v2.4 版本起支持使用 BE 部署文件部署 CN 节点。

1.修改CN配置文件

#为 CN 节点分配一个专有的 IP 地址(CIDR格式)

priority_networks = x.x.x.x/x

# 如须,可修改jdk版本;将 <path_to_JDK> 替换为所选 JDK 的安装路径。
JAVA_HOME = <path_to_JDK>

2.启动CN节点

./be/bin/start_cn.sh --daemon

3.将CN节点加入集群

登录FE节点后,通过以下命令将CN加入集群:

-- 将 <cn_address> 替换为 CN 节点的 IP 地址(priority_networks)或 FQDN,
-- 并将 <heartbeat_service_port>(默认:9050)替换为您在 cn.conf 中指定的 heartbeat_service_port。
ALTER SYSTEM ADD COMPUTE NODE "<cn_address>:<heartbeat_service_port>";

执行以下 SQL 查看 CN 节点状态

SHOW PROC '/compute_nodes'\G

4.在其他实例上重复以上步骤,即可启动新的 CN 节点

4.4 FE高可用

        高可用的 FE 集群需要在 StarRocks 集群中部署至少三个 Follower FE 节点。如需部署高可用的 FE 集群,需要额外再启动两个新的 FE 节点。

1.参考4.1部署FE节点,部署两个新的FE节点

2.将新部署的FE节点加入集群

-- 将 <new_fe_address> 替换为需要添加的新 FE 节点的 IP 地址(priority_networks)
-- 并将 <edit_log_port>(默认:9010)替换为在新 FE 节点的 fe.conf 中指定的 edit_log_port。
ALTER SYSTEM ADD FOLLOWER "<new_fe_address>:<edit_log_port>","<new_fe_address>:<edit_log_port>";

4.5 故障排除

        如果启动 FE、BE 或 CN 节点失败,尝试以下步骤来发现问题:

  • 如果 FE 节点没有正常启动,您可以通过查看 fe/log/fe.warn.log 中的日志来确定问题所在。

cat fe/log/fe.warn.log

        确定并解决问题后,首先需要终止当前 FE 进程,删除现有的 meta 路径下的所有文件,然后以正确的配置重启该 FE 节点。

  • 如果 BE 节点没有正常启动,您可以通过查看 be/log/be.WARNING 中的日志来确定问题所在。

cat be/log/be.WARNING

        确定并解决问题后,首先需要终止当前 BE 进程,删除现有的 storage 路径下的所有文件,然后以正确的配置重启该 BE 节点。

  • 如果 CN 节点没有正常启动,您可以通过查看 be/log/cn.WARNING 中的日志来确定问题所在。

cat be/log/cn.WARNING

        确定并解决问题后,首先需要终止当前 CN 进程,然后以正确的配置重启该 CN 节点。

五、集群管理

5.1 启动集群

  • 启动FE节点

sh fe/bin/start_fe.sh --daemon

  • 启动BE节点

sh be/bin/start_be.sh --daemon

  • 启动CN节点

sh be/bin/start_cn.sh --daemon

5.2 停止集群

  • 停止FE节点

./fe/bin/stop_fe.sh --daemon

  • 停止BE节点

./be/bin/stop_be.sh --daemon

  • 停止CN节点

./be/bin/stop_cn.sh --daemon

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】394、字符串解码

【LeetCode】394、字符串解码 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 // go func decodeString(s string) string {// 如果遇到 嵌套括号的情况, 则递归// 可能连续多位数字, 则 通过 cur cur * 10 …

厦门凯酷全科技有限公司短视频带货可靠吗?

在当今这个数字化时代&#xff0c;抖音作为短视频和直播带货的领军平台&#xff0c;已经吸引了无数商家的目光。而在这一片繁荣的电商蓝海中&#xff0c;厦门凯酷全科技有限公司&#xff08;以下简称“凯酷全”&#xff09;凭借其专业的团队、丰富的经验和创新的服务模式&#…

图书馆管理系统(三)基于jquery、ajax

任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面&#xff0c;这里我分别制作了两个网页分别用来借书和还书。此页面&#xff0c;也是通过获取books.txt内容然后添加到表格中&#xff0c;但是借还的操作没有添加到后端中去&#xff0c;只是一个简单的前端操作。…

RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件

rabbitmq_tracing插件 rabbitmq_tracing插件相当于Firehose的GUI版本&#xff0c;它同样能跟踪RabbitMQ中消息的注入流出情况。rabbitmq_tracing插件同样会对流入流出的消息进行封装&#xff0c;然后将封装后的消息日志存入相应的trace文件中。 # 开启插件 rabbitmq-plugins …

如何重新设置VSCode的密钥环密码?

故障现象&#xff1a; 忘记了Vscode的这个密码&#xff1a; Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法&#xff1a; 1.任意terminal下&#xff0c;输入如下…

XILINX平台LINUX下高速ADC08060驱动

前置调研 原理图 AXI-FULL时序 由于项目需要实时性高&#xff0c;采用AXI-FULL接口ADC IP作为master端写入DDR中 引用&#xff1a; AXI_02 AXI4总线简介&#xff08;协议、时序&#xff09;_axi4总线时序-CSDN博客 AXI总线的访问 在ARM架构中&#xff0c;访问I/O地址通常通…

在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题

问题复现 uniapp项目在浏览器运行&#xff0c;有可能调用某些接口会出现跨域问题&#xff0c;报错如下图所示&#xff1a; 什么是跨域&#xff1f; 存在跨域问题的原因是因为浏览器的同源策略&#xff0c;也就是说前端无法直接发起跨域请求。同源策略是一个基础的安全策略&a…

搭建MPI/CUDA开发环境

本文记录MPI/CUDA开发环境搭建过程。 一、Linux 2.1 环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1 2.2 VS Code 下载VS Code&#xff0c;然后安装以下插件&#xff0c; Task Explorer Output Colorizer Git Extension Pack Git Graph Remot…

Swin transformer 论文阅读记录 代码分析

该篇文章&#xff0c;是我解析 Swin transformer 论文原理&#xff08;结合pytorch版本代码&#xff09;所记&#xff0c;图片来源于源paper或其他相应博客。 代码也非原始代码&#xff0c;而是从代码里摘出来的片段&#xff0c;配上简单数据&#xff0c;以便理解。 当然&…

Vulnhub靶场Nginx解析漏洞复现

一.nginx_parsing 原理&#xff1a;这个解析漏洞其实是PHP CGI的漏洞&#xff0c;在PHP的配置⽂件中有⼀个关键的选项cgi.fix_pathinfo默认是开启的&#xff0c;当URL中有不存在的⽂件&#xff0c;PHP就会向前递归解析。在⼀个⽂件/xx.jpg后⾯加上/.php会将 /xx.jpg/xx.php 解…

P1305 新二叉树

题目&#xff1a; P1305 新二叉树 - 洛谷 | 计算机科学教育新生态 题目描述 输入一串二叉树&#xff0c;输出其前序遍历。 输入格式 第一行为二叉树的节点数 n。(1≤n≤26) 后面 n 行&#xff0c;每一个字母为节点&#xff0c;后两个字母分别为其左右儿子。特别地&#x…

jvm字节码中方法的结构

“-Xss”这一名称并没有一个特定的“为什么”来解释其命名&#xff0c;它更多是JVM&#xff08;Java虚拟机&#xff09;配置参数中的一个约定俗成的标识。在JVM中&#xff0c;有多个配置参数用于调整和优化Java应用程序的性能&#xff0c;这些参数通常以一个短横线“-”开头&am…

熟悉u8g2图形库C语言函数

前言&#xff1a; 前面我们已经成功移植了U8g2的图形库&#xff08;0.96寸OLED&#xff09;&#xff1a;手把手移植U8g2图形库&#xff0c;这个文章主要熟悉u8g2图形库的常用C语言函数&#xff01;需要移植的资料的可以关注一波评论区评论&#xff0c;我看到了就会给你发哦&am…

MobaXterm 连接不上VMware 的Ubuntu 虚拟机

想在window11的笔记本上通过VMWare安装Ubuntu操作系统&#xff0c;但是在两个桌面见来回切换&#xff0c;十分的麻烦&#xff0c;于是通过远程服务访问客户端软件MateXterm来访问虚拟机的Linux系统&#xff0c;但是从CSDN上搜到的教程都没有成功&#xff0c;于是&#xff0c;尝…

java中带缓存的输入/输出流

1、介绍 缓存时I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区&#xff0c;使得在流上执行skip()、mark()、reset()方法都成为可能。 2、BufferedInputStream与BufferedOutputStream类 BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达…

国家认可的人工智能从业人员证书如何报考?

一、证书出台背景 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱动发展战略&#xff0c;加强全国数字化人才队伍建设&#xff0c;持续推…

基于Spring Boot的找律师系统

一、系统背景与意义 在现代社会&#xff0c;法律服务的需求日益增长&#xff0c;但传统寻找律师的方式往往存在信息不透明、选择困难等问题。基于Spring Boot的找律师系统旨在解决这些问题&#xff0c;通过线上平台&#xff0c;用户可以轻松搜索、比较和选择合适的律师&#x…

springboot460实习生管理系统设计和实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实习生管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

C#中方法参数传值和传引用的情况

对于引用类型 - 传类类型的具体值时 此时传的是引用 - 单纯传类类型 此时传的是个test引用的副本&#xff0c;在方法内修改的是这个副本的指向 传string&#xff0c;集合同理&#xff0c;只要是指向新对象&#xff0c;就是引用副本在指向 对于值类型 - 传普通值类型 …

游戏AI实现-寻路算法(A*)

A*&#xff08;A-star&#xff09;是一种图遍历和寻路算法&#xff0c;由于其完整性、最优性和最佳效率&#xff0c;它被用于计算机科学的许多领域。给定一个加权图、一个源节点和一个目标节点&#xff0c;该算法将找到从源到目标的最短路径&#xff08;相对于给定的权重&#…