-
1、简介JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.6Kernel4.14软件包 Jna4.0https://github.com/java-native-access/jna/archive/4.0.tar.gz 3、依赖安装安装操作系统自带依赖软件版本yum install ant make gcc ant-junit java-1.8.0-openjdk -y4、编译安装cd /optwget https://github.com/java-native-access/jna/archive/4.0.tar.gztar xzf 4.0.tar.gz执行命令进行编译ant5、系统配置 无6、测试mkdir tmpcd tmp/cp /opt/jna-4.0/build/jna.jar ./jar xf jna.jarfind ./ -name *.sofile ./com/sun/jna/linux-aarch64/libjnidispatch.so 如下图所示 7、参考信息 无8、FAQ 无
-
上传文件的接口 @PostMapping("/importAll") @Consumes(MediaType.MULTIPART_FORM_DATA_VALUE) public ImportDetail importAll(@RequestPart(name = "file") MultipartFile file) { return excelService.fullImportKnowledge(file); }初始异常和这个一样:https://bbs.huaweicloud.com/forum/thread-13857-1-1.html设置较长idleTimeoutInSeconds的时间后,异常日志没有了,但是问题还是一样,报500错误,查看slb日志,发现没有转发日志。nginx配置已上传附件。
-
序号课程名课程目录课程介绍材料数作业数习题数1“敏捷江湖桃花岛”侠客行项目基于华为云DevCloud服务从棉花糖挑战认识现代软件工程 第一节 棉花糖挑战 第三节 敏捷思维及Scrum概述 第四节 实训课程介绍 项目实战第一阶段:项目立项 第一节 项目建立 第二节 团队建立 第三节 项目立项 第四节 立项展示 项目实战第二阶段:产品规划 第一节 收集需求 第二节 用户故事 第三节 版本规划 第四节 原型设计 第五节 低保真需求串讲 项目实战第三阶段:技术准备 第一节 前端准备 第二节 后端准备 第三节 高保真串讲评审 第四节 选型示例代码串讲评审 项目实战第四阶段:Sprint开发 第一节 Sprint 第二节 Sprint1计划会议 第三节 Git工具 第三节 每日站会展示讲评 第四节 可视化管理 第五节 编译构建 第六节 部署发布 第七节 功能测试及BUG管理 第八节 Sprint1评审会议展示 第九节 Sprint1回顾会议 第十节 需求变更敏捷江湖桃花岛是侠客行项目,通过深入浅出的讲解,从棉花糖挑战认识现代软件工程的敏捷开发,帮助企业快速进行敏捷转型。 本课程结合高校实际教学场景,从棉花糖挑战赛这个游戏,引出对现代软件工程的认识,从而引出敏捷及scrum开发的相关概念。 紧接着通过一个典型项目,分4个阶段分别就项目立项、产品规划、技术准备和Sprint开发进行了详细的介绍。结合实践项目,搭配软件开发云,帮助学生了解整个软件开发的开发过程。 从需求管理,项目管理,到代码开发、测试、代码托管、代码质量检查、编译构建、发布、部署、流水线等方面,了解敏捷开发的整体流程,为学生毕业后进入企业工作,提前做技术储备工作。7420202第一章:信息论 第二章:概率论 第三章:线性代数 第四章:机器学习概述 第五章:关联规则 第六章:线性模型 第七章:聚类与分类 第八章:梯度下降 第九章:特征提取 第十章:集成学习 第十一章:神经网络概述 第十二章:卷积神经网络 第十三章:循环神经网络本课程讲述的是有关人工智能算法与实践的内容,并介绍那些使用该算法使用到的数学基础、相关应用及工具,以及如何在实际环境中使用它们。课程不仅仅介绍了各种人工智能算法的理论知识,更是通过建立多个实际案例、习题测评,引导学生在实际项目中学到相关知识经验,同时老师可以灵活安排学生的学习任务,有效地对学生的知识吸收情况做针对性的解决。课程开发环境为python3.6及以上 + Anaconda3 。7851873数据结构(C语言)实践教学精品课第1章 绪论 第2章 线性表的顺序存储 第3章 线性表的链式存储 第4章 一元多项式的表示 第5章 栈 第6章 队列 第7章 串 第8章 数组 第9章 树、森林和二叉树 第10章 树的遍历及应用 第11章 图的存储结构 第12章 图的遍历及应用 第13章 查找算法 第14章 排序算法 第15章 实验训练本课程对常用的数据结构做了系统的介绍,力求概念清晰,注重实际应用。课程依次介绍数据结构的基本概念、线性表、栈和队列、串和数组、树和二叉树、图结构,以及查找和排序等基本运算,用C语言作为算法描述语言,并附有典型例题与小结,便于读者总结与提高。172151364Web实践教学精品课第1章 Web开发概念和构架 第2章 HTML基础介绍 第3章 列表 第4章 超链接 第5章 表格 第6章 表单 第7章 图像与多媒体文件 第8章 使用CSS格式化网页 第9章 CSS样式属性 第10章 CSS+DIV页面布局 第11章 JavaScript基础 第12章 JavaScript事件分析 第13章 DOM和BOM 第14章 HTML5概要 第15章 HTML5网页布局新元素 第16章 微格式与微数据的语义化布局 第17章 深入了解CSS3 第18章 HTML5表单 第19章 画图(canvas) 第20章 文件与拖放技术本门课程涵盖:WEB基础、CSS、JS、H5等教学内容组成,学生可以逐步提升前端开发能力。315231705C++实践教学精品课第1章绪论 第2章C++简单程序设计 第3章函数 第4章类与对象 第5章数据的共享与保护 第6章数组、指针与字符串 第7章继承与派生 第8章多态性 第9章群体类和群体数据的组织 第10章泛型程序设计与C++标准模板库 第11章流类库与输入输出 第12章异常处理本课程主要介绍了C++语言编程相关知识,重点介绍了C++面向对象特点,介绍类、引用以及成员指针等类型的定义方法,同时介绍了函数原型、函数重载、函数内联、默认参数、省略参数的定义方法,数据成员、实例及静态数据成员、实例及静态函数成员、构造函数、析构函数、隐含参数、多态、虚函数、纯虚函数、抽象类、成员隐藏、类型转换、运算符重载、多继承、虚基类、聚合、模板以及面向对象的异常处理等基本概念均进行了详细介绍。 通过本课程,学生能够学习并了解C++语言语法,结合课程中的编程练习题,能够进一步加深学生动手能力,提升学生对C++知识的掌握和实际应用。16312886Python程序设计精品课第1章 Python语言介绍 第2章 Python语法基础 第3章 Python控制语句 第4章 Python函数与模块 第5章 Python文件的使用 第6章 面向对象程序设计 第7章 字符串 第8章 正则表达式 第9章 游戏设计 企业实践之Python编程技巧本课程主要介绍Python语言的语法及常用模块的使用,重点介绍面向对象设计,字符串操作,正则表达式等知识,同时通过游戏设计,展示Python语言的简易和强大。当前Python作为一门优秀的综合语言,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向有应用广泛,因此学好Python语言编程是非常有必要的。 本课程还结合相关的python习题,提升同学们的编程动手能力,加深对Python语言的理解,学习过程中对知识的理解程度进行及时检验。最后,通过企业实践,总结出一套行之有效的Python编程技巧,可以帮助同学们在今后的工作中少走弯路。156171307JAVA-实践教学精品课第1章Java入门 第2章基本数据类型与数组 第3章运算符、表达式与语句 第4章类与对象 第5章子类与继承 第6章接口与实现 第7章内部类与异常类 第8章常用实用类 第9章组件及事件处理 第10章输入流与输出流 第11章JDBC数据库操作 第12章Java多线程机制 第13章Java网络编程 第14章图形图像与音频 第15章泛型与集合框架本课程介绍了Java的基本数据类型、语句、类、对象、接口、内部类、异常处理、字符串、实用类、多线程、输入输出流、网络编程、JDBC、Java Swing等内容。 本课程不仅可以作为高等院校相关专业的教材,也适合自学者及软件开发人员参考使用。注重可读性和实用性,配备了大量的例题,许多例题都经过精心的考虑,既能帮助读者理解知识,又具有启发性。 本课程通俗易懂,便于自学,针对较难理解的问题,例子都是从简单到复杂,内容逐步深入,便于学习者掌握Java编程的技巧。191171298数据结构(C++)实践教学精品课第1章 绪论 第2章 线性表的顺序存储结构 第3章 线性表的链式存储结构 第4章 栈 第5章 队列 第6章 串的存储结构 第7章 数组 第8章 广义表 第9章 树的存储结构 第10章 二叉树 第11章 树的遍历 第12章 图的存储结构 第13章 图的遍历 第14章 查找 第15章 排序 第16章 算法分析 第17章 算法设计基础 第18章 递归算法 第19章 分治法与减治法 第20章 蛮力法 第21章 回溯法 第22章 分枝限界法 第23章 贪心法 第24章 动态规划法本课程介绍了数据结构、算法以及抽象数据类型的概念,介绍了线性表、栈、队列和串、数组、广义表、树和二叉树、图等常用数据结构,讨论了常用的查找、排序和索引技术,给出了较多的数据结构的应用实例,同时介绍了算法的分析与设计,和一些常用的算法。本课程内容丰富,层次清晰,讲解深入浅出,可作为计算机及相关专业本、专科数据结构课程的教材,也可供从事计算机软件开发和应用的工程技术人员阅读、参考。655484179JAVA应用程序设计第一章 Java概述 第二章 Java编程基础 第三章 JAVA程序控制结构 第四章 数组 第五章 综合案例-图书借阅系统 第六章 类和对象 第七章 继承和多态 第八章 综合案例2-汽车租赁 第九章 集合框架 第十章 异常 第十一章 抽象类和接口 第十二章 综合案例3_星云图书销售 第十三章 文件操作 第十四章 注解与多线程 第十五章 反射机制 第十六章 综合案例4_橙梦体育业务大厅 第十七章 JDBC 第十八章 分层架构 第十九章 综合案例5_鲜花商店 附加题本课程从基础语法学习开始学习JAVA编程,通过面向对象编程、抽象类与接口、文件操作、泛型集合、多线程和注解等Java语言的基础知识,逐步深入JDBC编程、分层架构等核心编程技术,详细探讨Java提供的各种软件开发技术和特性。本课程设置了五个综合案例,将案例从易到难逐步分解,最终完成整个案例。 授课目标 本课程采用“基础知识->核心应用->综合案例->企业实践”的结构和“由浅入深,由深到精”的学习模式进行编写。共19章,不仅介绍Java语言入门、面向对象编程、抽象类与接口、文件操作、泛型集合、多线程和注解等Java语言的基础知识,而且深入讲解Java的JDBC编程、分层架构等核心编程技术,详细探讨Java提供的各种软件开发技术和特性,并且每个部分配合一个综合案例进行演示,以便巩固学习效果。最后讲述软件开发云的企业一线生产环境的使用,把Java语言在华为云DevCloud中的各种应用做了案例展示,全面展现了软件开发云这一新的开发技术在Java学习中的使用方法。2381911310系统分析与设计第一章 系统分析与设计概述 第二章 系统规划 第三章 系统需求分析 第四章 系统项目管理 第五章 系统分析建模 第六章 数据库设计 第七章 系统总体设计 第八章 系统持续集成设计 第九章 系统持续交付设计 第十章 软件开发安全设计 第十一章 软件工程伦理 第十二章 基于软件开发云的在线商品管理 本课程通过DevOps与云服务相结合,基于“项目驱动”的工程实践进行能力训练,采取“基础知识→核心应用→综合案例→企业实践”的结构和“由浅入深,由深到精”的学习模式进行讲解,掌握产品经理与项目经理应具备的技能知识点,具备云服务与开发的基本能力。 系统分析设计是最复杂最棘手的人类活动之一,是软件成败的关键所在。目前软件行业经历巨大的变革,滞后的传统开发模式已经成为了传统软件行业发展的限制,“云软件”利用云计算和线上服务模式简化了用户操作,随时随地为客户解决需求,在软件行业转型中跨出了坚实的一步。 系统规划、需求分析、敏捷管理、配置管理、代码检查、编译构建、自动测试、部署发布、流水线,这些技术都是本次课程重点讲解内容,并结合华为公司的实际生产环境,针对在线服装商城项目在DevCloud上进行全生命周期的讲解。在现代化系统中,软件开发安全也变得尤为重要,本课程将通过软件开发安全模型与软件开全漏洞和编码安全等讲解如何设计一个安全的软件。作为优秀的软件开发者,不仅要有高超的技术,还要有伦理之心,本课程将通过讲授人工智能伦理和大数据伦理,为开发者全面进行工程伦理的知识讲解。 1830011C语言实践教学精品课第1章C语言基础知识 第2章C语言程序设计基础 第3章基本数据类型、运算符与表达式 第4章基本输入输出和顺序程序设计 第5章选择结构程序设计 第6章循环结构程序设计 第7章数组 第8章函数 第9章指针 第10章预处理命令 第11章复杂数据类型 第12章文件本课程适合作为高等学校计算机专业及相关专业C语言程序设计课程的教材,也可作为计算机等级考试参考书,还可供从事计算机软件开发人员参考使用。主要包含,C语言概述,数据类型,基本语句与结构化程序设计,数组,函数和模块化程序设计,指针,预处理命令,复杂数据类型,文件。附有习题,习题覆盖知识重点,题型丰富。136139912基于DevOps的黑白棋对战游戏开发项目实战通过现场互动认识现代软件工程 第一节 破冰游戏环节 游戏行业背景介绍 第一节 行业背景 黑白棋逻辑介绍 第一节 黑白棋对战逻辑 第二节 黑白棋通信逻辑 黑白棋实验指导 第一节 实验介绍 第二节 资源准备 第三节 云服务器环境配置 第四节 创建DevCloud项目 第五节 构建应用 第六节 获取playbook 第七节 部署应用 第八节 结果验证 第九节 资源释放DevOps 是目前最流行的开发模式。DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测 试、发布更加快捷、频繁和可靠。 DevCloud (华为云DevCloud) 是基于华为研发云的成功实践经验,通过云服务的方式提供 一站式云端DevOps平台。开发团队基于云服务的模式按需使用,在云端进行项目管理、配置 管理、代码检查、编译、构建、测试、部署、发布等。 本实验指导使用华为云 DevCloud 来进行黑白棋实时对战游戏的开发,通过本实验,您将能够: 1.熟悉华为云服务,如 VPC, ECS 等 2.了解黑白棋游戏开发的整体流程 3.能够利用 DevCloud 完成黑白棋游戏的开发与部署 4.熟悉使用华为云 DevCloud 完成一个线上实时对战游戏的开发流程。15657
-
前言:从19年十月五号开始投简历,到入职前前后后花了25天时间,期间面试了9家公司收到2个offer,最后也顺利入职自己心仪的公司。面试的公司类型包括:外包公司、软件开发公司、金融类型、电子商务。不得不说求职面试是一件很辛苦的事情,整天在外面奔走,是真的真的真的很累。不过结果还算满意。期间有很多第一次遇到的事情,值得记录一下这次的求职之旅。浪费时间有家公司(名字我就不说了)真的是感觉在玩弄求职者,事先hr电话约好的时间,跑到地方hr先面10分钟,说稍等,一会技术来面,等了一会,人事回来说“我们技术人员大致看了看你的简历,感觉不太符合我们公司的业务,今天就到这里吧”。当时内心瞬间就奔腾了,难道你们约人面试之前就不筛选一下简历吗?这样真的好吗?第一次遇到这样奇葩的公司,也是醉了。作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!以下资料在群文件可自行下载反悔最奇葩的一件事,也是我第一次遇到。这天天气很好,上午没有面试我就补了个觉(前一天面了两家,真的很累),下午有一家面试。我睡到10点的样子起来简单洗漱下,出去吃了个饭,准备准备就出发了,面试地点不算远,公交车20分钟,再转小黄车20分钟就到了,进去之后公司只有四个人(第一印象不好),值得加分的是办公环境还算不错。人事领着去一间办公室等待技术面,一会一个技术小哥就来了,我以为他懂iOS的(后来证明他是搞Java的),技术小哥可能是从网上找了些iOS的面试题,问了大概40分钟,之后就结束了。我也问了些问题,了解了一些公司的基本情况,初创公司、在招人、技术规模大概有20--30人,业务方向和我之前的经历很匹配,感觉还行吧。当天晚上,他们hr联系到我说面试通过了,问我这边有什么要求和想法,电话大概聊了30分钟,薪资待遇、员工福利、入职时间、入职材料等等都说好确定下来了,我为此还推掉了后一天的一个面试(懒癌犯了),最后我说同意了,让他给我发一份offer,他说好的。就这样我就认为搞定工作了,但是offer我一直没收到,为了确定一下,第二天下午我就微信他问了一下,他说考虑到公司运营成本,决定把项目外包不再招聘iOS人员了...这次真的是一万个草泥马奔腾,如果我不主动问你,你是不是就不打算和我说了?万一到入职到时间我背着小包去上班,你再和我说不需要人了让我回来,那岂不是很尴尬...卧槽,你们办事能不能靠点谱?招人之前为什么不先考虑下运营成本?这种事情也能被我碰到,真的是....拒绝当我收到目前这家公司到offer的第二天,我之前面的一家公司也联系到我说通过面试了,但是经过对比我不得不拒绝他们,但是他们的hr小姐姐一直挽留一直挽留真的是让人于心不忍啊(怎么舍得伤了hr小姐姐的心呢)...hr小姐姐的服务一直很到位,给我介绍他们到公司福利、发展前景、公司规模。但是不得已只有推掉了...被虐有一家面试的时候被面试官虐了(说是被虐,倒不如说让我有了学习的方向),这个面试官也是搞Java的,是杭州分部的技术老大,他面试的时候手里拿了四张A4纸,上面写的全是iOS面试题...这次面试持续了三个小时,iOS问的也算中规中矩,不算太难,问的算法题让我当场撸代码,在纸上撸,由于当时太紧张,没能写出来,虽然也给我留了足够的时间...不过 面试官很友好很仔细的为我讲解具体的过程,还用Java语言给我写出来,真的很niac,不过由于我的经验和能力,没有答出来,确实是点愧疚的感觉。知道了自己的不足,以后也有学习的方向了,很感谢这位面试官。纯英文面试题有家做教育的公司,去他们公司面试的时候,上来就丢一张A4纸,上面全是纯英文的面试题,不过题目偏向基础,不算太难,英文也都能看懂;面试官还特意给我解释了一下最后一个是二分法算法题,还让我不要用手机查答案(这是不相信我的能力吗?虽然我就是很菜...), 我说要把自己的手机让他暂时保管一下,他说不必了,只是提醒一下你,以前有面试者拿手机查的,只是一个提醒而已...好吧!不过这是我第一次遇到纯英文的面试题,以前没有这种经历,却也挺好,不仅考察了面试者的编程能力,也顺便考察了英文阅读能力(对了,我当年英文四级423分,泪奔...)。当然大部分面试官都是挺友好的,毕竟面试官的目的不是难倒应试者,而是考察他们的能力。面试之前刷一波面试题,真的很有必要,万一碰到一个搞Java的面你,他的问的问题很有可能是从网上直接copy过来的,哈哈。好了以上就是我最近找工作的经历,期间心态起伏的比较厉害,直到最后收到第一个offer,心中悬的石头才落下,毕竟目前iOS行情大家都懂得,我都准备好了年后再找工作的准备了....这次也许是走了狗屎运,能进一家不还错的公司,至于目前这家公司的名字,就不说了。以后还是要好好学习啊,这样找工作的时候才能有底气,未来的路还很长,加油吧,骚年。作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
-
> **说明:阅读该文档之前需要对Mqtt有一定的了解,这里不对Mqtt知识作介绍,对Mqtt的了解请自行搜索学习。主要说明一下用一个简单的Demo样例,实现和IoT平台的对接,上报数据,下发命令等** ### 一、注册设备 #### 1. 开发中心 注册设备 ##### (1)查看产品信息 > 产品信息中的 协议类型 必须为MQTT  ##### (2)注册设备 > 设备管理—>新增真实设备—>选择上面开发好的产品—>接入方式选择 直连  ##### (3)注册设备成功之后需要保存的信息 > 保存设备ID和密钥,利用其构建clientID  #### 2. 设备管理/设备接入 注册设备 ##### (1)查看产品模型 > 进入设备管理界面—>产品模型 > > 如果没有产品模型,可以点击右上角,从产品中心导入或者是本地导入 > > 注意:产品的协议类型必须为MQTT  ##### (2)注册设备 > 进入设备管理界面—>设备—>设备注册—>创建  ##### (3)注册设备成功之后需要保存的信息 > 保存设备ID和密钥,利用其构建clientID  #### 3. 北向接口 注册设备 > 注册设备(密码方式) > > https://support.huaweicloud.com/api-IoT/iot_06_0005.html ### 二、IoT平台提供的原生MQTT接口 > https://support.huaweicloud.com/api-IoT/iot_06_3002.html - Java 本篇文档基于eclipse的paho框架,该框架网上资料较多,可自行百度搜索学习。 代码中在Maven依赖上加载: ```xml <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.0</version> </dependency> ``` 或者直接引用jar包:org.eclipse.paho.client.mqttv3-1.2.0.jar #### 1.MQTT CONNECT连接鉴权 (1) 主要是证书的配置,certFile就是证书的路径 (2) 其他参数的配置请参考源码:) * Java ~~~java private static MqttClient mqttClient; //连接地址每个局点不一样,比如开发中心是:"ssl://iot-acc-dev.huaweicloud.com:8883" private static String url = "ssl://xx.xx.xx.xx:8883"; //注册直连设备的时候返回的设备ID private static String deviceID = "9a57a-***-***-816b3e"; //注册直连设备的时候返回的秘钥 private static String secret = "cbd*******3abv"; private static String curTime = curTimeStamp(); private static String password = makePwd(secret, curTime); //clientID参考API文档拼装 private static String clientId = deviceID + "_0_0_" + curTime; mqttClient = new MqttClient(url, clientId, new MemoryPersistence()); // 设置回调,这里主要写了接收消息之后的响应 mqttClient.setCallback(new MqttCallback() { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { String content = new String(message.getPayload(), "utf-8"); System.out.println("收到mqtt消息,topic: " + topic + " ,content: " + content); // 设备响应命令 commandRsp(); } @Override public void deliveryComplete(IMqttDeliveryToken arg0) { System.out.println("mqtt 发送完成!"); } @Override public void connectionLost(Throwable arg0) { System.out.println("mqtt 失去了连接!"); } }); // 连接(MQTT CONNECT连接鉴权) mqttConnection(); // 发布(设备上报数据) publish(); // 订阅(设备接收命令) subscribe(); public static MqttClient mqttConnection() { if (mqttClient != null) { try { MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); options.setKeepAliveInterval(20); options.setConnectionTimeout(100); options.setUserName(deviceID); options.setPassword(password.toCharArray()); //证书配置,mqtt.jks是平台提供的证书 String certFile = "../ca.jks"; String certPWD = "IoT@2019"; InputStream stream = new FileInputStream(certFile); SSLContext sslContext = SSLContext.getInstance("TLS"); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(stream, certPWD.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); TrustManager[] tm = tmf.getTrustManagers(); sslContext.init(null, tm, new SecureRandom()); SocketFactory factory = sslContext.getSocketFactory(); options.setSocketFactory(factory); mqttClient.connect(options); } catch (Exception e) { e.printStackTrace(); } } return mqttClient; } ~~~ #### 2.设备上报数据 > **数据上报就是往平台指定的topic上发布数据** * **Java** ```java public static void publish() { try { String message = "" + "{ \n" + "\"msgType\":\"deviceReq\", \n" + "\"data\": [{ \n"+ "\"serviceId\":\"Storage\", \n" + "\"serviceData\":{\n" + "\"storage\": 22\n" + "}\n" + "}] \n"+ "}"; MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setQos(1); mqttMessage.setPayload(message.getBytes()); String pubTopic = "/huawei/v1/devices/" + deviceID + "/data/json"; mqttClient.publish(pubTopic, mqttMessage, null, null); } catch (Exception e) { e.printStackTrace(); } } ``` #### 3.设备接收命令 > 命令接收就是订阅平台指定的topic,平台往该topic发送命令时,设备端就能收到 * Java ```java //先订阅平台的topic public static void subscribe() { String subtopic = "/huawei/v1/devices/" + deviceID + "/command/json"; mqttClient.subscribe(subtopic, 1); } // 在回调函数里面重写messageArrived方法,打印收到的消息 @Override public void messageArrived(String topic, MqttMessage message) throws Exception { String content = new String(message.getPayload(), "utf-8"); System.out.println("content:" + content); // 设备响应命令 commandRsp(); } } ``` #### 4.设备响应命令 > 1. 应用服务器要需要调用“订阅平台业务数据”API订阅**“commandRsp”**类型的通知后,才能接收到设备对控制命令的应答; > > 2. 先订阅topic(**/huawei/v1/devices/{deviceId}/command/{codecMode}**)接收到命令,然后往另外一个topic(**/huawei/v1/devices/{deviceId}/data/{codecMode}**)发数据响应给平台,就视为对这条命令的响应,但是要注意,数据上报和命令响应的topic虽然是相同的,但是他们上报的结构体是有区别的 * Java ```java public static void commandRsp() { try { String message = "\n" + "{ \n" + "\"msgType\":\"deviceRsp\", \n" + "\"mid\":1,\n\"errcode\":0, \n"+ "\"body\":{\n" + "\"result\": 0\n" + "}\n" + "}"; MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setQos(1); mqttMessage.setPayload(message.getBytes()); System.out.println("message" + message); String RspTopic = "/huawei/v1/devices/" + deviceID + "/data/json"; mqttClient.publish(RspTopic, mqttMessage, null, null); } catch (Exception e) { e.printStackTrace(); } } ``` #### 5.工具类 > 获取当前时间 ```java public static String curTimeStamp() { String TIMESTAMP_FORMAT = "yyyyMMddHH"; SimpleDateFormat sdf = new SimpleDateFormat(TIMESTAMP_FORMAT); String curTimeStamp = sdf.format(new Date(System.currentTimeMillis())); return curTimeStamp; } ``` > 生成 password ```java public static String makePwd(String secret, String curTimeStamp) { String passWord = null; try { Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(curTimeStamp.getBytes(), "HmacSHA256"); sha256_HMAC.init(secret_key); byte[] bytes = sha256_HMAC.doFinal(secret.getBytes()); passWord = byteArrayToHexString(bytes); } catch (Exception e) { System.out.println("Error HmacSHA256 ===========" + e.getMessage()); } return passWord; } public static String byteArrayToHexString(byte[] b) { StringBuilder hs = new StringBuilder(); String stmp; for (int n = 0; b != null && n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1) hs.append('0'); hs.append(stmp); } return hs.toString().toLowerCase(); } ```
-
本人独立研发的一款JAVA平台可视化组件:Matplotlib 3D for JAVA(V2.0) 。基于JAVA SE 1.5的API开发,以jar包的形式存在。超轻量级设计实现,jar文件大小不超过200KB。内含自主研发的三维几何造型、绘制算法,不依托图形硬件,不依托OpenGL、DriectX、JAVA 3D等基础库,纯JAVA语言软件实现,可以非常方便的将Matplotlib 3D for JAVA(V2.0)显示面板嵌入到自己JAVA GUI程序中。组件提供简单的外观API,可以方便生成三维效果的图形图表。支持鼠标等输入设备交互式操作,可方便的缩放和改变观察角度。V2.0版本全面显示支持动态编程,可实时生成三维模型动态改变动画。 组件下载及项目地址: 码云: https://gitee.com/tanling8334/Matplotlib-3D-for-Java Github: https://github.com/tanling8334/Matplotlib-3D-for-Java 功能及效果展示: 完整使用代码和API请参看项目地址中的Demo和Readme.md文档 欢迎大家推广使用和交流。
-
#化鲲为鹏,我有话说#如何打/解包使用jdk/bin/jar.exe工具,配置完环境变量后直接使得jar命令即可。jar命令格式jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名...{ctxu},这四个参数必须选选其一。[v f m e 0 M i],这几个是可选参数,文件名也是必须的。参数 | 说明 ---|--- -c | 创建一个jar包 -t | 显示jar中的内容列表 -x | 解压jar包 -u | 添加文件到jar包中 -f | 指定jar包的文件名 -v | 输出详细报告 -m | 指定MANIFEST.MF文件 -0 | 生成jar包时不压缩内容 -M | 不生成清单文件MANIFEST.MF -i | 为指定的jar文件创建索引文件 -C | 可在相应的目录下执行命令关于MANIFEST.MF定义:https://baike.baidu.com/item/MANIFEST.MF演示往jar包添加文件jar uf xxx.jar BOOT-INF/classes/application.yml解压jar包jar -xvf xxx.jar打jar包,不生成清单文件,不压缩jar -cvfM0 xxx.jar BOOT-INF/ META-INF/ org/或者jar -cvfM0 xxx.jar *
-
本文档资源获取:https://support.huaweicloud.com/devg-IoT/iot_02_1004.html 其实JAVA SDK使用指南中已经给出了如何使用该Demo,在这里写帖子有点重复造轮子的感觉这里主要写一下,基于该demo启动一个本地应用来接收平台推送的消息1. 下载 JAVA SDK Demo 导入eclipse 保证工程不报错 启动一个应用一般只会用到下面这两个文件 2. 打开application.properties默认回调端口:8099(可自定义,防止本地端口冲突)默认回调证书:tomcat.keystore(可自己制作回调证书,教程开发指南中有写) 3. 打开PushMessageReceiverTest.java 运行这时就启动了一个本地https的服务,回调地址已经在JAVA SDK中设置好回调地址:https://本地IP:8099/v1.0.0/messageReceiver或者:https://本地IP:8099/v1.0.0/messageReceiver/cmd4. 在浏览器导出本地服务器的回调证书详见开发指南:https://support.huaweicloud.com/devg-IoT/iot_02_6002.html5. 去平台上传证书6. 去平台订阅7. 看下eclipse控制的数据接收的打印 ================下面是启动一个不需要证书的http的本地服务===========8. 打开application.properties 注释5, 6行9. 打开PushMessageReceiverTest.java 运行回调地址:http://本地IP:8099/v1.0.0/messageReceiver或者:http://本地IP:8099/v1.0.0/messageReceiver/cmd 后续的步骤直接看上面的 6,7 步骤就好了 =========================== 分割一下 ========================================这里有一个问题,IoT平台订阅需要一个公网地址,本地启动的IP是一个内网地址,需要把内网地址映射到外网去,IoT才能够成功推送数据到你的服务器。下个帖子会说如何把内网地址映射到外网https://bbs.huaweicloud.com/forum/thread-29243-1-1.html
-
AgentLite java demo 中的 getCmdReceive(iotaMsg)方法只能被动接收命令吗?想主动调用,参数应该传什么???
-
如题: AgentLite java demo 中绑定的AgentLiteBind.java中PLATFORM_IP填什么???
-
#化鲲为鹏,我有话说# > 题外话:很高兴能够申请成功鲲鹏的公测,收到消息,第一时间申请了鲲鹏服务器,打算好好利用这段时间对鲲鹏服务器在企业应用可用性上进行测试,毕竟ARM和X86还是有很大差别的,很多企业级应用能否在鲲鹏上稳定运行,是否能够保证性能,是否可以适应技术架构及其中间件环境,是选择鲲鹏的一个重要的考量。本次我就先对java及其相关环境进行测试。这是我的第一帖,后续我还会持续对鲲鹏的测试反馈发帖交流。 首先,对于鲲鹏[官网介绍](https://www.huaweicloud.com/kunpeng/software/openjdk.html)其是支持OpenJDK环境的,但是在企业中,很少直接使用OpenJDK,而是使用oracle官方版本更多一些。那我就先在鲲鹏服务中先搭建jdk环境,本次测试使用的jdk8,分别安装OpenJDK和Oracle官方jdk环境。 ## 0. 试验环境 服务器规格: 鲲鹏通用计算增强型 | kc1.15xlarge.2 操作系统 : Ubuntu 18.04 64bit with ARM ## 1.OpenJDK 服务器初始系统中已经安装了OpenJDK,安装版本如下: ```bash openjdk version "1.8.0_212" OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03) OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode) ``` 如果你使用其他系统,可以参考[鲲鹏官方的安装说明](https://www.huaweicloud.com/kunpeng/software/openjdk.html) ## 2. Oracle官方版本 - 首先需要卸载鲲鹏上自带的openjdk ```bash apt-get autoremove openjdk-8-jdk ``` - 然后下载oracle官方jdk,这里时[下载地址](https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8u211-later-5573849.html),这里需要注意,一定要下载RAM版本的jdk,否则无法运行。 - 加压并安装jdk ```bash tar -vzxf jdk-8u212-linux-arm64-vfp-hflt.tar.gz mv jdk1.8.0_212/ jdk vi /etc/profile # 在文件最后加上下面内容 export JAVA_HOME=/opt/jdk export PATH=$PATH:$JAVA_HOME/bin ``` - 验证是否安装成功 ```bash java -version # 看到以下内容说明已经安装完成 java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode) ``` ## 3.总结 可以看到,基于鲲鹏的JAVA环境安装过程和基于X86的安装过程并没有什么区别,而且无论从开源社区还是oracke官方都是支持ARM框架的JAVA环境。而JAVA是基于跨平台的,只要能够正常运行JAVA环境,那么基于JAVA的企业级应用,都可以很容易的迁移到麒麟服务器上。
-
使用maven工程构建java 的hadoop客户端项目说明通过java操作hadoop中的hdfs分布式文件系统,首先我们要建新一个maven的java工程,然后在pom.xml导入hadoop的如果的依赖java包。再编写一个java的测试类去连接hadoop的集群环境。注意hadoop集群版本与导入hadoop-client的版本要一致,避免产生其它的问题。工程目录导入Maven的依赖包 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.0.0</version> </dependency> </dependencies>编写Java处理hadoop集群的测试类package net.togogo.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.URI; /** * 构建HdfsClient来操作hadoop集群 */ public class HdfsClient { private FileSystem fs = null; /** * 构建分布式文件系统的操作对象FileSystem */ @Before public void init() { System.out.println(" init methon start ...."); try { Configuration conf = new Configuration(); //连接集群的地址 URI uri = new URI("hdfs://192.168.20.32:9000"); fs = FileSystem.get(uri, conf, "hd"); System.out.println("FileSystem---->" + fs); } catch (Exception e) { e.printStackTrace(); } System.out.println(" init methon end ...."); } /** * 命令 hadoop fs -ls / */ @Test public void listRoot() { try { System.out.println("listRoot method ...."); //访问 hadoop fs -ls / RemoteIterator it = fs.listFiles(new Path("/"), true); //循环 while (it.hasNext()) { LocatedFileStatus lf = it.next(); System.out.println(lf.getPath().getName()); } fs.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 命令 hadoop fs -mkdir /test0831 */ @Test public void mkdir() { try { Path path = new Path("/test0831"); fs.mkdirs(path); fs.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 命令 hadoop fs -put F:/hello.log / */ @Test public void upload() { try { Path src = new Path("F:/hello.log"); Path dst = new Path("/"); fs.copyFromLocalFile(src, dst); } catch (IOException e) { e.printStackTrace(); } } /** * 命令 hadoop fs -get /hello.log F:/dsthello.log */ @Test public void download() { try { Path src = new Path("/hello.log"); Path dst = new Path("F:/dsthello.log"); fs.copyToLocalFile(src, dst); } catch (IOException e) { e.printStackTrace(); } } }腾科IT教育
-
TCP的Java支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。 TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的ServerSocket实例则**来自客户端的TCP连接请求,并为每个请求创建新的Socket实例,由于服务端在调用accept()等待客户端的连接请求时会阻塞,直到收到客户端发送的连接请求才会继续往下执行代码,因此要为每个Socket连接开启一个线程。服务器端要同时处理ServerSocket实例和Socket实例,而客户端只需要使用Socket实例。另外,每个Socket实例会关联一个InputStream和OutputStream对象,我们通过将字节写入套接字的OutputStream来发送数据,并通过从InputStream来接收数据。 TCP连接的建立步骤 客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的TCP客户端要经过下面三步操作: 1、创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接; 2.通过套接字的I/O流与服务端通信; 3、使用Socket类的close方法关闭连接。 服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的TCP服务端执行如下两步操作: 1、创建一个ServerSocket实例并指定本地端口,用来**客户端在该端口发送的TCP连接请求; 2、重复执行: 1)调用ServerSocket的accept()方法以获取客户端连接,并通过其返回值创建一个Socket实例; 2)为返回的Socket实例开启新的线程,并使用返回的Socket实例的I/O流与客户端通信; 3)通信完成后,使用Socket类的close()方法关闭该客户端的套接字连接。 TCP Socket Demo 下面给出一个客户端服务端TCP通信的Demo,该客户端在20006端口请求与服务端建立TCP连接,客户端不断接收键盘输入,并将其发送到服务端,服务端在接收到的数据前面加上“echo”字符串,并将组合后的字符串发回给客户端,如此循环,直到客户端接收到键盘输入“bye”为止。 客户端代码如下: package zyb.org.client; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import java.net.SocketTimeoutException; public class Client1 { public static void main(String[] args) throws IOException { //客户端请求与本机在20006端口建立TCP连接 Socket client = new Socket("127.0.0.1", 20006); client.setSoTimeout(10000); //获取键盘输入 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //获取Socket的输出流,用来发送数据到服务端 PrintStream out = new PrintStream(client.getOutputStream()); //获取Socket的输入流,用来接收从服务端发送过来的数据 BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())); boolean flag = true; while(flag){ System.out.print("输入信息:"); String str = input.readLine(); //发送数据到服务端 out.println(str); if("bye".equals(str)){ flag = false; }else{ try{ //从服务器端接收数据有个时间限制(系统自设,也可以自己设置),超过了这个时间,便会抛出该异常 String echo = buf.readLine(); System.out.println(echo); }catch(SocketTimeoutException e){ System.out.println("Time out, No response"); } } } input.close(); if(client != null){ //如果构造函数建立起了连接,则关闭套接字,如果没有建立起连接,自然不用关闭 client.close(); //只关闭socket,其关联的输入输出流也会被关闭 } }} 服务端需要用到多线程,这里单独写了一个多线程类,代码如下: package zyb.org.server; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket; /** * 该类为多线程类,用于服务端 */public class ServerThread implements Runnable { private Socket client = null; public ServerThread(Socket client){ this.client = client; } @Override public void run() { try{ //获取Socket的输出流,用来向客户端发送数据 PrintStream out = new PrintStream(client.getOutputStream()); //获取Socket的输入流,用来接收从客户端发送过来的数据 BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())); boolean flag =true; while(flag){ //接收从客户端发送过来的数据 String str = buf.readLine(); if(str == null || "".equals(str)){ flag = false; }else{ if("bye".equals(str)){ flag = false; }else{ //将接收到的字符串前面加上echo,发送到对应的客户端 out.println("echo:" + str); } } } out.close(); client.close(); }catch(Exception e){ e.printStackTrace(); } } } 服务端处理TCP连接请求的代码如下:package zyb.org.server; import java.net.ServerSocket;import java.net.Socket; public class Server1 { public static void main(String[] args) throws Exception{ //服务端在20006端口**客户端请求的TCP连接 ServerSocket server = new ServerSocket(20006); Socket client = null; boolean f = true; while(f){ //等待客户端的连接,如果没有获取连接 client = server.accept(); System.out.println("与客户端连接成功!"); //为每个客户端连接开启一个线程 new Thread(new ServerThread(client)).start(); } server.close(); }} 执行结果截图如下:(转载自http://3ms.huawei.com/km/blogs/details/6038177)
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签