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

软件开发者如何保护自己的知识产权?

最近一个关于开源软件的知识产权纠纷的案例,非常有代表性,

其中涉及到的平台openwrt,一口君十几年前曾玩过,

通过这个案例,我们可以学习如何在今后工作中保护自己的知识产权

以及如何合理直接或者间接利用别人的“成果”而不侵权

一口君觉得非常有必要分享出来,让大家多了解知识产权的知识。

一、关于本案

1. 案子概述

通过下面鱼骨图,简单说一下这个案子的来龙去脉:

总结起来就是:

  • 苏州公司基于openwrt开发了网关产品,但是用一种方法绕开GPLv2限制,
  • 浙江通信公司通过苏州公司离职的两个核心员工抄袭了苏州公司的代码
  • 法院二审裁定,苏州公司上层功能软件构成GPLv2协议项下“独立且分离的”,裁定浙江通信公司侵犯苏州公司软件著作权


2. 本案的核心:

本案争辩的核心主要两点:

浙江某通信科技有限公司等被诉侵权人基于GPLv2协议提出的不侵权抗辩是否成立?

软件开发者自身存在一定程度上的违反GPLv2协议,是否就一定不享有新研发软件著作权?

要想整明白这个问题,我们必须要搞懂GPL、Openwrt、软件著作权是什么。

二、什么是GPL?

关于GPL,一口君下面文章,做了详细讲述,大家可以回顾一下。
《GPL前世今生》


GPL许可协议(GNU General Public License):只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费。

具有以下特点:

  • 复制自由:
    允许将软件复制到任何人的电脑中,并且不限制复制的数量。
  • 传播自由:
    允许以各种形式进行传播。
  • 收费传播:
    允许在各种媒介上出售该软件,但必需提前让买家知道这个软件是可以免费获得的,并解释收费的理由(一般来讲都是能够为用户提供某种服务,以技术服务的形式来收费)。
  • 修改自由:
    允许开发人员增加或删除软件的功能,但必须依然基于GPL许可协议授权。

总结成一句话,修改后必须以GPL授权开源发布。

只要在代码中加入这个名叫GPL的许可证,你就能保证软件的用户能够自由地运行、研究、分享和修改你的代码了。

而且,从你的软件衍生出的一切修改版本,都必须遵守这个许可协议。

一个有意思的地方是,拥有代码的人有权利用代码开发软件并盈利。

但是,在有人花钱买走软件之后,这个人可以随意把买到的软件分享给其他人,而不必担心侵权,甚至是被告上法庭——因为对于遵守开源协议的软件来说,压根不存在“盗版”的概念。

由此可见,开源协议大大地提高了软件使用者的权利。

除了GPL之外还有很多其他协议,见下图:

三、什么是openwrt?

1. openwrt基础知识

OpenWrt 是一个基于 Linux 的、针对嵌入式网络设备的开源操作系统。它主要用于替代各种家用路由器上的原始固件。

Linux我们知道,他是目前最著名的遵循GPL协议的开源软件。

所以openwrt也是开源的。

OpenWrt 具备一个好的路由器应该具备的所有有用功能:

DNS 服务器(dnsmasq),WiFi 接入点(AP)和客户端功能,用于调制解调器功能的 PPP 协议,还支持webserver

而且,与标准固件不同,这一切都是可以完全配置的。

正式因为openwrt集成了这么多和网络息息相关的功能模块,

所以基于openwrt,可以很方便的开发和迭代出新的网络产品,

我们市面见到的很多无线通信产品,比如:家用路由器、无线AP等都是基于openwrt开发的。


本案中的苏州网络公司,他们所开发的源码正是基于openwrt开发的。

官网地址:

https://openwrt.org/

2. openwrt当年被迫开源

网络产品设备商的扛把子Cisco/Linksys(思科) 在 2003 年发布了 WRT54G 这款无线路由器。

同年有人发现它的操作系统是基于Linux的,然而 Linux 是基于GPL许可证发布的,按照该许可证 Cisco 应该把 WRT54G 的源代码公开。

2003年3月,Cisco 迫于公众压力公开了 WRT54G 的源代码。

此后就有了一些基于 Cisco 源码的第三方路由器固件,OpenWrt 就是其中的一个。

那么既然openwrt是开源的,根据gpl协议规定,

苏州公司的软件产品《OfficeTen》应该也是开源的才对,

那么为什么最终法院裁定浙江通信公司侵权了呢?

我们只需要搞清楚,安卓如何绕开GPL,就明白了。

四、安卓如何规避GPL的?

Android内核也是Linux,那他是如何规避GPL的?

下图是一个完整的Android软件系统所用到的所有协议分布。

图片与Android关系最为密切的主要包括两个方面:驱动和glibc

1. glibc

glibc是linux上的主流的c运行时库,几乎每个linux程序都会简介的依赖c运行时库。

由于glibc是gpl授权的,因此如果采用glibc作为crt,按照前述问题的第二条,这些程序必须开源。

因此安卓采用bionic作为c运行时库替代glibc来规避gpl

2. 驱动

再说驱动,Android是基于Linux 内核开发的,Linux内核是GPL授权。

传统的驱动是要作为内核模块被加入到内核中的。

而内核模块属于Linux内核的衍生产品,需要遵守GPL协议开源发布。

Android是由开放手机联盟共同完成的,为了保护联盟中手机生产商的利益,驱动不能被完全开源。

因此安卓引入HAL,给linux内核开了个后门,增加了一些系统调用

HAL在内核的部分按照GPL的要求开源。

驱动开发者可以在用户态使用这些新增的系统调用完成驱动的开发。

从而在驱动方面规避了GPL。

3. 详细说明:

Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。

也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space), 其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。

为什么要这样安排呢?

把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?

从技术实现的角度来看,是可以的,然而从商业的角度来看,把对硬件的支持逻辑都放在内核空间,可能会损害厂家的利益。

我们知道,Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,而后者无须发布源代码。

如果把对硬件支持的所有代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了,在手机市场竞争激烈的今天,这对厂家来说,损害是非常大的。

因此,Android才会想到把对硬件的支持分成硬件抽象层和内核驱动层,

  • 内核驱动层只提供简单的访问硬件逻辑,
    例如读写硬件寄存器的通道
  • 硬件抽象层负责硬件对应寄存器的读写操作,这样就可以把商业秘密隐藏起来了。

也正是由于这个分层的原因,Android被踢出了Linux内核主线代码树中。

大家想想,Android放在内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器上去时,由于缺乏硬件抽象层的支持,硬件就完全不能用了,这也是为什么说Android是开放系统而不是开源系统的原因。

4. 苏州公司如何绕开GPLv2的?

具体到本案,苏州某网络科技有限公司研发的“OfficeTen”软件是以OpenWRT系统软件(OpenWRT系统软件是开源软件,适用的许可证协议为GPLv2协议)为基础经二次开发形成的衍生软件,

具体可分为两个部分:

  • 一部分是对OpenWRT系统软件所对应源代码进行增删、修改、调整而形成的涉案软件底层系统(以下简称底层系统软件),
  • 另一部分则是与涉案软件具体功能相对应的新增源代码形成的上层功能软件(以下简称上层功能软件)。

苏州某网络科技有限公司声称其在底层系统软件与上层功能软件之间采用套接字(socket)与命令行(command line)等技术手段建立了隔离层,
且二者之间通信内容不涉及内部数据结构信息,由此使得上层功能软件构成GPLv2协议项下“独立且分离的”的程序。

最高法院知产法庭在二审判决中认定,苏州某网络科技有限公司投资研发的名称为“OfficeTen”的网关产品系统软件,投入了大量成本,
涉案软件具有独创性且可以复制,构成著作权法项下的作品,依法应当获得保护。

他人未经苏州某网络科技有限公司许可,不得擅自复制、修改、发行涉案软件,否则将构成侵害涉案软件著作权的违法行为。

合议庭依在案证据认定关联网络公司在开发被诉软件过程中复制并修改了苏州某网络科技有限公司涉案软件的源代码;认定浙江某通信科技有限公司实施了销售被诉软件的行为。

认定该复制、修改、发行行为均未经苏州某网络科技有限公司许可,侵害了其享有的涉案软件著作权

五、软件著作权

本案中,法院最终保护的是苏州公司的软件著作权,所以什么是软件著作权?

1. 什么是软件著作权?

软件著作权是指由权利人根据法律规定享有的,他人不可侵犯的民事权利。

软件著作权保护是对计算机程序文档两部分的保护。

软件著作权保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念。

《计算机软件保护条例》

第二条
本条例所称计算机软件(以下简称软件),是指计算机程序及其有关文档。
第三条
本条例下列用语的含义:
(一)计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。
(二)文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。

2. 在我国软件著作权登记有什么意义?

  • 1、享受国家优惠政策:
    办理软件著作权登记的企业可享受国家各种优惠政策,包括投融资、税收、出口政策等,具体可参见国务院18号文件;

  • 2、“双软认定”的前提:
    软件著作权登记是企业办理“双软认定”(软件产品登记、软件企业认定)的必要前提。信息产业部的《软件产品登记管理办法》的第七条第四款规定,软件登记时要提交知识产权证明。此知识产权证明即指《软件著作权登记证书》;

  • 3、可作为技术出资入股:
    《关于以高新技术成果出资入股若干问题的规定》规定:“计算机软件可以作为高新技术出资入股,而且作价的比例可以突破公司法20%的限制达到35%。”甚至有的地方政府规定“可以100%的软件技术作为出资入股”,但都要求必须首先办理软件著作权登记;

  • 4、申请科技成果的依据:科学技术部关于印发《科技成果登记办法》的通知第八条规定:“办理科技成果登记应当提交《科技成果登记表》及下列材料:

()应用技术成果:相关的评价证明(鉴定证书或者鉴定报告、科技计划项目验收报告、行业准入证明、新产品证书等)和研制报告;()知识产权证明(专利证书、植物品种权证书、软件登记证书等)和用户证明”。这里的软件登记证书指的是软件著作权登记证书和软件产品登记证书。其他部委也有类似规定;
  • 5、企业破产后的有形收益:
    软件著作权作为企业的“无形资产”,不会随企业的破产而消失。企业破产后,无形资产的生命力和价值仍然存在,可以在转让和拍卖中获取有形资金;

  • 6、予以重点保护:
    计算机软件著作权登记是我国著作权法规所规定的对计算机软件著作权保护的一项行政辅助管理措施,《计算机软件著作权登记办法》第二条和国务院18号文件均有规定,国家著作权行政管理部门鼓励著作权人进行计算机软件著作权登记,并对已登记的软件给予重点保护。

六、对科技企业的警示

  1. 有知识产权保护意识

作为企业负责人或者软件开发管理者,一定要有知识产权保护意识,

开发的软件要及时申请软件著作权,

对于一些有创新的产品还要及时申请专利,

  1. license授权

软件最大的问题就是复制性,

通过license授权可以在一定程度上保护自己的软件产品。

详情大家可以参考下面文章:

《软件License授权原理》

  1. 对于技术人员的管理

技术人员的是企业的核心竞争力,

企业要想做走的更长远、提升产品竞争力,

主要依靠的就是研发,

平时要注重技术人的培训和提升,

保持研发团队人员的稳定,

尤其是核心技术人员,

核心技术人员的流失对企业会有致命的伤害,

一旦加入竞争对手的公司,

后果不堪设想。

  1. 关键岗位签署竞业协议

对于一些非常重要得岗位,

要与员工签署竞业协议,

最大程度上保护自己。

相关文章:

软件开发者如何保护自己的知识产权?

最近一个关于开源软件的知识产权纠纷的案例,非常有代表性, 其中涉及到的平台openwrt,一口君十几年前曾玩过, 通过这个案例,我们可以学习如何在今后工作中保护自己的知识产权, 以及如何合理直接或者间接利…...

Promise魔鬼面试题

文章目录 题目解析难点分析分析输出step1step2step3step4step5step6 参考/致谢:渡一袁老师 题目 Promise.resolve().then(() > {console.log(0);return Promise.resolve(4);}).then((res) > {console.log(res);});Promise.resolve().then(() > {console.l…...

Vue3+Nuxt3 从0到1搭建官网项目(SEO搜索、中英文切换、图片懒加载)

Vue2Nuxt2 从 0 到1 搭建官网~ Vue3Nuxt3 从0到1搭建官网项目 安装 Nuxt3,创建项目初始化的 package.json项目结构初始化项目pages 文件下创建index.vue引入sass修改 app.vue 文件查看效果 配置公共的css、metaassets下的cssreset.scss 重置文件common.scss 配置nux…...

面试经典150题——三数之和

面试经典150题 day29 题目来源我的题解方法一 暴力解法 超时方法二 扩展两数之和(双指针)方法三 扩展为通用的n数之和 题目来源 力扣每日一题;题序:15 我的题解 方法一 暴力解法 超时 进行三重循环遍历,判断和是否为…...

go动态创建/增加channel并处理数据

背景描述 有一个需求,大概可以描述为:有多个websocket连接,因此消息会并发地发送过来,这些消息中有一个标志可以表明是哪个连接发来的消息,但只有收到消息后才能建立channel或写入已有channel,在收消息前无…...

asp.net成绩查询系统

说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net成绩查询系统 学生功能有查看成绩和修改账号密码等 后台管理员可以进行用户管理 管理员添加管理员查询注…...

Express路由

什么是路由 官方定义&#xff1a;路由确定了应用程序如何响应客户端对特定端点的请求。 路由的使用 一个路由的组成有 请求方法、路径 和 回调函数 组成。 Express中提供了一些列方法&#xff0c;可以很方便的使用路由&#xff0c;使用格式如下&#xff1a; app.<metho…...

在做题中学习(53): 寻找旋转数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;O(logn)->很可能就是二分查找 思路&#xff1a;再看看题目要求&#xff0c;可以画出旋转之后数组中元素的大小关系&#xff1a; 首先&#xff0c;数组是具有二段性的(适配二分查…...

C#语言进阶(三) 元组

总目录 C# 语法总目录 元组目录 元组1. 元组元素命名2. 元组的解构3. 元组的比较 元组 元组(tuple)是一组存储值的便捷方式。 元组的目的主要是&#xff0c;不使用out参数而从方法中返回多个值。(匿名类型无法做这个操作)元组能做匿名类型所有操作。 元组是值类型&#xff0…...

实用的Chrome 浏览器命令

Google Chrome 浏览器提供了许多快捷命令和实用功能&#xff0c;可以帮助用户提高效率和改善浏览体验。这里列举了一些非常实用的Chrome浏览器命令&#xff1a; 1. **CtrlT** / **CmdT** - 打开一个新的标签页。 2. **CtrlShiftT** / **CmdShiftT** - 重新打开最后关闭的标签页…...

IDEA远程连接docker服务,windows版docker desktop

1.windows上安装docker desktop docker desktop下载地址&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 有的windows系统不支持安装docker desktop 安装完之后我们可以直接打开&#xff0c;可以选择不登录使用 我们用IDEA连接到docker …...

Rust 和 Go 哪个更好?

在讨论 Rust 与 Go 两种编程语言哪种更优秀时&#xff0c;我们将探讨它们在性能、简易性、安全性、功能、规模和并发处理等方面的比较。同时&#xff0c;我们看看它们有什么共同点和根本的差异。现在就来看看这个友好而公平的对比。 Rust 和 Go 都是优秀的选择 首先&#xff…...

【免费Java系列】大家好 ,今天是学习面向对象高级的第八天点赞收藏关注,持续更新作品 !

这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io day08-Map集合、Stream流、File类 一、Map集合 同学们&#xff0c;在前面几节课我们已经学习了Map集合的常用方法&#xff0c;以及遍历方式。 下面我们要学习的是Map接口下面的是三个实现类H…...

RPC 失败。curl 16 Error in the HTTP2 framing layer

报错&#xff1a; (base) hh-virtual-machine:~/work$ git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git 正克隆到 RuoYi-Vue3... error: RPC 失败。curl 16 Error in the HTTP2 framing layer fatal: 在引用列表之后应该有一个 flush 包这个错误通常是由于 Git 在…...

(图论)最短路问题合集(包含C,C++,Java,Python,Go)

不存在负权边&#xff1a; 1.朴素dijkstra算法 原题&#xff1a; 思路&#xff1a;&#xff08;依然是贪心的思想&#xff09; 1.初始化距离&#xff1a;dis[1]0&#xff0c;dis[i]INF&#xff08;正无穷&#xff09; 2.循环n次&#xff1a; 找到当前不在s中的dis最小的点&…...

电脑文件批量重命名不求人:快速操作,高效技巧让你轻松搞定

在数字化时代&#xff0c;电脑文件的管理与整理显得尤为重要。当面对大量需要重命名的文件时&#xff0c;一个个手动修改不仅耗时&#xff0c;还容易出错。那么&#xff0c;有没有一种方法可以快速、高效地完成这一任务呢&#xff1f;答案是肯定的&#xff0c;下面就来介绍几种…...

基于springboot的网上点餐系统源码数据库

基于springboot的网上点餐系统源码数据库 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上点餐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上点餐系统…...

mysql cluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…...

uniapp的app端软件更新弹框

1&#xff1a;使用html PLUS实现&#xff1a;地址HTML5 API Reference (html5plus.org)&#xff0c;效果图 2&#xff1a;在app.vue的onLaunch生命周期中&#xff0c;代码如下&#xff1a; onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…...

win11 Terminal 部分窗口美化

需求及分析&#xff1a;因为在 cmd、anaconda prompt 窗口中输入命令较多&#xff0c;而命令输入行和输出结果都是同一个颜色&#xff0c;不易阅读&#xff0c;故将需求定性为「美化窗口」。 美化结束后&#xff0c;我在想是否能不安装任何软件&#xff0c;简单地通过调整主题颜…...

开源go实现的iot物联网新基建平台

软件介绍 Magistrala IoT平台是由Abstract Machines公司开发的创新基础设施解决方案&#xff0c;旨在帮助组织和开发者构建安全、可扩展和创新的物联网应用程序。曾经被称为Mainflux的平台&#xff0c;现在已经开源&#xff0c;并在国际物联网领域受到广泛关注。 功能描述 多协…...

24深圳杯ABCD成品论文47页+各小问代码+图表

A题多个火箭残骸的准确定位&#xff1a; A题已经更新完22页完整版论文&#xff0b;高清无水印照片&#xff0b;Python&#xff08;MATLAB&#xff09;代码简单麦麦https://www.jdmm.cc/file/2710544/ 问题1&#xff1a;单个残骸的音爆位置确定 建模思路&#xff1a; 1. 声波传…...

doris经典bug

在部署完登录web页面查看的时候会发现只有一个节点可以读取信息剩余的节点什么也没读取到 在发现问题后&#xff0c;我们去对应的节点去看log日志&#xff0c;发现它自己绑定到前端的地址上了 现在我们已经发现问题了&#xff0c;以下就开始解决问题 重置doris 首先对be进行操…...

贪心算法应用例题

最优装载问题 #include <stdio.h> #include <algorithm>//排序int main() {int data[] { 8,20,5,80,3,420,14,330,70 };//物体重量int max 500;//船容最大总重量int count sizeof(data) / sizeof(data[0]);//物体数量std::sort(data, data count);//排序,排完数…...

亚信科技精彩亮相2024中国移动算力网络大会,数智创新共筑“新质生产力”

4月28至29日&#xff0c;江苏省人民政府指导、中国移动通信集团有限公司主办的2024中国移动算力网络大会在苏州举办。大会以“算力网络点亮AI时代”为主题&#xff0c;旨在凝聚生态伙伴合力&#xff0c;共同探索算力网络、云计算等数智能力空间&#xff0c;共促我国算网产业和数…...

图像处理中的颜色空间转换

在图像处理中&#xff0c;颜色空间转换是指将图像从一种颜色表示方式转换为另一种颜色表示方式。常见的颜色空间转换包括RGB到HSV、RGB到灰度、RGB到CMYK等。 RGB到HSV转换&#xff1a; RGB颜色空间由红色&#xff08;R&#xff09;、绿色&#xff08;G&#xff09;和蓝色&…...

网络安全之静态路由

以下是一个静态路由的拓扑图 Aping通B&#xff0c;C可以ping通D。 路由器转发数据需要路由表&#xff0c;但仍可以Aping通B&#xff0c;C可以ping通D&#xff0c;是因为产生了直连路由&#xff1a;产生的条件有两个&#xff0c;接口有IP&#xff0c;接口双up(物理up&#xff…...

Golang | Leetcode Golang题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])i : sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] > target })return i < m*n && matrix[i/n][i%n] target }...

2023黑马头条.微服务项目.跟学笔记(五)

2023黑马头条.微服务项目.跟学笔记 五 延迟任务精准发布文章 1.文章定时发布2.延迟任务概述 2.1 什么是延迟任务2.2 技术对比 2.2.1 DelayQueue2.2.2 RabbitMQ实现延迟任务2.2.3 redis实现3.redis实现延迟任务4.延迟任务服务实现 4.1 搭建heima-leadnews-schedule模块4.2 数据库…...

C语言 | Leetcode C语言题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; void swap(int *a, int *b) {int t *a;*a *b, *b t; }void sortColors(int *nums, int numsSize) {int p0 0, p2 numsSize - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {swap(&nums[i], &num…...

淘宝扭蛋机小程序开发:掌上惊喜,转出你的幸运宝藏

一、全新玩法&#xff0c;尽在掌中 淘宝扭蛋机小程序&#xff0c;将传统的扭蛋乐趣与数字时代完美结合&#xff0c;为您带来全新的购物体验。在这个小小的平台上&#xff0c;您可以用手指轻松操控&#xff0c;探索无尽的宝藏世界&#xff0c;转出专属于您的幸运好物。 二、海…...

Oracle索引组织表与大对象平滑迁移至OceanBase的实施方案

作者简介&#xff1a;严军(花名吉远)&#xff0c;十年以上专注于数据库存储领域&#xff0c;精通Oracle、Mysql、OceanBase&#xff0c;对大数据、分布式、高并发、高性能、高可用有丰富的经验。主导过蚂蚁集团核心系统数据库升级&#xff0c;数据库LDC单元化多活项目&#xff…...

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…...

无人机运营合格证:民用无人机驾驶航空器运营合格证书

无人机运营合格证是指经国家相关部门审核通过并颁发给相应无人驾驶航空器运营机构的一种资质证明。获得该证书的机构具备相关的技术和管理能力&#xff0c;能够安全、合规地运营无人驾驶航空器。 无人机运营合格证的申请流程一般包括报名、培训学习、考试准备、考试报名、考试…...

【编码利器 —— BaiduComate】

目录 1. 智能编码助手介绍 2. 场景需求 3. 功能体验 3.1指令功能 3.2插件用法 3.3知识用法 3.4自定义配置 4. 试用感受 5. AI编程应用 6.总结 智能编码助手是当下人工智能技术在编程领域的一项重要应用。Baidu Comate智能编码助手作为一款具有强大功能和智能特性的工…...

python 关键字(in)

9、in 在Python中&#xff0c;in关键字是一个强大的工具&#xff0c;用于检查一个元素是否存在于某个序列&#xff08;如列表、元组、字符串等&#xff09;或集合&#xff08;如集合、字典的键&#xff09;中。 基础小白知识&#xff1a;in的基本用法 1.1 在序列中检查元素 …...

【Node.js从基础到高级运用】二十八、Node.js 内存管理浅析

Node.js 作为一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;其性能和效率在很大程度上取决于内存管理的优劣。 1. Node.js 内存结构 在深入了解内存管理之前&#xff0c;我们需要先了解 Node.js 的内存结构。Node.js 的内存可以大致分为以下几个部分&#xff1a;…...

AES加密解密

加密 java.util.Base64; javax.crypto.Cipher; javax.crypto.spec.SecretKeySpec; // 入参&#xff1a;data&#xff08;String&#xff09;、seed&#xff08;String&#xff09; Cipher cipher Cipher.getInstance("AES/ECB/PKCS5Padding"); SecretKeySpec secre…...

通过红黑树封装 map 和 set 容器(1):红黑树的迭代器

一、红黑树的迭代器 红黑树的遍历默认为中序遍历 —— key 从小到大&#xff0c;因此 begin() 应该获取到红黑树的最左节点 —— 最小&#xff0c;end() 获取到红黑树最右节点的下一个位置&#xff0c; operator() 也应保证红黑树的遍历为中序的状态。 首先对红黑树节点进行改造…...

mysqlbinlog恢复delete的数据

实验目的 delete数据后&#xff0c;用mysqlbinlog进行数据恢复 实验过程 原表 mysql> select * from mytest; ----------------- | id | name | score | ----------------- | 1 | xw01 | 90 | | 2 | xw02 | 92 | | 3 | xw03 | 93 | | 4 | xw04 | 94 | |…...

传递给组件

React 组件使用 props 相互通信。每个父组件都可以通过为其子组件提供道具来将一些信息传递给子组件。Props 可能会让您想起 HTML 属性&#xff0c;但您可以通过它们传递任何 JavaScript 值&#xff0c;包括对象、数组和函数。 Props 是传递给 JSX 标签的信息。例如&#xff0…...

鸿蒙通用组件弹窗简介

鸿蒙通用组件弹窗简介 弹窗----Toast引入ohos.promptAction模块通过点击按钮&#xff0c;模拟弹窗 警告对话框----AlertDialog列表弹窗----ActionSheet选择器弹窗自定义弹窗使用CustomDialog声明一个自定义弹窗在需要使用的地方声明自定义弹窗&#xff0c;完整代码 弹窗----Toa…...

[译文] 恶意代码分析:1.您记事本中的内容是什么?受感染的文本编辑器notepad++

这是作者新开的一个专栏&#xff0c;主要翻译国外知名安全厂商的技术报告和安全技术&#xff0c;了解它们的前沿技术&#xff0c;学习它们威胁溯源和恶意代码分析的方法&#xff0c;希望对您有所帮助。当然&#xff0c;由于作者英语有限&#xff0c;会借助LLM进行校验和润色&am…...

Spring Boot3.x集成Disruptor4.0

Disruptor介绍 Disruptor是一个高性能内存队列&#xff0c;研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&#xff0c;获得了业界关注。2011年&…...

GoEdge自建CDN工具

GoEdge是一款管理分布式CDN边缘节点的开源工具软件&#xff0c;可以让用户轻松地、低成本地创建CDN/WAF等应用。同时提供免费版本和商业版本&#xff0c;本文基本免费版本安装测试。 GoEdgep安装涉及三部分&#xff1a; 边缘节点 - 接收和响应用户请求的终端节点 管理员系统 - …...

牛客储物点的距离

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 一个数轴&#xff0c;每一个储物点会有一些东西&#xff0c;同时它们之间存在距离。 每次给个区间[l,r],查询把这个区间内所有储物点的东西运到另外一个储物点的代价是多少&#xff1…...

【C++历练之路】红黑树——map与set的封装实现

W...Y的个人主页&#x1f495; gitee代码仓库分享&#x1f60a; 前言&#xff1a;上篇博客中&#xff0c;我们为了使二叉搜索树不会出现”一边倒“的情况&#xff0c;使用了AVL树对搜索树进行了处理&#xff0c;从而解决了数据在有序或者接近有序时出现的情况。但是AVL树还会…...

RDB快照是怎么实现的?

RDB快照是怎么实现的&#xff1f; 前言快照怎么用&#xff1f;执行快照时&#xff0c;数据能被修改吗&#xff1f;RDB 和 AOF 合体 前言 虽说 Redis 是内存数据库&#xff0c;但是它为数据的持久化提供了两个技术。 分别是「 AOF 日志和 RDB 快照」。 这两种技术都会用各用一…...

智能体可靠性的革命性提升,揭秘知识工程领域的参考架构新篇章

引言&#xff1a;知识工程的演变与重要性 知识工程&#xff08;Knowledge Engineering&#xff0c;KE&#xff09;是一个涉及激发、捕获、概念化和形式化知识以用于信息系统的过程。自计算机科学和人工智能&#xff08;AI&#xff09;历史以来&#xff0c;知识工程的工作流程因…...

Shell 初始化配置指北 | Ubuntu

唠唠闲话 概要&#xff1a;在不同的Shell环境&#xff08;如Bash和Zsh&#xff09;中设置环境变量、设置初始脚本&#xff0c;以及如何根据不同的使用场景&#xff08;用户级或系统级&#xff09;管理和设置初始运行命令。 p.s. 如果你很熟悉 Linux&#xff0c;推荐跳到最后一…...

软考--试题六--命令模式(Command)

命令模式(Command) 意图 将一个请求封装为一个对象&#xff0c;从而使得可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 结构 适用性 1、抽象出待执行的动作以参数化某对象 2、在不同的时刻指定、排列和执行请求…...

Spring MVC(响应 + 状态码)

文章目录 一、RestController VS Controller VS ResponseBody1.1 关于元注解1.2 Controller1.3 ResponseBody1.4 RestController 二、响应2.1 Spring 对于响应的设置2.2 返回静态页面2.3 返回HTML代码片段2.4 返回JSON2.5 设置HTTP状态码2.6 设置响应部分的Header 二、状态码2.…...

whisper模型微调

Whisper模型详解及其微调过程 一、引言 在人工智能领域中&#xff0c;自动语音识别&#xff08;ASR&#xff09;技术一直是一个热门且挑战性的研究方向。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;ASR技术取得了显著的进步。其中&#xff0c;OpenAI的Whisper…...

前端面试题(三)答案版

面试形式&#xff1a;线上面试&#xff08;不露脸&#xff1a;腾讯会议&#xff09;&#xff1a;时长30分钟 面试评价&#xff1a;面试官给的题目宽泛&#xff0c;面试者灵活作答 面试官&#xff1a;技术人员 面试官的提问大纲&#xff1a;我们自身简历本公司招聘要求 面试…...

【手势识别-UILongPressGestureRecognizer长按 Objective-C语言】

一、我们来说这个长按啊, 1.长按这个手势,也是,步骤都是一样的,首先,也是这三大步啊, 1)创建手势对象 2)对某一个view添加手势 3)实现手势的方法 首先,也是三大步, 1)创建手势对象:首先,你要告诉我,你要使用哪一个手势,我要使用一个叫做UILongPressGesture…...

农林科学SCI期刊,IF=6+,影响力高,对国人非常友好!

一、期刊名称 Crop Journal 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;农林科学 影响因子&#xff1a;6.6 中科院分区&#xff1a;1区 出版方式&#xff1a;开放出版 版面费&#xff1a;$900 三、期刊征稿范围 《作物杂志》是一份双月刊、国际、同…...