当前位置: 首页 > news >正文

01-集群安装JDK(普通用户)

机器部署

集群规划

我们准备三台服务器kk01、kk02、kk03,内存4G、硬盘50G、处理器4核心2内核(总8)

kk01使用 192.168.188.128

kk02使用 192.168.188.129

kk03使用 192.168.188.130

模板机准备

我们先创建一台作为模板机,后续的两台采用完整克隆的方式

1)我们配置了模块机kk01的主机名为 kk01

2)配置了root用户的密码123456、创建了普通用户nhk、密码123456

3)使用vim 配置了模板机ip地址、网关、DNS等信息

# 2.配置静态ip  (注意,我们这里刚开始需要使用root用户来修改)
[nhk@kk01 ~]$ su root
Password: 
[root@kk01 nhk]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 做出如下修改BOOTPROTO=static  # 改为静态
# 末尾添加如下内容
IPADDR=192.168.188.128
GATEWAY=192.168.188.2
NETMASK=255.255.255.0
DNS1=192.168.188.2
# 重启网卡
[root@kk01 nhk]# systemctl restart network.service
# 查看当前ip地址
[root@kk01 nhk]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.188.128  netmask 255.255.255.0  broadcast 192.168.188.255inet6 fe80::517f:78e:56fc:d924  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:61:40:47  txqueuelen 1000  (Ethernet)
...

4)关闭模板机 kk01的防火墙

[root@kk01 nhk]# systemctl stop firewalld.service  # 关闭当前防火墙
[root@kk01 nhk]# systemctl disable firewalld.service  # 关闭防火墙开机自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.# 查看防火墙状态,看到 inactive (dead) 则证明防火墙成功关闭
[root@kk01 nhk]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)
....

5)修改模板机kk01主机名

# 修改主机名
[root@kk01 nhk]# vim /etc/hostname   # 这种修改方式需要重启系统,才生效
[root@kk01 nhk]# cat /etc/hostname 
kk01

6)修改hosts文件

[root@kk01 nhk]# vim /etc/hosts192.168.188.128 kk01
192.168.188.129 kk02
192.168.188.130 kk03

7)配置普通用户(nhk)具有root权限

修改/etc/sudoers文件,在100多行左右,在%wheel下面添加一行内容,如下操作所示

# 配置普通用户(nhk)具有root权限,方便后期加sudo执行root权限的命令
# 注意:修改这个文件,即使是root用户也需要 :wq! 强制保存退出
[root@kk01 nhk]# vim /etc/sudoers
# 在%wheel这行下面添加一行 (大概是在100行左右位置)## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALLnhk ALL=(ALL) 	NOPASSWD: ALL 
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

注意:

​ nhk ALL=(ALL) NOPASSWD: ALL 这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了nhk具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以nhk要放到%wheel这行下面。

8)创建统一工作目录

[root@kk01 nhk]# mkdir -p /opt/software/  		 # 软件安装目录、安装包存放目录
[root@kk01 nhk]# mkdir -p /opt/data/			 # 数据存储路径
[root@kk01 nhk]# 
[root@kk01 nhk]# ll /opt
total 0
drwxr-xr-x. 2 root root 6 Jun 16 15:51 data
drwxr-xr-x. 2 root root 6 Oct 31  2018 rh
drwxr-xr-x. 2 root root 6 Jun 16 15:51 software# 修改文件夹所有者和所属组 (如果是使用root用户搭建集群可以忽略)
[root@kk01 nhk]# chown nhk:nhk /opt/software
[root@kk01 nhk]# chown nhk:nhk /opt/data
[root@kk01 nhk]# ll /opt
total 0
drwxr-xr-x. 2 nhk  nhk  6 Jun 16 15:51 data
drwxr-xr-x. 2 root root 6 Oct 31  2018 rh
drwxr-xr-x. 2 nhk  nhk  6 Jun 16 15:51 software

克隆出其他机器

上述配置完以后,将模板机kk01关机,使用VMware的完整克隆方式,克隆出 kk02、kk03,并依次开机,修改kk02、kk03上的ip地址

kk02

# 修改ip
[nhk@kk01 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
做出如下修改IPADDR=192.168.188.129# 重启网卡服务
[nhk@kk01 ~]$ sudo systemctl restart network
[nhk@kk01 ~]$ ifconfig		# 查看ip
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.188.129  netmask 255.255.255.0  broadcast 192.168.188.255
...# 修改主机名
[nhk@kk01 ~]$ sudo hostnamectl set-hostname kk02		# 这种方式修改主机名无需重启即可生效
[nhk@kk01 ~]$ hostname		# [nhk@kk01 ~]$ 这里还显示kk01是这个bash的原因,重新打开bash即可
kk02

kk03

# 修改ip
[nhk@kk01 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
做出如下修改IPADDR=192.168.188.130# 重启网卡服务
[nhk@kk01 ~]$ sudo systemctl restart network
[nhk@kk01 ~]$ ifconfig		# 查看ip
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.188.130  netmask 255.255.255.0  broadcast 192.168.188.255
...# 修改主机名
[nhk@kk01 ~]$ sudo hostnamectl set-hostname kk03		# 这种方式修改主机名无需重启即可生效
[nhk@kk01 ~]$ hostname		# [nhk@kk01 ~]$ 这里还显示kk01是这个bash的原因,重新打开bash即可
kk03

此致,3台机器准备完成

集群安装JDK

1)删除Linux系统自带JDK

如果安装的是最小化版本的Linux,则不需要执行此操作

# 需要在所有节点删除(我们使用的是nhk用户,必须加sudo)
[nhk@kk01 .ssh]$ sudo rpm -qa | grep -i java
java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
tzdata-java-2020a-1.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
[nhk@kk01 .ssh]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[nhk@kk02 .ssh]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[nhk@kk03 ~]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps# 参数说明
(1)rpm -qa:表示查询所有已经安装的软件包
(2)grep -i:表示过滤时不区分大小写
(3)xargs -n1:表示一次获取上次执行结果的一个值xargssudo rpm -qa | grep -i java 的结果传递给 sudo rpm -e --nodeps-n1 表示将 sudo rpm -qa | grep -i java 的结果传递 一个一个传递给 sudo rpm -e --nodeps
(4)rpm -e --nodeps:表示卸载软件

2)上传压缩包

将 jdk压缩包 kk01 的 /opt/software 文件夹下面

[nhk@kk01 software]$ pwd
/opt/software
[nhk@kk01 software]$ rz[nhk@kk01 software]$ ll
total 185340
-rw-r--r--. 1 nhk nhk 189784266 Dec 25  2017 jdk-8u152-linux-x64.tar.gz

3)解压压缩包

解压 jdk 到指定目录 /opt/software

[nhk@kk01 software]$ tar -zxvf jdk-8u152-linux-x64.tar.gz -C /opt/software[nhk@kk01 software]$ ll
total 185340
drwxr-xr-x. 8 nhk nhk       255 Sep 14  2017 jdk1.8.0_152
-rw-r--r--. 1 nhk nhk 189784266 Dec 25  2017 jdk-8u152-linux-x64.tar.gz	

4)配置普通用户环境变量

[nhk@kk01 software]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容

# 配置JDK环境
export JAVA_HOME=/opt/software/jdk1.8.0_152				# 导入环境变量
export PATH=$PATH:$JAVA_HOME/bin						# 将环境变量拼接到PATH中

让环境变量生效(重新载入环境变量)

[nhk@kk01 software]$ source /etc/profile.d/my_env.sh 

5)测试jdk是否安装成功

能看到jdk相关的版本信息,则说明jdk安装成功

[nhk@kk01 software]$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

6)分发JDK、分发环境

使用我们自定义的分发脚本 xsync

# 分发jdk
[nhk@kk01 software]$ xsync /opt/software/jdk1.8.0_152/# 普通用户使用 xsync 脚本分发环境变量时,必须加上脚本路径
#(分发环境时,需要使用sudo,因为/etc目录只有root用户才能操作,并且使用xsync脚本还需要加上绝对路径,因为我们使用sudo命令将权限切换到了root目录下,而root目录下没有xsync脚本)
# 如果不加会报错 failed: Permission denied (13)
[nhk@kk01 software]$ sudo /home/nhk/bin/xsync /etc/profile.d/my_env.sh 

在集群的其他机器(kk02、kk03)刷新环境变量

[nhk@kk02 ~]$ source /etc/profile.d/my_env.sh 
[nhk@kk03 ~]$ source /etc/profile.d/my_env.sh 

如果我们没有自定义分发脚本,也可以使用 scp 或 rsync 命令代替,如下

scp -r /opt/software/jdk1.8.0_152/ kk02/opt/software/
scp -r /opt/software/jdk1.8.0_152/ kk03/opt/software/

7)注意事项

​ 无论是基于root用户,还是基于普通用户nhk,大体上的命令都是相似的,只是在某些情况下普通用户权限不够,需要加上sudo来暂时提升权限

8)环境变量说明

​ Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,/.bashrc,/.bash_profile等,下面说明上述几个文件之间的关系和区别。

​ bash的运行模式可分为 login shellnon-login shell

​ 例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh kk01 command,在kk01执行command的就是一个non-login shell。

登录 shell 与 非登录 shell 区别

登录shell

环境变量加载顺序
/etc/profile	~/.bash_profile		~/.bashrc ==> /etc/bashrc ==> /etc/profile.d/*.sh	

非登录shell

环境变量加载顺序~/.bashrc ==> /etc/bashrc ==> /etc/profile.d/*.sh	

注意:

如果把环境变量只放到 /etc/profile 中,non-login shell 模式会获取不到环境变量

​ 这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载**/etc/profile,/.bash_profile,/.bashrc**。non-login shell启动时会加载**~/.bashrc**。

而在加载/.bashrc(实际是/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,

[nhk@kk03 etc]$ pwd
/etc
[nhk@kk03 etc]$ vim /etc/bashrc
  # Only display echos from profile.d scripts if we are no login shell# and interactive - otherwise just process them to set envvarsfor i in /etc/profile.d/*.sh; doif [ -r "$i" ]; thenif [ "$PS1" ]; then. "$i"else. "$i" >/dev/nullfifidone

因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。

并且,/etc/profile文件中也告诉我们最好自己在 /etc/profile.d/ 创建一个自定义的环境变量,如下查看

[nhk@kk03 etc]$ vim /etc/profile# /etc/profile# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.系统范围的环境和启动程序,用于登录设置
函数和别名放在/etc/bashrc中修改这个文件不是一个好主意,除非你知道你要做什么
正在做什么。创建一个自定义对环境的更改脚本要好得多
/etc/profile.对您的环境进行自定义更改,如下所示
将防止在未来的更新中合并。

相关文章:

01-集群安装JDK(普通用户)

机器部署 集群规划 我们准备三台服务器kk01、kk02、kk03&#xff0c;内存4G、硬盘50G、处理器4核心2内核&#xff08;总8&#xff09; kk01使用 192.168.188.128 kk02使用 192.168.188.129 kk03使用 192.168.188.130 模板机准备 我们先创建一台作为模板机&#xff0c;后…...

小龟带你妙写排序之选择排序

选择排序 一. 原理二. 题目三. 思路分析四. 代码 一. 原理 选择排序(Selection-sort)是一种简单直观的排序算法。 工作原理&#xff1a;首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未…...

深入解析 SOCKS5 代理及其在网络安全与爬虫中的应用

在当今数字化时代&#xff0c;网络安全和数据获取成为了互联网时代的重要课题。为了实现安全的网络连接和高效的数据采集&#xff0c;各种代理技术应运而生。本文将深入探讨 SOCKS5 代理及其在网络安全和爬虫领域的应用&#xff0c;同时比较其与其他代理方式的优势与劣势。 1.…...

day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78

文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…...

气体检测仪语音报警芯片,可自行烧录的音频芯片,WT588F02B-8S

近年来&#xff0c;安全问题备受关注&#xff0c;特别是涉及气体泄漏的危险场景。 为了进一步增强气体检测仪的安全功能&#xff0c;市面上便研发出了一款有害气体报警器&#xff0c;并采用WT588F02B-8S语音提示芯片为元器件&#xff0c;为产品赋予更多声音&#xff0c;更多警示…...

gdb 调试汇编

starti 从第一条指令开始执行并停止. nexti 执行完当前指令; 当前指令可能是call一个函数, 但是仍然下一条指令才停止; stepi 下一条指令, 如果跳转也跟着跳转; 查看寄存器值 info registers 查看通用寄存器 info registers {register_name ...}指定寄存器的值 info reg…...

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlo…...

深入理解与运用Android Jetpack ViewModel

在Android开发中&#xff0c;数据与界面的分离一直是一项重要的挑战。为了解决这个问题&#xff0c;Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件&#xff0c;它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入…...

【数据库】P0 创建数据库环境 MySQL + DataGrip

创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可&#xff0c;本博文将讲述简约安装步骤&#xff1b; 如需详细安装步骤可见&#xff1a;https:/…...

js设置css变量控制页面一行展示指定个数的元素

前置知识&#xff1a; CSS变量之var()函数的应用——动态修改样式 & root的使用 flex相关知识 场景&#xff1a; 动态设置给父元素内子元素设置每行排列几个 通过 document.body.style.setProperty(--itemNum, 5)设置样式变量&#xff0c;然后通过给父元素设置display: f…...

4.0 Spring Boot入门

1. Spring Boot概述 Spring Boot介绍 Spring Boot是Pivotal团队在2014年推出的全新框架&#xff0c;主要用于简化Spring项目的开发过程&#xff0c;可以使用最少的配置快速创建Spring项目。 Spring Boot版本 2014年4月v1.0.0.RELEASE发布。 ​ 2.Spring Boot特性 约定优于配…...

[国产MCU]-BL602开发实例-I2C与总线设备地址扫描

I2C与总线设备扫描 文章目录 I2C与总线设备扫描1、I2C介绍2、I2C驱动API介绍3、I2C使用实例I2C (Inter-Intergrated Circuit)是一种串行通讯总线,使用多主从架构,用来连接低速外围装置。 每个器件都有一个唯一的地址识别,并且都可以作为一个发送器或接收器。每个连接到总线的…...

Python Opencv实践 - 图像平移

import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射变换矩阵&#xff0c;对于平移来说M是一…...

易服客工作室:WordPress 6.3性能改进

随着WordPress 6.3发布&#xff0c;本文总结了该版本的性能改进。虽然WordPress 6.2显著提高了Core的加载时间性能&#xff0c;树立了很高的标准&#xff0c;但WordPress 6.3性能改进已经超越了这些结果&#xff1a;根据进行的性能基准测试&#xff0c;与WordPress 6.2相比&…...

LeetCode 周赛上分之旅 #39 结合中心扩展的单调栈贪心问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…...

山东布谷科技直播软件开发WebRTC技术:建立实时通信优质平台

在数字化的时代&#xff0c;实时通信成为了人们远程交流的主要方式&#xff0c;目前市场上也出现了很多带有实时通信交流的软件&#xff0c;实时通信符合人们现在的需求&#xff0c;所以在直播软件开发过程中&#xff0c;开发者也运用了实时通信技术为直播软件加入了实时通信的…...

Golang-语言源码级调试器 Delve

前言 Go 目前的调试器有如下几种&#xff1a; GDB 最早期的调试工具&#xff0c;现在用的很少。LLDB macOS 系统推荐的标准调试工具&#xff0c;单 Go 的一些专有特性支持的比较少。Delve 专门为 Go 语言打造的调试工具&#xff0c;使用最为广泛。 本篇简单说明如何使用 Del…...

构建Docker容器监控系统(Cadvisor +InfluxDB+Grafana)

目录 案例概述 Cadvisor InfluxDBGrafana 1.1、 Cadvisor 1.2、InfluxDB 1.3、Grafana 1.4、监控组件架构 1.5、开始部署 安装docker-ce 阿里云镜像加速器 创建自定义网络 创建influxdb容器 案例概述 Docker作为目前十分出色的容器管理技术&#xff0c;得到大量企业…...

【Vue3】keep-alive 缓存组件

当在 Vue.js 中使用 <keep-alive> 组件时&#xff0c;它将会缓存动态组件&#xff0c;而不是每次渲染都销毁和重新创建它们。这对于需要在组件间快速切换并且保持组件状态的情况非常有用。 <keep-alive> 只能包含&#xff08;或者说只能渲染&#xff09;一个子组件…...

24成都信息工程大学809软件工程考研

1.渐增式与非渐增式各有何优、缺点&#xff1f;为什么通常采用渐增式&#xff1f; 非渐增式是将所有的模块一次连接起来&#xff0c;简单、易行、节省机时&#xff0c;但测试过程难于排错&#xff0c;发现错误也很难定位&#xff0c;测试效率低&#xff1b;渐增式是将模块一个…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...