nsc account 及user管理
从安全角度,推荐使用sign 模式进行nats account及用户管理
- 把权限放到account level 用户密码泄露可以通过快速更换用户
- 可以设置过期日期,进行安全轮换
此外通过nsc 管理用户和权限,可以统一实现全局管控,包括subject管控,避免随意增减subject。
创建operator
/nsc # nsc add operator signoperator
[ OK ] generated and stored operator key "ODV4WGUF72JEXY5TY3DG2ZIX6HYJGKF2GMWEHK4FALG6B76X7LRSEOF6"
[ OK ] added operator "signoperator"
[ OK ] When running your own nats-server, make sure they run at least version 2.2.0
/nsc # nsc generate nkey --operator --store
OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C
operator key stored /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
/nsc # nsc edit operator --sk OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C
[ OK ] added signing key "OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C"
[ OK ] edited operator "signoperator"
/nsc # nsc describe operator
+---------------------------------------------------------------------------------+
| Operator Details |
+----------------------+----------------------------------------------------------+
| Name | signoperator |
| Operator ID | ODV4WGUF72JEXY5TY3DG2ZIX6HYJGKF2GMWEHK4FALG6B76X7LRSEOF6 |
| Issuer ID | ODV4WGUF72JEXY5TY3DG2ZIX6HYJGKF2GMWEHK4FALG6B76X7LRSEOF6 |
| Issued | 2025-01-26 07:10:46 UTC |
| Expires | |
| Require Signing Keys | false |
+----------------------+----------------------------------------------------------+
| Signing Keys | OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C
+----------------------+----------------------------------------------------------+
创建account
注意下面的-K 参数: OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C来自operator 的singing keys
/nsc # nsc add account -n signacc -K /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
[ OK ] generated and stored account key "ADPERO47PU2O4VLH2H46BGFRB47J2UMEMD2SWTVAOP63XNVOCICX4MKW"
[ OK ] added account "signacc"
/nsc # nsc generate nkey --account --store
AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP
account key stored /nsc/nkeys/keys/A/A6/AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP.nk
/nsc # nsc describe account
+--------------------------------------------------------------------------------------+
| Account Details |
+---------------------------+----------------------------------------------------------+
| Name | signacc |
| Account ID | ADPERO47PU2O4VLH2H46BGFRB47J2UMEMD2SWTVAOP63XNVOCICX4MKW |
| Issuer ID | OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C |
| Issued | 2025-01-26 07:12:52 UTC |
| Expires | |
+---------------------------+----------------------------------------------------------+
| Max Connections | Unlimited |
| Max Leaf Node Connections | Unlimited |
| Max Data | Unlimited |
| Max Exports | Unlimited |
| Max Imports | Unlimited |
| Max Msg Payload | Unlimited |
| Max Subscriptions | Unlimited |
| Exports Allows Wildcards | True |
| Disallow Bearer Token | False |
| Response Permissions | Not Set |
+---------------------------+----------------------------------------------------------+
| Jetstream | Disabled |
+---------------------------+----------------------------------------------------------+
| Imports | None |
| Exports | None |
+---------------------------+----------------------------------------------------------+
| Tracing Context | Disabled |
+---------------------------+----------------------------------------------------------+/nsc # nsc edit account --sk AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP -K /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
[ OK ] added signing key "AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP"
[ OK ] edited account "signacc"/nsc # nsc generate nkey --account --store
AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP
account key stored **/nsc/nkeys/keys/A/A6/AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP.nk**
/n
--
value of user 's arg -K is account's nk
创建用户
注意key来自account
nsc add user signuser -K /nsc/nkeys/keys/A/A6/AA6IIWBGC3T7BPUUMHFSB2TNK6YAFCXUY2IFPCGKU2FWC56D4HO475VP.nk
创建System account
下面-K 参数同样来自operator
nsc add account -n SIGNSYS -K /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
nsc edit operator --system-account SIGNSYS/nsc # nsc add account -n SIGNSYS -K /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
[ OK ] generated and stored account key "ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X"
[ OK ] added account "SIGNSYS"
/nsc # nsc edit operator --system-account SIGNSYS
[ OK ] set system account "ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X"
[ OK ] edited operator "signoperator"/nsc # nsc edit account --sk ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X -K /nsc/nkeys/keys/O/BP/OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C.nk
[ OK ] added signing key "ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X"
[ OK ] edited account "SIGNSYS"
/nsc # nsc describe account
+--------------------------------------------------------------------------------------+
| Account Details |
+---------------------------+----------------------------------------------------------+
| Name | SIGNSYS |
| Account ID | ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X |
| Issuer ID | OBPATKCCVZHM2CSMG5OGDC5D3JENHGHDRD4LP7ATF6B7NQ7LTCRRXN3C |
| Issued | 2025-01-26 07:27:05 UTC |
| Expires | |
+---------------------------+----------------------------------------------------------+
| Signing Keys | ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X |
+---------------------------+----------------------------------------------------------+
| Max Connections | Unlimited |
| Max Leaf Node Connections | Unlimited |
| Max Data | Unlimited |
| Max Exports | Unlimited |
| Max Imports | Unlimited |
| Max Msg Payload | Unlimited |
| Max Subscriptions | Unlimited |
| Exports Allows Wildcards | True |
| Disallow Bearer Token | False |
| Response Permissions | Not Set |
+---------------------------+----------------------------------------------------------+
| Jetstream | Disabled |
+---------------------------+----------------------------------------------------------+
| Imports | None |
| Exports | None |
+---------------------------+----------------------------------------------------------+
| Tracing Context | Disabled |
+---------------------------+----------------------------------------------------------+
创建resolver 供server启动
这个resolve文件非常重要,不能泄露
/nsc # nsc generate config --nats-resolver > ./resolver.conf
/nsc # cat ./resolver.conf
Operator named signoperator
operator: eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiJHQU9BQkVCTUJXUEI3U1BBWjNNVVFaV0FUM1FXMkJGSzdOUk1EUVJDTFdGRTQ1U0E2SEdRIiwiaWF0IjoxNzM3ODc2MzUxLCJpc3MiOiJPRFY0V0dVRjcySkVYWTVUWTNERzJaSVg2SFlKR0tGMkdNV0VISzRGQUxHNkI3Nlg3TFJTRU9GNiIsIm5hbWUiOiJzaWdub3BlcmF0b3IiLCJzdWIiOiJPRFY0V0dVRjcySkVYWTVUWTNERzJaSVg2SFlKR0tGMkdNV0VISzRGQUxHNkI3Nlg3TFJTRU9GNiIsIm5hdHMiOnsic2lnbmluZ19rZXlzIjpbIk9CUEFUS0NDVlpITTJDU01HNU9HREM1RDNKRU5IR0hEUkQ0TFA3QVRGNkI3TlE3TFRDUlJYTjNDIl0sInN5c3RlbV9hY2NvdW50IjoiQUJWVjdNQ0pTSUwzTlhPSUNUSFdGVkNYUkhISk1CTlRPUlRIMkxJVEpDNkNaQVNGQVZNVzJLNlgiLCJ0eXBlIjoib3BlcmF0b3IiLCJ2ZXJzaW9uIjoyfX0.IX4oshelXMAv2yiL7tgUt75WgNYiE2OKPqNVRxl1gVtDO3SEDpIQKjYroAngJ8BSc2wTsISesQhHf2SoNHISBA
System Account named SIGNSYS
system_account: ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X
configuration of the nats based resolver
resolver {
type: full
# Directory in which the account jwt will be stored
dir: './jwt'
# In order to support jwt deletion, set to true
# If the resolver type is full delete will rename the jwt.
# This is to allow manual restoration in case of inadvertent deletion.
# To restore a jwt, remove the added suffix .delete and restart or send a reload signal.
# To free up storage you must manually delete files with the suffix .delete.
allow_delete: false
# Interval at which a nats-server with a nats based account resolver will compare
# it's state with one random nats based account resolver in the cluster and if needed,
# exchange jwt and converge on the same set of jwt.
interval: "2m"
# Timeout for lookup requests in case an account does not exist locally.
timeout: "1.9s"
}
Preload the nats based resolver with the system account jwt.
This is not necessary but avoids a bootstrapping system account.
This only applies to the system account. Therefore other account jwt are not included here.
To populate the resolver:
1) make sure that your operator has the account server URL pointing at your nats servers.
The url must start with: "nats://"
nsc edit operator --account-jwt-server-url nats://localhost:4222
2) push your accounts using: nsc push --all
The argument to push -u is optional if your account server url is set as described.
3) to prune accounts use: nsc push --prune
In order to enable prune you must set above allow_delete to true
Later changes to the system account take precedence over the system account jwt listed here.
resolver_preload: {
ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X: eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiI3T1NSQlRLUVNJN1FNTDRORTdRWDIyUzJYS0s2UUhNSDM1QzdaT0dHNDQyT0NPTjVQUEhBIiwiaWF0IjoxNzM3ODc2NDI1LCJpc3MiOiJPQlBBVEtDQ1ZaSE0yQ1NNRzVPR0RDNUQzSkVOSEdIRFJENExQN0FURjZCN05RN0xUQ1JSWE4zQyIsIm5hbWUiOiJTSUdOU1lTIiwic3ViIjoiQUJWVjdNQ0pTSUwzTlhPSUNUSFdGVkNYUkhISk1CTlRPUlRIMkxJVEpDNkNaQVNGQVZNVzJLNlgiLCJuYXRzIjp7ImxpbWl0cyI6eyJzdWJzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJpbXBvcnRzIjotMSwiZXhwb3J0cyI6LTEsIndpbGRjYXJkcyI6dHJ1ZSwiY29ubiI6LTEsImxlYWYiOi0xfSwic2lnbmluZ19rZXlzIjpbIkFCVlY3TUNKU0lMM05YT0lDVEhXRlZDWFJISEpNQk5UT1JUSDJMSVRKQzZDWkFTRkFWTVcySzZYIl0sImRlZmF1bHRfcGVybWlzc2lvbnMiOnsicHViIjp7fSwic3ViIjp7fX0sImF1dGhvcml6YXRpb24iOnt9LCJ0eXBlIjoiYWNjb3VudCIsInZlcnNpb24iOjJ9fQ.CRIjJzoFKwwkyeZpY-c5dlAGOTE32IttKziPM54lwt5hbxPd_Wn7K_U-NdIepWaOTgQeiq6CFg48V1wicwAwDA,
}
push account
/nsc # nsc push --account signacc -u nats://192.168.157.130
[ OK ] push to nats-server "nats://192.168.157.130" using system account "SIGNSYS":
[ OK ] push signacc to nats-server with nats account resolver:
[ OK ] pushed "signacc" to nats-server ubuntu22-1: jwt updated
[ OK ] pushed "signacc" to nats-server ubuntu22-2: jwt updated
[ OK ] pushed to a total of 2 nats-server
/
创建用户并push
/nsc # nsc add user signsysuser -K ./nkeys/keys/A/BV/ABVV7MCJSIL3NXOICTHWFVCXRHHJMBNTORTH2LITJC6CZASFAVMW2K6X.nk
[ OK ] generated and stored user key "UCRW5B3ZBOQQZVA4P4IP4ZL2NCVMFCFQP7V77UZDITNG7TISIEDF66TG"
[ OK ] generated user creds file /nsc/nkeys/creds/signoperator/SIGNSYS/signsysuser.creds
[ OK ] added user "signsysuser" to account "SIGNSYS"nsc push --account SIGNSYS -u nats://192.168.157.130
[ OK ] push to nats-server "nats://192.168.157.130" using system account "SIGNSYS":
[ OK ] push SIGNSYS to nats-server with nats account resolver:
[ OK ] pushed "SIGNSYS" to nats-server ubuntu22-1: jwt updated
[ OK ] pushed "SIGNSYS" to nats-server ubuntu22-2: jwt updated
[ OK ] pushed to a total of 2 nats-server/nsc # find . -name "*.creds"
./nkeys/creds/signoperator/signacc/signuser.creds
./nkeys/creds/signoperator/SIGNSYS/signsysuser.creds
/nsc # nats server list --server=192.168.157.130 --creds=./nkeys/creds/signoperator/SIGNSYS/signsysuser.creds
修改权限并push
nsc edit account --allow-sub ‘*.>’
nsc push --account signacc -u nats://192.168.157.130
相关文章:
nsc account 及user管理
从安全角度,推荐使用sign 模式进行nats account及用户管理 把权限放到account level 用户密码泄露可以通过快速更换用户可以设置过期日期,进行安全轮换 此外通过nsc 管理用户和权限,可以统一实现全局管控,包括subject管控&#…...
晶闸管主要参数分析与损耗计算
1. 主要参数 断态正向可重复峰值电压 :是晶闸管在不损坏的情况下能够承受的正向最大阻断电压。断态正向不可重复峰值电压 :是晶闸管只有一次可以超过的正向最大阻断电压,一旦晶闸管超过此值就会损坏,一般情况下 反向可重复峰值电压 :是指晶闸管在不损坏的情况下能够承受的…...
.net6 mvc 获取网站(服务器端)的IP地址和端口号
注意:是网站的,服务端的 IP地址, 不是当前用户电脑的、本地的IP地址 两个图: 分析: var AbsolutePath HttpContext.Request.Url.AbsolutePath;//"/Meeting/GetLastMeetingOL"var AbsoluteUri HttpContext.…...
坐井说天阔---DeepSeek-R1
前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…...
数据结构与算法——快速排序
快速排序 一、核心原理:分治策略 1、选一个基准元素, 2、两个指针往中间遍历,比基准值小的移到一边,比基准值大的移到另一边, 一轮遍历后,指针相交位置就是基准值应该放置的位置,同时数组也…...
Node.js技术原理分析系列——Node.js调试能力分析
本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应…...
在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
文章目录 1. 什么是 Corepack?2. 运行 corepack enable yarn 的作用3. 如何运行 corepack enable yarn4. 可能遇到的问题及解决方法问题 1:corepack 命令未找到问题 2:Yarn 未正确安装问题 3:权限问题 5. 验证 Yarn 是否启用成功6…...
蓝桥杯试题:计数问题
一、题目描述 试计算在区间 1 到 n的所有整数中,数字 x(0≤x≤9)x(0≤x≤9) 共出现了多少次? 例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 …...
数学建模与MATLAB实现:数据拟合全解析
引言 数据拟合是数学建模与实验分析中的核心任务,旨在通过数学模型逼近实际观测数据,揭示变量间的潜在规律。本文基于最小二乘法的理论框架,结合MATLAB代码实战,系统讲解线性拟合、非线性拟合的实现方法,并通过电阻温…...
C语言——排序(冒泡,选择,插入)
基本概念 排序是对数据进行处理的常见操作,即将数据按某字段规律排列。字段是数据节点的一个属性,比如学生信息中的学号、分数等,可针对这些字段进行排序。同时,排序算法有稳定性之分,若两个待排序字段一致的数据在排序…...
git如何下载指定版本
要使用Git下载指定版本,可以通过以下步骤进行操作: 1. 使用Git命令行下载指定版本: 1.1 首先,使用git clone命令克隆整个git库到本地。例如:git clone [库的URL]。这将下载最新的代码到本地。 1.2 进入克隆…...
数字电路-基础逻辑门实验
基础逻辑门是数字电路设计的核心元件,它们执行的是基本的逻辑运算。通过这些基本运算,可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门(AND)、或门(OR)、非门(NOT)、异或门…...
新数据结构(9)——Java异常体系
异常的种类 程序本身通常无法主动捕获并处理错误(Error),因为这些错误通常表示系统级的严重问题,但程序可以捕获并处理异常(Excrption),而Error则被视为一种程序无法或不应尝试恢复的异常类型。…...
每日十题八股-补充材料-2025年2月15日
1.TCP是如何保证消息的顺序和可靠的? 写得超级好的文章 首先肯定是三次握手和四次挥手保证里通讯双方建立了正确有效的连接。 其次是校验和、序列号,ACK消息应答机制还有重传机制,保证了消息顺序和可靠。 同时配合拥塞机制和流量控制机制&am…...
使用 Python 爬虫获取微店快递费用 item_fee API 接口数据
在电商运营中,快递费用是影响商家利润和用户体验的重要因素之一。微店作为国内知名的电商平台,提供了丰富的 API 接口供开发者使用,其中也包括查询商品快递费用的接口。通过调用微店的 item_fee 接口,开发者可以获取指定商品的快递…...
通过用户名和密码登录服务器有哪些方法
通过用户名和密码登录到服务器的方式取决于你使用的工具和协议。以下是几种常见的方法: 1. 使用 SSH 登录到 Linux 服务器 你可以通过 SSH(Secure Shell)使用用户名和密码连接到远程服务器。通常,你会使用 ssh 命令来进行连接。…...
sort快排
当然可以!让我们通过类似的详细步骤来解释 快速排序(Quick Sort) 的原理和实现,就像之前解释 a &= (a - 1) 的原理一样。 快速排序(Quick Sort)原理 快速排序是一种高效的排序算法,其核心思想是分而治之。它通过选择一个“基准值”(pivot),将数组分为两部分: …...
用xml配置spring, bean标签有哪些属性?
用xml配置spring, bean标签有哪些属性? 在Spring框架中,使用XML配置文件时,<bean>标签用于定义一个Bean。以下是一些常用的<bean>标签属性: 1. class 描述:指定Bean的类名。示例:<bean id"myBe…...
纪念日倒数日项目的实现-【纪念时刻-时光集】
纪念日/倒数日项目的实现## 一个练手的小项目,uniappnodemysql七牛云。 在如今快节奏的生活里,大家都忙忙碌碌,那些具有特殊意义的日子一不小心就容易被遗忘。今天,想给各位分享一个“纪念日”项目。 【纪念时刻-时光集】 一…...
无人机不等同轴旋翼架构设计应用探究
“结果显示,对于不等组合,用户应将较小的螺旋桨置于上游以提高能效,但若追求最大推力,则两个相等的螺旋桨更为理想。” 在近期的研究《不等同轴旋翼性能特性探究》中,Max Miles和Stephen D. Prior博士深入探讨了不同螺…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
