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

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介

网络连接管理提供管理网络一些基础能力,包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。

说明

为了保证应用的运行效率,大部分API调用都是异步的,对于异步调用的API均提供了callback和Promise两种方式,以下示例均采用promise函数。

基本概念

  • 网络生产者:数据网络的提供方,比如WiFi、蜂窝、Ethernet等。
  • 网络消费者:数据网络的使用方,比如应用或系统服务。
  • 网络探测:检测网络有效性,避免将网络从可用网络切换到不可用网络。内容包括绑定网络探测、DNS探测、HTTP探测及HTTPS探测。
  • 网络优选:处理多网络共存时选择最优网络。在网络状态、网络信息及评分发生变化时被触发。

约束

  • 开发语言:JS
  • 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

场景介绍

网络连接管理的典型场景有:

  • 接收指定网络的状态变化通知
  • 获取所有注册的网络
  • 根据数据网络查询网络的连接信息
  • 使用对应网络解析域名,获取所有IP

以下分别介绍具体开发方式。

接口说明

接口名描述
getDefaultNet(callback: AsyncCallback): void;获取一个含有默认网络的netId的NetHandle对象,使用callback回调
getGlobalHttpProxy(callback: AsyncCallback): void;获取网络的全局代理设置,使用callback回调
setGlobalHttpProxy(httpProxy: HttpProxy, callback: AsyncCallback): void;设置网络全局Http代理配置信息,使用callback回调
setAppHttpProxy(httpProxy: HttpProxy): void;设置网络应用级Http代理配置信息
getAppNet(callback: AsyncCallback): void;获取一个App绑定的包含了网络netId的NetHandle对象,使用callback回调
setAppNet(netHandle: NetHandle, callback: AsyncCallback): void;绑定App到指定网络,绑定后的App只能通过指定网络访问外网。使用callback回调
getDefaultNetSync(): NetHandle;使用同步方法获取默认激活的数据网络。可以使用getNetCapabilities去获取网络的类型、拥有的能力等信息。
hasDefaultNet(callback: AsyncCallback): void;检查默认数据网络是否被激活,使用callback回调
getAllNets(callback: AsyncCallback<Array>): void;获取所处于连接状态的网络的NetHandle对象列表,使用callback回调
getConnectionProperties(netHandle: NetHandle, callback: AsyncCallback): void;查询netHandle对应的网络的连接信息,使用callback回调
getNetCapabilities(netHandle: NetHandle, callback: AsyncCallback): void;获取netHandle对应的网络的能力信息,使用callback回调
isDefaultNetMetered(callback: AsyncCallback): void;检查当前网络上的数据流量使用是否被计量,使用callback方式作为异步方法
reportNetConnected(netHandle: NetHandle, callback: AsyncCallback): void;向网络管理报告网络处于可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调
reportNetDisconnected(netHandle: NetHandle, callback: AsyncCallback): void;向网络管理报告网络处于不可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调
getAddressesByName(host: string, callback: AsyncCallback<Array>): void;使用对应网络解析域名,获取所有IP,使用callback回调
enableAirplaneMode(callback: AsyncCallback): void;设置网络为飞行模式,使用callback回调
disableAirplaneMode(callback: AsyncCallback): void;关闭网络飞行模式,使用callback回调
createNetConnection(netSpecifier?: NetSpecifier, timeout?: number): NetConnection;返回一个NetConnection对象,netSpecifier指定关注的网络的各项特征,timeout是超时时间(单位是毫秒),netSpecifier是timeout的必要条件,两者都没有则表示关注默认网络
bindSocket(socketParam: TCPSocketUDPSocket, callback: AsyncCallback): void;
getAddressesByName(host: string, callback: AsyncCallback<Array>): void;使用对应网络解析域名,获取所有IP,使用callback回调
getAddressByName(host: string, callback: AsyncCallback): void;使用对应网络解析域名,获取一个IP,调用callbac
on(type: ‘netAvailable’, callback: Callback): void;订阅网络可用事件
on(type: ‘netCapabilitiesChange’, callback: Callback): void;订阅网络能力变化事件
on(type: ‘netConnectionPropertiesChange’, callback: Callback<{ netHandle: NetHandle, connectionProperties: ConnectionProperties }>): void;订阅网络连接信息变化事件
on(type: ‘netBlockStatusChange’, callback: Callback<{ netHandle: NetHandle, blocked: boolean }>): void;订阅网络阻塞状态事件,使用callback方式作为异步方法
on(type: ‘netLost’, callback: Callback): void;订阅网络丢失事件
on(type: ‘netUnavailable’, callback: Callback): void;订阅网络不可用事件
register(callback: AsyncCallback): void;订阅指定网络状态变化的通知
unregister(callback: AsyncCallback): void;取消订阅默认网络状态变化的通知

接收指定网络的状态变化通知

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用createNetConnection方法,指定网络能力、网络类型和超时时间(可选,如不传入代表默认网络;创建不同于默认网络时可通过指定这些参数完成),创建一个NetConnection对象。

  4. 调用该对象的on()方法,传入type和callback,订阅关心的事件。

  5. 调用该对象的register()方法,订阅指定网络状态变化的通知。

  6. 当网络可用时,会收到netAvailable事件的回调;当网络不可用时,会收到netUnavailable事件的回调。

  7. 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';let netSpecifier: connection.NetSpecifier = {netCapabilities: {// 假设当前默认网络是WiFi,需要创建蜂窝网络连接,可指定网络类型为蜂窝网bearerTypes: [connection.NetBearType.BEARER_CELLULAR],// 指定网络能力为InternetnetworkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]},
};// 指定超时时间为10s(默认值为0)
let timeout = 10 * 1000;// 创建NetConnection对象
let conn = connection.createNetConnection(netSpecifier, timeout);// 订阅指定网络状态变化的通知
conn.register((err: BusinessError, data: void) => {console.log(JSON.stringify(err));
});// 订阅事件,如果当前指定网络可用,通过on_netAvailable通知用户
conn.on('netAvailable', ((data: connection.NetHandle) => {console.log("net is available, netId is " + data.netId);
}));// 订阅事件,如果当前指定网络不可用,通过on_netUnavailable通知用户
conn.on('netUnavailable', ((data: void) => {console.log("net is unavailable, data is " + JSON.stringify(data));
}));// 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅
conn.unregister((err: BusinessError, data: void) => {
});

获取所有注册的网络

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用getAllNets方法,获取所有处于连接状态的网络列表。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 构造单例对象
export class GlobalContext {public netList: connection.NetHandle[] = [];private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
}// 获取所有处于连接状态的网络列表
connection.getAllNets().then((data: connection.NetHandle[]) => {console.info("Succeeded to get data: " + JSON.stringify(data));if (data) {GlobalContext.getContext().netList = data;}
});

根据数据网络查询网络的能力信息及连接信息

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 通过调用getDefaultNet方法,获取默认的数据网络(NetHandle);或者通过调用getAllNets方法,获取所有处于连接状态的网络列表(Array)。

  4. 调用getNetCapabilities方法,获取NetHandle对应网络的能力信息。能力信息包含了网络类型(蜂窝网络、Wi-Fi网络、以太网网络等)、网络具体能力等网络信息。

  5. 调用getConnectionProperties方法,获取NetHandle对应网络的连接信息。

import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 构造单例对象
export class GlobalContext {public netList: connection.NetHandle[] = [];public netHandle: connection.NetHandle|null = null;private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
}// 调用getDefaultNet方法,获取默认的数据网络(NetHandle)
connection.getDefaultNet().then((data:connection.NetHandle) => {if (data.netId == 0) {// 当前无默认网络时,获取的netHandler的netid为0,属于异常情况,需要额外处理return;}if (data) {console.info("getDefaultNet get data: " + JSON.stringify(data));GlobalContext.getContext().netHandle = data;// 获取netHandle对应网络的能力信息。能力信息包含了网络类型、网络具体能力等网络信息connection.getNetCapabilities(GlobalContext.getContext().netHandle).then((data: connection.NetCapabilities) => {console.info("getNetCapabilities get data: " + JSON.stringify(data));// 获取网络类型(bearerTypes)let bearerTypes: Set<number> = new Set(data.bearerTypes);let bearerTypesNum = Array.from(bearerTypes.values());for (let item of bearerTypesNum) {if (item == 0) {// 蜂窝网console.log(JSON.stringify("BEARER_CELLULAR"));} else if (item == 1) {// Wi-Fi网络console.log(JSON.stringify("BEARER_WIFI"));} else if (item == 3) {// 以太网网络console.log(JSON.stringify("BEARER_ETHERNET"));}}// 获取网络具体能力(networkCap)let itemNumber : Set<number> = new Set(data.networkCap);let dataNumber = Array.from(itemNumber.values());for (let item of dataNumber) {if (item == 0) {// 表示网络可以访问运营商的MMSC(Multimedia Message Service,多媒体短信服务)发送和接收彩信console.log(JSON.stringify("NET_CAPABILITY_MMS"));} else if (item == 11) {// 表示网络流量未被计费console.log(JSON.stringify("NET_CAPABILITY_NOT_METERED"));} else if (item == 12) {// 表示该网络应具有访问Internet的能力,该能力由网络提供者设置console.log(JSON.stringify("NET_CAPABILITY_INTERNET"));} else if (item == 15) {// 表示网络不使用VPN(Virtual Private Network,虚拟专用网络)console.log(JSON.stringify("NET_CAPABILITY_NOT_VPN"));} else if (item == 16) {// 表示该网络访问Internet的能力被网络管理成功验证,该能力由网络管理模块设置console.log(JSON.stringify("NET_CAPABILITY_VALIDATED"));}}})}
})// 获取netHandle对应网络的连接信息。连接信息包含了链路信息、路由信息等
connection.getConnectionProperties(GlobalContext.getContext().netHandle).then((data: connection.ConnectionProperties) => {console.info("getConnectionProperties get data: " + JSON.stringify(data));
})// 调用getAllNets,获取所有处于连接状态的网络列表(Array<NetHandle>)
connection.getAllNets().then((data: connection.NetHandle[]) => {console.info("getAllNets get data: " + JSON.stringify(data));if (data) {GlobalContext.getContext().netList = data;let itemNumber : Set<connection.NetHandle> = new Set(GlobalContext.getContext().netList);let dataNumber = Array.from(itemNumber.values());for (let item of dataNumber) {// 循环获取网络列表每个netHandle对应网络的能力信息connection.getNetCapabilities(item).then((data: connection.NetCapabilities) => {console.info("getNetCapabilities get data: " + JSON.stringify(data));})// 循环获取网络列表每个netHandle对应的网络的连接信息connection.getConnectionProperties(item).then((data: connection.ConnectionProperties) => {console.info("getConnectionProperties get data: " + JSON.stringify(data));})}}
})

使用对应网络解析域名,获取所有IP

  1. 声明接口调用所需要的权限:ohos.permission.INTERNET

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用getAddressesByName方法,使用默认网络解析主机名以获取所有IP地址。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 使用默认网络解析主机名以获取所有IP地址
connection.getAddressesByName("xxxx").then((data: connection.NetAddress[]) => {console.info("Succeeded to get data: " + JSON.stringify(data));
});

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

相关文章:

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介 网络连接管理提供管理网络一些基础能力&#xff0c;包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。 说明 为了保证应用的运行效率&#xff0c;大部分API调用都是异步的&#xff0c;对…...

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址&#xff1a;[www.macfxb.cn](http://www.macfxb.cn)一、CentOS安装完成&#xff0c;软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣&#xff1a;下载镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;虚拟机安装5️…...

基于SpringBoot+Vue+MySQL的房屋租赁管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…...

虚拟机器配置固定IP地址

新安装的虚拟机&#xff0c;如何配置固定的ip地址&#xff0c;废话少说直接上干货 第一步&#xff1a;在VMarea中 选中你要固定IP的虚拟机器&#xff0c;点击上面的“编辑”按钮&#xff0c;然后找到“虚拟网络编辑器”&#xff0c;选中你要修改的ip VMnet8&#xff0c;然后是…...

用python实现基于形态学的方法,如开运算和闭运算,来去除pcd格式激光点云中的植被

在Python中&#xff0c;你可以使用open3d库来读取和处理pcd格式的点云数据。下面是一个示例代码&#xff0c;展示如何使用形态学操作来去除植被。 首先&#xff0c;确保你已经安装了open3d库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install open3d接下来&…...

QT 绘制简易时钟

原文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->startTimer(1000); }Widget::~Widget() {delete ui; }//时钟底座 void Widget::paintEvent(Q…...

为控制器的方法添加必要参数

前言&#xff1a;做这个系统时&#xff0c;要求每次调用接口时要传操作人、操作人电脑ip、菜单id&#xff0c;然后计入log。本来前端读取到然后加入请求头&#xff0c;后端写入log即可。但是老大要求后端也要把控必传参数&#xff0c;避免前端忘记。所以就写了这个。IOperation…...

(计算机网络)应用层

1.为什么需要应用层 应用层提供使用tcp&#xff0c;udp使用的方式 协议就是制定的规则 2.域名服务器概述 域名是唯一的 新增域名&#xff0c;大家都要修改这个文本文件&#xff0c;所以要进行集中管理这个文本文件&#xff0c;而不是使用本地的hosts文件 hosts文件在Windows系统…...

使用3DUNet训练自己的数据集(pytorch)— 医疗影像分割

代码:lee-zq/3DUNet-Pytorch: 3DUNet implemented with pytorch (github.com) 文章<cicek16miccai.pdf (uni-freiburg.de)3D U-Net: Learning Dense Volumetric Segmentation...

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件 本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用r…...

U盘文件及文件夹带锁修复

磁盘管理修复工具Disks磁盘管理–针对U盘文件及文件夹带锁修复 本文章只针对统信系统 文章目录 功能概述一、安装工具二、数据备份三、检查文件系统1. 通过启动栏中的“磁盘”或者桌面的“磁盘”启动文件来启动应用:2. 选择U盘设备3. 点击“检查文件系统”按钮(如果无此按钮…...

AnyChart 数据可视化框架

AnyChart 数据可视化框架 AnyChart 是一个灵活的 JavaScript&#xff08;HTML5、SVG、VML&#xff09;图表框架&#xff0c;适合任何需要数据可视化的解决方案。 目录 下载并安装开始插件将 AnyChart 与 TypeScript 结合使用将 AnyChart 与 ECMAScript 6 结合使用技术集成贡献…...

ARM base instruction -- br

BR Branch to Register branches unconditionally to an address in a register, with a hint that this is not a subroutine return. 无条件地分支到寄存器中的一个地址&#xff0c;并提示这不是子例程返回。 BR <Xn> BR 跳转到reg内容地址&#xff0c;不会将返回地址…...

编译原理/软件工程核心概念-问题理解

目录 1.程序的编译执行过程 2.指针和引用的区别 3.堆和栈的区别 4.最熟悉的编程语言- Python&#xff1a;介绍PyTorch和TensorFlow框架 5.C与C的区别 6.软件工程是什么&#xff1f; 7.简述瀑布模型 8.敏捷开发方法是什么&#xff1f;它与瀑布模型相比有哪些优势和劣势 1…...

学习pyqt5相关知识回顾

1. 模块 1.1 import导入 1) 模块:是一系列功能的集合体,模块名.功能名,就可以使用模块的功能 2) 首次导入模块,就会立即执行模块里面的内容 3) 当前名称空间会产生一个名字module,指向module.py产生的名称空间.我们可以使用module.name/函数名,来调用module.py里面的内容. …...

OPENAIGC开发者大赛高校组银奖 | LonAC中小学编程学习平台

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给您…...

oneclick 命令:快速筛选控制变量的利器

目录 1. 命令语法2. 结果输出3. 使用示例4. 总结 在进行回归分析时&#xff0c;选择合适的控制变量对于确保模型的稳健性至关重要。然而&#xff0c;手动筛选变量组合不仅费时费力&#xff0c;还容易出错。为此&#xff0c;Stata 中的 oneclick 命令提供了一个高效的解决方案&a…...

Kotlin 代替Java接口回调,就这么简单

假如你使用旧的接口回调&#xff1a; 通常三步&#xff1a;1 定义接口和方法&#xff1b;2 使用接口中方法&#xff1b;3 继承接口并实现方法&#xff1b; 例&#xff1a; class XXXAdapter{public var mClickCollBack: clickCollBack? null //1定义interface clickColl…...

Codeforces Round 971 (Div. 4)——C题题解

本题的大意是一个青蛙从原点开始跳格子(0,0)&#xff0c;最终要跳到点(x,y)去&#xff0c;并且每一步的步长不能超过k&#xff0c;问最短几步可以跳到终点 分析&#xff1a; 本题利用贪心思想&#xff0c;肯定是先跳最大的步长这样总体用的步数最长 代码演示&#xff1a; #inc…...

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs Introduction方法 使用传统GANS建模去噪分布理解模式覆盖率 Paper&#xff1a;https://arxiv.org/abs/2112.07804 Code&#xff1a;https://github.com/NVlabs/denoising-diffusion-…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...