uni-app发起请求以及请求封装,上传及下载功能(六)

news2024/11/23 15:45:43

文章目录

  • 一、发起网络请求
    • 1.使用及封装
    • 2. https 请求配置自签名证书
    • 3.拦截器
  • 二、上传下载
    • 1.上传 uni.uploadFile(OBJECT)
    • 2. 下载 uni.downloadFile(OBJECT)


一、发起网络请求

uni-app中内置的uni.request()已经很强大了,简单且好用。为了让其更好用,同时支持拦截器,支持Promise 写法,特对其进行封装。同时支持H5和小程序环境,

uni.request()是一个统一的网络请求接口,支持HTTP和HTTPS协议,可以处理GET、POST等请求方法。这个API提供了基本的HTTP请求功能,可以满足大部分应用的网络通信需求。
由于uni-app是基于Vue.js的,可以使用一些适用于前端的JavaScript网络库如axios 第三方库,支持Promise API,有丰富的拦截器、配置选项和错误处理。

1.使用及封装

使用uni.request()的步骤如下:

  1. 在需要发起网络请求的页面中引入uni.request()方法。
  2. 调用uni.request()方法,并传入相应的参数,包括请求地址、请求方法、请求头部和请求数据等。
  3. 监听请求的成功和失败回调,并在回调函数中处理返回的数据。
    参数说明
参数名类型必填默认值说明平台差异说明
urlString开发者服务器接口地址
dataObject/String/ArrayBuffer请求的参数App 3.3.7 以下不支持 ArrayBuffer 类型
headerObject设置请求的 header,header 中不能设置 RefererApp、H5端会自动带上cookie,且H5端不可手动修改
methodStringGET有效值详见下方说明
timeoutNumber60000超时时间,单位 msH5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
dataTypeStringjson如果设为 json,会对返回的数据进行一次 JSON.parse,非 json 不会进行 JSON.parse
responseTypeStringtext设置响应的数据类型。合法值:text、arraybuffer支付宝小程序不支持
sslVerifyBooleantrue验证 ssl 证书仅App安卓端支持(HBuilderX 2.3.3+),不支持离线打包
deferBooleanfalse控制当前请求是否延时至首屏内容渲染后发送百度小程序 3.310.11+
successFunction收到开发者服务器成功返回的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
  • method 有效值:method有效值必须大写,每个平台支持的method有效值不同
  • success 返回参数说明
参数类型说明
dataObject/String/ArrayBuffer开发者服务器返回的数据
statusCodeNumber开发者服务器返回的 HTTP 状态码
headerObject开发者服务器返回的 HTTP Response Header
cookiesArray<string>开发者服务器返回的 cookies,格式为字符串数组
  • data 数据说明
    最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String。转换规则如下:

    • 对于 GET 方法,会将数据转换为 query string。例如 { name: ‘name’, age: 18 } 转换后的结果是 name=name&age=18。
    • 对于 POST 方法且 header[‘content-type’] 为 application/json 的数据,会进行 JSON 序列化。
    • 对于 POST 方法且 header[‘content-type’] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string。
    /**
     * 请求组件封装
     * url 请求地址
     * data 请求参数
     * method 请求的方法 默认get请求
     * contentType 请求内容类型 1 json 强求 2 form表单请求
    */
    
    function request({url, data, method='GET', contentType = '1'}) {
    	let header = {
    		'content-type': contentType == 1 ? 'application/json' : 'application/x-www-form-urlencoded'
    	}
    	let baseUrl = 'http://192.168.0.78';
    	console.log(baseUrl + url)
    	return new Promise((resolve, reject) => {
    		uni.request({
    			url: baseUrl + url,
    			data,
    			method,
    			header,
    			success: (res) => {
    				console.log(res)
    				if (res.statusCode == 200) {
    					resolve(res.data)
    				} else if (res.statusCode == 401) {
    					uni.showToast({
    						icon: 'none',
    						title: '未登录或登录状态已超时',
    						duration:1500,
    					})
    				} else if (res.statusCode == 405) {
    					uni.showToast({
    						icon: 'none',
    						title: '请求方法错误',
    						duration:1500,
    					})
    				} else {
    					uni.showToast({
    						icon: 'none',
    						title: '请求错误' + res.statusCode,
    						duration:1500,
    					})
    				}
    			},
    		})
    	})
    }
    

    在这里插入图片描述

  • 返回值
    如果希望返回一个 requestTask 对象,需要至少传入 success / fail / complete 参数中的一个

    var requestTask = uni.request({
    	url: 'http://192.168.0.18:8080/request', //仅为示例,并非真实接口地址。
    	complete: ()=> {}
    });
    requestTask.abort();
    

    如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象
    通过 requestTask,可中断请求任务。
    requestTask 对象的方法列表

    方法参数说明
    abort中断请求任务
    offHeadersReceived取消监听 HTTP Response Header 事件,仅微信小程序平台支持
    onHeadersReceived监听 HTTP Response Header 事件。会比请求完成事件更早,仅微信小程序平台支持
    const requestTask = uni.request({
    	url: 'http://192.168.0.18:8080/request', //仅为示例,并非真实接口地址。
    	data: {
            name: 'name',
            age: 18
    	},
    	success: function(res) {
    		console.log(res.data);
    	}
    });
    
    // 中断请求任务
    requestTask.abort()
    

2. https 请求配置自签名证书

uni.configMTLS(OBJECT)
https 请求配置自签名证书,只有app支持,其他都不支持

  • OBJECT 参数说明
参数类型必填说明
certificatesArray<certificate>certificates 为数组,支持为多个域名配置自签名证书
successFunction(callbackObject)接口调用成功的回调函数
failFunction(callbackObject)接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
  • certificate 参数说明 证书配置项
参数类型必填说明
hoststring对应请求的域名(注意:不要协议部分)
clientstring客户端证书(服务器端需要验证客户端证书时需要配置此项,格式要求请参考下面的证书格式说明,注意 iOS 平台客户端证书只支持 .p12 类型的证书。HarmonyOS Next 上是证书路径)
keyPathstring证书秘钥的路径,只支持 HarmonyOS Next (HBuilderX 4.31)
clientPasswordstring客户端证书对应的密码(客户端证书存在时必须配置此项。HarmonyOS Next 上是证书秘钥的密码)
serverArray<string>服务器端证书(客户端需要对服务器端证书做校验时需要配置此项,通常使用自签名证书时才需要配置,格式要求请参考下面的证书格式说明,注意 iOS 平台服务器端证书只支持 .cer 类型的证书,不仅仅验证公钥,还要验证整个证书链,请保证证书的完整性。HarmonyOS Next 不支持)
  • 证书格式说明
    证书支持两种格式,文件格式和 Base64字符串格式
    1. 文件格式说明:可将证书文件放到工程的 ‘static’ 目录中(当然也可以通过请求下载到本地),然后填写文件路径,
    2. Base64String格式说明:将证书文件的二进制转换为 Base64String 字符串,然后在字符串前面添加’data:cert/pem;base64,'前缀,示例:‘data:cert/pem;base64,xxx’ xxx 代表真实的证书 base64String
uni.configMTLS({
    certificates: [{
        'host': 'www.baidu.com',
        'client': '/static/client.p12',
        'clientPassword': '123456789',
        'server': ['/static/server.cer'],
    }],
    success ({code}) {
    	// 类型是Number	成功返回 0,失败返回相应 code 码
    }
});

3.拦截器

uni.addInterceptor(STRING, OBJECT)

  • STRING 参数说明
    需要拦截的api名称,如:uni.addInterceptor(‘request’, OBJECT) ,将拦截 uni.request()


    仅支持异步接口,如:uni.setStorage(OBJECT),暂不支持同步接口如:uni.setStorageSync(KEY,DATA)
    uniCloud请求云端接口时(callFunction、uploadFile等)也会使用uni.request发送请求,请确保拦截器内不错误的处理此类请求

  • OBJECT 参数说明

参数名类型必填默认值说明平台差异说明
invokeFunction拦截前触发
returnValueFunction方法调用后触发,处理返回值
successFunction成功回调拦截
failFunction失败回调拦截
completeFunction完成回调拦截
uni.addInterceptor('request', {
  invoke(args) {
    // 在请求发送之前的处理
    console.log('请求拦截:', args);
    // 可以修改args中的参数
    // 例如: 添加token
    // args.header = args.header || {};
    // args.header['Authorization'] = 'Bearer ' + getToken();
  },
  success(args) {
    // 在请求成功之后的处理
    console.log('请求成功拦截:', args);
  },
  fail(err) {
    // 在请求失败之后的处理
    console.error('请求失败拦截:', err);
  },
  complete() {
    // 在请求结束之后的处理
    console.log('请求结束拦截');
  }
});
 uni.addInterceptor({
  returnValue(args) {
    // 只返回 data 字段
    return args.data
  }
})

  • 删除拦截器
    uni.removeInterceptor(STRING)
    STRING:需要删除拦截器的api名称
// 移除请求拦截器
uni.removeInterceptor('request');

二、上传下载

1.上传 uni.uploadFile(OBJECT)

将本地资源上传到开发者服务器,客户端发起一个 POST 请求,其中 content-type 为 multipart/form-data。 如页面通过 uni.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。

注:
1:在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
2::App支持多文件上传,微信小程序只支持单文件上传,传多个文件需要反复调用本API。所以跨端的写法就是循环调用本API。
3:网络请求的 超时时间 可以统一在 manifest.json 中配置 networkTimeout。
4:支付宝小程序开发工具上传文件返回的http状态码为字符串形式,支付宝小程序真机返回的状态码为数字形式

  • OBJECT参数说明

    参数名类型必填说明平台差异说明
    urlString开发者服务器 url
    filesArray是(files和filePath选其一)需要上传的文件列表。使用 files 时,filePath 和 name 不生效。App、H5( 2.6.15+)
    fileTypeString开发者服务器 url仅支付宝小程序,且必填。
    fileFile要上传的文件对象。仅H5(2.6.15+)支持
    filePathString是(files和filePath选其一)要上传文件资源的路径。
    nameString文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
    headerObjectHTTP 请求 Header, header 中不能设置 Referer。
    timeoutString超时时间,单位 msH5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序、支付宝小程序、抖音小程序、快手小程序
    formDataObjectHTTP 请求中其他额外的 form data
    successString接口调用成功的回调函数
    failString接口调用失败的回调函数
    completeString接口调用结束的回调函数(调用成功、失败都会执行)
    // html
    <button @click="handleUpload">上传文件</button>
    // js
     uni.chooseImage({
    	  success: (chooseImageRes) => {
    			console.log(chooseImageRes)
    	  		const tempFilePaths = chooseImageRes.tempFilePaths;
    	  		uni.uploadFile({
    	  			url: 'http://192.168.0.18:8080/jeecg-boot/sys/common/uploadImagea', //仅为示例,非真实的接口地址
    	  			filePath: tempFilePaths[0],
    	  			name: 'file',
    	  		    formData: {
    	  		      'user': 'test'
    	  			},
    	  		 	success: (uploadFileRes) => {
    	  		 		console.log(uploadFileRes.data);
    	  			}
    	  		 });
    	  	}
    	  });
    

    console.log(chooseImageRes)打印心疼

  • 返回值
    如果希望返回一个 uploadTask 对象,需要至少传入 success / fail / complete 参数中的一个

    var uploadTask = uni.uploadFile({
    	url: 'http://192.168.0.18:8080/jeecg-boot/sys/common/uploadImagea', //仅为示例,并非真实接口地址。
    	complete: ()=> {}
    });
    uploadTask.abort();
    

    uploadTask如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象
    在这里插入图片描述
    通过uploadTask ,可以监听上传进度变化事件,以及取消上传任务
    uploadTask 对象的方法列表

    方法参数说明
    abort中断上传任务
    onProgressUpdatecallback监听上传进度变化
    onHeadersReceivedcallback监听 HTTP Response Header 事件。会比请求完成事件更早,仅微信小程序平台支持
    offProgressUpdatecallback取消监听上传进度变化事件,仅微信小程序平台支持
    offHeadersReceivedcallback取消监听 HTTP Response Header 事件,仅微信小程序平台支持
     let uploadTask =	uni.uploadFile({
    	url: 'http://192.168.0.18:8084/jeecg-boot/sys/common/uploadImagea', //仅为示例,非真实的接口地址
    	complete: ()=> {}
    });
    console.log(uploadTask)
    uploadTask.onProgressUpdate((res) => {
    	console.log(res)
    	console.log('上传进度' + res.progress);
    	console.log('已经上传的数据长度' + res.totalBytesSent);
    	console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);
    
    	// 测试条件,取消上传任务。
    	if (res.progress > 50) {
    		uploadTask.abort();
    	}
    });
    

    在这里插入图片描述
    注:后面会有文章对uni.chooseImage的介绍

2. 下载 uni.downloadFile(OBJECT)

下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。

注:
在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
在h5上是跨域的,用户需要处理好跨域问题。
网络请求的 超时时间 可以统一在 manifest.json 中配置 networkTimeout。

  • OBJECT 参数说明
参数名类型必填说明平台差异说明
urlString下载资源的 url
headerObjectHTTP 请求 Header, header 中不能设置 Referer。
timeoutString超时时间,单位 msH5、APP、微信小程序、支付宝小程序、抖音小程序、快手小程序
filePathString指定文件下载后存储的路径 (本地路径)小程序端支持(微信IOS小程序保存到相册需要添加此字段才可以正常保存)
successString下载成功后以 tempFilePath 的形式传给页面,res = {tempFilePath: ‘文件的临时路径’}
failString接口调用失败的回调函数
completeString接口调用结束的回调函数(调用成功、失败都会执行)

注: 文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,才能在应用下次启动时访问得到。

  • success 返回参数说明
参数类型说明平台差异说明
tempFilePathString临时文件路径,下载后的文件会存储到一个临时文件微信小程序、支付宝小程序、百度小程序、抖音小程序、飞书小程序
statusCodeNumber开发者服务器返回的 HTTP 状态码微信小程序、QQ小程序、百度小程序、抖音小程序、飞书小程序
apFilePathString下载文件保存的路径(本地临时文件)。入参未指定 filePath 的情况下可用支付宝小程序
filePathString用户文件路径 (本地路径)。传入 filePath 时会返回,跟传入的 filePath 一致微信小程序、支付宝小程序、抖音小程序、飞书小程序
fileContentBuffer文件内容QQ小程序
uni.downloadFile({
	url: 'http://192.168.0.18:8084/jeecg-boot/sys/common/file/test', //仅为示例,并非真实的资源
	success: (res) => {
		if (res.statusCode === 200) {
			console.log('下载成功');
		}
	}
});
  • 返回值
    如果希望返回一个 downloadTask 对象,需要至少传入 success / fail / complete 参数中的一个。

    var downloadTask = uni.downloadFile({
    	url: 'https://www.example.com/file/test', //仅为示例,并非真实接口地址。
    	complete: ()=> {}
    });
    downloadTask.abort();
    

    如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象
    通过 downloadTask,可监听下载进度变化事件,以及取消下载任务。

  • downloadTask 对象的方法列表

    方法参数说明
    abort中断下载任务
    onProgressUpdatecallback监听下载进度变化
    onHeadersReceivedcallback监听 HTTP Response Header 事件,会比请求完成事件更早,仅微信小程序平台支持
    offProgressUpdatecallback取消监听下载进度变化事件,仅微信小程序平台支持
    offHeadersReceivedcallback取消监听 HTTP Response Header 事件,仅微信小程序平台支持
    const downloadTask = uni.downloadFile({
    	url: 'http://192.168.0.18:8084/jeecg-boot/sys/common/download', //仅为示例,并非真实的资源
    	success: (res) => {
    		if (res.statusCode === 200) {
    			console.log('下载成功');
    		}
    	}
    });
    
    downloadTask.onProgressUpdate((res) => {
    	console.log('下载进度' + res.progress);
    	console.log('已经下载的数据长度' + res.totalBytesWritten);
    	console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);
    
    	// 满足测试条件,取消下载任务。
    	if (res.progress > 50) {
    		downloadTask.abort();
    	}
    });
    

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

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

相关文章

C语言 | Leetcode C语言题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; int countArrangement(int n) {int f[1 << n];memset(f, 0, sizeof(f));f[0] 1;for (int mask 1; mask < (1 << n); mask) {int num __builtin_popcount(mask);for (int i 0; i < n; i) {if (mask & (1 <<…

《Baichuan-Omni》论文精读:第1个7B全模态模型 | 能够同时处理文本、图像、视频和音频输入

技术报告Baichuan-Omni Technical ReportGitHub仓库地址 文章目录 论文摘要1. 引言简介2. 训练2.1. 高质量的多模态数据2.2. 多模态对齐预训练2.2.1. 图像-语言分支2.2.2. 视频语音分支2.2.3. 音频语言分支2.2.4. 图像-视频-音频全方位对齐 2.3. 多模态微调监督 3. 实验3.1. 语…

Cesium着色器

GLSL&#xff08;OpenGL Shading Language&#xff09;是用于编写着色器的语言 着色器类型 顶点着色器&#xff1a;负责处理每个顶点的属性&#xff0c;如位置、颜色等。片段着色器&#xff08;或像素着色器&#xff09;&#xff1a;负责计算最终像素的颜色。 <!DOCTYPE h…

基于SSM医院门诊互联电子病历管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;项目分类管理&#xff0c;项目信息管理&#xff0c;预约信息管理&#xff0c;检查信息管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&…

论文阅读笔记-Get To The Point: Summarization with Pointer-Generator Networks

前言 最近看2021ACL的文章&#xff0c;碰到了Copying Mechanism和Coverage mechanism两种技巧&#xff0c;甚是感兴趣的翻阅了原文进行阅读&#xff0c;Copying Mechanism的模型CopyNet已经进行阅读并写了阅读笔记&#xff0c;如下&#xff1a; 论文阅读笔记&#xff1a;Copyi…

unocss 添加支持使用本地 svg 预设图标,并支持更改大小

安装 pnpm install iconify/utils 在配置文件 unocss.config.ts&#xff1a; presets > presetIcons 选项中 通过 FileSystemIconLoader 加载本地图标&#xff0c;并指定目录。 import presetWeapp from unocss-preset-weapp import { extractorAttributify, transformer…

NineData云原生智能数据管理平台新功能发布|2024年10月版

10 月发布内容 本月发布 7 项更新&#xff0c;其中重点发布 2 项、功能优化 3 项、性能优化 1 项、其他发布 1 项。 重点发布​ 数据库 Devops - 数据生成​ NineData 支持在数据库中自动生成符合特定业务场景的随机数据&#xff0c;用于模拟实际生产环境中的数据情况&…

10种数据预处理中的数据泄露模式解析:识别与避免策略

在机器学习教学实践中,我们常会遇到这样一个问题:"模型表现非常出色,准确率超过90%!但当将其提交到隐藏数据集进行测试时,效果却大打折扣。问题出在哪里?"这种情况几乎总是与数据泄露有关。 当测试数据在数据准备阶段无意中泄露(渗透)到训练数据时,就会发生数据泄露…

<十六>Ceph mon 运维

Ceph 集群有故障了&#xff0c;你执行的第一个运维命令是什么&#xff1f; 我猜测是ceph -s 。无论执行的第一个命令是什么&#xff0c;都肯定是先检查Mon。 在开始之前我们有必要介绍下Paxos协议&#xff0c;毕竟Mon就是靠它来实现数据唯一性。 一&#xff1a; Paxos 协议 1…

Spring Boot的核心优势及其应用详解

目录 前言1. Spring Boot的核心优势1.1 启动依赖的集成1.2 自动化配置 2. 内嵌服务器支持2.1 内嵌Tomcat服务器2.2 独立运行与便捷部署 3. 外部配置管理3.1 多环境支持3.2 配置优先级与外部化配置 4. Spring Boot的应用场景4.1 微服务架构4.2 云原生应用 结语 前言 在现代的Ja…

8进制在线编码工具--实现8进制编码

具体前往&#xff1a;文本转八进制在线工具-将文本字符串转换为8进制编码,支持逗号&#xff0c;空格和反斜杠分隔符

Windows 命令提示符(cmd)中输入 mysql 并收到错误消息“MySQL不是内部或外部命令,也不是可运行的程序或批处理文件?

目录 背景: 过程&#xff1a; 1.找到MySQL安装的路径 2.编辑环境变量 3.打开cmd&#xff0c;输入mysql --version测试成功 总结: 背景: 很早之前安装了Mysql数据库&#xff0c;想查询一下当前安装的MySQL客户端的版本号&#xff0c;我在命令行界面输入mysql --verion命令回…

Python学习的自我理解和想法(22)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第22天&#xff0c;学的内容是正则表达式&#xff0c;明天会出一篇详细实例介绍。电脑刚修好&#xff01;开学了&#xff0c;时间不多&…

大数据-203 数据挖掘 机器学习理论 - 决策树 sklearn 剪枝参数 样本不均匀问题

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

报错场景 使用npm run dev 报错 npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 npm…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种如门控循环…

从APP小游戏到Web漏洞的发现

一、前因&#xff1a; 在对一次公司的一个麻将游戏APP进行渗透测试的时候发现&#xff0c;抓到HTTP请求的接口&#xff0c;但是反编译APK后发现没有在本身发现任何一个关于接口或者域名相关的关键字&#xff0c;对此感到了好奇。 于是直接解压后everything搜索了一下&#xff…

C++ | Leetcode C++题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; class Solution { public:int findMaxLength(vector<int>& nums) {int maxLength 0;unordered_map<int, int> mp;int counter 0;mp[counter] -1;int n nums.size();for (int i 0; i < n; i) {int num nums[i];if …

一个月调研分析标的“英伟达”

放在现在依然成立 一、移动网兴起至今的最佳股票与人工智能时代的目标 9 年移动网兴起至今&#xff0c;若选一只股票长期持有&#xff0c;最佳解是 ARM&#xff08;涨了 20 倍&#xff09;&#xff0c;因为无论系统层和应用层谁胜出&#xff0c;底层一定是芯片&#xff0c;而…

5.Java入门笔记--数组

数组就是一个容器&#xff0c;用来存储一批同种类型的数据。 1.静态初始化数组 定义数组的时候直接给数组赋值。 静态初始化数组的格式&#xff1a; //完整格式 数据类型[] 数组名 new 数据类型[]{元素1,元素2,元素3...}; int [] ages new int[]{12,24,36} double[] scor…