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

HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera

HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示,添加覆盖物和移动 Camera

在现代移动应用开发中,地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力,而高德地图 Flutter SDK 则为开发者提供了丰富的地图功能。因为高德地图FlutterSDK已停止维护,并且也没有鸿蒙测的适配库,所以才有了下面的内容,本文将详细介绍如何在 HarmonyOS NEXT 中适配高德地图 Flutter SDK,实现地图展示、添加覆盖物和移动 Camera 的功能。

一、技术亮点

1.1 Flutter 的优势

  • 高效的构建效率:Flutter 的热重载特性允许开发者即时预览代码更改的影响,极大地提高了开发效率。
  • 跨平台兼容性:Flutter 应用可以在 Android、iOS 和 Web 等多个平台上运行,无需为每个平台单独开发,从而节省了开发成本。
  • 丰富的组件库:Flutter 提供了丰富的组件库,如按钮、文本框、列表等,帮助开发者轻松创建出色的用户界面。

1.2 高德地图 Flutter SDK 的优势

高德地图 Flutter SDK 提供了强大的地图功能,包括地图展示、覆盖物添加和 Camera 操作等。通过与 Flutter 的结合,开发者可以轻松实现地图相关的功能。

二、集成高德地图 SDK

首先我们的基础是要先集成高德地图的FlutterSDK

amap_flutter_map: ^3.0.0

2.1 获取 SDK

首先,你需要在高德开放平台注册并获取 SDK。别忘了申请你的高德SDK的key,具体可以参考高德地图的官网文档

2.2 从ohpm仓库获取高德地图包

 "dependencies": {"@amap/amap_lbs_common": ">=1.2.0","@amap/amap_lbs_map3d": ">=2.2.0"
}

2.3 声明权限,工程的oh-package.json5文件中添加依赖

module.json5 中添加必要的权限和模块声明。

{
..."requestPermissions": [{"name": 'ohos.permission.INTERNET',}
]
...

三、地图展示

3.1 接下来进入正题,既然是适配高德FlutterSDK,那肯定需要我们在鸿蒙端做一些重要工作

首先我们需要创建一个AMapView这个类的作用是接收Dart测过来的消息

/*** @FileName : AMapView* @Author : kirk.wang* @Time : 2025/5/7 17:19* @Description :*/
import { BinaryMessenger, MethodCall, MethodCallHandler, MethodChannel,MethodResult,StandardMethodCodec } from "@ohos/flutter_ohos";
import PlatformView, { Params } from '@ohos/flutter_ohos/src/main/ets/plugin/platform/PlatformView'import { common } from "@kit.AbilityKit";
import { AMapBuilder } from "./AMapComponent";export class AMapView extends PlatformView implements MethodCallHandler {methodChannel: MethodChannel;args?: ESObject;constructor(context: common.Context, viewId: number , args: ESObject, message: BinaryMessenger) {super();this.args = argsthis.methodChannel = new MethodChannel(message, `amap_flutter_map_${viewId}`, StandardMethodCodec.INSTANCE);this.methodChannel.setMethodCallHandler(this);}onMethodCall(call: MethodCall, result: MethodResult): void {// 接受Dart侧发来的消息let method: string = call.method;let link1: SubscribedAbstractProperty<number> = AppStorage.link('numValue');switch (method) {case 'getMessageFromFlutterView':let value: ESObject = call.args;link1.set(value)console.log("nodeController receive message from dart: ");result.success(true);break;}}getView(): WrappedBuilder<[Params]> {return new WrappedBuilder(AMapBuilder);}public sendMessage = () => {console.log("nodeController sendMessage")//向Dart侧发送消息this.methodChannel.invokeMethod('getMessageFromOhosView', 'natvie - ');}dispose(): void {}}

3.2 这个AMapView在什么时候用呢,创建一个AMapPlatformViewFactory类继承自 PlatformViewFactory,用于创建和管理地图相关的原生视图(PlatformView)

import { Any, BinaryMessenger, MessageCodec, PlatformView, PlatformViewFactory } from "@ohos/flutter_ohos";
import { common } from "@kit.AbilityKit";
import { AMapView } from "./AMapView";export default class AMapPlatformViewFactory extends PlatformViewFactory {message: BinaryMessenger;constructor(message: BinaryMessenger, createArgsCodes: MessageCodec<Object>) {super(createArgsCodes)this.message = message;}public create(context: common.Context, viewId: number, args: Any): PlatformView {return new AMapView(context, viewId, args, this.message);}}

3.3 创建地图插件,注册工厂类

/*** @FileName : AMapFlutterMapPlugin* @Author : kirk.wang* @Time : 2025/5/8 10:15* @Description : 高德地图插件*/
import {Any,BasicMessageChannel, FlutterPlugin, FlutterPluginBinding,MethodChannel,StandardMessageCodec} from "@ohos/flutter_ohos";
import AMapPlatformViewFactory from "./AMapPlatformViewFactory";export default class AMapFlutterMapPlugin implements FlutterPlugin {onDetachedFromEngine(binding: FlutterPluginBinding): void {this.channel?.setMethodCallHandler(null)}private channel?:MethodChannel;private basicChannel?: BasicMessageChannel<Any>;private VIEW_TYPE : string = "com.amap.flutter.map";getUniqueClassName(): string {return "AMapFlutterMapPlugin"}onAttachedToEngine(binding: FlutterPluginBinding): void {binding.getPlatformViewRegistry().registerViewFactory(this.VIEW_TYPE, new AMapPlatformViewFactory(binding.getBinaryMessenger(),StandardMessageCodec.INSTANCE))}
}

3.3 创建地图主视图,然后根据传递的数据设置鸿蒙端的高德原生地图,在AMapView里有一个getView,就是返回的下面的视图代码

/*** @FileName : AMapComponent* @Author : kirk.wang* @Time : 2025/5/8 14:20* @Description : 地图主视图*/
import {AMap,BitmapDescriptorFactory,CameraUpdateFactory,LatLng,MapsInitializer,MapView,MapViewComponent,MapViewManager,MarkerOptions
} from '@amap/amap_lbs_map3d'
import { Params } from '@ohos/flutter_ohos/src/main/ets/plugin/platform/PlatformView'
import { AMapView } from './AMapView'
import { ArrayList, HashMap, List } from '@kit.ArkTS';
import image from '@ohos.multimedia.image';
import json from '@ohos.util.json';const key = "你在高德地图申请的鸿蒙端的key";@Component
struct AMapComponent {@Prop params: ParamscustomView: AMapView = this.params.platformView as AMapView@StorageLink('numValue') storageLink: string = "first"@State bkColor: Color = Color.RedaMap?: AMap;aboutToAppear(): void {MapsInitializer.setApiKey(key);MapsInitializer.setDebugMode(true);MapViewManager.getInstance().registerMapViewCreatedCallback((mapview?: MapView, mapViewName?: string) => {if (!mapview) {return;}mapview!.onCreate();mapview!.getMapAsync((map) => {this.aMap = map;})})}build() {Stack() {MapViewComponent({ mapViewName: "harmony_map_demo" }).zIndex(0)}.direction(Direction.Ltr).width('100%').height('100%')}
}@Builder
export function AMapBuilder(params: Params) {AMapComponent({ params: params }).backgroundColor(Color.Yellow)
}

四、添加覆盖物

4.1 根据接收的数据来设置覆盖物,设置地图中心点以及缩放级别

在地图上添加覆盖物时,需要将 Flutter Widget 转换为图片,然后通过原生的 Marker 接口添加到地图上。查看高德Flutter插件可知发送参数的信息,也可以在鸿蒙测断点查看,注意 以下接收数据的key不可更改,否则无法接收到数据,例如:markersToAdd、initialCameraPosition等
Flutter传输的字节数组在鸿蒙端接收有问题,导致这个地方卡了好几天┭┮﹏┭┮

  aboutToAppear(): void {MapsInitializer.setApiKey(key);MapsInitializer.setDebugMode(true);let tempList = this.customView.args?.get("markersToAdd") as List<Map<String, Object>>;let optionsList = new ArrayList<MarkerOptions>()try {tempList.forEach(async (op) => {let options = new MarkerOptions()options.setAlpha(op.get('alpha') as number);let anchor = op.get('anchor') as Array<number>options.setAnchor(anchor[0], anchor[1]);options.setClickable(op.get('clickable') as boolean);options.setDraggable(op.get('draggable') as boolean);options.setInfoWindowEnable(op.get('infoWindowEnable') as boolean);let positionList = op.get('position') as Array<number>if (positionList.length === 2) {options.setPosition(new LatLng(positionList[0], positionList[1]));}options.setZIndex(op.get('zIndex') as number);let icon = op.get('icon') as Array<string | Uint8Array>;if (icon.length >= 2) {try {//因chanel传值导致数据被破坏,无法正确识别Uint8Array参数,所以需要json转换后重新生成Uint8Array//将数据转成JSON字符串let jsonStr = json.stringify(icon[1]);//JSON字符串格式化成maplet obj = json.parse(jsonStr) as HashMap<string, number>;// 将对象转换为数组const array = Object.keys(obj).map((key): number => obj[key]);if (Array.isArray(array)) {//根据最新的数组生成Uint8Arraylet icon1 = new Uint8Array(array);//拷贝字节数组const buffer1 = icon1.buffer.slice(0);//通过字节数组生成图片let imageSource: image.ImageSource = image.createImageSource(buffer1);let decodingOption: image.DecodingOptions = {editable: true,}imageSource.createPixelMap(decodingOption).then(async (pixelmap: PixelMap) => {//向options添加图片信息options.setIcon(BitmapDescriptorFactory.fromPixelMapSync(pixelmap));//将options添加到数组optionsList.add(options);})}} catch (error) {console.error('Error:', error);}}});} catch (e) {console.log("===============Alpha:error:" + e);}

4.2 将 Flutter Widget 添加到地图

MapViewManager.getInstance().registerMapViewCreatedCallback((mapview?: MapView, mapViewName?: string) => {if (!mapview) {return;}mapview!.onCreate();mapview!.getMapAsync((map) => {this.aMap = map;//向地图添加Markersif (optionsList !== null && optionsList.length > 0) {this.aMap?.addMarkers(optionsList);}})})}

五、设置地图中心点以及缩放级别

5.1 移动 Camera

通过调用地图的 moveCamera 方法,可以移动地图的 Camera。

  aboutToAppear(): void {...MapViewManager.getInstance().registerMapViewCreatedCallback((mapview?: MapView, mapViewName?: string) => {if (!mapview) {return;}mapview!.onCreate();mapview!.getMapAsync((map) => {this.aMap = map;let cameraPosition = this.customView.args?.get("initialCameraPosition") as Map<String, Object>;let targetList = cameraPosition.get('target') as Array<number>//设置地图中心点以及缩放级别this.aMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(targetList[0], targetList[1]),cameraPosition.get('zoom') as number));...})})}

至此鸿蒙端的开发工作至此结束

七、Flutter端处理

找到Flutter端的method_channel_amap_flutter_map.dart,里面有个buildView函数,里面有判断只支持

 @overrideWidget buildView(Map<String, dynamic> creationParams,Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers,void Function(int id) onPlatformViewCreated) {if (defaultTargetPlatform == TargetPlatform.android) {creationParams['debugMode'] = kDebugMode;return AndroidView(viewType: VIEW_TYPE,onPlatformViewCreated: onPlatformViewCreated,gestureRecognizers: gestureRecognizers,creationParams: creationParams,creationParamsCodec: const StandardMessageCodec(),);} else if (defaultTargetPlatform == TargetPlatform.iOS) {return UiKitView(viewType: VIEW_TYPE,onPlatformViewCreated: onPlatformViewCreated,gestureRecognizers: gestureRecognizers,creationParams: creationParams,creationParamsCodec: const StandardMessageCodec(),);} // else if (defaultTargetPlatform == TargetPlatform.ohos) {//   return OhosView(//     viewType: VIEW_TYPE,//     onPlatformViewCreated: onPlatformViewCreated,//     gestureRecognizers: gestureRecognizers,//     creationParams: creationParams,//     creationParamsCodec: const StandardMessageCodec(),//   );// }return Text('当前平台:$defaultTargetPlatform, 不支持使用高德地图插件');}

将我注释掉的代码放开即可!接下来就可以在你的鸿蒙设备上调试了。完全按照我的代码,除了高德的key,其余的都不要随便更改哦,否则可能运行出来有问题

六、总结

通过上述步骤,你可以在 HarmonyOS NEXT 中适配高德地图 Flutter SDK,实现地图展示、添加覆盖物和移动 Camera 的功能。Flutter 的跨平台特性和高德地图的强大功能相结合,为开发者提供了极大的便利。

希望本文能够帮助你在 HarmonyOS NEXT 中成功集成高德地图 Flutter SDK,并实现所需的地图功能。如果你在开发过程中遇到任何问题,可以参考高德地图的官方文档,或在相关社区寻求帮助。

七、参考

  • Flutter中的高德地图适配鸿蒙

相关文章:

HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera

HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示&#xff0c;添加覆盖物和移动 Camera 在现代移动应用开发中&#xff0c;地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力&#xff0c;而高德地图 Flutter SDK 则为开发者提供了丰富的…...

计算机网络:手机和基站之间是通过什么传递信息的?怎么保证的防衰减,抗干扰和私密安全的?

手机与基站之间的通信依赖无线电磁波信号,其传输介质、频率选择、抗衰减/抗干扰技术及隐私保护机制共同构成了现代移动通信的核心。以下从技术原理到实际应用逐一解析: 一、信号本质与传输介质 1. 信号类型 电磁波:手机与基站通过射频(RF)电磁波传递信息,采用数字调制技…...

C#调用C++dll 过程记录

C#调用Cdll 过程记录 问题&#xff1a;1、设置修改记录2 修改对应问题3 继续出问题4 许久之后的转机5 最后的成功 如题&#xff0c;过程记录 问题&#xff1a; 提示&#xff1a;main 已经在 dllmain.obj 中定义&#xff0c;针对该问题作进一步的处理 1、设置修改记录 &…...

Vue百日学习计划Day4-8——Gemini版

番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。灵活性&#xff1a; 这仍然是一个建议性计划。某些主题&#xff08;尤其是 Flexbox 和 Grid&#xff09;可能需要比预期更多的时间来练习和理解…...

DHCP协议

DHCP协议 1、掌握DHCP的工作原理 2、会在Windows server上去部署DHCP服务 3、抓流量 正常收到攻击后 一、DHCP 1、DHCP基本概念 dhcp(动态主机配置协议)&#xff1a;主要就是给客户机提供TCP/IP参数(IP地址、子网掩码、网关、DNS等&#xff09; 2、好处 减少管理员工作…...

级联与端到端对话系统架构解析:以Moshi为例

一、对话系统架构对比 1.1 级联对话系统&#xff08;Cascaded Dialogue Systems&#xff09; 传统级联系统采用多阶段处理流程&#xff1a; 语音识别&#xff08;ASR&#xff09;&#xff1a;将24kHz音频信号通过卷积神经网络&#xff08;CNN&#xff09;和Transformer转换为…...

3、ubantu系统docker常用命令

1、自助查看docker命令 1.1、查看所有命令 docker 客户端非常简单&#xff0c;可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 angqiangwangqiang:~$ dockerUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:ru…...

【leetcode】349. 两个数组的交集

文章目录 代码1.set&#xff08;&#xff09;2. 哈希表3. 数组 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输…...

BGP联邦和发射试验

一、要求 二、需求分析 1. **拓扑与地址规划** - **AS1**&#xff1a;环回16.1.1.0/24需宣告&#xff0c;192.168.1.0/24不宣告。 - **AS3**&#xff1a;环回11.1.1.0/24需宣告&#xff0c;192.168.2.0/24不宣告。 - **AS2**&#xff1a;使用172.16.0.0/16划分子…...

LeetCode Hot100 (1/100)

目录 一、有关数组和动态数组的排序&#xff08;sort函数&#xff09; 1.普通数组的排序 基本用法 降序排序 2.vector的排序 基本用法 降序排序 二、数组长度和一些vector的基本语法 1. 静态数组长度计算​ 2. 安全获取数组长度&#xff08;C17 起&#xff09;​ 3.vecto…...

LeetCode热题100--234.回文链表--简单

1. 题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xf…...

Java—接口和抽象类

一、接口 Java 接口&#xff08;Interface&#xff09; 是面向对象编程中用于定义行为规范的核心机制。接口通过抽象方法约定“能做什么”&#xff0c;而不关心“如何做”&#xff0c;从而实现多态和代码解耦。 1.1 接口的特点 接口用interface定义接口中全为抽象方法默认用p…...

CycleISP: Real Image Restoration via Improved Data Synthesis通过改进数据合成实现真实图像恢复

摘要 大规模数据集的可用性极大释放了深度卷积神经网络&#xff08;CNN&#xff09;的潜力。然而&#xff0c;针对单图像去噪问题&#xff0c;获取真实数据集成本高昂且流程繁琐。因此&#xff0c;图像去噪算法主要基于合成数据开发与评估&#xff0c;这些数据通常通过广泛假设…...

算法题(146):最大子段和

、 审题&#xff1a; 本题需要我们找到给定数组中子段之和和最大的sum值 思路&#xff1a; 方法一&#xff1a;暴力解法 我们可以使用双层for循环&#xff0c;第一层循环负责遍历每一个数组元素&#xff0c;然后分别以他们为子段起点&#xff0c;第二层循环从第一层循环的索引开…...

centos6.10在Macbook m芯片上使用

非常好&#xff01;用 CentOS 6.10 替代 6.4 是一个明智的选择 ✅&#xff0c;原因如下&#xff1a; ⸻ ✅ 为什么选 CentOS 6.10 更好 对比项 CentOS 6.4 CentOS 6.10 发布年份 2013 年 2018 年&#xff08;CentOS 6 系列最终版&#xff09; 内核版本 2.6.32-358 2.6.32-75…...

OA 系统办公自动化包含哪些内容,关键功能模块与操作要点说明

在企业数字化转型浪潮中&#xff0c;OA 系统常被片面认知为请假审批、文件收发的工具&#xff0c;未能发挥其核心价值。部分企业引入 OA 后&#xff0c;出现员工抵触、流程卡顿、系统闲置等问题&#xff0c;根源在于对其功能定位模糊、应用模式僵化&#xff0c;导致无法实现预期…...

AI智能体的现状和应用前景

AI智能体的现状 AI智能体(AI Agents)是指能够感知环境、做出决策并执行任务的智能系统。它们通常结合了机器学习、自然语言处理、计算机视觉等技术,能够在复杂环境中自主运行。目前,AI智能体已经在多个领域取得了显著进展。 在工业领域,AI智能体被用于自动化生产线、质量…...

操作系统实验 实验3 存储器分配与回收

1.实验目的 了解动态分区分配方式中使用的数据结构和分配算法&#xff0c;并进一步加深动态分区存储管理方式及其实现过程的理解。 2.实验要求 用C语言实现首次适应算法的动态分区分配过程alloc()和回收过程free()。 一、实验内容&#xff1a; 1&#xff0e;实验内容 用C语言实…...

408考研逐题详解:2009年第13题

2009年第13题 浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示&#xff0c;且位数分别为 5 位和 7 位&#xff08;均含 2 位符号位)。若有两个数 X 2 7 29 / 32 X2^7\times29/32 X2729/32&#xff0c; Y 2 …...

什么是虚拟同步发电机

虚拟同步发电机&#xff08;Virtual Synchronous Generator, VSG&#xff09; 是一种基于电力电子技术的先进控制策略&#xff0c;通过模拟传统同步发电机的机电特性和动态行为&#xff0c;使逆变器或储能系统能够像传统发电机一样为电网提供惯性支撑、频率调节和电压稳定性支持…...

性能比拼: Linkerd vs. Istio

本内容是对知名性能评测博主 Anton Putra Linkerd vs. Istio (Rust vs. C) performance benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本内容中&#xff0c;我们将对比 Kubernetes 服务网格中的 Istio 和 Linkerd。 相关代码详见 github 我们将运行…...

FPGA: Xilinx Kintex 7实现PCIe接口

在Xilinx Kintex-7系列FPGA上实现PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;结合Vivado设计流程。以下是实现PCIe接口的详细步骤和关键点&#xff0c;适…...

《Effective Python》第2章 字符串和切片操作——Python 字符串格式化的现代选择f-strings

引言 本篇博客基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 的 Item 11 “Prefer Interpolated F-Strings Over C-style Format Strings and str.format” 的总结与延伸。 字符串格式化是 Python 编程中的常见操作&#xff0c;用于动态生成可读性高的…...

vue 去掉右边table的下拉条与下面的白色边框并补充满

::v-deep table {width: 100% !important; } ::v-deep .el-table::after, .el-table::before {display: none !important; }/* 隐藏滚动条但保留滚动功能 */ ::v-deep .el-table__body-wrapper::-webkit-scrollbar {width: 0 !important;height: 0 !important; }::v-deep .el-t…...

RabbitMq消息阻塞,立即解决方案

如果目前你的 RabbitMQ 消费者 被卡住不再消费消息&#xff0c;且消息已经到达消费者绑定队列&#xff0c;但Spring Cloud Stream 没有继续触发 StreamListener 的方法执行。这类问题一般是因为消费者线程阻塞或消息被 RabbitMQ 拒绝投递。我们可以按照下面的步骤紧急处理&…...

单片机-STM32部分:14、SPI

飞书文档https://x509p6c8to.feishu.cn/wiki/VYYnwOc9Zi6ibFk36lYcPQdRnlf 什么是SPI SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&…...

Selenium-Java版(操作元素)

选择和操控元素的基本方法 前言 选择元素 选择元素的方法 根据 id属性选择元素 根据class属性选择元素 根据tag名选择元素 通过WebElement对象选择元素 示例 等待界面元素出现 原因 解决 操控元素 点击元素 输入框 获取元素信息 获取元素文本内容 获取…...

20052012世界银行中国企业调查数据-社科数据

2005&2012世界银行中国企业调查数据-社科数据https://download.csdn.net/download/paofuluolijiang/90623828https://download.csdn.net/download/paofuluolijiang/90623828 世界银行中国企业调查数据&#xff08;World Bank Enterprise Surveys Data&#xff09;是国际金…...

学习黑客NFC技术详解

NFC技术详解&#xff1a;近距离通信的无线桥梁 &#x1f4f1;&#x1f4b3; 学习目标&#xff1a;了解NFC技术的基本原理、应用场景及安全注意事项&#xff0c;掌握这一日益普及的近场通信技术 1. NFC的概念与基础 &#x1f4e1; NFC&#xff08;Near Field Communication&…...

Java问题排查常用命令行工具速查表

Java问题排查常用命令行工具速查表 工具典型用途常用命令示例说明/场景jps列出本机所有Java进程jps -l获取Java进程PID和主类名&#xff0c;配合其它工具使用jcmd动态诊断、堆heap dump、线程dump等jcmd helpjcmd VM.flagsjcmd GC.heap_infojcmd Thread.print功能最全&#xf…...

近期搬了个家,停更了几天,明天继续哈~

近期搬了个家&#xff0c;停更了几天&#xff0c;明天继续哈&#xff5e; 近期搬家比较离谱&#xff0c;第一天下暴雨&#xff0c;冰雹&#xff0c;停电&#xff0c;第二天又停电两小时&#xff0c;截止14号晚上11:30终于完工 了&#xff0c;从西二的20 号楼到西三的19号楼&am…...

C#高级编程:IO和序列化

在 C# 编程中,输入输出(IO)和序列化是两个至关重要的概念,它们为数据的存储、读取以及在不同环境间的传输提供了强大的支持。无论是开发小型应用程序,还是构建复杂的企业级系统,深入理解并熟练运用 IO 和序列化技术都是必不可少的。​ 一、C# 中的 IO 基础​ 1、文件流…...

PyQt5完整指南:从入门到实践

引言 PyQt5是Python编程语言的一个GUI&#xff08;图形用户界面&#xff09;工具包&#xff0c;它是Qt5应用程序框架的Python绑定。Qt是一个跨平台的C应用程序开发框架&#xff0c;被广泛用于开发GUI程序和非GUI程序。PyQt5让Python开发者能够使用Python语言享受到Qt框架的强大…...

C#高级编程:加密解密

在数字化时代,数据安全是每个应用程序都必须重视的环节。无论是用户的个人信息、敏感的商业数据,还是重要的系统配置,都需要得到妥善的保护。C# 作为一种广泛应用的编程语言,提供了丰富且强大的加密解密功能,帮助开发者构建安全可靠的应用。本文将深入探讨 C# 高级编程中的…...

银行卡真伪验证助力金融合规-银行卡实名认证接口

在数字化时代&#xff0c;金融交易日益频繁&#xff0c;用户身份与银行卡信息的真实性核验成为保障资金安全、防止欺诈行为的关键环节。无论是在线支付、网络借贷、电商平台&#xff0c;还是社交软件、金融服务APP&#xff0c;均需对用户的银行卡进行严格的实名认证。为满足企业…...

html5+css3实现傅里叶变换的动态展示效果(仅供参考)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>傅里叶变换的动态展示效果</title><sty…...

SysConfig修改后`ti_msp_dl_config`文件未更新问题的解决方法(已解决)

SysConfig修改后ti_msp_dl_config文件未更新问题的解决方法 在使用SysConfig工具配置TI MSPM0系列MCU时&#xff0c;有时会遇到一个令人困惑的问题&#xff1a;在SysConfig中修改配置后&#xff0c;生成的ti_msp_dl_config.c文件内容却没有更新。这可能会导致工程无法正确编译…...

深入浅出 IPFS 在 DApps 和 NFT 中的应用:以 Pinata 实战为例

目录 IPFS背景什么是 IPFS?IPFS 在 DApps 与 NFT 中的作用什么是 Pinata?为什么使用它?使用原生IPFS上传下载文件(HTML + JavaScript 示例)使用Pinata上传下载文件(HTML + JavaScript 示例)注册并创建APIKey使用 Pinata 上传文件和JSON(HTML + JavaScript 示例)总结IP…...

深度剖析LLM的“大脑”:单层Transformer的思考模式探索

简单说一下哈 —— 咱们打算训练一个单层 Transformer 加上稀疏自编码器的小型百万参数大型语言模型&#xff08;LLM&#xff09;&#xff0c;然后去调试它的思考过程&#xff0c;看看这个 LLM 的思考和人类思考到底有多像。 LLMs 是怎么思考的呢&#xff1f; 开源 LLM 出现之后…...

(4)python开发经验

文章目录 1 使用ctypes库调用2 使用pybind11 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 使用ctypes库调用 说明&#xff1a;ctypes是一个Python内置的库&#xff0c;可以提供C兼容的数据类型…...

卷积神经网络全连接层详解:特征汇总、FCN替代与性能影响分析

【内容摘要】 本文聚焦卷积神经网络&#xff08;CNN&#xff09;的全连接层&#xff0c;详细介绍其将二维特征图转化为一维向量的过程&#xff0c;阐述全卷积网络&#xff08;FCN&#xff09;如何通过转置卷积替代全连接层以实现像素级分类&#xff0c;并分析全连接层对图像分类…...

通义千问-langchain使用构建(一)

目录 序言通义千问1获取通义千问api_key2Conda构建下本地环境3 构建一下多轮对话 LangChain1使用Langchain调用通义千问接口实现翻译 结论 序言 25年5月&#xff0c;现在基本每个大厂都有涉及大模型(Large Language Model)&#xff0c;然后在大模型基础上构建应用框架。 参考…...

六西格玛觉醒:一场数据思维的启蒙运动​

​ 当生产线上的不良品率曲线第一次在我眼前具象化为统计波动图时&#xff0c;我意识到自己正站在新旧认知的断层带上。从对着MINITAB界面手足无措的菜鸟&#xff0c;到能独立完成过程能力分析的绿带学员&#xff0c;这段学习旅程不仅重塑了我的问题解决逻辑&#xff0c;更让我…...

BitMart合约交易体验 BitMart滑点全赔的底层逻辑

美国新泽西州泽西市&#xff0c;2025年5月13日 – BitMart&#xff0c;全球领先的数字资产交易平台&#xff0c;推出了其开创性的滑点保护计划&#xff0c;旨在解决加密市场中最具挑战性且常常被忽视的风险之一&#xff1a;滑点。该计划为交易者提供了在 USDT 保证金永续合约交…...

HCIP(BFD)

一、前言 随着网络应用的广泛部署,网络发生故障极大可能导致业务异常。为了减小链路、设备故障对业 务的影响,提高网络的可靠性,网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务正常进行。BFD(Bidirectional Forwarding Detection,双向转发检测)提供…...

json-server的用法-基于 RESTful API 的本地 mock 服务

json-server 是一个非常方便的工具&#xff0c;用于快速搭建基于 RESTful API 的本地 mock 服务&#xff0c;特别适合前端开发阶段模拟后端数据接口。 &#x1f9e9; 一、安装 npm install -g json-server&#x1f680; 二、快速启动 创建一个 db.json 文件&#xff08;模拟数…...

化工单元操作试验装置系列产品JG-SX211计算机过程控制板框过滤操作实训装置

化工单元操作试验装置系列产品JG-SX211计算机过程控制板框过滤操作实训装置 一、装置功能 板框过滤岗位技能&#xff1a;板框过滤机的构造和操作方法&#xff1b;板框压滤机的操作&#xff08;装合、过滤、洗涤、卸渣、整理&#xff09;&#xff1b;洗涤速率与最终过滤速率的关…...

Linux 内核 IPv4 协议栈中的协议注册机制解析

1. 引言 在 Linux 内核的 IPv4 协议栈中,inetsw 是一个核心数据结构,负责管理不同套接字类型(如 SOCK_STREAM、SOCK_DGRAM)的协议实现。本文结合代码分析,深入探讨其设计原理、动态协议注册机制及并发安全实现。 2. inetsw 的结构与作用 2.1 定义与初始化 static struc…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-C. 常用SQL脚本模板

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 附录C. 常用SQL脚本模板速查表一、数据清洗与预处理模板二、数据聚合与分析模板三、窗口函数应用模板四、性能优化与监控模板五、数据备份与恢复模板六、权限管理与安全模板…...

Linux操作系统实战:中断源码的性能分析(转)

Linux中断是指在Linux操作系统中&#xff0c;当硬件设备或软件触发某个事件时&#xff0c;CPU会中断正在执行的任务&#xff0c;并立即处理这个事件。它是实现实时响应和处理外部事件的重要机制&#xff0c;Linux中断可以分为两种类型&#xff1a;硬件中断和软件中断&#xff0…...