【Airplay_BCT】Bonjour conformance tests苹果IOT

news2024/11/29 12:46:54

从Airplay开始,接触到BCT,这是什么?被迫从安卓变成ios用户和开发。。。开始我的学习之旅,记录成长过程,不定时更新

Bonjour

在这里插入图片描述

下面是苹果官网关于bonjour的解释

Bonjour, also known as zero-configuration networking, enables automatic discovery of devices and services on a local network using industry standard IP protocols. Bonjour makes it easy to discover, publish, and resolve network services with a sophisticated, easy-to-use programming interface that is accessible from Cocoa, Ruby, Python, and other languages.

Bonjour,也称为零配置网络,使用行业标准IP协议实现本地网络上设备和服务的自动发现。Bonjour通过一个复杂、易于使用的编程界面,可以从Cocoa、Ruby、Python和其他语言访问,从而轻松发现、发布和解析网络服务。


大概就是说:bonjour是苹果的一个连接网络,从一开始的网络连接到现在的专用bonjour连接,实现IOT物联网的

Apple 的一些产品,比如 homtkit、smart home 最初是通过无线有线网络连接的,而Bonjour 是他们之间的连接协议,只有满足Bonjour 的条件才能正常的通过网络进行控制操作。

Bonjour 作为一种协议,包含了现在大火的 IOT 概念。
Apply的每一款产品只有通过了BCT的测试验证后,才可以证明每个产品设备间可以自由连接和控制。

诸如手机可以操控TV、灯、音响之类,他们背后的原理都是通过Bonjour 来控制的。
如果开发Apply的产品都是需要涉及到BCT验证的。


在这里简单介绍下homtkit、smart home

HomeKit

在这里插入图片描述

Homekit 是苹果公司出品的智能家居系统,设置好后能在任何地方设置和控制家里所有智能家居设备。现在很多家电都加入了智能功能,但经常一个家电就是一个 app,例如空调有自己的 app、指纹锁有自己的 app、各种灯也有自己的 app。
在这里插入图片描述

而成套的智能家居方案就解决了这个问题,以 HomeKit 来说,在购买决策阶段就可以在支持 Homekit 的产品里挑选,例如 LG 的电视、米家的指纹锁、Aqara 的智能开关,这样以后不用打开乱七八糟的 app,直接点亮 iPhone 下拉菜单栏就能操控常用设备了,或者直接喊一句 Siri 来操控,特别方便。

其它的苹果产品如 Apple Watch、Apple Tv 和 Homepods 也都可以控制家里的智能设备,所以如果你有若干苹果产品,选择 Homekit 是不错的选择。
在这里插入图片描述


Smart Home

在这里插入图片描述

下面是来自Investopedia的解释

A smart home refers to a convenient home setup where appliances and devices can be automatically controlled remotely from anywhere with an internet connection using a mobile or other networked device. Devices in a smart home are interconnected through the internet, allowing the user to control functions such as security access to the home, temperature, lighting, and a home theater remotely.

智能家居是指一种方便的家庭设置,其中可以使用移动或其他联网设备通过互联网连接从任何地方远程自动控制电器和设备。智能家居中的设备通过互联网相互连接,允许用户远程控制家庭安全访问、温度、照明和家庭影院等功能。

smart home的功能和homekit类似,小伙伴们感兴趣可以自己自行深入学习,这里仅做介绍


Bonjour零配置网络架构支持在局域网或广域网上发布和发现基于TCP/IP的服务。本文档从较高的层次描述了Bonjour架构,并简要描述了可用的Bonjour API。

在这里插入图片描述
Tips:有关API级别的更详细内容(包括代码片段),请阅读《DNS服务发现编程指南》或《NSNetServices和CFNetServices编程指南》。

Bonjour是苹果实现的一套零配置网络协议。Bonjour旨在让用户更容易进行网络配置。

例如,Bonjour允许您将打印机连接到网络,而无需为其分配特定的IP地址或手动将该地址输入每台计算机。通过零配置网络,附近的计算机可以发现其存在并自动确定打印机的IP地址。如果该地址是一个动态分配的地址,并且发生了变化,那么他们可以在将来自动发现新地址。

应用程序还可以利用Bonjour自动检测网络上应用程序(或其他服务)的其他实例。例如,两个运行iOS照片共享应用程序的用户可以通过蓝牙个人区域网络共享照片,而无需在任一设备上手动配置IP地址。

Bonjour提供高效的服务发现

Bonjour协议支持使用多播DNS(mDNS)以及在需要时链接本地寻址,以高效和稳健的方式发布和发现服务。


关于Bonjour的更多概念link

Bonjour概念

Bonjour是苹果提交给IETF的一套IP零配置网络协议,作为正在进行的标准创建过程的一部分。本节介绍Bonjour解决的问题及其解决方法。

为什么是Bonjour?

在过去的二十年中,计算机逐渐从AppleTalk、IPX和NetBIOS等特定于平台的协议过渡到互联网协议(IP)。大多数计算机和其他网络设备都使用TCP/IP进行通信。然而,在这一过渡过程中,一部分功能丧失了将设备添加到本地网络,然后从计算机和网络上的其他设备连接到这些设备的能力,所有这些都几乎没有配置。

为了使IP正常工作,每个设备都需要一个唯一的地址,无论是静态分配还是由DHCP服务器动态分配。动态分配的地址可以更改,因此如果没有Bonjour,打印机和其他设备必须手动配置静态地址,以便网络上的计算机可以访问它们。然后,网络管理员必须配置DNS服务器,以便计算机用户不必通过IP地址连接到打印机。因此,看似次要的任务需要大量的配置。因为不适合传统网络管理员角色的人通常会建立网络家庭,通过共享路由器将他们的笔记本电脑连接到互联网,例如,这种配置级别并不实用。

即使在IT专业人员运行的托管网络中,也没有必要为打印机等设备手动配置。人们希望能够插入打印机,将两台笔记本电脑连接在一起,或者在本地网络上查找文件服务器或游戏服务器,而不必浪费时间尝试正确配置。

为了支持这一点,人们需要一种简单可靠的方式来配置和浏览IP网络上的服务。他们希望发现可用的服务并从列表中选择一个,而不必事先知道每个服务的名称或IP地址。IP拥有这种能力符合每个人的利益。这正是Bonjour提供的功能。


示例:零配置

零配置IP网络具有很大的潜力。考虑一下打印的日常任务。在计算机或iOS设备上配置打印机后,只需选择应用程序的“打印”命令即可。

把你的笔记本电脑带到客户的公司或邻居家,试着打印一些东西。如果他们有一台支持Bonjour协议的打印机,打印就像在本地网络上一样简单。要打印,请将笔记本电脑连接到客户端的Wi-Fi接入点,然后启动笔记本电脑。或者启动你的笔记本电脑,它会立即找到邻居的家庭无线网络。无论哪种方式,您的笔记本电脑都会自动发现任何可用的打印机。打开文档,选择“打印”命令,“打印”对话框中将显示所有可用的打印机。选择打印机,单击“打印”,文档将打印。

或者说你想和朋友玩网络游戏。你打开游戏,你朋友的游戏副本立即在网络上看到你的副本。或者,如果你在两台电脑上有一个音乐共享应用程序,这些程序本身可以发现彼此并立即交换歌曲列表。类似地,如果您有共享文件夹或打开了个人Web共享,您的共享文件和网页将立即可供其他人使用。
在这里插入图片描述

该场景如图1-1所示。在步骤1中,打开邻居家中的笔记本电脑,笔记本电脑要么从路由器中的DHCP服务器获取地址,要么在没有DHCP服务器的情况下为自己分配一个可用的本地地址。在步骤2中,将查询网络中的可用打印机,以便在打开“打印”对话框时,列出邻居的打印机。最后,在步骤3中,您打开计算机上的音乐共享,邻居的计算机会看到并连接。

这些只是可以从零配置IP网络中受益的现有应用程序中的一小部分。零配置IP网络具有增强移动游戏、家庭网络、分布式计算和许多其他网络应用的潜力。此外,零配置IP网络为一类全新的支持IP的数字设备打开了大门。


什么是Bonjour?

Bonjour是苹果提出的IP零配置网络方案。Bonjour来自ZEROCONF工作组的工作,该工作组是互联网工程任务组(IETF)的一部分。ZEROCONF工作组对IP零配置网络的要求和建议解决方案主要涵盖三个方面:

  1. 寻址(为主机分配IP地址)
  2. 命名(使用名称来指代主机,而不是IP地址)
  3. 服务发现(自动查找网络上的服务)

Bonjour为所有这三个领域提供了零配置解决方案,如下四节所述。

Bonjour允许服务提供商、硬件制造商和应用程序程序员支持单一网络协议IP,同时在易用性方面开辟新天地。

网络用户不再需要分配IP地址、分配主机名或甚至键入名称来访问网络上的服务。用户只需询问可用的网络服务,然后从列表中选择。

在许多方面,这种浏览对应用程序来说甚至比对用户来说更强大。应用程序可以自动检测他们需要的服务或他们可以与之交互的其他应用程序,允许自动连接、通信和数据交换,而无需用户干预。


寻址

寻址问题通过自分配链路本地寻址来解决。链路本地寻址使用为本地网络保留的一系列地址,通常是小型LAN或单个LAN段。为此,IPv6规范将自分配链路本地寻址作为协议的一部分。零配置网络的主要解决挑战是将此功能升级为IPv4

注意:IPv6链路本地寻址比IPv4链路本地寻址更简单,因此更可靠。因此,您的应用程序支持IPv6非常重要。

IPv4中,自分配寻址通过在链路本地范围中选择一个随机IP地址并对其进行测试来实现。如果该地址未被使用,它将成为您的本地地址。如果它已经在使用,计算机或其他设备会随机选择另一个地址并重试。

注意:如果一个主机向另一个主机发送数据包时,整个链路层有效负载(物理网络中表示的数据包内容,如以太网)未经修改就到达,则两个主机被视为位于同一本地链路上。实际上,在以太网网络上,这意味着没有IP路由器触及两个主机之间的数据包。

大多数主要操作系统都支持IPv4和IPv6中的链路本地寻址。硬件制造商应在其设备上实现链路本地寻址,以获得Bonjour的全部好处。

计算机或iOS设备上支持链接本地寻址的任何用户或服务都会自动受益于此功能。当您的主机遇到本地网络时,它会找到一个未使用的本地地址并采用它。无需执行任何操作


命名

所提出的本地网络上的名称到地址转换解决方案使用多播DNS(mDNS),其中DNS格式查询使用IP多播在本地网络上发送。因为这些DNS查询被发送到多播地址,所以不需要具有全局知识的单个DNS服务器来回答这些查询。当每个服务或设备看到对其自身名称的查询时,它可以提供自己的DNS功能,并提供具有自己地址的DNS响应。

Bonjour走得更远。它包括一个响应器,用于处理主机或iOS设备上任何网络服务的mDNS查询。这使您的应用程序无需解释和响应mDNS消息。通过注册您的服务,Bonjour mDNSResponder守护程序会自动通告您的服务可用性,以便对您的姓名的任何查询都会自动指向正确的IP地址和端口号。

注意:注册是使用Bonjour API之一执行的。此功能仅适用于在主机或iOS设备上运行的服务。在其他设备(如打印机)上运行的服务需要实现一个简单的mDNSResponder守护进程,该守护进程处理对该设备提供的服务的查询。

Bonjour还为NAT端口映射协议(NAT-PMP)提供内置支持。如果上游路由器支持此协议,OS X和iOS应用程序可以创建和销毁端口映射,以允许防火墙另一侧的主机连接到提供的服务。(NAT端口映射将在“网络概述”中的“防火墙和网络地址转换”中进一步描述。)

要使名称到地址的转换正常工作,必须在本地网络上使用唯一的名称。与传统的DNS主机名不同,本地名称仅在本地网络或LAN段上有意义。您可以像自行分配本地地址一样自行分配本地名称,选择一个;如果它还没有使用,需要做下面的两步:

1.硬件制造商通过让他们的设备发送一个mDNS查询来确定他们选择的名称是否已经在使用,并查找任何响应。如果有响应,设备应选择另一个名称。没有用户界面的设备会将一个递增的更大数字附加到默认名称,直到该名称唯一。例如,如果默认名称为XYZ-LaserPrinter.local的打印机连接到已安装其他两台相同打印机的本地网络,则会测试XYZ-LaserPrinter.local、XYZ-LaserPrinter-2.local和XYZ-LaserPrint er-3.local(未使用并成为其名称)。

2.软件服务在Bonjour注册时提供名称。如果提供的名称已在使用中,Bonjour将默认自动为您重命名服务。

在OS X中,用户可以通过“系统首选项”的“共享”窗格中的“本地主机名”设置为其计算机设置主机名。(在iOS中,主机名是自动生成的,不可配置。)在使用Web浏览器、命令行工具等常规DNS主机名的任何地方都可以使用此主机名。若要向系统指示名称是本地主机名,请附加一个点(.)和本地。主机名;Steven.local.是本地主机名的一个示例。

重要提示:第一个点用作分隔符。为了防止应用程序使用搜索域查找服务,请通过在本地添加最后一个点来完全枚举主机名。。

例如,如果用户在Web浏览器中键入steve.local.,这将告诉系统在本地网络上对steve的请求进行多播,而不是将其发送到传统的DNS服务器。如果本地网络上有一台名为steve的启用Bonjour的计算机,则会向用户的浏览器发送正确的IP地址。这允许用户在没有常规DNS服务器的情况下访问本地主机和服务。

注意:用户可以避免在Bonjour主机名后键入.local.,方法是在“系统首选项”的“网络”窗格的“搜索域”部分输入local,以及任何其他DNS域,如apple.com或earthlink.net。在“网络”面板的“搜索域名”部分列出的连续域中搜索不合格的名称,如steve,在本例中为steve.apple.com,steve.eearthlink.net和steve.local。

可以了解下域命名惯例


服务发现

Bonjour的最后一个元素是服务发现。服务发现允许应用程序查找特定类型服务的所有可用实例,并维护命名服务和端口号的列表。然后,应用程序可以将服务主机名解析为IPv4和IPv6地址列表,如命名中所述。

命名服务列表提供了服务与其当前DNS名称和端口号之间的间接层。Indirection允许应用程序保留可用服务的持久列表,并在使用服务之前解析实际的网络地址。该列表允许动态重新定位服务,而无需生成大量网络流量来宣布更改。

Bonjour中的服务发现是通过“浏览”完成的。针对给定的服务类型和域发出mDNS查询,任何匹配的服务都会回复其名称。结果是可供选择的可用服务列表。

这与传统的以设备为中心的网络服务理念非常不同。对于处理服务器、网络设备和网络编程的人来说,很容易养成从物理硬件角度考虑服务的习惯。在这种以设备为中心的视图中,网络由多个设备或主机组成,每个设备或主机都有一组服务。例如,网络可能由一台服务器机器和几个客户端机器组成。在以设备为中心的浏览方案中,客户端向服务器查询其正在运行的服务,获取列表(FTP、HTTP等),并决定使用哪个服务。界面反映了物理系统的组织方式。但这不一定是用户逻辑上想要或需要的。

用户通常希望完成某项任务,而不是查询设备列表以了解正在运行的服务。客户只问一个问题:“有哪些打印服务可用?”比问每个可用的设备“您正在运行哪些服务?”并筛选结果以查找打印机更有意义。以设备为中心的方法不仅耗时,而且会产生大量的网络流量,其中大部分都是无用的。以服务为中心的方法发送一个查询,只生成相关的回复。

此外,服务不与特定的IP地址甚至主机名绑定。例如,网站可以由具有不同地址的多个服务器托管。在一个组织内,网络管理员可能需要将服务从一个服务器移动到另一个服务器,以帮助平衡负载。如果客户机存储主机名(在大多数情况下,他们现在这样做),那么如果服务移动到其他主机,他们将无法连接。

Bonjour采用面向服务的观点。查询是根据所需服务的类型而不是提供服务的主机进行的。应用程序存储服务实例名称,而不是地址,因此如果IP地址、端口号甚至主机名发生了更改,应用程序仍然可以连接。通过专注于服务而不是设备,用户的浏览体验变得更加有用和无故障


Bonjour如何减少开销

无服务器寻址、命名和服务发现有可能产生大量的网络流量,但Bonjour采取了许多步骤将流量降至最低。这使得Bonjour可以获得AppleTalk的易用性,同时避免任何不必要的“闲聊”
Bonjour使用了几种机制来减少零配置开销,包括缓存、抑制重复响应、指数回退和服务通告,如以下部分所述。

缓存

Bonjour使用多播DNS记录缓存来防止主机请求已请求的信息。例如,当一个主机请求LPR后台打印程序列表时,打印机列表通过多播返回,因此所有本地主机都会看到它。下次主机需要后台打印程序的列表时,它的缓存中已经有了该列表,不需要重新发出查询。多播DNS响应者负责维护缓存;应用程序开发人员不需要做任何事情来维护它。

抑制重复响应

为了防止对同一查询重复回答,Bonjour服务查询包括一个已知答案列表。例如,如果主机正在浏览打印机,则第一个查询不包括打印服务,并从可用的打印服务器获得12个答复。下次主机查询打印服务时,查询将包括已知服务器的列表。列表中已存在的打印服务器没有响应。
Bonjour以另一种方式抑制重复反应。如果一个主机即将响应,并且注意到另一个主机已经使用相同的信息进行了响应,则该主机将抑制其响应。
应用程序开发人员不需要采取任何措施来抑制重复响应。Bonjour处理重复响应抑制。

指数后退和服务公告

当主机浏览服务时,它不会连续发送查询以查看是否有新服务可用。相反,主机发出初始查询并以指数方式减少后续查询的频率,例如:1秒后、3秒后、9秒后、27秒后等,最多间隔一小时。
这并不意味着浏览器需要一个多小时才能看到新服务。当一个服务在网络上启动时,它会使用类似的指数后退算法几次宣布其存在。这样,服务通告和发现的网络流量保持在最小,但新服务很快就会出现。
在配备Bonjour的主机上运行的服务在向mDNSResponder守护程序注册时自动宣布。在其他硬件(如打印机)上运行的服务应该以指数级回退的方式实现服务公告,以充分利用Bonjour。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pinia实战 购物车(自定义插件实现pinia持久化)

目录 一、实例 二、需求 三. 代码解析 shop.vue shop.ts 四、持久化插件 插件介绍 持久化实现思路 一、实例 二、需求 单选全选功能,并且可以互相联动 小计功能 总计功能 商品加减,数量为零时不能在减 三. 代码解析 shop.vue 1.获取shop模块实…

AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms

pip安装crackmapexec后,运行crackmapexec 遇到报错 AttributeError: module lib has no attribute OpenSSL_add_all_algorithms 直接安装 pip3 install crackmapexec 解决 通过 python3 -m pip install --upgrade openssl 或者 python3 -m pip install openssl>22.1.…

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别

YOLOv7 Flask Web 车牌识别图片效果展示 本篇博文只包含源码以及使用方式,目前不同提供详细开发教程。 YOLOv7 Flask Web 车牌识别视频效果展示 YOLOv7 + EasyOCR 实现车牌识别 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更…

【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)

导语 哈喽大家好呀!我是每天疯狂赶代码的木木子吖~情人节快乐呀! 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 我们都知道,有很多经典的老照片…

云原生时代顶流消息中间件Apache Pulsar部署实操-上

文章目录安装运行时Java版本推荐Locally Standalone集群启动验证部署分布式集群部署说明初始化集群元数据部署BookKeeper部署BrokerAdmin客户端和验证Tiered Storage(层级存储)概述支持分级存储何时使用工作原理安装 运行时Java版本推荐 Locally Standalone集群 启动 # 下载…

Eureka集群搭建教程

前言: 为了提升注册中心稳定性,防止注册中心宕机后,服务不可用的情况,我们可以通过将Eureka注册中心搭建成集群模式,当一台注册中心微服务宕机后,另一台依然可以支持服务的注册与发现。本文将讲解下如何搭…

在Spring-boot中操作MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。在使用spring-boot操作MongoDB数据…

项目介绍 + 定长内存池设计及实现

你好,我是安然无虞。 文章目录项目介绍当前项目做的是什么?技术栈内存池是什么?池化技术内存池内存池主要解决的问题malloc定长内存池学习目的定长内存池设计项目介绍 当前项目做的是什么? 这个项目是实现一个高并发的内存池, 它的原型是 Google 的一个开源项…

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址:Hash(Key) A*Key B 优点:简单、均匀 缺点:需要事先知道关键字的…

C语言学习笔记(八): 自定义数据类型

结构体变量 什么是结构体 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体 结构体的成员可以是任何类型的变量,如整数,字符串,浮点数,其他结构体,指针等 struct Student //s…

streamlit自定义组件教程和组件开发环境配置

About create your own component: you can follow this tutorial streamlit tutorial 重要!以下步骤都是在教程的基础上更改的。这个教程做的很棒。 Component development environment configuration: 根据文章 https://streamlit-com…

【iOS】APP IM聊天框架的设计(基于第三方SDK)

【iOS】APP IM聊天框架的设计(基于第三方SDK) 前言 在开发社交聊天类型的APP的时候,IM是必不可少的功能,而且很多公司的IM服务都是接的第三方的,很少用自研的,国内的IM厂商也都很成熟,本文所有…

基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地

文心大模型,产业级知识增强大模型介绍 官网:https://wenxin.baidu.com/ 文心大模型开发套件ERNIEKit,面向NLP工程师,提供全流程大模型开发与部署工具集,端到端、全方位发挥大模型效能。 提供业界效果领先的ERNIE 3.0系列开源模型和基于ERNIE的前沿任务模型,满足企业和开…

暴力破解(new)

数据来源 本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 01 暴力破解介绍及应用场景 》暴力破解介绍 》暴力破解字典 GitHub - k8gege/Passwor…

QT(56)-动态链接库-windows-导出变量-导出类

1.导出变量 1.1不使用_declspec(dllimport) _declspec(dllexport) 使用_declspec(dllimport) _declspec(dllexport) 1.2win32 mydllwin32 myexe 1.3win32 mydllqt myexe 2.导出类 使用_declspec(dllimport) _declspec(dllexport) 2.1不用关键…

导出Excel表格(调用后端接口方式)

在开发中我们会遇到导出Excel表格的需求,但是导出分为前端生成和后端生成。前端生成的方式CSDN其他小伙伴已经做出了很多教程,是依赖xlsx插件。但是,今天我讲的是,调用后端接口的方式生成Excel表格。1.调用后端提供的导出接口&…

Doris--简单使用

一、数据表的创建与数据导入 1.1、创建表 1.1.1、单分区 CREATE TABLE table1 (siteid INT DEFAULT 10,citycode SMALLINT,username VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0 -- 聚合模型, value column 使用sum聚合 ) AGGREGATE KEY(siteid, citycode, …

【Java】二叉树

一、树形结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊…

IDEA安装ChatGPT插件

ChatGPT,美国OpenAI [1] 研发的聊天机器人程序 [12] ,于2022年11月30日发布 [2-3] 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人…

mybatis条件构造器(一)

mybatis条件构造器(一) 1 准备工作 1.1 建表sql语句(Emp表) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for emp -- ---------------------------- DROP TABLE IF EXISTS emp; CREATE TABLE emp (EMPNO int NOT N…