springboot第84集:Java进阶之路, Netty
# kafka-map文件夹
cd /usr/local/kafka-map
# 根据需求自行修改配置
vi application.yml
# 启动
java -jar kafka-map.jar
byte minByte = -128; byte maxByte = 127;
用于表示一个 8 位(1 字节)有符号整数。它的值范围是 -128(-2^7)到 127(2^7 - 1)。
由于 byte 类型占用的空间较小,它通常用于处理大量的数据,如文件读写、网络传输等场景,以节省内存空间。
用于声明一个字符类型的变量。char 类型的变量可以存储任意的 Unicode 字符,可以使用单引号将字符括起来来表示。
char c = 'A';
用于继续下一个循环,可以在指定条件下跳过其余代码。
for (int i = 1; i <= 10; i++) {if (i % 2 == 0) {continue;}System.out.println(i);
}
do 后紧跟循环体。
int i = 1;
do {System.out.println(i);i++;
} while (i <= 10);
int i = 1;
do {System.out.println(i);i++;
} while (i <= 10);
do-while 循环与 while 循环类似,不同之处在于 do-while 循环会先执行循环体中的代码,然后再检查循环条件。因此,do-while 循环至少会执行一次循环体中的代码。
用于声明一个双精度浮点类型的变量。
double a = 3.14;
double b = 2.0;
double c = a + b;
public enum PlayerType { TENNIS, FOOTBALL, BASKETBALL }
class Animal {public void eat() {System.out.println("动物正在吃东西");}
}class Dog extends Animal {public void bark() {System.out.println("狗在汪汪叫");}
}public class ExtendsDemo {public static void main(String[] args) {Dog dog = new Dog();dog.eat();dog.bark();}
}
Animal 类中有一个 eat()
方法,输出字符串 "动物正在吃东西"。Dog 类继承自 Animal 类,并定义了一个 bark()
方法,输出字符串 "狗在汪汪叫"。
final 方法表示一个不能被子类重写的方法。这在设计类时,确保某个方法的实现不会被子类修改时非常有用。
class Animal {final void makeSound() {System.out.println("动物发出声音.");}
}class Dog extends Animal {// 错误: 无法覆盖来自 Animal 的 final 方法// void makeSound() {// System.out.println("狗吠叫.");// }
}public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.makeSound();}
}
final 类表示一个不能被继承的类。这在设计类时,确保其不会被其他类继承时非常有用。[String 类就是 final 的]
final class Animal {void makeSound() {System.out.println("动物发出声音.");}
}// 错误: 类型 Dog 无法继承 final 类 Animal
// class Dog extends Animal {
// void makeSound() {
// System.out.println("狗吠叫.");
// }
// }public class Main {public static void main(String[] args) {Animal animal = new Animal();animal.makeSound();}
}
用于声明一个 for 循环,如果循环次数是固定的,建议使用 for 循环。
[用于判断对象是否属于某个类型(class)]
例如,假设有一个 Person 类和一个 Student 类,Student 类继承自 Person 类,可以使用 instanceof 运算符来判断一个对象是否为 Person 类或其子类的实例:
Person p = new Student();
if (p instanceof Person) {System.out.println("p is an instance of Person");
}
if (p instanceof Student) {System.out.println("p is an instance of Student");
}
用于表示长整数值。
long x; // 声明一个 long 类型的变量 x
x = 10000000000L; // 将长整数值 10000000000 赋给变量 x,需要在数字后面加上 L 或 l 表示这是一个 long 类型的值
long y = 20000000000L; // 声明并初始化一个 long 类型的变量 y,赋值为长整数值 20000000000
本地方法是指在 Java 代码中声明但在本地代码(通常是 C 或 C++ 代码)中实现的方法,它通常用于与操作系统或其他本地库进行交互。
public native void nativeMethod();
如果一个变量是空的(什么引用也没有指向),就可以将它赋值为 null,和[空指针]异常息息相关。
String str = null; // 声明一个字符串引用,初始化为 null
MyClass obj = null; // 声明一个 MyClass 类型的引用,初始化为 null
表示方法或变量只对当前类可见。
public class MyClass {private int x; // 私有属性 x,只能在当前类的内部访问private void foo() {// 私有方法 foo,只能在当前类的内部调用}
}
一个访问权限修饰符,表示方法或变量对同一包内的类和所有子类可见。
package com.example.mypackage;public class MyBaseClass {protected int x; // 受保护的属性 x,可以被子类和同一包中的其他类访问protected void foo() {// 受保护的方法 foo,可以被子类和同一包中的其他类调用}
}package com.example.mypackage;public class MySubClass extends MyBaseClass {public void bar() {x = 10; // 可以访问 MyBaseClass 中的受保护属性 xfoo(); // 可以调用 MyBaseClass 中的受保护方法 foo}
}
一个访问权限修饰符,除了可以声明方法和变量(所有类可见),还可以声明类。main()
方法必须声明为 public。
public class MyClass {public int x; // 公有属性 x,可以被任何类访问public void foo() {// 公有方法 foo,可以被任何类调用}
}
用于表示短整数,占用 2 个字节(16 位)的内存空间。
表示该变量或方法是[静态变量或静态方法]
public class MyClass {public static int x; // 静态变量 x,属于类的成员public static void foo() {// 静态方法 foo,属于类的成员}
}
在这个示例中,MyClass 类有一个静态变量 x 和一个静态方法 foo()
。这些成员属于类的成员,可以通过类名直接访问,不需要创建对象。
可用于调用父类的方法或者字段。
class Animal {protected String name;public Animal(String name) {this.name = name;}public void eat() {System.out.println(name + " is eating.");}
}public class Dog extends Animal {public Dog(String name) {super(name); // 调用父类的构造方法}public void bark() {System.out.println(name + " is barking.");}public void eat() {super.eat(); // 调用父类的方法System.out.println(name + " is eating bones.");}
}
[用于指定多线程代码中的同步方法、变量或者代码块]
public class MyClass {private int count;public synchronized void increment() {count++; // 同步方法}public void doSomething() {synchronized(this) { // 同步代码块// 执行一些需要同步的操作}}
}
[可用于在方法或构造方法中引用当前对象]
public class MyClass {private int num;public MyClass(int num) {this.num = num; // 使用 this 关键字引用当前对象的成员变量}public void doSomething() {System.out.println("Doing something with " + this.num); // 使用 this 关键字引用当前对象的成员变量}public MyClass getThis() {return this; // 返回当前对象本身}
}
[修饰的字段不会被序列化]
public class MyClass implements Serializable {private int id;private String name;private transient String password;public MyClass(int id, String name, String password) {this.id = id;this.name = name;this.password = password;}// 省略 getter 和 setter 方法@Overridepublic String toString() {return "MyClass{" +"id=" + id +", name='" + name + ''' +", password='" + password + ''' +'}';}
}
保证不同线程对它修饰的变量进行操作时的[可见性],即一个线程修改了某个变量的值,新值对其他线程来说是立即可见的。
public class MyThread extends Thread {private volatile boolean running = true;@Overridepublic void run() {while (running) {// 线程执行的代码}}public void stopThread() {running = false;}
}
技术栈
Spring Cloud: 服务注册与发现 (Eureka/Nacos)
Spring Boot: 微服务基础
Spring Data JPA: ORM 框架
MySQL: 数据库
Spring Security: 用户认证与授权
OpenFeign: 服务间调用
Spring Cloud Gateway: API 网关
Spring Boot Admin: 微服务监控
服务拆分
我们将服务拆分为以下几个微服务:
服务注册中心:
eureka-server
网关服务:
gateway-service
用户服务:
user-service
(管理用户相关)房屋服务:
house-service
(管理房屋相关)帖子服务:
post-service
(管理帖子、评论等)消息服务:
message-service
(处理消息)
修复 Kafka 的文件锁问题
如果文件锁定问题持续出现,可以尝试以下解决方案:
切换日志目录: 修改
server.properties
中的log.dirs
为新的目录:log.dirs=D:/software/kafka/logs-new
配置日志清理: 避免日志文件过大或过多:
log.retention.hours=168 # 保留7天的日志 log.segment.bytes=1073741824 # 每个日志段1GB log.cleanup.policy=delete # 自动清理旧日志
Linux环境下安装Elasticsearch
1 前言2 Linux下安装Elasticsearch2.1 下载和解压安装包2.2 解决es强依赖jdk问题2.3 解决内存不足问题2.4 创建专用用户启动ES2.5 修改ES核心配置信息2.6 vm.max_map_count [65530] is too low问题2.7 可能遇到的max file descriptors [4096]问题2.8 ES服务的启动与停止2.9 为Elasticsearch设置登录密码3 安装elasticsearch-head插件3.1 安装node环境3.2 安装elasticsearch-head3.2.1 下载elasticsearch-head安装包3.2.2 解压zip包3.2.3 npm install3.2.4 启动elasticsearch-head服务3.2.5 访问elasticsearch-head服务3.2.6 使用Head插件访问elasticsearch
Kafka的bug解决方法 -ERROR Shutdown broker because all log dirs in xxx have failed(kafka.log.LogManager)
删除kafka 中一个 topic 之后 kafka 停掉了,再次启动失败报了一下错误
ERROR Shutdown broker because all log dirs in C:\temp\kafka-logs have failed (kafka.log.LogManager)
解决方案 :
删除指定文件夹kafka-logs 下日志;
删除zookeeper 日志
再次重新启动
注意: 清空全部日志是危险的操作,建议先进行备份。
1)基本数据类型。
基本数据类型是 Java 语言操作数据的基础,包括 boolean、char、byte、short、int、long、float 和 double,共 8 种。
2)引用数据类型。
除了基本数据类型以外的类型,都是所谓的引用类型。常见的有[数组]、class(也就是[类]),以及[接口](指向的是实现接口的类的对象)。
[变量]可以分为局部变量、成员变量、静态变量。
当变量是局部变量的时候,必须得先初始化,否则编译器不允许你使用它
当变量是成员变量或者静态变量时,可以不进行初始化,它们会有一个默认值
public class LocalVar {private int a;static int b;public static void main(String[] args) {LocalVar lv = new LocalVar();System.out.println(lv.a);System.out.println(b);}
}0
0
int 作为成员变量时或者静态变量时的默认值是 0。那不同的基本数据类型,是有不同的默认值和占用大小的
数据类型 默认值 大小
boolean false 不确定
char '\u0000' 2 字节
byte 0 1 字节
short 0 2 字节
int 0 4 字节
long 0L 8 字节
float 0.0f 4 字节
double 0.0 8 字节
1)bit(比特)
比特作为信息技术的最基本存储单位,非常小
计算机是以二进制存储数据的,二进制的一位,就是 1 比特,也就是说,比特要么为 0 要么为 1。
2)Byte(字节)
通常来说,一个英文字符是一个字节,一个中文字符是两个字节。字节与比特的换算关系是:1 字节 = 8 比特。
在往上的单位就是 KB,并不是 1000 字节,因为计算机只认识二进制,因此是 2 的 10 次方,也就是 1024 个字节。
1)布尔
布尔(boolean)仅用于存储两个值:true 和 false,也就是真和假,通常用于条件的判断。
但在语言层面,Java 没有明确规定 boolean 类型的大小。
对于单独使用的 boolean 类型,JVM 并没有提供专用的字节码指令,而是使用 int 相关的指令 istore 来处理,那么 int 明确是 4 个字节,所以此时的 boolean 也占用 4 个字节。
对于作为数组来使用的 boolean 类型,JVM 会按照 byte 的指令来处理(bastore),那么已知 byte 类型占用 1 个字节,所以此时的 boolean 也占用 1 个字节。
5)long
long 的取值范围在 -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)(含)之间。如果 int 存储不下,就用 long。代码示例:
long l; // 声明一个 long 类型变量l = 100000000000L; // 将值 100000000000L 赋给变量 l(注意要加上 L 后缀)long m = -20000000000L; // 声明并初始化一个 long 类型变量 m,赋值为 -20000000000L
为了和 int 作区分,long 型变量在声明的时候,末尾要带上大写的“L”。不用小写的“l”,是因为小写的“l”容易和数字“1”混淆。
6)float
float 是单精度的浮点数,32 位(4 字节)
float 不适合用于精确的数值,比如说金额
7)double
double 是双精度浮点数,占 64 位(8 字节)
double 同样不适合用于精确的数值,比如说金额。
在进行金融计算或需要精确小数计算的场景中,可以使用 BigDecimal 类来避免浮点数舍入误差。BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。
在实际开发中,如果不是特别大的金额(精确到 0.01 元,也就是一分钱),一般建议乘以 100 转成整型进行处理。
8)char
char 用于表示 Unicode 字符,占 16 位(2 字节)的存储空间,取值范围为 0 到 65,535。
注意,字符字面量应该用单引号('')包围,而不是双引号(""),因为双引号表示字符串字面量。
03、单精度和双精度
单精度(single-precision)和双精度(double-precision)是指两种不同精度的浮点数表示方法。
单精度是这样的格式,1 位符号,8 位指数,23 位小数。
单精度浮点数通常占用 32 位(4 字节)存储空间。
双精度是这样的格式,1 位符号,11 位指数,52 为小数。
双精度浮点数通常占用 64 位(8 字节)存储空间
Java中比较流行的搜索引擎是Elasticsearch
Linux下安装Elasticsearch 在Linux命令行,直接执行以下命令进行下载(下载比较慢): wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.2-linux-x86_64.tar.gz
执行解压缩命令: tar -zxvf elasticsearch-7.13.2-linux-x86_64.tar.gz -C /usr/local
解决办法:
进入bin目录 cd /usr/local/elasticsearch-7.13.2/bin
修改elasticsearch配置 vim ./elasticsearch
解决es强依赖jdk问题 进入bin目录 cd /usr/local/elasticsearch-7.13.2/bin
修改elasticsearch配置 vim ./elasticsearch
############## 添加配置解决jdk版本问题 ##############
# 将jdk修改为es中自带jdk的配置目录
export JAVA_HOME=/usr/local/elasticsearch-7.13.2/jdk
export PATH=$JAVA_HOME/bin:$PATHif [ -x "$JAVA_HOME/bin/java" ]; thenJAVA="/usr/local/elasticsearch-7.13.2/jdk/bin/java"
elseJAVA=`which java`
fi
解决内存不足问题
由于 elasticsearch 默认分配 jvm空间大小为2g,修改 jvm空间,如果Linux服务器本来配置就很高,可以不用修改。
进入config文件夹开始配置,编辑jvm.options: vim /usr/local/elasticsearch-7.13.2/config/jvm.options
默认配置如下:
-Xms2g
-Xmx2g
默认的配置占用内存太多了,调小一些:
-Xms256m
-Xmx256m
创建专用用户启动ES
root用户不能直接启动Elasticsearch,所以需要创建一个专用用户,来启动ES
创建用户 useradd user-es
创建所属组: chown user-es:user-es -R /usr/local/elasticsearch-7.13.2
切换到user-es用户 su user-es
进入bin目录 cd /usr/local/elasticsearch-7.13.2/bin
启动elasticsearch ./elasticsearch
修改ES核心配置信息 执行命令修改elasticsearch.yml文件内容 vim /usr/local/elasticsearch-7.13.2/config/elasticsearch.yml
修改数据和日志目录 这里可以不用修改,如果不修改,默认放在elasticsearch根目录下
数据目录位置
path.data: /home/新用户名称/elasticsearch/data
日志目录位置
path.logs: /home/新用户名称/elasticsearch/logs
修改绑定的ip允许远程访问
#默认只允许本机访问,修改为0.0.0.0后则可以远程访问
绑定到0.0.0.0,允许任何ip来访问
network.host: 0.0.0.0
初始化节点名称
cluster.name: elasticsearch node.name: es-node0cluster.initial_master_nodes: ["es-node0"]
修改端口号(非必须)
http.port: 19200
vm.max_map_count [65530] is too low问题
elasticsearch用户拥有的内存权限太小,至少需要262144,解决办法: 在 /etc/sysctl.conf 文件最后添加如下内容,即可永久修改
切换到root用户 执行命令:su root
执行命令 vim /etc/sysctl.conf
添加如下内容 vm.max_map_count=262144
保存退出,刷新配置文件 sysctl -p
切换user-es用户,继续启动 su user-es
启动es服务 /usr/local/elasticsearch-7.13.2/bin/elasticsearch
启动成功后,可以通过http://127.0.0.1:19200/访问
可能遇到的max file descriptors [4096]问题
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
切换到root用户,执行命令: vi /etc/security/limits.conf
添加如下内容:
soft nofile 65536
hard nofile 131072
soft nproc 2048
hard nproc 4096
ES服务的启动与停止 前台运行,Ctrl + C 则程序终止 /usr/local/elasticsearch-7.13.2/bin/elasticsearch
后台运行 /usr/local/elasticsearch-7.13.2/bin/elasticsearch -d 出现started时启动完成
关闭ES服务 kill pid
Elasticsearch端口9300、9200,其中:9300是tcp通讯端口,集群ES节点之间通讯使用,9200是http协议的RESTful接口
ES7.x以后的版本将安全认证功能免费开放了,并将X-pack插件集成了到了[开源]的ElasticSearch版本中。
编辑配置文件 vim /usr/local/elasticsearch-7.13.2/config/elasticsearch.yml
在 elasticsearch.yml 末尾,加入以下内容:
xpack.security.enabled: true xpack.security.transport.ssl.enabled: true
设置用户名和密码/usr/local/elasticsearch-7.13.2/bin/elasticsearch-setup-passwords interactive
这里依次设置elastic、kibana、logstash等的访问密码,test123
elasticsearch-head
是一款专门针对于elasticsearch的客户端工具,用来展示数据。
elasticsearch-head是基于JavaScript语言编写的,可以使用npm部署
npm是Nodejs下的包管理器。
安装node环境
下载elasticsearch-head安装包 下载地址: https://github.com/mobz/elasticsearch-head
行命令:unzip elasticsearch-head-5.0.0.zip
把安装包移动到/usr/local下:mv elasticsearch-head-5.0.0 /usr/local/
启动elasticsearch-head服务
启动服务
npm run start
或者npm run-script start
可以后台启动
nohup npm run-script start &
Apache Kafka是一个开源的流式平台,用于处理实时数据流。它可以用于各种用途,包括日志聚合、事件处理、监控等。
配置Kafka服务器
在Kafka目录中,找到config
[文件夹],然后编辑**server.properties
**文件。确保以下配置正确:
Kafka监听的端口号
listeners=PLAINTEXT://localhost:9092
日志存储目录
log.dirs=D:\data\logs\kafkalogs
Kafka依赖于Zookeeper来管理集群的状态。在Kafka目录中,找到config
文件夹,然后编辑**zookeeper.properties
**文件。确保以下配置正确:
dataDir=D:\data\logs\zookeeperclientPort=2181
以启动Zookeeper服务器:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
运行Nacos建议的最低硬件配置为2C 4G 60G。
linux安装nacos
首先,确认您要安装的Nacos版本。根据推荐,稳定版本为2.3.2。
预备环境准备
确保操作系统兼容:使用64位的Linux/Unix/Mac/Windows系统,推荐Linux/Unix/Mac。
安装Java环境:需要64位的JDK 1.8或以上版本。
配置Maven(仅构建时需要):安装Maven 3.2.x或更高版本,并正确配置。
解决步骤:
解决
$'\r': command not found
问题这个问题通常是因为脚本文件中包含 Windows 风格的换行符(
\r\n
)。你可以使用dos2unix
工具来转换脚本中的换行符。然后,再次运行脚本:
bash mysql57-yum-install.sh
安装
dos2unix
(如果没有安装):sudo yum install dos2unix
使用
dos2unix
转换脚本:dos2unix mysql57-yum-install.sh
[Linux安装ElasticSearch、Kibana和Elasticsearch-head ]
[1、ES对应JDK版本]
[2、安装JDK]
[3、安装ElasticSearch]
[4、安装Kibana]
[5、安装Elasticsearch-head]
[6、启用Elasticsearch X-Pack安全功能]
[6.1、X-Pack介绍]
[6.2、ElasticSearch 启用 xpack]
[6.3、Kibana 配置 xpack]
1、下载安装包
JDK8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
由于JDK下载现在要登录账户了,这里提供一下:账号:liwei@xiaostudy.com 密码:OracleTest1234 或者这个链接:http://bugmenot.com/view/oracle.com
2、解压压缩包
将压缩包上传到/usr/local下
tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/local/
3、设置环境变量,编辑/etc/profile文件
vi /etc/profile
在profile文件最下面添加如下内容(这里根据你自己的路径和名称添加,不一定和我一样):
JAVA_HOME=/usr/local/jdk1.8.0_333
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
4、使环境变量生效
source /etc/profile
5、检查
java -version
java
配置环境变量
vim /etc/profile
export JAVA_HOME=/sh/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
刷新
source /etc/profile
查看是否生效
java -version
检查 Cassandra 配置文件
Cassandra 的默认监听地址可能是 127.0.0.1
或 localhost
,这意味着它只能接受本地连接。如果你想从其他机器(例如 172.16.0.14
)进行连接,你需要调整 Cassandra 的配置文件:
打开
cassandra.yaml
配置文件,通常位于/etc/cassandra/cassandra.yaml
或/etc/cassandra/conf/cassandra.yaml
。编辑配置文件,找到以下配置项并修改:
listen_address: 0.0.0.0 broadcast_address: <服务器的IP地址> broadcast_rpc_address: <服务器的IP地址> rpc_address: 0.0.0.0
其中:
修改后,保存并重新启动 Cassandra:
sudo systemctl restart cassandra
listen_address
设置为0.0.0.0
,表示 Cassandra 可以在所有的网络接口上监听连接。broadcast_address
和broadcast_rpc_address
设置为服务器的 IP 地址,确保其他机器可以通过该地址访问 Cassandra。rpc_address
设置为0.0.0.0
,允许接受来自任何地址的连接。
采取查看进程方式
ps -aux | grep redis
采取端口监听查看方式
netstat -lanp | grep 6379
./bin/cassandra
推荐的解决方案:使用非 root
用户运行 Cassandra
为了避免安全风险,建议为 Cassandra 创建一个专用的非 root
用户。以下是实现的方法:
第一步:创建 Cassandra 用户
创建一个新的用户和组: 可以为 Cassandra 创建一个新的用户和组,以便限制其权限。
sudo useradd cassandra sudo groupadd cassandra
第二步:设置 Cassandra 目录的权限
确保 Cassandra 数据目录属于 cassandra
用户,通常 Cassandra 需要对以下目录拥有写入权限:
/var/lib/cassandra
/var/log/cassandra
/etc/cassandra
最安全的做法是为 Cassandra 创建一个专用的非 root
用户(例如 cassandra
),并为必要的目录设置适当的权限,然后以该用户身份运行 Cassandra。这是官方推荐的做法。除非非常必要,否则不建议以 root
用户运行 Cassandra。
sudo useradd cassandra
sudo groupadd cassandra
Cassandra需要python3才能正常运行
验证以下配置。 默认情况下,这些值将设置为指定的目录。
data_file_directories“/ var / lib / cassandra / data”
commitlog_directory “/var/lib/cassandra/commitlog”
saved_caches_directory “/var/lib/cassandra/saved_caches”
pip3 -V pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
sudo chown -R cassandra:cassandra /data1/cassandra
sudo chmod 755 -R /data1/cassandra
#配置环境变量
vi /etc/profile
#set cassandra environment
export CASSANDRA_HOME=/data/server/cassandra
export PATH=CASSANDRA_HOME/bin
:wq! #保存退出
source /etc/profile #使配置立即生效
#设置目录权限
sudo chown -R cassandra:cassandra /data/server/cassandra
sudo chmod 755 -R /data/server/cassandra
#切换到cassandra用户
su - cassandra
编辑配置文件
cp /data/server/cassandra/conf/cassandra.yaml /data/server/cassandra/conf/cassandra.yaml.bak
vi /data/server/cassandra/conf/cassandra.yaml
authenticator: PasswordAuthenticator #启用用户名和密码验证
authorizer: CassandraAuthorizer
listen_address: 192.168.21.100 #用于监听客户端请求的地址
rpc_address: 0.0.0.0 #用于接受远程过程调用(RPC)请求的地址
broadcast_rpc_address: 192.168.21.100 #定节点之间进行远程过程调用(RPC)通信时使用的广播地址
seeds: "192.168.21.100,127.0.0.1" #种子节点的地址
native_transport_max_concurrent_connections: -1 #最大连接数,默认是-1没有限制
:wq! #保存退出
共享充电宝管理系统
1.注册用户
账号注册登录,查看充电宝推荐,充电宝租赁,充电宝归还,充电宝保修,发布评论信息,查看充电账单,评论信息管理,收藏信息管理。
2.商家用户
个人中心管理,充电宝管理,充电宝租赁,充电账单管理,故障保修管理,充电评价管理,查看通知公告。
3.管理员
用户信息管理,商家信息管理,品牌分类管理,充电宝管理,租赁信息管理,充电账单管理,投诉建议管理,故障保修管理,充电评价管理,查看通知公告。
ps -ef | grep cassandra
kill -9 pid
/sh/apache-cassandra-3.11.4/bin/cassandra
:指定 Cassandra 的启动脚本路径。-R
:确保 Cassandra 在启动时移除控制台日志并运行为守护进程。>cassandra.log
:将标准输出(stdout
)重定向到cassandra.log
。2>&1
:将错误输出(stderr
)也重定向到cassandra.log
。&
:让该命令在后台运行,释放终端。
tail -f cassandra.log
解决方案
1. 创建一个普通用户并运行 Cassandra
建议创建一个专用用户运行 Cassandra。操作步骤如下:
创建用户
cassandra
:useradd cassandra
赋予 Cassandra 安装目录的权限给
cassandra
用户:chown -R cassandra:cassandra /sh/apache-cassandra-3.11.4
切换到
cassandra
用户:su - cassandra
启动 Cassandra:
/sh/apache-cassandra-3.11.4/bin/cassandra
0.0.0.0
Cassandra 不允许 listen_address
设置为 0.0.0.0
,因为它表示绑定所有网络接口,可能会导致一些安全问题或者网络配置问题。
修改 jvm.options
配置
如果你依然遇到 IPv6 相关的问题,可以尝试禁用 Cassandra 使用 IPv6。打开 jvm.options
文件(位于 Cassandra 配置目录下),并添加以下配置来禁用 IPv6:
-sh/apache-cassandra-3.11.4/conf/jvm.options
在该文件中,确保添加如下内容(如果没有的话):
-Djava.net.preferIPv4Stack=true
此选项强制 JVM 优先使用 IPv4,而不是尝试使用 IPv6。
lsof -i :7199
public final class ZKCacheListener implements TreeCacheListener {// 监听的路径private final String watchPath;// 监听器private final ServiceListener listener;// 构造函数,传入监听的路径和监听器public ZKCacheListener(String watchPath, ServiceListener listener) {this.watchPath = watchPath;this.listener = listener;}// 监听事件@Overridepublic void childEvent(CuratorFramework curator, TreeCacheEvent event) throws Exception {// 获取事件的数据ChildData data = event.getData();if (data == null) {return;}// 获取数据路径String dataPath = data.getPath();if (Strings.isNullOrEmpty(dataPath)) {return;}// 判断数据路径是否以监听路径开头if (dataPath.startsWith(watchPath)) {// 根据事件类型调用监听器的相应方法switch (event.getType()) {// 当节点被添加时case NODE_ADDED:// 调用监听器的onServiceAdded方法,传入节点路径和解析后的CommonServiceNode对象listener.onServiceAdded(dataPath, Jsons.fromJson(data.getData(), CommonServiceNode.class));break;
// 当节点被移除时case NODE_REMOVED:// 调用监听器的onServiceRemoved方法,传入节点路径和解析后的CommonServiceNode对象listener.onServiceRemoved(dataPath, Jsons.fromJson(data.getData(), CommonServiceNode.class));break;
// 当节点被更新时case NODE_UPDATED:// 调用监听器的onServiceUpdated方法,传入节点路径和解析后的CommonServiceNode对象listener.onServiceUpdated(dataPath, Jsons.fromJson(data.getData(), CommonServiceNode.class));break;default:break;}// 打印日志Logs.CONN.debug("ZK node data change={}, nodePath={}, watchPath={}, ns={}");}}
}
// 定义一个抽象类NettyTCPClient,继承自BaseService,实现Client接口
public abstract class NettyTCPClient extends BaseService implements Client {// 定义一个EventLoopGroup类型的workerGroup变量private EventLoopGroup workerGroup;// 定义一个Bootstrap类型的bootstrap变量protected Bootstrap bootstrap;// 创建客户端private void createClient(Listener listener, EventLoopGroup workerGroup, ChannelFactory<? extends Channel> channelFactory) {// 设置工作线程组this.workerGroup = workerGroup;// 创建Bootstrap对象this.bootstrap = new Bootstrap();// 设置工作线程组bootstrap.group(workerGroup)//// 设置SO_REUSEADDR选项,允许重复使用本地地址.option(ChannelOption.SO_REUSEADDR, true)//// 设置内存分配器.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)//// 设置通道工厂.channelFactory(channelFactory);// 设置通道初始化器bootstrap.handler(new ChannelInitializer<Channel>() { // (4)@Overridepublic void initChannel(Channel ch) throws Exception {// 初始化通道initPipeline(ch.pipeline());}});// 初始化选项initOptions(bootstrap);// 回调成功listener.onSuccess();}public ChannelFuture connect(String host, int port) {// 连接到指定的主机和端口return bootstrap.connect(new InetSocketAddress(host, port));}public ChannelFuture connect(String host, int port, Listener listener) {// 连接到指定的主机和端口,并添加监听器return bootstrap.connect(new InetSocketAddress(host, port)).addListener(f -> {if (f.isSuccess()) {// 连接成功if (listener != null) {// 调用监听器的onSuccess方法listener.onSuccess(port);}Logs.CONN.debug("start netty client success, host={}, port={}", host, port);} else {// 连接失败if (listener != null) {// 调用监听器的onFailure方法listener.onFailure(f.cause());}Logs.CONN.error("start netty client failure, host={}, port={}", host, port, f.cause());}});}// 创建Nio客户端private void createNioClient(Listener listener) {// 创建NioEventLoopGroup,用于处理I/O操作NioEventLoopGroup workerGroup = new NioEventLoopGroup(// 获取工作线程数getWorkThreadNum(),// 创建默认的线程工厂new DefaultThreadFactory(ThreadNames.T_TCP_CLIENT),// 获取选择器提供者getSelectorProvider());// 设置I/O操作的比率workerGroup.setIoRatio(getIoRate());// 创建客户端createClient(listener, workerGroup, getChannelFactory());}// 创建Epoll客户端private void createEpollClient(Listener listener) {// 创建Epoll事件循环组,设置工作线程数和线程工厂EpollEventLoopGroup workerGroup = new EpollEventLoopGroup(getWorkThreadNum(), new DefaultThreadFactory(ThreadNames.T_TCP_CLIENT));// 设置IO比例workerGroup.setIoRatio(getIoRate());// 创建客户端createClient(listener, workerGroup, EpollSocketChannel::new);}// 初始化管道protected void initPipeline(ChannelPipeline pipeline) {// 添加解码器pipeline.addLast("decoder", getDecoder());// 添加编码器pipeline.addLast("encoder", getEncoder());// 添加处理器pipeline.addLast("handler", getChannelHandler());}// 获取解码器protected ChannelHandler getDecoder() {return new PacketDecoder();}// 获取编码器protected ChannelHandler getEncoder() {return PacketEncoder.INSTANCE;}// 获取IO速率protected int getIoRate() {return 50;}// 获取ChannelFactorypublic ChannelFactory<? extends Channel> getChannelFactory() {// 返回NioSocketChannel的构造函数return NioSocketChannel::new;}// 获取SelectorProviderpublic SelectorProvider getSelectorProvider() {// 返回系统默认的SelectorProviderreturn SelectorProvider.provider();}@Overridepublic String toString() {// 返回NettyClient的字符串表示return "NettyClient{" +", name=" + this.getClass().getSimpleName() +'}';}// 获取工作线程数protected int getWorkThreadNum() {return 1;}// 获取ChannelHandlerpublic abstract ChannelHandler getChannelHandler();// 重写doStart方法@Overrideprotected void doStart(Listener listener) throws Throwable {// 如果使用NettyEpollif (useNettyEpoll()) {// 创建EpollClientcreateEpollClient(listener);} else {// 否则创建NioClientcreateNioClient(listener);}}// 判断是否使用NettyEpollprivate boolean useNettyEpoll() {// 如果配置文件中设置了使用NettyEpollif (CC.mp.core.useNettyEpoll()) {try {// 调用Native类中的offsetofEpollData方法Native.offsetofEpollData();// 打印日志,表示客户端已经使用了NettyEpollLogs.CONN.debug("client has used netty epoll");// 返回truereturn true;} catch (UnsatisfiedLinkError error) {// 如果加载NettyEpoll失败,打印错误日志,并切换到nio模式Logs.CONN.error("can not load netty epoll, switch nio model.");}}// 返回falsereturn false;}@Overrideprotected void doStop(Listener listener) throws Throwable {// 关闭workerGroupif (workerGroup != null) {workerGroup.shutdownGracefully();}// 打印日志Logs.CONN.debug("netty client [{}] stopped.", this.getClass().getSimpleName());// 执行listener的onSuccess方法listener.onSuccess();}protected void initOptions(Bootstrap b) {// 设置连接超时时间为4000毫秒b.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 4000);// 设置TCP_NODELAY为true,禁用Nagle算法b.option(ChannelOption.TCP_NODELAY, true);}}
加群联系作者vx:xiaoda0423
仓库地址:https://github.com/webVueBlog/JavaGuideInterview
相关文章:
springboot第84集:Java进阶之路, Netty
# kafka-map文件夹 cd /usr/local/kafka-map # 根据需求自行修改配置 vi application.yml # 启动 java -jar kafka-map.jar byte minByte -128; byte maxByte 127; 用于表示一个 8 位(1 字节)有符号整数。它的值范围是 -128(-2^7࿰…...
DevOps持续集成
DevOps流程 第一步安装git 关闭防火墙 systemctl stop firewalld cd /usr/loacl vim docker-compose.yml docker search gitlab 拉取gitlab镜像 2.33GB docker pull gitlab/gitlab-ce:latestvim docker-compose.yml修改docker-compose.yml version: 3.1 services:gitlab:i…...
sql server log文件
确定 SQL Server 实例中具有大量 VDF 的数据库 SELECT [name], COUNT(l.database_id) AS vlf_count FROM sys.databases AS s CROSS APPLY sys.dm_db_log_info(s.database_id) AS l GROUP BY [name] HAVING COUNT(l.database_id) > 100; 在收缩日志文件之前确定事务日志中…...
pip install报错 Missing dependencies for SOCKS support的正确解决办法:离线安装pysocks
今天准备开发python项目的时候,发现在pip install 的时候报错了,提示:Missing dependencies for SOCKS support,查遍csdn所有的回答都统一是只需要执行: unset all_proxy unset ALL_PROXY 然后再执行 pip install p…...
嵌入式学习(15)-stm32通用GPIO模拟串口发送数据
一、概述 在项目开发中可能会遇到串口不够用的情况这时候可以用通过GPIO来模拟串口的通信方式。 二、协议格式 按照1位起始位8位数据位1位停止位的方式去编写发送端的程序。起始位拉低一个波特率的时间;发送8位数据;拉高一个波特率的时间。 三、代码 …...
AKE 安全模型:CK, CK+, eCK
参考文献: [BCK98] Mihir Bellare, Ran Canetti, Hugo Krawczyk. A Modular Approach to the Design and Analysis of Authentication and Key Exchange Protocols (Extended Abstract). STOC 1998: 419-428.[CK01] Ran Canetti, Hugo Krawczyk. Analysis of Key-E…...
【Linux】通过crond服务设置定时执行shell脚本,实际执行时间却延迟了8小时
一、问题描述 通过使用crond服务设置定时任务,在每天凌晨的2:00执行脚本,但检查结果时发现,实际执行时间却在上午10点。 检查shell脚本执行结果发现,实际执行脚本时间在上午10:00,延迟了8小时。 检查系统时间…...
什么是云原生数据库 PolarDB?
云原生数据库 PolarDB 是阿里云推出的一款高性能、兼容性强、弹性灵活的关系型数据库产品。它基于云原生架构设计,结合分布式存储和计算分离的技术优势,为用户提供强大的计算能力、卓越的可靠性以及高性价比的数据库解决方案。PolarDB 适合各种业务场景&…...
(6)JS-Clipper2之ClipperOffset
1. 描述 ClipperOffset类封装了对打开路径和关闭路径进行偏移(膨胀/收缩)的过程。 这个类取代了现在已弃用的OffsetPaths函数,该函数不太灵活。可以使用不同的偏移量(增量)多次调用Execute方法,而不必重新分配路径。现在可以在一次操作中对开放和封闭路…...
基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)
基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0095 1. 主要功能: 基于51单片机的病床呼叫系统proteus仿…...
工业智能网关如何为企业实现智能制造赋能?
在数字化转型的浪潮中,工业智能网关作为连接物理世界与数字世界的桥梁,正逐步成为智能制造领域的核心组件。本文将通过一个实际使用案例,深入剖析工业智能网关如何助力企业实现生产流程的优化、数据的高效采集与分析,以及智能化决…...
【Spring项目】表白墙,留言板项目的实现
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:项目实现准备 1:需求 2:准备工作 (1)…...
Java-WebSocket
文章目录 WebSocket概念SpringBoot实现一个WebSocket示例STOMP消息订阅和发布后端主动发送消息 跨域 WebSocket概念 应用层协议,底层采用TCP,特点:持续连接,有状态,双向通信 当客户端想要与服务器建立WebSocket连接时…...
C#请求https提示未能为 SSL/TLS 安全通道建立信任关系
System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系 ,这个错误通常表明你的应用程序在尝试建立一个安全的 SSL/TLS 连接时遇到了问题。这通常是由于证书验证失败引起的。证书验证失败可能有几个原因: 证书不受信任&#…...
pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具
一、简介 MinerU是开源、高质量的数据提取工具,支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面,适用于学术、商业、金融、法律等多领域,提高数据获取效率。一站式、开源、高质量的数据提取工具&…...
人工智能与机器学习:真实案例分析及其在各行业的应用前景
目录 引言 人工智能与机器学习的基础概念 人工智能的历史与演变 机器学习的算法分类 深度学习与传统机器学习的区别 行业应用案例分析 医疗健康 疾病预测与诊断 影像识别的运用 案例:IBM Watson在肿瘤治疗中的应用 金融服务 风险评估与欺诈检测 投资预测…...
再谈多重签名与 MPC
目录 什么是 MPC 钱包以及它们是如何出现的 多重签名和智能合约钱包已经成熟 超越 MPC 钱包 关于小队 多重签名已经成为加密货币领域的一部分,但近年来,随着 MPC(多方计算)钱包的出现,多重签名似乎被掩盖了。MPC 钱包之…...
(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)
相信实验一大家已经完成了,对Arcgis已进一步熟悉了,现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…...
Python、R循环神经网络RNN、指数平滑ETS、ARIMA模型预测网络流量、ATM机取款、旅游需求时间序列数据...
全文链接:https://tecdat.cn/?p38496 分析师:Pengyuan Wen 在当今经济研究与商业决策领域,精准的时间序列预测具有极为关键的意义。社会消费品零售总额作为反映人民消费水平以及国民经济状况的核心指标,其发展趋势的精准把握对中…...
通过PS和Unity制作2D动画之二:IK的使用
一、IK的概念 IK:Inverse Kinematics,反向动力学。 (1)正向动力学 在骨骼动画中,构建骨骼的方法被称为正向动力学。它的表现形式是:子骨骼(关节)的位置根据父骨骼(关节…...
如何防御ARP欺骗 保护IP安全
在数字化浪潮席卷全球的今天,网络安全威胁如同暗流涌动,时刻考验着我们的防范能力。其中,ARP欺骗攻击作为一种隐蔽性强、成本低廉且危害严重的网络攻击手段,成为众多网络安全事件中的一颗“毒瘤”。那么我们究竟是如何防御ARP欺骗…...
浏览器插件上架流程
上回说到,用 AI 开发上架了个浏览器插件。有朋友想知道上架扩展有需要哪些步骤。这里做个整理,这篇文章结构和步骤都是 AI 整理的。里面的文案细节、推荐的工具是我自己总结,以前发布扩展时直接用的。有需要的话下面的文案可以直接拷贝使用。…...
Android13 USB 串口默认授权
一)场景需求 项目中使用到了can协议控制车机功能,can 直接转串口,用USB转串口工具 cn.wch.uartlib 来实现. can 板子通过usb 插入到机器上面,那就是usb 协议了。 遇到问题: 插入can 板的usb 到机器上后,直…...
word实践:正文/标题/表图等的共用模板样式设置
说在前面 最近使用word新建文件很多,发现要给大毛病,每次新建一个word文件,标题/正文的字体、大小和间距都要重新设置一遍,而且每次设置这些样式都忘记了参数,今天记录一下,以便后续方便查看使用。现在就以…...
docker安装kettle(PDI)并实现web访问
我是MAC电脑M1版本,希望把软件交给docker进行管理,最近公司同事都通过kettle来实现外部数据对接,所以我本地也有安装kettle需求,在网上找到了这个解决方案操作很简单,但出现了无法访问的情况。我的排查方式是ÿ…...
vue自定义弹窗点击除了自己区域外关闭弹窗
这里使用到vue的自定义指令 <div class"item" v-clickoutside"clickoutside1"><div click"opencity" class"text":style"{ color: popup.iscitypop || okcitylist.length ! 0 ? #FF9500 : #000000 }">选择地区…...
【vue2】封装自定义的日历组件(三)之基础添加月份的加减定位到最新月份的第一天
我们在切换月份的时候,希望高亮显示在每个月的第一天上面,这样的效果我们要怎么来实现,其实也很简单,我们先看下实现的效果 实现效果 代码实现 原理就是获取到每月的第一天日期,然后再跟整个的数据进行对比ÿ…...
21天掌握javaweb-->第12天:Spring Boot项目优化与安全性
Spring Boot项目优化与安全性 1. Spring Boot性能优化 1.1 减少依赖项 评估项目的依赖项,并确保只引入必要的依赖。较多的依赖项可能会增加启动时间,因为它们需要被扫描和初始化。通过删除不需要的依赖项或仅引入必要的模块,可以减少类路径…...
Android —— 四大组件之Activity(一)
Android四大组件即Activity(前台)Service(后台),Broadcast(通信),ContentProvider(数据存储) 一、Activity Activity 充当了应用与用户互动的入口点Activity …...
Ubuntu手持司岚S2激光雷达进行建图
目前通过ros包将激光雷达数据读取之后: roslaunch rplidar_ros view_rplidar_s2.launch 再通过运行 cartographer_ros结点将代码运行起来 roslaunch cartographer_ros demo_revo_lds.launch 这里要注意, 在demo_revo_lds.launch 文件中引入的revo_lds.lua文件中要使用仿真时…...
快速了解 Aurora DSQL
上周在 AWS re:Invent大会(类似于阿里云的云栖大会)上推出了新的产品 Aurora DSQL[1] ,在数据库层面提供了多区域、多点一致性写入的能力,兼容 PostgreSQL。并声称,在多语句跨区域的场景下,延迟只有Google …...
【Android Studio】学习——网络连接
实验:Android网络连接 文章目录 实验:Android网络连接[toc]实验目标和实验内容:1、掌握Android联网的基本概念;2、能够使用URL connection实现网络连接;3、掌握第三方库的基本概念4、需实现的具体功能 实验结果功能说明…...
c语言复制字符串memcpy和strncpy函数区别
memcpy 和 strncpy 的耗时区别 这两个函数在功能上有明显差异,导致性能和耗时也不同。以下是它们的详细对比: 1. 功能差异 函数功能memcpy按字节复制数据,不处理字符串终止符 \0,适用于任意数据类型的内存复制。strncpy复制字符…...
Java设计模式 —— 【创建型模式】建造者模式详解
文章目录 一、建造者模式二、案例实现三、优缺点四、模式拓展五、对比1、工厂方法模式VS建造者模式2、抽象工厂模式VS建造者模式 一、建造者模式 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过…...
python爬虫--某房源网站验证码破解
文章目录 使用模块爬取目标验证码技术细节实现成果代码实现使用模块 requests请求模块 lxml数据解析模块 ddddocr光学识别 爬取目标 网站验证码破解思路是统一的,本文以城市列表为例 目标获取城市名以及城市连接,之后获取城市房源信息技术直接替换地址即可 验证码 技术…...
Android 项目依赖库无法找到的解决方案
目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近,我在编译一个 Android 老项目时遇到了一个问题,错误信息显示无法找到 com.gyf.immersionba…...
SpringBoot3整合SpringMVC
一、实现过程: (1).创建程序 (2).引入依赖: <?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"…...
内网穿透 natapp安装与使用
前言 NATAPP是一款基于ngrok的内网穿透工具。以下是对NATAPP的详细概述: 基本概念 定义:内网穿透(NAT穿透)是一种技术,它允许具有特定源IP地址和端口号的数据包能够绕过NAT设备,从而被正确地路由到内网主机…...
docker镜像构建企业级示例
华子目录 示例(在centos容器中源码编译nginx(单介构建))包准备为centos容器提供网络源添加企业7的ISO文件 提交为新的centos镜像编写dockerfile文件构建镜像如何优化自己构建的镜像大小多介构建 ldd命令基本用法示例 镜像优化方案…...
【论文阅读】龙芯2号处理器设计和性能分析
作者:胡伟武老师 胡伟武老师是计算机体系结构方向的大牛,推动了龙芯处理器的发展 学习体会: 学习追踪龙芯系列“工程流”论文,看看如何做工程,完成→完美 龙芯2号处理器几乎是工程向的论文,主要看一下实现…...
二一(GIT4)、echarts(地图)、黑马就业数据平台(学生页-增 删 改)
1. echarts 地图 echarts社区:makeapie echarts社区图表可视化案例 社区模板代码地址:自定义 tooltip-轮播 - category-work,series-map地图,tooltip提示框,visualMap视觉映射 - makeapie echarts社区图表可视化案例 // todo: 籍贯分布 地图 function…...
数据结构排序算法详解
数据结构排序算法详解 1、冒泡排序(Bubble Sort)2、选择排序(Selection Sort)2、插入排序(Insertion Sort)4、快速排序(Quick Sort) 1、冒泡排序(Bubble Sort)…...
使用kubeadm命令安装k8s
版本信息 kubernetesVersion: 1.28.01. 前期环境准备 先配置软件源可以安装kubeadm、kubelet、kubectl三个软件,不同的系统不同的安装方式,这里不列举了,自己找。然后要安装cri-dockerd,因为kubernetes从1.24版本不再支持docker的api,支持原生的containerd的api,可以使用…...
依托 Spring Boot框架,精铸高扩展性招聘信息管控系统
1 绪 论 1.1 课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管…...
docker 部署 mysql 9.0.1
docker 如何部署 mysql 9 ,请看下面步骤: 1. 先看 mysql 官网 先点进去 8 版本的 Reference Manual 。 选择 9.0 版本的。 点到这里来看, 这里有一些基础的安装步骤,可以看一下。 - Basic Steps for MySQL Server Deployment wit…...
SQL:从某行开始,查询一定行数的语句
比如实现从第五行开始查询5行数据的SQL语句 不同数据库有不同的实现方式,下面是各大数据库的查询语句。 1. SQL Server(适用于 SQL Server 2012 及之后版本)、DB2、Oracle(适用12c及以上版本) 这几种数据库的实现方式…...
18. 模块
一、什么是模块 模块化 指将一个完成的程序分解为一个一个小的模块。通过将模块组合,来搭建一个完整的程序。如果不采用模块化,那么所有的代码将统一保存到一个文件中。采用模块化后,将程序分别编写到多个文件中。使用模块化后,我…...
GroundingDINO微调训练_训练日志解释
文章目录 1. 训练日志1. Epoch 和 Iteration2. Learning Rate(学习率)3. ETA(预计剩余时间)4. Time 和 Data Time5. Memory6. Gradient Norm(梯度范数)7. Loss(损失)8. Individual L…...
华为eNSP:VRRP多网关负载分担
一、实验拓扑及目的 二、实验命令及实验步骤 LSW1的配置命令 <Huawei>sy [Huawei]un in e [Huawei]sys S1 [S1]vlan batch 100 200 [S1]int g0/0/1 [S1-GigabitEthernet0/0/1]port link-type access [S1-GigabitEthernet0/0/1]port default vlan 100 [S1-GigabitEtherne…...
uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(1)
uni-app写的微信小程序如何实现账号密码登录后获取token(而token的有效器一般是30分钟,当页面在操作时token是不会过去,,离开页面第二天登录时token就是过期状态,因为记住了账号密码就不会操作再次登录,但是…...