鸿蒙OS开发实例:【窥探网络请求】

 HarmonyOS 平台中使用网络请求,需要引入 "@ohos.net.http", 并且需要在 module.json5 文件中申请网络权限, 即 “ohos.permission.INTERNET”

本篇文章将尝试使用 @ohos.net.http 来实现网络请求

场景设定

  1. WeiBo UniDemo HuaWei : 请求顺序
  2. WeiBo1 UniDemo2 HuaWei3 : 异步/同步请求时,序号表示请求回来的顺序
  3. “开始网络请求-异步” : 开始异步请求
  4. “开始网络请求-同步” : 开始同步请求
  5. “开始网络请求-自定义方法装饰器” : 采用自定义方法装饰器进行传参,进而完成网络请求

官方网络请求案例

注意:

每次请求都必须新创建一个HTTP请求实例,即只要发起请求,必须调用createHttp方法

更多鸿蒙开发应用知识已更新qr23.cn/AKFP8k参考前往。

搜狗高速浏览器截图20240326151547.png

关于 @ohos.net.http 有三个request方法

  1. request(url: string, callback: AsyncCallback): void;

    1.1 如下“官方指南代码缩减版”使用到了这个方法

  2. request(url: string, options: HttpRequestOptions, callback: AsyncCallback): void;

    2.1 如下“官方指南代码” 使用了这个方法

  3. request(url: string, options?: HttpRequestOptions): Promise;

    3.1 将在后续实践代码中使用到

// 引入包名
import http from '@ohos.net.http';// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
// 从API 8开始,使用on('headersReceive', Callback)替代on('headerReceive', AsyncCallback)。 8+
httpRequest.on('headersReceive', (header) => {console.info('header: ' + JSON.stringify(header));
});
httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定"EXAMPLE_URL",{method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET// 开发者根据自身业务需要添加header字段header: {'Content-Type': 'application/json'},// 当使用POST请求时此字段用于传递内容extraData: {"data": "data to send",},expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型usingCache: true, // 可选,默认为truepriority: 1, // 可选,默认为1connectTimeout: 60000, // 可选,默认为60000msreadTimeout: 60000, // 可选,默认为60000msusingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定}, (err, data) => {if (!err) {// data.result为HTTP响应内容,可根据业务需要进行解析console.info('Result:' + JSON.stringify(data.result));console.info('code:' + JSON.stringify(data.responseCode));// data.header为HTTP响应头,可根据业务需要进行解析console.info('header:' + JSON.stringify(data.header));console.info('cookies:' + JSON.stringify(data.cookies)); // 8+} else {console.info('error:' + JSON.stringify(err));// 取消订阅HTTP响应头事件httpRequest.off('headersReceive');// 当该请求使用完毕时,调用destroy方法主动销毁httpRequest.destroy();}}
);
// 引入包名
import http from '@ohos.net.http';// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定"EXAMPLE_URL",(err, data) => {if (!err) {// data.result为HTTP响应内容,可根据业务需要进行解析console.info('Result:' + JSON.stringify(data.result));console.info('code:' + JSON.stringify(data.responseCode));// data.header为HTTP响应头,可根据业务需要进行解析console.info('header:' + JSON.stringify(data.header));console.info('cookies:' + JSON.stringify(data.cookies)); // 8+} else {console.info('error:' + JSON.stringify(err));// 取消订阅HTTP响应头事件httpRequest.off('headersReceive');// 当该请求使用完毕时,调用destroy方法主动销毁httpRequest.destroy();}}
);

场景布局

基础页面组件代码

考虑到实际的场景会用到网络请求加载,因此这里将发挥 [@BuilderParam] 装饰器作用,先定义基础页面

组件中定义了 @Prop netLoad:boolean 变量来控制是否展示加载动画

@Component
export struct BasePage {@Prop netLoad: boolean//指向一个组件  @BuilderParam aB0: () => {}build(){Stack(){//为组件占位this.aB0()if (this.netLoad) {LoadingProgress().width(px2vp(150)).height(px2vp(150)).color(Color.Blue)}}.hitTestBehavior(HitTestMode.None)}}

主页面布局代码

import { BasePage } from './BasePage'@Entry
@Component
struct NetIndex {@State netLoad: number = 0@State msg: string = ''build() {Stack(){BasePage({netLoad: this.netLoad != 0}) {Column( {space: 20} ){Row({space: 20}){Text('WeiBo').fontColor(Color.Black)Text('UniDemo').fontColor(Color.Black)Text('HuaWei').fontColor(Color.Black)}Row({space: 20}){Text('WeiBo' + this.weiboIndex)Text('UniDemo' + this.uniIndex)Text('HuaWei' + this.huaweiIndex)}Button('开始网络请求 - 异步').fontSize(20).onClick( () => {...})Button('开始网络请求 - 同步').fontSize(20).onClick( () => {...})Button('开始网络请求-自定义方法装饰器').fontSize(20).onClick( () => {...})Scroll() {Text(this.msg).width('100%')}.scrollable(ScrollDirection.Vertical)}.width('100%').height('100%').padding({top: px2vp(120)})}}}}

简单装封装网络请求

函数传参,直接调用封装方法

WeiBo为数据结构体,暂时不用关心,后续会贴出完整代码,这里仅仅是演示网络请求用法

//引用封装好的HNet网络工具类
import HNet from './util/HNet'@State msg: string = ''getWeiBoData(){HNet.get<WeiBo>({url: 'https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_4188_-_ctg1_4188',
}).then( (r) => {this.msg = ''if(r.code == 0 && r.result){r.result.data.statuses.forEach((value: WeiBoItem) => {this.msg = this.msg.concat(value.created_at + ' ' + value.id + '\n')})} else {this.msg = r.code + ' ' + r.msg}console.log('顺序-weibo-' + (new Date().getTime() - starTime))this.netLoad--})    }

自定义方法装饰器,完成传参调用

网络请求样例

NetController.getWeiBo<WeiBo>().then( r => {......
})   

按照业务定义传参

import { Get, NetResponse } from './util/HNet'export default class BizNetController {@Get('https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_4188_-_ctg1_4188')static getWeiBo<WeiBo>(): Promise<NetResponse<WeiBo>>{ return }}

封装的网络请求代码

import http from '@ohos.net.http';//自定义网络请求参数对象    
class NetParams{url: stringextraData?: JSON
}//自定义数据公共结构体    
export class NetResponse<T> {result: Tcode: numbermsg: string
}//网络封装工具类    
class HNet {//POST 请求方法  static post<T>(options: NetParams): Promise<NetResponse<T>>{return this.request(options, http.RequestMethod.POST)}//GET 请求方法  static get<T>(options: NetParams): Promise<NetResponse<T>>{return this.request(options, http.RequestMethod.GET)}private static request<T>(options: NetParams, method: http.RequestMethod): Promise<NetResponse<T>>{let r = http.createHttp()return r.request(options.url, {method: method,extraData: options.extraData != null ? JSON.stringify(options.extraData) : null}).then( (response: http.HttpResponse) => {let netResponse = new NetResponse<T>()let dataType = typeof response.resultif(dataType === 'string'){console.log('结果为字符串类型')}if(response.responseCode == 200){netResponse.code = 0netResponse.msg = 'success'netResponse.result = JSON.parse(response.result as string)} else {//出错netResponse.code = -1netResponse.msg = 'error'}return netResponse}).catch( reject => {console.log('结果发生错误')let netResponse = new NetResponse<T>()netResponse.code = reject.codenetResponse.msg  = reject.messagereturn netResponse}).finally( () => {//网络请求完成后,需要进行销毁r.destroy()})}}export default HNet //用于装饰器传参
export function Get(targetUrl: string) : MethodDecorator {return (target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {//替换方法descriptor.value = () => {let options = new NetParams()options.url = targetUrlreturn HNet.get(options)}}}

完整代码

代码结构

net/BasePage.ets

net/NetRequest.ets

net/util/HNet.ts

net/viewmodel/WeiBoModel.ts

net/BizNetController.ets

详细代码

@Component
export struct BasePage {@Prop netLoad: boolean@BuilderParam aB0: () => {}build(){Stack(){this.aB0()if (this.netLoad) {LoadingProgress().width(px2vp(150)).height(px2vp(150)).color(Color.Blue)}}.hitTestBehavior(HitTestMode.None)}}   
import HNet from './util/HNet'
import NetController from './BizNetController'
import { WeiBo, WeiBoItem } from './viewmodel/WeiBoModel'
import { BasePage } from './BasePage'@Entry
@Component
struct NetIndex {@State netLoad: number = 0@State msg: string = ''@State weiboColor: Color = Color.Black@State uniColor: Color = Color.Black@State huaweiColor: Color = Color.Black@State weiboIndex: number = 1@State uniIndex: number = 2@State huaweiIndex: number = 3private  TEST_Target_URL: string[] = ['https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_4188_-_ctg1_4188','https://unidemo.dcloud.net.cn/api/news','https://developer.huawei.com/config/cn/head.json',]build() {Stack(){BasePage({netLoad: this.netLoad != 0}) {Column( {space: 20} ){Row({space: 20}){Text('WeiBo').fontColor(Color.Black)Text('UniDemo').fontColor(Color.Black)Text('HuaWei').fontColor(Color.Black)}Row({space: 20}){Text('WeiBo' + this.weiboIndex).fontColor(this.weiboColor)Text('UniDemo' + this.uniIndex).fontColor(this.uniColor)Text('HuaWei' + this.huaweiIndex).fontColor(this.huaweiColor)}Button('开始网络请求 - 异步').fontSize(20).onClick( () => {this.weiboColor = Color.Blackthis.uniColor = Color.Blackthis.huaweiColor = Color.Blackthis.weiboIndex = 1this.uniIndex = 2this.huaweiIndex = 3this.asyncGetData()})Button('开始网络请求 - 同步').fontSize(20).onClick( () => {this.weiboColor = Color.Blackthis.uniColor = Color.Blackthis.huaweiColor = Color.Blackthis.weiboIndex = 1this.uniIndex = 2this.huaweiIndex = 3this.syncGetData()})Button('开始网络请求-自定义方法装饰器').fontSize(20).onClick( () => {this.getWeiBoListByController()})Scroll() {Text(this.msg).width('100%')}.scrollable(ScrollDirection.Vertical)}.width('100%').height('100%').padding({top: px2vp(120)})}}}asyncGetData(){this.netLoad = 3;this.TEST_Target_URL.forEach( (value) => {HNet.get({url: value,}).then( (r) => {this.msg = JSON.stringify(r)if(value.indexOf('weibo') != -1){this.weiboColor = Color.Greenthis.weiboIndex = 3 - this.netLoad + 1} else if(value.indexOf('unidemo') != -1){this.uniColor = Color.Greenthis.uniIndex = 3 - this.netLoad + 1} else if(value.indexOf('huawei') != -1){this.huaweiColor = Color.Greenthis.huaweiIndex = 3 - this.netLoad + 1}this.netLoad--})})}async syncGetData() {let starTimelet urlthis.netLoad = 3;starTime = new Date().getTime()url = this.TEST_Target_URL[0]starTime = new Date().getTime()if(url.indexOf('weibo') != -1){console.log('顺序-请求-weibo')} else if(url.indexOf('unidemo') != -1){console.log('顺序-请求-unidemo')} else if(url.indexOf('huawei') != -1){console.log('顺序-请求-huawei')}await HNet.get<WeiBo>({url: url,}).then( (r) => {this.msg = ''if(r.code == 0 && r.result){r.result.data.statuses.forEach((value: WeiBoItem) => {this.msg = this.msg.concat(value.created_at + ' ' + value.id + '\n')})} else {this.msg = r.code + ' ' + r.msg}if(url.indexOf('weibo') != -1){this.weiboColor = Color.Greenthis.weiboIndex = 3 - this.netLoad + 1console.log('顺序-返回-weibo-' + (new Date().getTime() - starTime))} else if(url.indexOf('unidemo') != -1){this.uniColor = Color.Greenthis.uniIndex = 3 - this.netLoad + 1console.log('顺序-返回-unidemo-' + (new Date().getTime() - starTime))} else if(url.indexOf('huawei') != -1){this.huaweiColor = Color.Greenthis.huaweiIndex = 3 - this.netLoad + 1console.log('顺序-返回-huawei-' + (new Date().getTime() - starTime))}this.netLoad--})starTime = new Date().getTime()url = this.TEST_Target_URL[1]starTime = new Date().getTime()if(url.indexOf('weibo') != -1){console.log('顺序-请求-weibo')} else if(url.indexOf('unidemo') != -1){console.log('顺序-请求-unidemo')} else if(url.indexOf('huawei') != -1){console.log('顺序-请求-huawei')}await HNet.get({url: url,}).then( (r) => {this.msg = JSON.stringify(r)if(url.indexOf('weibo') != -1){this.weiboColor = Color.Greenthis.weiboIndex = 3 - this.netLoad + 1console.log('顺序-返回-weibo-' + (new Date().getTime() - starTime))} else if(url.indexOf('unidemo') != -1){this.uniColor = Color.Greenthis.uniIndex = 3 - this.netLoad + 1console.log('顺序-返回-unidemo-' + (new Date().getTime() - starTime))} else if(url.indexOf('huawei') != -1){this.huaweiColor = Color.Greenthis.huaweiIndex = 3 - this.netLoad + 1console.log('顺序-返回-huawei-' + (new Date().getTime() - starTime))}this.netLoad--})starTime = new Date().getTime()url = this.TEST_Target_URL[2]starTime = new Date().getTime()if(url.indexOf('weibo') != -1){console.log('顺序-请求-weibo')} else if(url.indexOf('unidemo') != -1){console.log('顺序-请求-unidemo')} else if(url.indexOf('huawei') != -1){console.log('顺序-请求-huawei')}await HNet.get({url: url,}).then( (r) => {this.msg = JSON.stringify(r)if(url.indexOf('weibo') != -1){this.weiboColor = Color.Greenthis.weiboIndex = 3 - this.netLoad + 1console.log('顺序-返回-weibo-' + (new Date().getTime() - starTime))} else if(url.indexOf('unidemo') != -1){this.uniColor = Color.Greenthis.uniIndex = 3 - this.netLoad + 1console.log('顺序-返回-unidemo-' + (new Date().getTime() - starTime))} else if(url.indexOf('huawei') != -1){this.huaweiColor = Color.Greenthis.huaweiIndex = 3 - this.netLoad + 1console.log('顺序-返回-huawei-' + (new Date().getTime() - starTime))}this.netLoad--})}getHuaWeiSomeDataByNet(){this.netLoad = 1let starTime = new Date().getTime()console.log('顺序-huawei-请求' + starTime)HNet.get({url: 'https://developer.huawei.com/config/cn/head.json',}).then( (r) => {this.msg = JSON.stringify(r, null, '\t')this.netLoad--console.log('顺序-huawei-' + (new Date().getTime() - starTime))})}getWeiBoListByHNet(){this.netLoad = 1let starTime = new Date().getTime()console.log('顺序-weibo-请求' + starTime)HNet.get<WeiBo>({url: 'https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_4188_-_ctg1_4188',}).then( (r) => {this.msg = ''if(r.code == 0 && r.result){r.result.data.statuses.forEach((value: WeiBoItem) => {this.msg = this.msg.concat(value.created_at + ' ' + value.id + '\n')})} else {this.msg = r.code + ' ' + r.msg}console.log('顺序-weibo-' + (new Date().getTime() - starTime))this.netLoad--})}getWeiBoListByController(){this.netLoad = 1NetController.getWeiBo<WeiBo>().then( r => {this.msg = ''if(r.code == 0 && r.result){r.result.data.statuses.forEach((value: WeiBoItem) => {this.msg = this.msg.concat(value.created_at + ' ' + value.id + '\n' + value.source + '\n')})} else {this.msg = r.code + ' ' + r.msg}this.netLoad--})}}    import { Get, NetResponse } from './util/HNet'export default class BizNetController {@Get('https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_4188_-_ctg1_4188')static getWeiBo<WeiBo>(): Promise<NetResponse<WeiBo>>{ return }}    import http from '@ohos.net.http';class NetParams{url: stringextraData?: JSON
}export class NetResponse<T> {result: Tcode: numbermsg: string
}class HNet {static post<T>(options: NetParams): Promise<NetResponse<T>>{return this.request(options, http.RequestMethod.POST)}static get<T>(options: NetParams): Promise<NetResponse<T>>{return this.request(options, http.RequestMethod.GET)}private static request<T>(options: NetParams, method: http.RequestMethod): Promise<NetResponse<T>>{let r = http.createHttp()return r.request(options.url, {method: method,extraData: options.extraData != null ? JSON.stringify(options.extraData) : null}).then( (response: http.HttpResponse) => {let netResponse = new NetResponse<T>()let dataType = typeof response.resultif(dataType === 'string'){console.log('结果为字符串类型')}if(response.responseCode == 200){netResponse.code = 0netResponse.msg = 'success'netResponse.result = JSON.parse(response.result as string)} else {//出错netResponse.code = -1netResponse.msg = 'error'}return netResponse}).catch( reject => {console.log('结果发生错误')let netResponse = new NetResponse<T>()netResponse.code = reject.codenetResponse.msg  = reject.messagereturn netResponse}).finally( () => {r.destroy()})}}export default HNetexport function Get(targetUrl: string) : MethodDecorator {return (target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {//替换方法descriptor.value = () => {let options = new NetParams()options.url = targetUrlreturn HNet.get(options)}}}export class WeiBo{ok: numberhttp_code: numberdata: WeiBoDataObj
}export class WeiBoDataObj{total_number: numberinterval: numberremind_text: stringpage: numberstatuses: Array<WeiBoItem>
}export class WeiBoItem{created_at: stringid: stringsource: stringtextLength: number
}

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

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

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

高清完整版请点击→《鸿蒙NEXT星河版开发学习文档》

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

《鸿蒙 (OpenHarmony)开发学习视频》

图片

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  1. ArkTS语言

  2. 安装DevEco Studio

  3. 运用你的第一个ArkTS应用

  4. ArkUI声明式UI开发

  5. .……

图片

《鸿蒙开发进阶》

  1. Stage模型入门

  2. 网络管理

  3. 数据管理

  4. 电话服务

  5. 分布式应用开发

  6. 通知与窗口管理

  7. 多媒体技术

  8. 安全技能

  9. 任务管理

  10. WebGL

  11. 国际化开发

  12. 应用测试

  13. DFX面向未来设计

  14. 鸿蒙系统移植和裁剪定制

  15. ……

图片

《鸿蒙开发实战》

  1. ArkTS实践

  2. UIAbility应用

  3. 网络案例

  4. ……

图片

 获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

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

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

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

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

相关文章

华为数通 HCIP-Datacom H12-831 题库补充(3/27)

2024年 HCIP-Datacom&#xff08;H12-831&#xff09;最新题库&#xff0c;完整题库请扫描上方二维码&#xff0c;持续更新。 如图所示&#xff0c;关于R4路由器通过IS-IS计算出来的IPv6路由&#xff0c;哪一选项的描述是错误的&#xff1f; A&#xff1a;R4通过IS—IS只学习到…

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园台球厅人员与设备管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图…

PCL拟合并绘制平面(二)

使用RANSAC拟合点云平面 1、C实现2、效果图 普通的点云平面拟合方式在一般情况下可以得到较好的平面拟合效果&#xff0c;但是容易出现平面拟合错误或是拟合的平面不是最优的情况。此时就需要根据自己的实际使用情况&#xff0c;调整平面拟合的迭代次数以及收敛条件。 使用RAN…

亚马逊测评新策略:解决底层环境防关联,提升下单成功率

对于做测评的环境系统&#xff0c;确保稳定性和成功率是非常重要的。市面上有各种环境方案&#xff0c;如虚拟机、模拟机、gcs、云手机、VPS等。然而&#xff0c;这些方案不仅成本高&#xff0c;而且成功率很低。因此&#xff0c;一个好的环境系统是成功的基础。 亚马逊平台的…

记录rocketMQ5.+启动报错解决过程

1.根据官方文档指引下载对应的rocketMQ源码包&#xff0c;上传到服务器解压 2. 启动NameServer nohup sh bin/mqnamesrv & 验证namesrv是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success… 3.启动BrokerProxy nohup sh bin/mqbroker -n …

第3章.引导ChatGPT精准角色扮演:高效输出专业内容

角色提示技术 角色提示技术&#xff08;role prompting technique&#xff09;&#xff0c;是通过模型扮演特定角色来产出文本的一种方法。用户为模型设定一个明确的角色&#xff0c;它就能更精准地生成符合特定上下文或听众需求的内容。 比如&#xff0c;想生成客户服务的回复…

Java作业3-字符串

题目一 代码 import java.util.*; public class Main {public static void main(String[] args) {Scanner input new Scanner( System.in );String str input.nextLine();int len str.length();StringBuilder s new StringBuilder(len);//StringBuilder类参考菜鸟教程for…

深入理解HDFS工作原理:大数据存储和容错性机制解析

** 引言&#xff1a; ** 在当今数据爆炸的时代&#xff0c;存储和管理大规模数据成为了许多组织面临的重要挑战。为了解决这一挑战&#xff0c;分布式文件系统应运而生。Hadoop分布式文件系统&#xff08;HDFS&#xff09;作为Apache Hadoop生态系统的核心组件之一&#xff…

是德科技keysight N9000B 信号分析仪

181/2461/8938产品概述&#xff1a; 工程的内涵就是将各种创意有机地联系起来&#xff0c;并解决遇到的问题。 CXA 信号分析仪具有出色的实际性能&#xff0c;它是一款出类拔萃、经济高效的基本信号表征工具。 它的功能十分强大&#xff0c;为一般用途和教育行业的用户执行测试…

深入探讨分布式ID生成方案

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

vue3数据库中存头像图片相对路径在前端用prop只能显示路径或无法显示图片只能显示alt中内容的问题的解决

不想看前情可以直接跳到头像部分代码 前情&#xff1a; 首先我们是在数据库中存图片相对路径&#xff0c;这里我们是在vue的src下的assets专门建一个文件夹img存头像图片。 然后我们如果用prop"avatar" label"头像"是只能显示图片路径的&#xff0c;即lo…

java数组与集合框架(一) -- 数据结构,数组

数据结构 概述 为什么要讲数据结构&#xff1f; 任何一个有志于从事IT领域的人员来说&#xff0c;数据结构&#xff08;Data Structure&#xff09;是一门和计算机硬件与软件都密切相关的学科&#xff0c;它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…

ctfshow web入门 XXE

XXE基础知识 XXE&#xff08;XML External Entity&#xff09;攻击是一种针对XML处理漏洞的网络安全攻击手段。攻击者利用应用程序在解析XML输入时的漏洞&#xff0c;构造恶意的XML数据&#xff0c;进而实现各种恶意目的。 所以要学习xxe就需要了解xml xml相关&#xff1a; …

计算数组元素中每个元素与其之前各元素的累积乘积ndarray.cumprod()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算数组元素中每个元素 与其之前各元素的累积乘积 ndarray.cumprod() 选择题 关于以下代码输出的结果说法正确的是&#xff1f; import numpy as np a np.array([2,4,6]) print(【显示】a ,…

彩虹外链网盘界面UI美化版超级简洁好看

彩虹外链网盘界面UI美化版 彩虹外链网盘&#xff0c;是一款PHP网盘与外链分享程序&#xff0c;支持所有格式文件的上传&#xff0c;可以生成文件外链、图片外链、音乐视频外链&#xff0c;生成外链同时自动生成相应的UBB代码和HTML代码&#xff0c;还可支持文本、图片、音乐、…

Diffusion添加噪声noise的方式有哪些?怎么向图像中添加噪声?

添加噪声的方式大致分为两种&#xff0c;一种是每张图像在任意timestep都加入一样的均匀噪声&#xff0c;另一种是按照timestep添加不同程度的噪声 一、在任意timestep都加入一样的noise batch_size 32x_start torch.rand(batch_size,3,256,256) noise torch.randn_like(x_…

XUbuntu22.04之激活Linux最新Typora版本(二百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

技巧 Win10电脑打开SMB协议共享文件,手机端查看

一. 打开 SMB1.0/CIFS文件共享支持 ⏹如下图所示&#xff0c;打开SMB1.0/CIFS文件共享支持 二. 开启网络发现 ⏹开启网络发现&#xff0c;确保共享的文件能在局域网内被发现 三. 共享文件夹到局域网 ⏹根据需要勾选需要共享的文件夹&#xff0c;共享到局域网 四. 共享文件查…

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下&#xff09;--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值&#xff0c;说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……

JDBC远程连接mysql报错:NotBefore: Sat Mar 30 16:37:41 UTC 2024

虚拟机docker已经部署了mysql&#xff0c;用navicat可以直接远程连接&#xff0c;datagrip却不能&#xff0c;如图&#xff1a; 需要在最后加上 ?useSSLfalse , 如&#xff1a;jdbc:mysql://192.168.30.128:3306?useSSLfalse navicat不用加的原因是没有使用jdbc连接&#x…