鸿蒙学习笔记(5)-HTTP请求数据
一、Http请求数据
http模块是鸿蒙内置的一个模块,提供了网络请求的能力。不需要再写比较原始的AJAS代码。
ps:在项目中如果要访问网络资源,不管是图片文件还是网络请求,必须给项目开放权限。
(1)网络连接方式
HTTP数据请求连接:通过HTTP发起的一个单向数据请求。
WebSocket连接:使用WebSocket建立服务器与客户端的双向连接。
Socket连接:通过Socket进行数据传输,更加底层。
(2)涉及接口文档
类型 | 说明 |
---|---|
http.createHttp() | 创建一个HTTP请求,里面包括发起请求、中断请求、订阅/取消订阅HTTP Response Header事件。 |
HttpRequest() | 根据URL地址,发起HTTP网络请求。 |
requestInStream() | 根据URL地址,发起HTTP网络请求并返回流式响应,得到二进制数据,应用到文件下载,从后端拿到的不再是JSON和字符串,而是二进制数据。 |
destroy() | 中断请求任务。 |
(3)request接口开发步骤
1、步骤概述
1、从@kit.NetworkKit中导入http命名空间。Kit是我们项目需要用到的各种服务,如网络服务,分布式管理服务,蓝牙通信等。
2、调用creatHttp()方法,创建一个HttpRequest对象。
3、调用该对象的request()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。(此步骤不是必须,是用来监控响应头信息,如果你想发请求给后端,想要先知道后端返回的数据是JSON还是文件之类的,可以用此监控,他会比内容先返回客户端。)
4、调用该对象的equest()方法,传入http请求的url地址和可选参数,发起网络请求。
5、得到结果过后,按照实际业务需要,解析返回结果,筛选或者进行数据转化。
6、调用该对象的off()方法,取消订阅http响应头事件。
7、当请求使用完毕时,调用destroy()方法主动销毁。
2、封装代码:
//在common模块中封装一个基础的请求工具import { http } from "@kit.NetworkKit";//封装请求代码,考虑到以后每个模块都要发送请求,默认放在common模块中。
//1、导入
export function MyRequest(url:string,method:http.RequestMethod,requestData:string){//2、创建http请求const httpRequest = http.createHttp()//3、可以用httprequest监听响应头(不是必须)httpRequest.on('headersReceive', (header: Object) => {console.info('header: ' + JSON.stringify(header));});httpRequest.request(url, {method:method,//请求方式header:{//设置请求头//前端浏览器告诉后端,前端传递的数据格式'Content-Type': 'application/json'},extraData:requestData, //设置请求要传给后端的数据connectTimeout:9000, //前端发送数据给后端如果9秒没有结果,前端主动终止行为readTimeout:9000, //读取数据超过9秒,告诉前端请求失败},(error:Error,data:http.HttpResponse)=>{//error没有内容代表成功if (!error) {console.log(`请求成功,返回数据:${JSON.stringify(data)}`)// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}else {console.log(`请求失败,具体原因:${JSON.stringify(error)}`)// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}})
}
3、使用说明:
在页面中要使用这个工具来测试请求是否成功,在common/index.ets文件中先暴露。
export {MyRequest} from './src/main/ets/utils/HttpUtils'
在home页面或者组件中,引入对应的函数
import {MyRequest} from '@ohos/common'///比如跟事件绑定,测试数据是否能收到
.onClick((event:ClickEvent) => {MyRequest('http://47.98.128.191:4001/home/swiperdate',http.RequestMethod.GET,'')})
此时可以看到日志可以收到:
此时请求发送完毕能够得到后端数据,但请求不是直接在页面或者组件中编写的代码,而是提取到了common模块中,如何拿到服务端的数据并显示到页面上,这才是需要解决的问题。
4、泛型编程
typescript中非常重要的一个概念:泛型编程。
利用一个简单的案例:
function computed(params1:number,params2:number):number{return params1 +params2
}computed(1,3)//编译通过
computed('xiao','ming')//编译失败,因为只接受number类型
为了简化上面的代码,使代码更加灵活,尤其是在数据约束上,既要增加约束,又要让参数支持更多类型,或者更加灵活,设计方式便是采用泛型的方式来设计参数类型 。
function computed<T>(params1:T,params2:T):T{return params1 +params2
}computed<number>(1,3) //编译通过
computed<string>('xiao','ming') //编译通过
computed<bollean>(true,false) //编译通过
同一个函数因为有了泛型,可以多次使用 ,这里我们以上面出现的问题:如何拿到服务端的数据并显示到页面上,利用promise来解决。通过promise对象将异步的请求代码封装到容器中获取到结果。
import { http } from "@kit.NetworkKit";
//BasicConstants下暴露基础URL地址,和传入的资源路径拼接
import { BasicConstants} from '../../constants/BasicConstants'
//封装请求代码,考虑到以后每个模块都要发送请求,默认放在common模块中。
//1、导入
export function MyRequest(url:string,method:http.RequestMethod,requestData:string){//2、创建http请求const httpRequest = http.createHttp()return new Promise((reslove:(value:string)=>void,reject:(value?:string)=>void)=>{//request发送请求就是异步代码httpRequest.request(//不再简单是url,而是做一下拼接基础地址BasicConstants.BASE_URL+url,{method:method,//请求方式header:{//设置请求头//前端浏览器告诉后端,前端传递的数据格式'Content-Type': 'application/json'},extraData:requestData, //设置请求要传给后端的数据connectTimeout:9000, //前端发送数据给后端如果9秒没有结果,前端主动终止行为readTimeout:9000, //读取数据超过9秒,告诉前端请求失败},(error:Error,data:http.HttpResponse)=>{//error没有内容代表成功if (!error) {console.log(`请求成功,返回数据:${JSON.stringify(data,null,2)}`)reslove(JSON.stringify(data))// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}else {console.log(`请求失败,具体原因:${JSON.stringify(error)}`)reject(JSON.stringify(error))// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}})})}
页面中获取请求返回的数据:
但此时传入参数是固定必须是string类型,不够灵活,接下来进一步封装,利用泛型编程做进一步优化使得代码实现复用。K代表请求的数据类型,T代表返回的数据类型
import { http } from "@kit.NetworkKit";
import { BasicConstants} from '../../constants/BasicConstants'
//封装请求代码,考虑到以后每个模块都要发送请求,默认放在common模块中。
//1、导入
//K代表请求的数据类型,T代表返回的数据类型
export function MyRequest<T,K>(url:string,method:http.RequestMethod,requestData?:K){//2、创建http请求const httpRequest = http.createHttp()return new Promise((reslove:(value:T)=>void,reject:(value?:string)=>void)=>{//request发送请求就是异步代码httpRequest.request(//不再简单是url,而是做一下拼接基础地址BasicConstants.BASE_URL+url,{method:method,//请求方式header:{//设置请求头//前端浏览器告诉后端,前端传递的数据格式'Content-Type': 'application/json'},extraData:JSON.stringify(requestData)||'', //设置请求要传给后端的数据connectTimeout:9000, //前端发送数据给后端如果9秒没有结果,前端主动终止行为readTimeout:9000, //读取数据超过9秒,告诉前端请求失败},(error:Error,data:http.HttpResponse)=>{//error没有内容代表成功if (!error) {console.log(`请求成功,返回数据:${JSON.stringify(data,null,2)}`)//这里如何reslove(JSON.parse(data.result as string))// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}else {console.log(`请求失败,具体原因:${JSON.stringify(error)}`)reject(JSON.stringify(error))// 取消订阅HTTP响应头事件。httpRequest.off('headersReceive');// 当该请求使用完毕时,开发者务必调用destroy方法主动销毁该JavaScript Object。httpRequest.destroy();}})})}
页面中获取请求返回的数据:
完整工具封装见资源文件。
(4)HTTP数据请求
4.1 导入HTTP模块
import http from '@ohos.net.http';
4.2 使用HTTP模块发送请求,处理响应.
4.2.1 创建一个http的请求对象,不可复用。
const httpRequest = http.createHttp()
4.2.2 调用一个request方法,发起网络请求。
ps:像这种可能存在数据请求发送完但数据还没收到,因此此处方法执行完会存放一个未来会完成的结果Promise。
req.request('http://localhost:3000/users',//请求URL地址
{ //请求选项HttpRequestOptionsmetnod:http.RequestMethod.GET,extraData:{'param1':'value1'} //k1=v1&k1=v2
}
)
HttpRequestOptions 说明:
名称 类型 描述 method RequestMethod 请求方式,GET(查询)、POST(表单提交,新增)、PUT(修改)、DELETE(删除)等 extraData string|Object 请求参数 header Object 请求头字段 connectTimeout number 请求超时时间,单位毫秒,默认60000ms readTimeout number 读取超时间,同上
4.2.3 获取服务器响应的内容,Promise提供两种方法分别是then成功回调和catch失败回调。
.then((resp:http.HttpResponse)=>{if(resp.responseCode === 200){//请求成功}})
.catch((err:Error)=>{//请求失败
});
HttpResponse 说明:
名称 类型 描述 responseCode responseCode 响应状态码 header Object 响应头 cookies string 响应返回的cookies result string|Object 响应体,默认是JSON字符串 resultType HttpDataType 返回值类型
二、Promise
Promise是es6提出的一个概念,主要用来解决异步回调的问题。Promise是一个数据容器,保存了未来的一个结果,Promise本身是可以用来存放同步代码和异步代码,平时经常用来解决存放异步代码。以下是网络请求的一个发展历程:
发送网络请求,获取结果
1.1 发送网络请求
//"AJAX"(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)
//浏览器默认提供的对象,获取结果
const xmlhttp = new XMLhttpRequest()
//连接服务器
xmlhttp.open('GET','http://+地址',true)
xmlhttp.send('id=1')//监听状态码,当状态码是200时
xmlhttp.onreadystatechange = function(){//首先状态码必须是200,readyState代表xmlhttp加载过程if(xmlhttp.status == 200 && xmlhttp.readyState == 4){const result = xmlhttp.responseText//拿到数据后转化const obj = JSON.parse(result)}
}
1.2 将其封装工具
function ajas( {method='GET',url,data='',async=true} ){//"AJAX"(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)//浏览器默认提供的对象,获取结果const xmlhttp = new XMLhttpRequest()//连接服务器xmlhttp.open(method,url,async)xmlhttp.send(data)//监听状态码,当状态码是200时xmlhttp.onreadystatechange = function(){//首先状态码必须是200,readyState代表xmlhttp加载过程if(xmlhttp.status == 200 && xmlhttp.readyState == 4){const result = xmlhttp.responseText//拿到数据后转化const obj = JSON.parse(result)//这里return obj没有意义,这里是个事件,时间返回的函数外面是接收不到的}}
//如果在fuction函数这里return obj也是不可以的,局部的变量无法在外部用
}//使用封装工具
ajax({method:'GET',url:'http://+地址',data:'id = 1'async:true
})
此时的obj还不能调出来使用,这时解决方法:在函数中在传入一个函数 success,如果函数能进入if中实现结果的取用,将在函数中调用。
function ajas( {method='GET',url,data='',async=true,success} ){//"AJAX"(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)//浏览器默认提供的对象,获取结果const xmlhttp = new XMLhttpRequest()//连接服务器xmlhttp.open(method,url,async)xmlhttp.send(data)//监听状态码,当状态码是200时xmlhttp.onreadystatechange = function(){//首先状态码必须是200,readyState代表xmlhttp加载过程if(xmlhttp.status == 200 && xmlhttp.readyState == 4){const result = xmlhttp.responseText//拿到数据后转化const obj = JSON.parse(result)success(Obj)}else if(404 500){error('失败')}}
}//使用封装工具
ajax({method:'GET',url:'http://+地址',data:'id = 1'async:true,success:function(msg){console.log(msg)}//是否请求成功error:function(error){}
})
这样做有缺陷:回调地狱,无限制的在回调函数中执行任务,得到回调结果,层层嵌套,开发中要避免,不存在可读性。
//使用封装工具
ajax({method:'GET',url:'http://+地址',data:'id = 1'async:true,success:function(msg){console.log(msg)ajax({url:'http://+地址',data:msg.id,success(msg2){ ajax({url:'',data:msg.classesId}//是否请求成功error:function(error){}
})
Promise
由上述Promise来解决异步编程的问题。
//按照1234执行顺序来执行,因为promise本身是同步的,如果在promise中放入一个异步的代码,异步代码是需要花时间,异步代码不论花费多长时间,等到代码运行结束,成功或者失败都会存放在resolve,reject中。
console.log(1)
//resolve,reject 这两个参数是函数
const promise = new Promise((resolve,reject)=>{
console.log(2)//存放同步代码或者异步代码,这里主要存放异步代码ajas({url:'http://xxx',method:'POST',data:{id:1},success:(msg)=>{resolve(msg)},error:(error)=>{reject(error)}})
})//then这个函数是异步的,只有resolve执行完毕,then才会执行
promise.then((result)=>{console.log(4)
})
.catch(error=>{})console.log(3)
await和async
es7提出的一个新方案,可以等待promise的结果。
//resolve,reject 这两个参数是函数
const promise2 = new Promise((resolve,reject)=>{//存放同步代码或者异步代码,这里主要存放异步代码ajas({url:'http://xxx',method:'POST',data:{id:1},success:(msg)=>{resolve(msg)},error:(error)=>{reject(error)}})
})async function show(){const res1 = await promise1const res2 = await promise2
}
axios工具
在前面代码的基础上,第三方工具axios做了一件事情,将axios代码和promise代码进行了封装,形成了一个完整的请求工具。
//封装格式
class Axios{baseURL =''get(){return new Promise (()=>{resolve(xxx)reject(xxx)})}post(){}creat(){}
}export const axios = new Axios()//代码中如何使用
import axios from 'axios'
//方法1:通过then拿到服务器响应回来的结果
axios.get('http://xxx').then(res=>{{)
//方法2:通过await和async配合拿到服务器响应回来的结果
result = await axios.post('http://xxx')
作为一个第三方库,使用的时候需要先完成下包的操作,打开终端执行命令,ohpm 是一个包管理工具,用来管理鸿蒙提供的第三方模块。
相关文章:
鸿蒙学习笔记(5)-HTTP请求数据
一、Http请求数据 http模块是鸿蒙内置的一个模块,提供了网络请求的能力。不需要再写比较原始的AJAS代码。 ps:在项目中如果要访问网络资源,不管是图片文件还是网络请求,必须给项目开放权限。 (1)网络连接方式 HTTP数…...
Golang 的 GMP 协程模型详解
Golang 的 GMP 协程模型详解 Golang 的并发模型基于 GMP(Goroutine-M-Processor) 机制,是其高并发能力的核心支撑。以下从原理、机制、优势、缺点和设计理念展开分析: 一、GMP 的组成与运作原理 Goroutine(Gÿ…...
ReportLab 导出 PDF(页面布局)
ReportLab 导出 PDF(文档创建) ReportLab 导出 PDF(页面布局) ReportLab 导出 PDF(图文表格) PLATYPUS - 页面布局和排版 1. 设计目标2. 开始3. Flowables3.1. Flowable.draw()3.2. Flowable.drawOn(canvas,x,y)3.3. F…...
Ubuntu 安装与配置 Docker
Ubuntu 安装与配置 Docker Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包在一个轻量级、可移植的容器中。它可以帮助开发者和运维人员快速构建、部署和管理应用程序,提升开发和运维效率。本文将介绍如何在 Ubuntu 系统上安装和配置…...
【数据结构与算法】LeetCode每日一题
此题跟27.移除数组中的指定值 类似,都是移除且双指针玩法,只不过判断条件发生了变化...
【HDFS入门】数据存储原理全解,从分块到复制的完整流程剖析
目录 1 HDFS架构概览 2 文件分块机制 2.1 为什么需要分块? 2.2 块大小配置 3 数据写入流程 4 数据复制机制 4.1 副本放置策略 4.2 复制流程 5 数据读取流程 6 一致性模型 7 容错机制 7.1 数据节点故障处理 7.2 校验和验证 8 总结 在大数据时代&#x…...
力扣热题100——普通数组(不普通)
普通数组但一点不普通! 最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 最大子数组和 这道题是非常经典的适用动态规划解决题目,但同时这里给出两种解法 动态规划、分治法 那么动态规划方法大家可以在我的另外一篇博客总结中看到&am…...
Ubuntu中snap
通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之…...
uniapp(Vue)开发微信小程序 之 保存图片到本地
一、保存图片到本地(要拿到图片的 src): 查看隐私条约是否加上相册(仅写入)权限: 微信公众平台 -》 左下角头像 -》账号设置 -》 用户隐私保护指引 -》去完善 -》 相册(仅写入)权限 …...
TailwindCss快速上手
什么是Tailwind Css? 一个实用优先的 CSS 框架,可以直接在标记中组合以构建任何设计。 开始使用Tailwind Css 如何安装 下面是使用vite构建工具的方法 ①安装 Tailwind CSS: tailwindcss通过tailwindcss/vitenpm安装。 npm install tailwindcss tailwindcss…...
Gladinet CentreStack Triofox 远程RCE漏洞(CVE-2025-30406)
免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...
ASP.NET WEB 手动推送 URL 到百度站长工具实例
下面是一个完整的 ASP.NET Web 应用程序示例,演示如何手动推送 URL 到百度站长工具。 1. 创建推送页面 (PushToBaidu.aspx) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PushToBaidu.aspx.cs" Inherits="BaiduPushEx…...
【Ragflow】18.更好的推理框架:vLLM的docker部署方式
概述 看到不少人说“Ollama就图一乐,生产环境还得用vLLM”。 本文决定使用docker对vLLM进行部署,并解决模型配置中,IP地址的硬编码问题。 Ollama与vLLM风评比较 查询相关资料,Ollama与vLLM主要特点及对比情况如下[1]: Ollama:轻量级本地大模型部署工具,面向个人用户…...
智能 GitHub Copilot 副驾驶® 更新升级!
智能 GitHub Copilot 副驾驶 迎来重大升级!现在,所有 VS Code 用户都能体验支持 Multi-Context Protocol(MCP)的全新 Agent Mode。此外,微软还推出了智能 GitHub Copilot 副驾驶 Pro 订阅计划,提供更强大的…...
什么是高防服务器
高防服务器是具备高强度防御能力、专门应对网络攻击(如DDoS、 CC攻击)的服务器类 型,通过流量清洗、多层防护等技术保障业务稳定运行。具备高强度防御能力和智能攻击识别技术,可保障业务在极端网络环境下稳定运行。其核心特点及技术原理如下:…...
纷析云开源财务软件:企业财务数字化转型的灵活解决方案
纷析云是一家专注于开源财务软件研发的公司,自2018年成立以来,始终以“开源开放”为核心理念,致力于通过技术创新助力企业实现财务管理的数字化与智能化转型。其开源财务软件凭借高扩展性、灵活部署和全面的功能模块,成为众多企业…...
open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。
AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...
Spring缓存抽象机制
一、核心架构图解 #mermaid-svg-pUShmqsPanYTNVBI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pUShmqsPanYTNVBI .error-icon{fill:#552222;}#mermaid-svg-pUShmqsPanYTNVBI .error-text{fill:#552222;stroke:#5…...
[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
这个错误提示再次说明:你的系统(CMD 或 Jenkins 环境)找不到 pnpm 命令的位置。虽然你可能已经用 npm install -g pnpm 安装过,但系统不知道它装在哪里,也就无法执行 pnpm 命令。 ✅ 快速解决方法:直接用完…...
如何用AI辅助数据分析及工具推荐
以下是针对数据分析的 AI辅助工具推荐,结合国内外主流工具的功能特点、优劣势及适用场景分析,并标注是否为国内软件及付费情况: 一、国内工具推荐 1. WPS AI 特点:集成于WPS Office套件,支持智能数据分析、自动生成可…...
使用KeilAssistant代替keil的UI界面
目录 一、keil Assistant的优势和缺点 二、使用方法 (1)配置keil的路径 (2)导入并使用工程 (3)默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...
spark-SQL数据加载和保存
数据加载与保存 通用方式: 通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式,如 csv 、 jdbc 等; option 用于设置特定参数,像 jdbc 格式下的数据库连接信息; load 和 save 则…...
strings.Replace 使用详解
目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1:官方示例 示例2:模板变量替换 示例3:敏感信息脱敏(隐藏手机号中间四位&a…...
K8S微服务部署及模拟故障观测
概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务,并模拟常见的故障场景(如 Pod 故障、节点故障、网络故障)以测试系统的容错能力。通过本实验,了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…...
3.k8s是如何工作的
Kubernetes 是一个复杂的分布式系统,其核心设计理念是 声明式管理 和 自动化控制。以下是 Kubernetes 的工作机制详解,从用户提交应用到容器运行的全流程: 1. 核心架构:控制平面(Control Plane)与工作节点&…...
打通任督二脉 - Device Plugin 让 k8s “看见” GPU
打通任督二脉 - Device Plugin 让 k8s “看见” GPU 上一篇咱们聊了为啥要把 GPU 这个“计算猛兽”拉进 Kubernetes (k8s) 这个“智能调度中心”。目标很美好:提高效率、简化管理、弹性伸缩。但现实是,k8s 天生并不认识 GPU 这位“新朋友”。就像你的电脑操作系统,默认只认…...
锚定“体验驱动”,锐捷EDN让园区网络“以人为本”
作者 | 曾响铃 文 | 响铃说 传统的网络升级路径,一如巴别塔的建造思路一般——工程师们按技术蓝图逐层堆砌,却常与地面用户的实际需求渐行渐远,从而带来了诸多体验痛点,如手工配置效率低下、关键业务用网无法保障、网络架构趋于…...
Flutter的自动化测试 python flutter编程
Flutter应用开发入门指南 第一步:创建Flutter应用 创建一个默认的Flutter应用后,将以下代码复制到 lib/main.dart 中: import package:flutter/material.dart;//运行Flutter应用,创建了一个自己实现的Widget对象 void main() > runApp(…...
Day09【基于jieba分词和RNN实现的简单中文分词】
基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表,将输入的文本基于jieba分词分割为若干个词,词的末尾对应的标签为1,中间部分对应的标签为0,同时将分词后的单词基于中文词表做初步序列…...
机器学习 | 神经网络介绍 | 概念向
文章目录 📚从生物神经元到人工神经元📚神经网络初识🐇激活函数——让神经元“动起来”🐇权重与偏置——调整信息的重要性🐇训练神经网络——学习的过程🐇过拟合与正则化——避免“死记硬背” 👀…...
使用cursor进行原型图设计
1.下载cursor 2.模式设置: 模型使用claude-3.7-sonnet的think模式 3.引导词模板: 我想要开发一个中高考英语口语考试的模拟考试系统,我需要将上面的这个应用输出成高保真的原型图设计。请考虑以下的规范: 用户体验࿱…...
Vue el-from的el-form-item v-for循环表单如何校验rules(二)
在上一篇文章中,通过校验规则写成内联循环去校验from表单项,在之前的代码基础上,进行校验规则的二次封装,使代码更加简洁,灵活高效、 参考上一篇:Vue el-from的el-form-item v-for循环表单如何校验rules&a…...
Spark-SQL3
Spark-SQL 一.Spark-SQL核心编程(四) 1.数据加载与保存: 1)通用方式: SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据&#…...
Redis字符串类型实战:解锁五大高频应用场景
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串(String)类型是最基础的数据结构,但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…...
通信算法之266: 无人机信号带宽计算
pwelch 通常返回功率谱密度(PSD)和对应的频率向量。带宽的计算可能涉及到找到 PSD 的有效频率范围,比如半功率点(-3dB)或者根据信号的能量集中区域。 pwelch 的参数设置,比如窗函数、重叠、FFT 点数&#x…...
【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引
最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…...
【C++游戏引擎开发】第16篇:ImGui指南
ImGui官方Github ImGUI(即时模式图形用户界面)是一种颠覆传统GUI开发范式的界面系统,由Casey Muratori于2005年提出概念,后经Omar Cornut开发为Dear ImGui开源库。其核心设计理念彻底改变了开发者构建交互式工具的方式。 一、vcpkg安装与特点介绍 1.1 安装 vcpkg install…...
分享一下这几天在公司学到的东西
这几天我学到了很多东西 (1)我自己原来写项目,前后端联调用的都是postman,然后直接测试接口,然后连一下就完了。这几天我接触到了apifox的Mock这个东西!我知道了一个前端工程师进行前后端链条的时候&#…...
C# 将Excel格式文件导入到界面中,用datagridview显示
界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...
Shell编程之正则表达式与文本
目录 一 正则表达式 1 正则表达式的定义 2 正则表达式用途 二 正则表达式类型 1 基础正则表达式示例 (1)查找特定字符 (2)利用中括号” [] “来查找集合字符 (3)查找行首” ^ “与行尾字符”$“ &…...
Spring JDBC 与数据访问:从性能优化到事务协同
在高并发场景(如电商、金融等行业),数据库访问的性能和事务一致性是系统稳定性的关键。 Spring JDBC通过模板化操作和事务管理机制,大幅简化了传统 JDBC 繁琐的 API 处理,使数据库操作更加高效、安全、可维护。 一、…...
Markdown 编辑器的使用
欢迎使用 Markdown 编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…...
自动化浏览器环境与 Node.js 环境的逆向分析:完整教程
在当今的 Web 开发中,了解浏览器环境与 Node.js 环境之间的差异是非常重要的,特别是当你希望进行自动化操作、逆向工程或进行跨平台开发时。在这篇教程中,我们将探讨如何通过 JavaScript 在浏览器中自动化环境检测、分析并对比 Node.js 和浏览…...
脉冲编码调制(PCM)在三角形信号中的应用
基于MATLAB平台,详细阐述脉冲编码调制(PCM)在三角形信号处理中的全流程实现。我这里将变量名更改为具有辨识度的Dogness_、Lhuu_,包括信号生成、均匀量化、编码、解码及解量化过程,为数字信号处理提供实践参考。 Dogne…...
# 03_Elastic Stack 从入门到实践(三)-- 4
03_Elastic Stack 从入门到实践(三)-- 4 七、Elasticsearch之中文分词器(IK分词器) 1、什么是分词? 分词:就是指将一个文本转化成一系列单词的过程,也叫文本分析,在Elasticsearch…...
前端VUE框架理论与应用(10)
1、记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。 2、要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。 3、注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push…...
基础学习:(6)nanoGPT
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1 nanoGPT 浅尝1.1 基础环境1.2 prepare.py1.2 train.py1.3 sample.py 2 再探gpt2.1 layer_norm2.2 KQV 和 self attention2.3 masked self-attention2.4 调用构…...
python支持自定义基准的相对误差计算
def is_within_tolerance_custom(a, b, tolerance0.1, reference“max”): “”" 支持自定义基准的相对误差计算。 参数:reference (str): 基准类型,可选 "max"(默认)、"min"、"mean"、"a"&am…...
力扣DAY52-54 | 热100 | 图论:腐烂的橘子、课程表、前缀树
前言 中等 √ 腐烂的橘子用层次遍历,课程表用俩哈希表,前缀树基本与题解一致。however不太规范。 腐烂的橘子 我的题解 层次遍历,先找出所有腐烂的橘子进入队列并记录数量,接着内层遍历第一层腐烂的橘子,上下左右四…...
java CountDownLatch用法简介
CountDownLatch倒计数锁存器 CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行 CountDownLatch用法 构造方法:CountDownLatch(int count),count指定等待的条件数(任务…...