Nacos简介—1.Nacos使用简介
大纲
1.Nacos的在服务注册中心 + 配置中心中的应用
2.Nacos 2.x最新版本下载与目录结构
3.Nacos 2.x的数据库存储与日志存储
4.Nacos 2.x服务端的startup.sh启动脚本
5.Dubbo + Nacos微服务RPC调用开发示例
6.Nacos对临时与持久化服务实例的健康检查机制
7.Nacos保护阈值机制防止高并发下出现服务雪崩
8.Nacos保护阈值机制开启后的CAP问题
9.集成Nacos注册中心和配置中心的项目演示
1.Nacos的在服务注册中心 + 配置中心中的应用
(1)Nacos作为服务注册中心
(2)Nacos作为配置中心
Nacos的两大应用场景分别是:
一.微服务技术体系下的服务注册中心
二.配置中心
(1)Nacos作为服务注册中心
(2)Nacos作为配置中心
每个系统都会有很多配置信息。比如数据库连接池的配置、RocketMQ的配置、Redis的配置,都会写在Spring Boot项目下的application.yml静态配置文件。如果需要修改配置信息,就需要重新打包、重启系统进行重新部署发布。
所以,可以将这些配置信息写到Nacos中进行存储,然后各个系统监听Nacos中的数据变化。这样当需要修改配置信息时,只需要到Nacos中修改对应的数据即可。
2.Nacos 2.x最新版本下载与目录结构
下载地址:
https://github.com/alibaba/nacos/releases
如下是nacos-server-2.1.2.zip的目录结构:
如下是对应的Source code(zip)的目录结构:
3.Nacos 2.x服务端的数据库存储与日志存储
数据库初始化的脚本和日志存储的配置文件位于如下位置:
4.Nacos 2.x服务端的startup.sh启动脚本
(1)服务端的startup.sh启动脚本与JVM参数
(2)Nacos 2.x服务端的单机模式启动命令
(3)Nacos 2.x服务端的三节点集群化部署
(1)服务端的startup.sh启动脚本与JVM参数
通过如下命令启动Nacos服务端。
$ java -jar ${BASE_DIR}/target/${SERVER}.jar
#!/bin/bash# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.cygwin=false
darwin=false
os400=false
case "`uname`" in
CYGWIN*) cygwin=true;;
Darwin*) darwin=true;;
OS400*) os400=true;;
esac
error_exit ()
{echo "ERROR: $1 !!"exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOMEif [ -z "$JAVA_HOME" ]; thenif $darwin; thenif [ -x '/usr/libexec/java_home' ] ; thenexport JAVA_HOME=`/usr/libexec/java_home`elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; thenexport JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"fielseJAVA_PATH=`dirname $(readlink -f $(which javac))`if [ "x$JAVA_PATH" != "x" ]; thenexport JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`fifiif [ -z "$JAVA_HOME" ]; thenerror_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"fi
fiexport SERVER="nacos-server"
export MODE="cluster"
export FUNCTION_MODE="all"
export MEMBER_LIST=""
export EMBEDDED_STORAGE=""
while getopts ":m:f:s:c:p:" opt
docase $opt inm)MODE=$OPTARG;;f)FUNCTION_MODE=$OPTARG;;s)SERVER=$OPTARG;;c)MEMBER_LIST=$OPTARG;;p)EMBEDDED_STORAGE=$OPTARG;;?)echo "Unknown parameter"exit 1;;esac
doneexport JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=`cd $(dirname $0)/..; pwd`
export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; thenJAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
elseif [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; thenJAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"fiJAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fiif [[ "${FUNCTION_MODE}" == "config" ]]; thenJAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; thenJAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fiJAVA_OPT="${JAVA_OPT} -Dnacos.member.list=${MEMBER_LIST}"JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; thenJAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"
elseJAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fiJAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins,${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector"
JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"if [ ! -d "${BASE_DIR}/logs" ]; thenmkdir ${BASE_DIR}/logs
fiecho "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}"if [[ "${MODE}" == "standalone" ]]; thenecho "nacos is starting with standalone"
elseecho "nacos is starting with cluster"
fi# check the start.out log output file
if [ ! -f "${BASE_DIR}/logs/start.out" ]; thentouch "${BASE_DIR}/logs/start.out"
fi
# start
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; thennohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
elsenohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fiecho "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
(2)Nacos 2.x服务端的单机模式启动命令
$ cd nacos/bin
$ nohup sh startup.sh -m standalone &
(3)Nacos 2.x服务端的三节点集群化部署
集群间的数据交互机制是通过MySQL来实现的。
一.修改各节点的系统配置文件application.properties
第一个节点监听的端口是8848。
第二个节点监听的端口是8858。
第三个节点监听的端口是8868。
二.配置各节点的集群配置文件cluster.conf
配置好三个节点的地址和端口。
5.Dubbo + Nacos微服务RPC调用开发示例
其实只需要在配置文件里进行配置即可,与Nacos相关的配置项其实就是:dubbo.registry.address和spring.cloud.nacos.discovery.server-addr。
一.进行服务注册的微服务配置
spring.application.name=demo-dubbo-nacos-ServiceA
dubbo.scan.base-packages=com.demo.dubbo.nacos
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.address=spring-cloud://localhost
spring.cloud.nacos.discovery.server-addr=192.168.31.152:8848,192.168.31.152:8858,192.168.31.152:8868spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
spring.datasource.url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username: root
spring.datasource.password: root
spring.datasource.driverClassName: com.mysql.jdbc.Driver
spring.datasource.initialSize: 1
spring.datasource.minIdle: 1
spring.datasource.maxActive: 50
spring.datasource.maxWait: 60000
spring.datasource.timeBetweenEvictionRunsMillis: 60000
spring.datasource.minEvictableIdleTimeMillis: 300000
spring.datasource.validationQuery: SELECT 1 FROM DUAL
spring.datasource.testWhileIdle: true
spring.datasource.testOnBorrow: false
spring.datasource.testOnReturn: false
spring.datasource.poolPreparedStatements: true
spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
spring.datasource.filters: stat,wall,log4j
spring.datasource.connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
二.进行服务调用的微服务配置
spring.application.name=demo-dubbo-nacos-ServiceB
dubbo.cloud.subscribed-services=demo-dubbo-nacos-ServiceA
dubbo.scan.base-packages=com.demo.dubbo.nacos
spring.cloud.nacos.discovery.server-addr=192.168.31.152:8848,192.168.31.152:8858,192.168.31.152:8868
6.Nacos对临时与持久化服务实例的健康检查机制
(1)Nacos有两种健康检查机制
(2)Nacos对临时的服务实例进行健康检查的机制
(3)Nacos对持久化的服务实例进行健康检查的机制
(1)Nacos有两种健康检查机制
作为服务注册中心,一般都会有健康检查机制。Nacos的健康检查机制会根据两种不同的服务实例进行分别处理。一种是临时的服务实例,一种是持久化的服务实例。对于不同的服务实例,Nacos的健康探测机制会不一样。
Dubbo服务实例向Nacos进行服务注册时需要带上一个参数[ephemeral]。这个[ephemeral]参数可取两个值:临时和持久化。分别表示注册的服务实例是临时的和持久化的。一般不用主动设置该参数,默认情况下的服务实例都是临时的。
(2)Nacos对临时的服务实例进行健康检查的机制
临时的服务实例默认会每隔5s上报一次心跳给Nacos,Nacos如果15s没收到心跳就标记该服务实例为不健康,Nacos如果超过30s没收到心跳就摘除这个服务实例。
(3)Nacos对持久化的服务实例进行健康检查的机制
Nacos会每隔20s主动对服务实例检查一次。如果检查失败,发现服务实例为不健康状态,也不会摘除这个服务实例。默认情况下,不健康的服务实例Nacos是不会返回的。
7.Nacos保护阈值机制防止高并发下出现服务雪崩
如果健康的服务实例比例太低,会导致健康的服务实例请求压力过大。可能导致服务实例被打死,从而引发服务雪崩,所以引入了保护阈值。
保护阈值,可以设置为0~1之间的比例。如果健康的服务实例比例太低,则把不健康的服务实例也返回服务调用方。此时会有很多请求交给不健康的服务实例来处理,会导致请求失败,但可以避免健康的服务实例出现因为请求流量过大而被压垮的问题。Nacos的保护阈值牺牲了一致性,得到了可用性。
假设有10个服务实例,每个服务实例的极限QPS是700,当前QPS是500。同时假设保护阈值=0.8。
情况一:如果仅仅有2个服务实例宕机,此时Nacos是不会去触发保护阈值的。此时每秒的5000请求会分配给8个服务实例,每个服务实例QPS是600+。每个服务实例都不会被压垮,因为每个服务实例的极限QPS是700。
情况二:如果有4个服务实例宕机了,只剩下6个健康的服务实例。那么每秒的5000个请求分配给6个服务实例,每个服务实例QPS是800+。此时就会导致服务实例被压垮,所以需要Nacos触发保护阈值0.8。不能让请求分配给6个服务实例,而是继续让6健康 + 4不健康一起处理。
8.Nacos保护阈值机制开启后的CAP问题
CAP:Consistency(一致性)、Available(可用性)、Partition(网络分区)。网络分区、一致性和可用性是不能同时兼得的。Nacos的保护阈值牺牲了一致性,得到了可用性。
9.集成Nacos注册中心和配置中心的项目演示
(1)集成Nacos注册中心
(2)集成Nacos配置中心
(1)集成Nacos注册中心
首先需要把订单服务、库存服务两个服务都注册到Nacos中去。库存服务要告诉Nacos注册中心,它的IP地址具体是多少。订单服务需要从Nacos注册中心获取库存服务登记的IP地址。这样订单服务才能找到库存服务,进行服务调用。
库存服务如何实现将服务注册到Nacos中:
步骤一:在pom.xml文件中引入Nacos注册中心的依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
步骤二:application.properties中配置Nacos服务地址
更多详细的配置可以参考地址:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
spring:application:name: stock-servicecloud:nacos:# 注册中心discovery:server-addr: http://127.0.0.1:8848
步骤三:启动库存服务
此时查看Nacos控制台,就多了一个stock-service的服务了。
点击stock-service服务的详情进行查看,可以发现其IP和Port都登记好了。
订单服务也是一样的步骤,将服务注册到Nacos中。
步骤四:通过服务中心进行服务调用演示
在order-service订单服务中,通过使用Feign来调用库存服务。
package com.demo.order.service;import com.demo.order.feign.StockService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;@Service
@AllArgsConstructor
public class OrderService {private final StockService stockService;public Integer getProductStock(Integer productId) {return stockService.selectStockByProductId(productId);}
}—————————————————————————————————————————————————————————————
package com.demo.order.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(name = "stock-service")
public interface StockService {//查询库存@GetMapping(value = "/stock/getStockByProductId")Integer selectStockByProductId(@RequestParam("productId") Integer productId);
}
(2)集成Nacos配置中心
问题:为什么要选用Nacos?
Nacos比其他注册中心多了一个配置中心,可以统一管理项目的配置文件。并且能够做到无需重启项目,也能感知配置文件的修改。
步骤一:在Nacos控制台创建对应的配置文件
打开Nacos后台,配置管理 -> 配置列表 -> 点击+号,创建一个配置文件。
这里的Data ID可以理解为配置文件名字,具有唯一性。Groups相当于分组,可以分不同的环境、不同的业务。配置格式这里选择的是YAML,最后按照所选格式,把配置内容放进去。
步骤二:引入Nacos配置服务依赖
在Spring Boot项目的pom.xml文件中,引入Nacos配置中心的Maven依赖;
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
步骤三:修改配置文件名
把配置文件的文件名改成bootstrap.yml,默认是application.yml。
步骤四:配置Nacos配置中心信息
在bootstrap.yml文件中,新增Nacos配置中心相关配置:
spring:application:name: stock-servicecloud:nacos:# 配置中心config:server-addr: http://124.223.102.236:8848## 配置文件前缀prefix: stock-service# 配置文件类型file-extension: yml# 注册中心discovery:server-addr: http://124.223.102.236:8848
步骤五:配置中心演示
下面在stock-service库存服务中编写一个User实体类代码,进行测试。@Value注解的意思就是从配置文件中去读取这个属性。@RefreshScope这个注解是表示动态刷新,动态感知配置文件变化。如果不加这个注解,修改Nacos上的配置文件,则不会有动态刷新效果。
@Data
@Component
@RefreshScope
public class User {@Value("${user.userName}")private String userName;
}
编写一个Controller来测试,原本数据是李四。在Nacos控制台,把配置文件中的usereName属性,修改成王五后,项目不需要重新启动也能动态改变原来的值。
@RestController
@AllArgsConstructor
@RequestMapping("/user")
public class UserController {private final User user;@GetMapping("/getUserName")public String getUserName() {return user.getUserName();}
}
(3)客户端的版本选择
Nacos服务端使用什么版本,其他组件也有对应使用版本要求。所以一开始在组件选型时,得先了解一下版本的选择,如下:
Demo项目里的Nacos使用版本是1.4.1,那么对应Spring Cloud Alibaba的版本至少是2.2.4 Release。如下:
<properties><java.version>1.8</java.version><spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
</properties>
相关文章:
Nacos简介—1.Nacos使用简介
大纲 1.Nacos的在服务注册中心 配置中心中的应用 2.Nacos 2.x最新版本下载与目录结构 3.Nacos 2.x的数据库存储与日志存储 4.Nacos 2.x服务端的startup.sh启动脚本 5.Dubbo Nacos微服务RPC调用开发示例 6.Nacos对临时与持久化服务实例的健康检查机制 7.Nacos保护阈值机…...
【工具】使用 MCP Inspector 调试服务的完全指南
Model Context Protocol (MCP) Inspector 是一个交互式开发工具,专为测试和调试 MCP 服务器而设计。本文将详细介绍如何使用 Inspector 工具有效地调试和测试 MCP 服务。 1. MCP Inspector 简介 MCP Inspector 提供了直观的界面,让开发者能够ÿ…...
架构-项目管理
一、盈亏平衡分析 核心知识点: 基本公式 正常情况:销售额 固定成本 可变成本 税费 利润盈亏平衡时:销售额 固定成本 可变成本 税费(利润为0,即不赚不亏的临界点) 公式推导:利润 销售额…...
域控重命名导致无法登录
问题描述:公司新买了一个服务器用于替换旧服务器,旧服务器名称为server3为域控,降级后新装的服务器升级为了新域控。然后旧服务器更名为server5,新服务器server6更名为server3.重启新服务器后服务器无法登录。但是服务器相关功能都…...
C++内存管理那些事
一、C/C内存分布 【说明】: 栈又叫堆栈,是非静态局部变量、函数参数、返回值存放的区域,栈向下增长内存映射段是高效的IO映射方式,用于装载一个共享的动态内存库。用户可以使用系统接口创建共享内存,做进程间的通信堆…...
C++多态(实现部分)(一)
目录 1.多态的概念 1.1运行时多态 1.2 编译时多态 2.多态的定义以及实现 2.1 多态构成的条件 2.2 虚函数 2.3 虚函数的重写/覆盖 2.3.1 虚函数重写的两个例外 1.协变 2.析构函数的重写 2.4 override 和final关键字 2.5 重载/重写/隐藏的对比 编辑 3. 抽象类 和…...
HOW - Code Review 流程自动化
文章目录 前言流程自动化落地一、自动发起 MR(Merge Request)macOS 安装 glab方式一:使用 Homebrew(推荐) 其他平台安装方法Linux (apt)Windows(scoop 或 chocolatey) 使用示例:自动…...
自动化标注软件解析
关于PyQt5信号槽机制的解析 信号槽机制是 Qt 框架中用于对象间通信的核心机制,它基于发布-订阅模式,能够实现松耦合的组件交互。 1. 信号槽机制的基本概念 信号(Signal) 信号是对象发出的一种通知,表示某个事件发生…...
机器人结构认知与安装
机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件: OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座:包含控制主板、安全接口板、监测保护电路单元,支持外接急停开关,采用光耦…...
SQLMesh 模型选择指南:优化大型项目的模型更新
在处理大型 SQLMesh 项目时,模型之间的依赖关系可能会变得非常复杂。为了更有效地管理这些项目,SQLMesh 提供了一种模型选择机制,允许用户有针对性地选择需要更新的模型。本文将详细介绍如何使用 SQLMesh 的模型选择功能来优化项目更新过程。…...
linux:启动后,ubuntu屏幕变成红色了
屏幕启动后变成 红色背景 通常说明 显卡驱动出了问题,或者是 图形界面加载失败 使用了 fallback 模式。这种现象在 NVIDIA 驱动安装失败或显卡与驱动不兼容时常见。 🎯 先给你几个快速修复选项 ✅ 1. 进入 TTY 命令行界面 按下:Ctrl Alt …...
抖音的逆向工程获取弹幕(websocket和protobuf解析)
目录 声明前言第一节 获取room_id和ttwid值第二节 signture值逆向python 实现signature第三节 Websocket实现长链接请求protubuf反序列化pushFrame反序列化Response解压和反序列化消息体Message解析应答ack参考博客声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的…...
2194出差-节点开销Bellman-ford/图论
题目网址: 蓝桥账户中心 我先用Floyd跑了一遍,不出所料TLE了 n,mmap(int,input().split())clist(map(int,input().split()))INFfloat(inf) ma[[INF]*n for i in range(n)]for i in range(m):u,v,wmap(int,input().split())ma[u-1][v-1]wma[v-1][u-1]w#“…...
【hexo主题自定义】
主题下载安装 进入命令行,下载 NexT 主题,输入: git clone https://github.com/theme-next/hexo-theme-next themes/next 修改站点配置文件_config.yml,找到如下代码: ## Themes: https://hexo.io/themes/ theme: l…...
前后端部署
#在学习JavaWeb之后,进行了苍穹外卖的学习。在进行苍穹外卖的部署的时候,作者遇到了下面的问题# 1.前端工程nginx无法启动: 当我双击已经部署好的nginx工程中nginx.exe文件的时候,在服务中,并没有找到ngnix成功运行。…...
1.jdk+idea安装+HelloWorld项目创建
1.jdk1.8idea安装项目创建 jdk1.8安装配置环境变量 到华为镜像下载jdk,因为Oracle官网需要注册才可以下载jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/ 直接下一步安装,配置环境变量 重启,执行java -version 和 javac idea下载 版本20…...
Puter部署指南:基于Docker的多功能个人云平台掌控自己的数据
前言:嗨,小伙伴们!每次开机是不是都要像参加点击大赛一样不停地敲击各种网盘和应用的登录按钮?更让人抓狂的是,这些科技巨头会不会偷偷翻阅我们的隐私数据呢?别担心,今天给大家安利一个超炫酷的…...
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
本文提出了一种基于机器学习的智能嗅探机制,革新性地应用于自动判定动态渲染页面中AJAX加载的最佳触发时机。系统架构采用先进模块化拆解设计,由请求分析模块、机器学习判定模块、数据采集模块和文件存储模块四大核心部分构成。在核心代码示例中…...
探索 CameraCtrl模型:视频生成中的精确摄像机控制技术
在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…...
理解欧拉公式
1. 欧拉公式中的符号 欧拉公式 e i x cos x i sin x e^{ix}\cos xi\sin x eixcosxisinx当 x π x \pi xπ时 e i π 1 0 / / 欧拉恒等式 e^{i\:\pi}10 //欧拉恒等式 eiπ10//欧拉恒等式 e e e:自然对数的底 i i i:虚数, i 2 − 1 i^2 -1 i2−1 cos…...
7.9 Python+Click实战:5步打造高效的GitHub监控CLI工具
Python+Click实战:5步打造高效的GitHub监控CLI工具 GitHub Sentinel Agent 命令行界面开发实战 关键词:CLI 开发实践、Click 框架、API 集成、命令行参数解析、错误处理机制 1. 命令行界面技术选型与架构设计 GitHub Sentinel 采用 Click + Requests 技术栈构建 CLI 工具,…...
leetcode28. 找出字符串中第一个匹配项的下标_简单KMP
28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode) 模仿:algorithm-journey/src/class100/Code01_KMP.java at main algorithmzuo/algorithm-journey GitHub #include <stdio.h> #include <stdlib.h> #include <strin…...
代码随想录算法训练营第二十六天
LeetCode题目: 452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间2799. 统计完全子数组的数目(每日一题) 其他: 今日总结 往期打卡 452. 用最少数量的箭引爆气球 跳转: 452. 用最少数量的箭引爆气球 学习: 代码随想录公开讲解 问题: 有一些球形气球贴在一堵用 X…...
精益数据分析(20/126):解析经典数据分析框架,助力创业增长
精益数据分析(20/126):解析经典数据分析框架,助力创业增长 在创业和数据分析的学习道路上,每一次深入探索都可能为我们带来新的启发。今天,依旧带着和大家共同进步的想法,我们一起深入研读《精…...
基于Django的权限管理平台
目录 单元一:项目准备 任务一:创建项目 1.1配置 DRF 模型 任务二:设置CSRF令牌 2.1创建app包 2.2检查浏览器Cookies权限 2.3获取cookies 单元二:用户平台 任务一:用户数据模型搭建 1.1创建user模块 1.2生成…...
深度解析 LangChain、ReAct、ReROO 架构及其在 AI Agent 中的应用
一、LangChain 架构:模块化智能代理的核心框架 1. 架构特性与设计原理 LangChain 是构建智能代理的模块化框架,其核心通过 Chains(任务链)、Agents(代理)、Memory(记忆) 和 Tools&a…...
数据库day-07
一、实验名称和性质 子查询 验证 设计 二、实验目的 1.掌握子查询的嵌套查询; 2.掌握集合操作 3.了解EXISTS嵌套查询方法; 三、实验的软硬件环境要求 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块…...
使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总
近期断断续续学习了Rust编程,使用Tauri 2.3.1Leptos 0.7.8开发了一个自用的桌面小程序。Win10操作系统,使用VS Code及rust analyzer插件搭建的开发环境,后期开始使用Roo Code绑定DeepSeek API 辅助编程,对我这个初学者编程帮助很大…...
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
概述 目标检测已经取得了长足的发展,尤其是随着基于 Transformer 的模型的兴起。RF-DETR,由 Roboflow 开发,就是这样一种模型,它兼顾了速度和精度。使用 Roboflow 的工具可以让整个过程变得更加轻松。他们的平台涵盖了从上传和标…...
JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合
# 前置知识 1 、作用域:(本地 & 全局) 简单来说就是运行后相关的数据值 2 、调用堆栈:(由下到上) 简单来说就是代码的执行逻辑顺序 3 、常见分析调试: - 代码全局搜索 - 文件流程断点…...
从零开始在Win上添加一块QEMU开发板(四)实现简单USART
文章目录 一、前言背景二、QEMU的字符设备模拟三、USART的发送1. USART发送的QEMU字符设备模拟2. MMIO设计3. 中断连接4. 复位 三、代码验证1. 输出到serial控制台2. 输出到文件 一、前言背景 QEMU是一款开源的模拟器及虚拟机管理器。而QEMU内置支持了一些开发板,我…...
目标检测篇---faster R-CNN
目标检测系列文章 第一章 R-CNN 第二篇 Fast R-CNN 目录 目标检测系列文章📄 论文标题🧠 论文逻辑梳理1. 引言部分梳理 (动机与思想) 📝 三句话总结🔍 方法逻辑梳理🚀 关键创新点🔗 方法流程图关键疑问解答…...
【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库
深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…...
Linux下编译opencv-4.10.0(静态链接库和动态链接库)
1. 安装依赖 在编译之前,确保系统中安装了必要的依赖工具和库。运行以下命令安装: sudo apt update sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config sudo apt-get install libavcodec-dev libavforma…...
OpenBMC:BmcWeb login创建session
OpenBMC:BmcWeb login认证-CSDN博客 完成用户的认证后,还需要为该用户创建session,从而为后续的rest api访问铺平道路 inline void handleLogin(const crow::Request& req,const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {...auto session =persisten…...
Java高频面试之并发编程-07
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:线程之间有哪些通信方式? 在 Java 多线程编程中,线程间通信(Inter-Thread Communica…...
四、Python编程基础04
这里写目录标题 一、集合[了解]二、函数1. 函数定义与调用2. 函数返回值 三、模块和包1. 登录案例2.登录案例优化3. 随机数案例 四、异常五、web自动化测试1、selenium介绍2、环境搭建具体安装步骤请看 3、入门案例3.1 自动化测试步骤3.2 案例 一、集合[了解] 1, 集合 set, 表…...
专家系统的一般结构解析——基于《人工智能原理与方法》的深度拓展
不同的专家系统,其功能与结构都不尽相同,但一般都包括人机接口、推理机、知识库及其管理系统、数据库及其管理系统、知识获取机构、解释机构这六个部分,如下图所示。 一、人机接口(Human-Computer Interface, HCI) (一)基本思想与定义 1. 核心思想:双向交互的桥梁 人…...
手搓雷达图(MATLAB)
看下别人做出来什么效果 话不多说,咱们直接开始 %% 可修改 labels {用户等级, 发帖数, 发帖频率, 点度中心度, 中介中心度, 帖子类型计分, 被列为提案数}; cluster_centers [0.8, 4.5, 3.2, 4.0, 3.8, 4.5, 4.2; % 核心用户0.2, 0.5, 0.3, 0.2, 0.1, 0.0, 0.0;…...
FastMCP与FastAPI:构建自定义MCP服务器
FastMCP与FastAPI:构建自定义MCP服务器 模型上下文协议(Model Context Protocol, MCP)是一种让AI模型与外部工具和服务交互的标准。本文将介绍FastMCP和FastAPI,并通过实例展示如何创建自定义MCP服务器。 MCP基础概念 MCP允许语言模型: 访问外部工具…...
基于 springboot+vue+elementui 的办公自动化系统设计(
基于 springbootvueelementui 的办公自动化系统设计(前端代码在oa文件夹里) 系统主要功能: 1、统一的信息发布平台:公告栏,公司活动,项目进度,公司周报 2、统一的文件管理平台:收文管理、发文管理。文件查询…...
Java发展史及版本详细说明
Java发展史及版本详细说明 1. Java 1.0(1996年1月23日) 核心功能: 首个正式版本,支持面向对象编程、垃圾回收、网络编程。包含基础类库(java.lang、java.io、java.awt)。支持Applet(浏览器嵌入…...
高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件
一、合肥市高新技术企业重新认定奖励补贴政策 (一)高新区高新技术企业重新认定复审补贴奖励 重新认定为国家高新技术企业的给予5万元一次性奖励。 (二)经开区高新技术企业重新认定复审补贴奖励 对重新认定的企业,给…...
elementui日历显示红点及根据日程范围判断是否有红点
生成指定日期范围内的所有日期 generateDateRange(startStr, endStr) {const dates []; 日期列表const start new Date(startStr); 日程开始日期const end new Date(endStr); 日程结束日期end.setHours(23, 59, 59, 999); 结束的那一天设置为23点59分59秒// 生成日期范围内…...
第六章 QT基础:5、QT的UDP网络编程
在 Qt 中,QUdpSocket 类用于实现基于 UDP 协议的网络通信。UDP(用户数据报协议)是一种无连接的协议,与 TCP 不同,它不需要建立连接,因此它的传输速度较快,但也不保证数据的可靠传输。 1. Qt UDP…...
JAVA设计模式——(五)享元模式(Flyweight Pattern)
JAVA设计模式——(五)享元模式(Flyweight Pattern) 概念理解实现创建内部状态定义享元工厂测试 适用性 概念 使共享对象可以有效的支持大量的细粒度对象。主要采用池技术实现。 理解 享元模式主要解决大量对象的共享࿰…...
电竞俱乐部护航点单小程序,和平地铁俱乐部点单系统,三角洲护航小程序,暗区突围俱乐部小程序
电竞俱乐部护航点单小程序开发,和平地铁俱乐部点单系统,三角洲护航小程序,暗区突围俱乐部小程序开发 端口包含: 超管后台, 老板端,打手端,商家端,客服端,管事端&#x…...
mybatis log convert使用
1. idea 搜索插件 mybatis log convert. 安装后重启idea 启动程序. 日志打印后选中输出的内容右键。这里随意选中一段日志做演示 必须要在console中复制才能使用这个日志解析 2. 还有一种用法。没找到...
[U-Net]DA-TRANSUNET
论文题目:DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION ∗ 中文题目:DA-TRANSUNET:结合空间和通道双注意力与Transformer U-NET的医学图像分割算法 0摘要 精确的医学图像分割对疾病定量和治疗评…...
AI大模型从0到1记录学习 数据结构和算法 day20
4.3 分治算法 4.3.1 概述 分治算法的基本思想为:将原问题递归的分解为若干个(通常是两个以上)规模较小、相互独立且性质相同的子问题,直到子问题足够简单,简单到可以直接求解。然后再返回结果,逐个解决上层…...