Android iOS 使用 ARMS 用户体验监控(RUM)的最佳实践

news2024/11/25 14:07:24

作者:元泊

引言

背景信息

随着移动互联网技术的持续演进与全民互联网时代的深入,用户在 Android、iOS 应用程序、小程序、H5 游戏及网页等多元化平台上的交互时长显著增长。这一趋势加剧了用户体验(UX)场景的复杂性,并对跨设备及多样网络环境下的性能监控提出了更高要求。在此背景下,深度剖析用户来源、浏览轨迹、驻留时长、访问速度性能,以及遭遇的任何体验障碍,不仅是解锁每位用户行为深层次需求的关键,也是驱动产品与服务优化、提升用户满意度的核心策略。

ARMS 用户体验监控介绍

ARMS RUM 是阿里云应用实时监控服务(ARMS)下的用户体验监控(RUM)产品,覆盖 Web/H5、各类平台小程序、Android、iOS、Flutter、ReactNative、Windows、macOS 等平台框架。接入 SDK 后会主动采集端侧页面性能、资源加载、API 调用、异常崩溃、卡顿、用户操作、系统信息等数据,还支持事件、日志、异常等数据按需自定义上报以满足业务数据分析需求,提供全面的性能分析、异常分析、产品分析、会话分析能力,帮助快速跟踪定位问题原因,提升产品用户使用体验。ARMS RUM 具备以下核心功能。

  • 前后端全链路打通能力,展示每跳详情,便捷剖析错慢调用
  • 记录会话轨迹,回溯用户操作,层层下钻定位根因
  • 全面采集异常信息,堆栈解析定位代码问题,便捷评估异常影响面
  • 多维度多指标页面性能统计,提供单次访问各阶段耗时分布,快速定位错慢资源
  • 资源加载和 API 调用全量采集,便捷筛选错慢、高频资源请求,多维分析资源请求性能
  • 自定义数据上报,满足业务数据采集,增强产品分析能力
  • 站点总览大盘,实时掌握访问趋势、性能指标、异常趋势、地域分布等站点信息
  • 支持各项指标告警配置,提供基于动态阈值异常检测告警
  • 提供数据探索,可进行数据多维统计,实现站点性能、用户行为灵活分析
  • 数据全开放,明细数据存储到 SLS,指标存储到 Prometheus,按需灵活使用

准备工作

在使用 ARMS 用户体验监控之前,您需要做一些准备工作。

  • 已开通应用实时监控服务(ARMS),请参见开通 ARMS [ 1]
  • 已创建对应平台的应用(支持 Android、iOS、Flutter、RN、Web、小程序、PC 等),请参见快速入门 [ 2]

产品接入

接入 Android 用户体验监控

在 Android 平台上,推荐通过 Maven 方式接入。

首先,需要在工程根目录下的 build.gradle 脚本文件中添加插件依赖,如下:

buildscript {
  repositories {
    mavenLocal()
    google()
    mavenCentral()
    gradlePluginPortal()
  }
  
  dependencies {
    // 导入阿里云 ARMS RUM 插件依赖
    // 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/android-sdk-release-notes
    classpath "com.aliyun.rum:alibabacloud-android-rum-plugin:0.3.3"
  }
}

其次,需要在工程 App 模块对应的 build.gradle 脚本启用插件并添加 SDK 依赖,如下:

// 启用阿里云ARMS RUM插件
apply plugin: "com.aliyun.rum"

dependencies {
  // 导入阿里云ARMS RUM SDK
  // 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/android-sdk-release-notes
  implementation("com.aliyun.rum:alibabacloud-android-rum-sdk:0.3.3")
}

接着,需要在 Application 的 onCreate 方法或用户隐私同意之后完成 SDK 的初始化,如下:

import com.alibabacloud.rum.AlibabaCloudRum;

public class YourApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    AlibabaCloudRum.withAppID("<your appid>") // AppID,创建RUM应用时获取。
      .withConfigAddress("<your config address>") // ConfigAddress,创建RUM应用时获取。
      .start(getApplicationContext());
  }
}

最后,完成权限和混淆规则配置。

权限配置:

<!--  必须  -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--  必须  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--  可选  -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

混淆规则配置:

#ProGuard configurations for Aliyun ARMS RUM SDK
-keep public class com.openrum.**{*;}
-keep public class openrum.**{*;}
-keep public class com.alibabacloud.rum.**{*;}
-dontwarn com.openrum.**
-dontwarn openrum.**
#End Aliyun ARMS RUM SDK

接入 iOS 用户体验监控

iOS 平台推荐通过 CocoaPods 方式接入。

首先,在 Xcode 工程的 Podfile 文件中添加最新版本的 iOS SDK,如下:

source 'https://github.com/CocoaPods/Specs.git'

target 'iOSDemo' do
  # 导入阿里云ARMS RUM SDK
  # 建议从官网获取最新版本SDK接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/ios-sdk-version-description
  pod 'AlibabaCloudRUM', '0.3.1'
end

并在项目根目录(或 Podfile 文件所在目录)下执行一下命令更新 Pod 环境:

pod install --repo-update

其次,在 main.m 或 AppDelegate.m 中导入头文件,如下:

// Objective-C
@import AlibabaCloudRUM;

// Swift
import AlibabaCloudRUM

最后,在 main 函数或 - application:didFinishLaunchingWithOptions:方法中完成 SDK 的初始化:

// Objective-C
[AlibabaCloudRUM setConfigAddress:@"<your config address>"];// ConfigAddress,创建RUM应用时获取。
[AlibabaCloudRUM startWithAppID:@"<your appId>"];// AppID,创建RUM应用时获取。

// Swift
AlibabaCloudRUM.setConfigAddress("<your config address>")// ConfigAddress,创建RUM应用时获取。
AlibabaCloudRUM.start("<your appId>")// AppID,创建RUM应用时获取。

通过以上方式,可以便捷的完成 Android、iOS SDK 的快速集成。通过这些 SDK 的集成,我们能够实时收集用户在应用中的行为数据,包括访问频率、操作路径和性能指标等。这样的数据为我们提供了极具价值的参考,使得我们能够识别用户痛点,优化应用性能,从而提升用户满意度。

接下来,我们可以利用收集到的数据进行深入分析,识别用户行为模式,制定针对性的优化策略。通过不断的监控与分析,我们将能够持续改进产品,为用户提供更加流畅的体验,进而增强用户留存率和品牌忠诚度。

常见场景分析

通过会话分析诊断异常

在用户体验监控中,会话被定义为用户与程序或网站交互的一连串活动,按照时间序列展示用户操作和相关的事件、资源请求以及崩溃、卡顿等异常事件。当出现崩溃或其他异常事件时,可以通过用户标识、用户 IP 等查询特定会话,回溯用户行为轨迹,通过上下文和错误诊断排查问题,快速定位问题根因。

如下图,当我们在异常统计中发现某个 OOM 异常次数明显升高时,可以借助会话分析能力快速定位导致 OOM 问题的根因:

在异常明细中可以找到会话 ID:

在新打开的页面中点击“会话”,可以获取到当前异常关联到的事件信息:

异常关联的事件会以时间正序展示,找到对应的异常事件,可以分析异常发生之前的事件。在本次异常事件中,事件类型为“用户行为-click”的 ConstraintLayout 事件很可能是导致本次异常的原因。

点击“ConstraintLayout”事件,可以看到是用户在 JavaCrashActivity 页面点击了“堆内存 oom”这个按钮导致的。

至此,通过用户的会话轨迹可以比较容易把异常事件与会话进行关联,从而在分析异常事件时,可以复现出用户的旅程信息,便于疑难问题的定位。

分析资源加载和 API 请求

资源加载和网络请求的性能对用户体验的影响至关重要,它会直接影响用户与应用程序之间的交互。用户体验监控提供资源加载和网络请求的性能监控,功能涵盖:趋势分析、多维度分布分析、缓慢/错误分析、指标统计分析等。

可以通过“资源加载”和“API 请求”分别进入到资源和 API 的分析页面。

左侧快捷筛选面板提供应用、资源、设备、系统、用户等维度的快捷筛选条件。可以通过资源名称对资源的 path 部分快速检索,如下图:

在资源名称中选择想要分析的资源,可以对该资源进行趋势和明细分析:

在趋势分析中,可以通过加载次数、加载缓慢次数、加载失败次数、平均加载耗时等关键指标,评估资源的整体加载状态。除此之外,还可以统计资源加载的地域、App 版本、联网方式、运营商分布等。

在资源加载明细中,可以对单条资源的加载情况进行详细分析。

在该页面中,会以图形化的方式对资源加载过程中的 DNS 查询、TCP 连接、SSL 建连、请求相应、内容传输等关键指标进行展示。可以比较便捷的看到资源加载过程中各个阶段的耗时,从而进行针对性优化。

除了耗时分布,资源请求发生时,应用版本、调用页面、地域、运营商等信息都会一同采集,便于在问题发生时进行聚类分析。

分析内嵌 H5 页面

用户体验监控支持采集 Android/iOS 内嵌 H5 页面的性能数据。不仅支持采集 JavaScript 类型的错误,还支持采集 H5 页面、H5 资源、H5 API 等相关的数据。H5 页面的性能监控数据会与 Android/iOS 原生性能监控数据通过 SessionId 关联,在同一个 Session 中,您既可以看到 Android/iOS 的性能监控数据,也能看到 H5 页面的监控数据。

分析 JavaScript 异常

异常统计>JS 错误分类,可以看到 JavaScript 相关的异常。

通过左侧的快捷筛选,可以通过设备、系统、用户等多个维度对 JavaScript 异常信息进行筛选。

在异常明细页面,可以直观的看到异常堆栈。如果明细页面透出的信息无法满足您的问题排查需要,还可以通过会话 ID 对异常进行关联分析。

点击会话 ID 关联的数值后,可以进入到如下页面:

通过分析 JavaScript 异常关联的会话以及页面等信息,可以还原在 JavaScript 异常发生时用户的行为轨迹,便于复现异常出现的场景。

分析 H5 页面性能

通过页面访问>WebView 页面,可以进入到 H5 页面性能分析的功能页面。

通过点击对应的页面名称,可以进入到页面访问明细。在该页面中,除了基础的设备、运营商、地域等信息之外,还透出了当前页面加载的性能数据。用户体验监控对页面加载耗时分布数据进行了可视化展示,通过这种方式可以比较方便的确定页面加载性能的瓶颈。为了更方便的的诊断页面加载性能,当前页面关联的资源加载等事件也会在下发以列表的形式展示,并在资源加载出现异常时标红展示,方便问题定位。

端到端链路打通

在典型的电子商务交易场景下,从用户界面触发的下单操作启动了一连串复杂的交互流程,这一过程穿越了多层架构并涉及多次向后端系统的深层次调用,共同织就了一条从客户端到服务器的端到端交易链路。在此复合型交互旅程中,任何单一节点的故障或性能瓶颈——包涵但不限于客户端逻辑处理的异常中断、后端服务响应时间的延迟增加,乃至外部不可控因素如移动网络环境的不稳定性——均具备潜在能力去阻滞交易流程的顺畅推进,严重时可导致交易失败。

进一步而言,故障根源分析在此情境下显得尤为棘手,尤其是当需精准定位问题系出自数据包在网络通道中的传输障碍,还是后端服务处理逻辑的效能低下时。通过端到端链路打通能力,可以记录请求在系统中的流转路径与状态,可以真实还原每一次请求的调用轨迹,快速定位错慢根因,并且通过请求粒度的数据关联实现业务影响面分析、业务异常排查等诉求。

通过用户体验监控进行端到端链路打通,需要先在应用设置的请求管理区域配置好需要打通链路的域名信息,如下:

当前支持 Skywalking v3 和 OpenTelemetry 协议。具体配置可以参考用户体验监控官网配置文档:https://help.aliyun.com/zh/arms/user-experience-monitoring/use-cases/mobile-association-trace

在 API 请求中勾选“包含调用链”选项,可以过滤出支持链路打通的网络 API 请求,如下:

点击右侧的“查看调用链”,可以看到具体的链路追踪详情:

进阶参考

设置用户扩展信息

用户体验监控 SDK 允许自定义设置用户相关的扩展信息,从而帮助您完成数据分析与实际用户相关联的需求场景。

1)Android 设置用户扩展信息

AlibabaCloudRum.setUserExtraInfo(new HashMap<String, Object>(){
    {
        put("shop_id", "hz_xh_234123");
        put("shop_name", "阿里云云谷店33333");
    }
});

2)iOS 设置用户扩展信息

[AlibabaCloudRUM setUserExtraInfo: 
    @{
        @"shopId": @12312313,
        @"shopName": @"云谷店"
    }
];

自定义异常

通过支持上报自定义异常,SDK 能够帮助开发者在业务逻辑出现异常时迅速捕获相关信息。这在用户体验受到影响时尤为重要,自定义异常的记录可以为开发团队提供关键信息,便于快速定位和解决问题,从而减少对用户的负面影响。需要通过调用 SDK 相关的 API 完成自定义异常数据的上报,如下:

1)Android 上报自定义异常

AlibabaCloudRum.setCustomException(
  "exceptionName-default", 
  "exceptionCauseBy-default", 
  "exceptionErrorDump-default"
);

2)iOS 上报自定义异常

[AlibabaCloudRUM setCustomException:@"exceptionName-default"
                            causeBy:@"exceptionCauseBy-default"
                          errorDump:@"exceptionErrorDump-default"
];

通过以上方式接入后,在控制台的异常统计 > 自定义页面中可以看到上报的自定义异常数据信息。

自定义事件

自定义事件允许开发者根据特定需求记录用户行为和应用事件。这种灵活性使得我们能够深入了解用户的交互方式,以及哪些功能受到用户的特别关注。通过分析这些自定义事件的数据,我们可以更好地优化用户旅程和提升产品的整体体验。需要通过调用 SDK 相关的 API 完成自定义事件数据的上报,如下:

1)Android 上报自定义事件

HashMap<String, Object> mapKv = new HashMap<>();
mapKv.put("shop_id", "hz_xh_234123");
mapKv.put("order_id", "12397495850");

double orderPrice = 123.34f;

AlibabaCloudRum.setCustomEvent("order-submit", "order", orderPrice, mapKv);

2)iOS 上报自定义事件

[AlibabaCloudRUM setCustomEvent:@"order-submit" 
                          group:@"order" 
                          value:123.34f 
                           info:@{
                                    @"shop_id": @"hz_xh_234123",
                                    @"order_id": @"12397495850"
                                }
];

关于自定义事件的更多使用方式,建议您参考官网文档 SDK 配置 [ 3]

自定义日志

自定义日志功能提供了更高效的方式来记录特定的业务逻辑和应用状态。开发者可以按照自己的需求添加日志信息,使得在问题排查和性能监测时能够获得更深入的洞察。这些日志不仅有助于调试过程,也为后期的性能优化提供了数据支持。需要通过调用 SDK 相关的 API 完成自定义事件数据的上报,如下:

1)Android 上报自定义日志

HashMap<String, Object> mapKv = new HashMap<>();
mapKv.put("shop_id", "hz_xh_234123");
mapKv.put("order_id", "12397495850");

AlibabaCloudRum.setCustomLog("submit order info: order_id: 1312344933", 
                             "order-submit", 
                             "order snapshots info", 
                             "INFO", 
                             mapKv);

2)iOS 上报自定义日志

[AlibabaCloudRUM setCustomLog:@"submit order info: order_id: 1312344933"
                         name:@"order-submit"
                    snapshots:@"order snapshots info"
                        level:@"INFO"
                         info:@{
                                    @"shop_id": @"hz_xh_234123",
                                    @"order_id": @"12397495850
                              }
];

结语

本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。ARMS 用户体验监控作为一个面向终端的实时监控服务,不仅能够提供专业的、深层次的、精细化的数据采集和洞察能力,还能通过集成 ARMS 应用监控和可观测链路 OpenTelemetry 版本进行端到端链路深度整合和分析。

相关链接:

[1] 开通 ARMS

https://help.aliyun.com/zh/arms/getting-started/activate-arms

[2] 快速入门

https://help.aliyun.com/zh/arms/user-experience-monitoring/quick-start/

[3] SDK 配置

https://help.aliyun.com/zh/arms/user-experience-monitoring/sdk-configuration/

附录:

RUM Web/H5 快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-web-h5-applications

RUM 小程序快速接入:https://help.aliyun.com/zh/arms/user-experience-monitoring/access-applet

RUM 移动端快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-mobile-applications

RUM PC 端快速接入:

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-pc-platform-application

点击此处,立即开通 ARMS 用户体验监控服务。

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

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

相关文章

谈到数据集成和数据分析,这三个概念你得分清楚!

谈及数据集成和数据分析相关的概念&#xff0c;总是会提到异构数据源、异构数据库和分布式数据库&#xff0c;他们所涉及到的方面略有不同&#xff0c;今天来详细说下它们之间的区别&#xff01; 一、异构数据源 异构数据源是指不同类型、不同结构、不同格式的数据源。 在数据…

PyQt基本功能

简单的窗口 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys # 这⾥引⼊了PyQt5.QtWidgets模块&#xff0c;这个模块包含了基本的组件 from PyQt5.QtWidgets import QApplication, QWidgetif __name__ __main__:# 每个PyQt5应⽤都必须创建⼀个应⽤对象# sys.argv是⼀…

雷达图怎么绘制?!超简单,一次性告诉你Python和R绘制方法~~

今天给大家介绍的的图表为雷达图(Radar/Spider chart),这种类型图表在生活中较常使用&#xff0c;是一种以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。较常用的场景多为分析企业经营状况(收益性、生产性、流动性、安全性和成长性…

Vatee万腾平台:企业数字化转型的加速器

在当今这个信息化、数字化高速发展的时代&#xff0c;企业要想在激烈的市场竞争中立于不败之地&#xff0c;就必须紧跟时代步伐&#xff0c;实现数字化转型。而Vatee万腾平台&#xff0c;正是这样一款能够助力企业快速、高效完成数字化转型的利器&#xff0c;它如同一位经验丰富…

【MySQL】基本查询(下):更新、删除

3.Update 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]举几个例子&#xff1a; 将孙悟空同学的数学成绩变更为 80 分&#xff1a; 将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 …

【GUI】使用 PySide6 创建一个简单的计算器

使用 PySide6 创建一个简单的计算器 在这篇博客中&#xff0c;我们将探索如何使用 PySide6 创建一个简单的计算器应用程序。PySide6 是 Python 的 Qt 绑定&#xff0c;提供了一套强大的工具来开发图形用户界面&#xff08;GUI&#xff09;应用程序。通过这个项目&#xff0c;我…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…

除了电商,API在其他行业中的应用有哪些?

API&#xff08;应用程序编程接口&#xff09;在不同行业中扮演着至关重要的角色&#xff0c;它们促进了数据共享、服务集成和业务创新。以下是API在各个行业中的一些关键应用案例和作用&#xff1a; 金融服务行业 在金融服务行业&#xff0c;API的应用正在改变游戏规则。通过…

【安装教程】飞牛私有云fnOS安装部署

原文链接&#xff1a;【安装教程】飞牛私有云fnOS安装部署 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于飞牛私有云fnOS的安装和使用指南。飞牛私有云&#xff08;fnOS&#xff09;是一款专为企业和个人用户设计的私有云操作系统&#xff0c;提供了安全、便捷…

睡眠监测免费软件

睡眠监测免费软件&#xff0c;在现代社会中&#xff0c;随着生活节奏的加快和压力的增加&#xff0c;许多人都面临着睡眠问题。失眠、浅睡、早醒等问题不仅影响着我们的身体健康&#xff0c;也对日常生活造成诸多不便。然而&#xff0c;科技的进步为我们提供了许多解决方案&…

力扣 二叉树 104. 二叉树的最大深度

104. 二叉树的最大深度 一、题目描述 二、理解 对照二叉树的递归定义&#xff1a; 如果树为空&#xff0c;则它是一个空树。如果树不为空&#xff0c;它由一个根节点和两个子树组成&#xff0c;分别是左子树和右子树&#xff0c;且左子树和右子树本身也是二叉树。 采用递归形…

潜水打捞系统助力,破解汽车打捞难题

随着人类活动的不断扩展&#xff0c;汽车落水事故频发&#xff0c;成为救援工作中的一大难题。汽车因其重量和结构特性&#xff0c;一旦沉入水体&#xff0c;打捞工作将面临巨大挑战。传统的打捞方法往往效率低下&#xff0c;且在操作过程中可能会对汽车造成进一步的损害&#…

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题&#xff1a;Leetcode 50. Pow ( x , n ) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数。 算法&#xff1a; 具体实现流程如下&#xff1a; 代码&#xff1a; class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…

Spring Boot实现的作业管理系统:师生评价一体化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【Vue】扫盲(五)Vue 的生命周期与钩子函数详解

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

LSTM时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测

本文内容&#xff1a;Python实现LSTM长短期记忆神经网络时间序列预测&#xff0c;使用的数据集为AirPassengers 目录 数据集简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 数据集简介 AirPassengers 数据集的来源可以追溯到经典的统计和时间序列分析文献。原始数据集由 Box,…

Windows下MYSQL8.0如何恢复root权限

误操作把root权限清掉导致数据库无法登录&#xff08;确实很难受&#xff09;&#xff0c;在网上找了很多方法&#xff0c;发现没有很行之有效的方法&#xff0c;在多方尝试终于找到了适合敏感宝宝体质的方法。 C:\Users\Administrator>mysql -u root -P3307 ERROR 1045 (2…

下标记数(一)

第1题 0~5出现次数&#xff08;程序填空&#xff09; 统计出一串0~5数字构成的数列中&#xff0c;6种数字各自出现的次数。 输入格式 第一行1个正整数&#xff1a;N&#xff0c;范围在[1,100]。第二行N个由0~5组成的数列。 输出格式 一行6个整数&#xff0c;分别是0~5出现的…

免杀对抗—javaASMMSF源码特征修改汇编调用CS内联C

前言 今天讲最后的两个语言java和汇编&#xff0c;那么基本所有语言就讲了一个遍了。java在后门免杀这一块呢其实是有点鸡肋的&#xff0c;其它语言编译成的是exe&#xff0c;而java编译成的是jar包&#xff0c;而jar包又得有java环境才能运行&#xff0c;不像exe是个电脑都行…

股市大涨,为什么交易所系统奔溃

最近股市大涨&#xff0c;创造了开盘 35分钟成交量、单日成交量等等突破性历史记录。伴随而来的多家交易所系统奔溃的消息。今天&#xff0c;聊一下&#xff0c;当股市大涨时&#xff0c;交易所系统为何会崩溃。 首先&#xff0c;让我们以股市的角度切入。股市的每一次大涨&am…