当前位置: 首页 > 编程日记 > 正文

大数据处理也要安全--关于MaxCompute的安全科普

image

[TOC]

1.企业大数据处理现状

当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百GB、TB乃至PB)级别。基于此,阿里云推出有了一套快速、完全托管的GB/TB/PB级数据仓库解决方案——阿里云大数据计算服务(MaxCompute,原名ODPS),MaxCompute服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务。

企业从未像今天这样可以轻易地存储和使用大数据,大数据计算已经成为越来越多企业不可获取的工作环节。然而,当您在使用大数据产品时,是否考虑过其中的安全问题呢?

庆幸的是,阿里云产品专家和安全专家早就想你所想急你所急,先行一步将安全特性带入了大数据计算产品 MaxCompute。该产品在面世之初就具备强大的安全特性,让企业可以放心地在云上使用。让我们一起来了解 MaxCompute的安全特性,以及如何安全地使用它吧。

2.MaxCompute优势

2.1 示例应用场景

常见的MaxCompute使用方法是,通过 DataWorks 或 特定客户端连接MaxCompute然后开展数据工作。

下图是笔者所在安全团队通过 DataWorks 使用 MaxCompute 功能,对态势感知日志进行深度安全分析的示例。因为 MaxCompute 支持批量操作和作业定义,因此安全团队可以将日志批量导入系统并执行安全分析,最终输出安全分析结果。整个流程设计完全图形化实现,界面简洁,操作方便。

image

2.2 MaxCompute基础特性

MaxCompute为用户提供完善的数据导入方案以及多种经典的分布式计算模型,助用户快速解决海量数据的计算问题,有效降低企业成本并保障数据安全。用户可以不必关心分布式计算和维护细节,便可轻松完成大数据分析。

概括地说(从官方抄来了),MaxCompute有如下特性优势:

  • 大规模计算存储

MaxCompute适用于100GB以上规模的存储及计算需求,最大可达EB级别。

  • 多种计算模型

MaxCompute支持SQL、MapReduce、Graph等计算类型及MPI迭代类算法。

  • 低成本

与企业自建专有云相比,MaxCompute的计算存储更高效,可以降低20%-30%的采购成本。

  • 安全性

MaxCompute具备强数据安全特性:MaxCompute已稳定支撑阿里全部离线分析业务7年以上,提供多层沙箱防护及监控。

2.3 MaxCompute安全特性

MaxCompute拥有完备的措施来保证用户的数据安全,产品在最开始设计阶段就已经考虑到多租户环境下的安全问题。除了项目的创建者外的其他人(包括阿里云的员工),未经授权无法看到用户的数据。

MaxCompute 有健全的安全体系,支持多种权限设置方法,包括基于 ACL 和角色管理实现的对 Project 级别、表级别的授权,保证只有经过授权的用户才能访问到数据。

MaxCompute 安全沙箱系统,可以防止其他的客户恶意操作。
使用 Access Id/Key 作为角色验证的方法,和阿里云账号区分开,如果出现泄露可以很快禁用,不会影响其他 Access Id/Key 的使用。

在 DataWorks 控制台甚至可以直接设置 MaxCompute 项目高级参数,包括多个安全特性。

image

重点安全配置项如下:

  • 使用ACL授权
  • 允许对象创建者访问对象
  • 允许对象创建者授权对象
  • 项目空间数据保护
  • 子账号服务
  • 使用Policy授权
  • 启动列级别访问控制

3.MaxCompute 综合安全防护机制

3.1 租户隔离与访问控制

项目空间(Project)是MaxCompute的基本组织单元,它类似于传统数据库的Database或Schema的概念,是进行多用户隔离和访问控制的主要边界。

一个用户可以同时拥有多个项目空间的权限,通过安全授权,可以在一个项目空间中访问另一个项目空间中的对象,例如表(Table)、资源(Resource)、函数(Function)和实例(Instance)。

MaxCompute 通过身份鉴别、访问控制、项目内权限管理和项目间访问控制实现整体架构安全,在具体实现方面可以通过 ACL、Role、Policy 等机制实现即时控制,为大数据使用解除所有安全顾虑。

一个完整的 MacCompute 资源使用权限校验过程如下图所示:

image

只有完成上述访问控制策略链路上每个节点的安全检查,用户才能访问MaxCompute项目权限内的资源。

身份鉴别通过 AK/AS完成,这在创建项目时需要配置,网络访问控制通过 IP 地址白名单控制(需要手工启用)、项目之间或项目内的访问控制通过 MaxComputer 的鉴权机制来实现。

3.2 基于角色的权限控制矩阵

MaxCompute 项目空间有不同的用户角色,如:项目拥有者、管理员、开发者等。
虽然可以使用Console 和开发工具对接 Maxcompute,但是图形界面的 DataWorks 仍然是大数据计算场景使用频发的交互接口,DataWorks为MaxCompute提供一站式的数据同步、业务流程设计、数据开发、管理和运维功能。

官方视频里也有一段针对DataWorks用户权限和MaxCompute项目的角色关系映射表,供参考。

image

在 DataWorks 控制台上,用户在项目空间内有不同角色,分别是:项目拥有者、项目管理员、开发、运维、部署、访客和安全管理员。阿里云 MaxCompute 项目对权限组和权限列表做了精细化的权限控制,通过Web 控制台项目管理界面可以查看到详细的DataWorks角色与权限矩列表。相关权限组如下:

  • 数据管理
  • 发布管理
  • 按钮控制
  • 代码开发
  • 函数开发
  • 节点类型控制
  • 资源管理
  • 工作流开发
  • 数据集成

每一个不同给的角色有哪些权限,在权限列表中一目了然。

image

3.3 项目内保护机制-授权

当有新用户加入项目组时,项目管理员可以通过 Web 控制台或 MaxCompute Console 将新用户加入项目组,并授权其访问项目资源。

被授权的账号既可以是在www.aliyun.com上注册过的有效邮箱地址,也可以是执行此命令的云账号的某个RAM 子账号。如果是通过支付宝、淘宝等账号联登的账户,需要从用户中心获取账号名,如下图所示:

image

MaxCompute只允许主账号将自身的RAM子账号加入到项目空间中,不允许加入其它云账号名下的RAM子账号。

简单地说:MaxCompute项目所有者可以为自己的 RAM 账号授权,可以为外部阿里云主账号授权,但不能为外部账号的子账号授权。

举例来说:项目 A 中有新成员张三加入,此时需要给张三项目操作权限。

基本操作步骤如下:项目 Owner 执行如下命令,完成用户添加,并执行 GRANT 命令实现 ACL 权限设定。


USE ProjectName;
ADD USER ALIYUN$zhangsan@aliyun.com;
GRANT List,CreateInstance on project ProjectA to USER ALIYUN$zhangsan@aliyun.com;

3.4 项目内保护机制-防数据下载

对于一些数据敏感类项目,项目所有者通过 MaxCompute控制台可以为项目设置数据保护功能,如:防止下载查询结果。

具体操作可以在项目配置界面,开启【在本项目中能下载select结果:】的开关。

image

经设置后,数据工程师将不能直接下载大数据平台的 select 查询结果。

3.5 项目内保护机制-沙箱出栈访问白名单

大数据计算平台不仅仅支持简单的查询操作,还支持部署 Python、Jar 等工具包。此类用户自定义工具组件,具备网络访问能力。为防止脚本程序内置后门或被攻击者利用,项目管理者可以设置计算环境可以访问的外部 IP 地址白名单,增强数据安全防护。

通过Web 控制台项目管理界面,可以在【沙箱白名单】菜单,配置shell任务可以访问的IP地址或域名。

image

添加成功后效果如下:

image

但设置 IP 白名单后,沙箱环境只能请求首选服务器,其它所有行为都将被拦截,效果如图:

image

3.6 项目间保护机制-项目保护开关

一个典型的应用场景是:Project B 项目的用户李四要加入 Project A项目,A 的项目所有者为李四开通了访问权限。

这个引用场景的风险是:李四有多种方法将 Project A数据导出,其中最简单的是通过下面语句转出数据。


CREATE TABLE ProjectB.Result AS SELECT * FROM ProjectA.SensitiveData

如果Project A的数据敏感度很高,不希望外流;那么管理员可以为该项目设置 ProjectProtection 开关(`SET ProjectProtection=true;
`),阻止数据外流。一旦开启 ProjectProtection开关,该项目的数据只能流入不能流出,任何直接或间接的数据导出方式都将失效。用户李四只能在项目内进行资源访问,不能在项目间流转数据。

3.7 项目间保护机制-例外与互信

企业用户的需求总是由特定场景决定的。虽然 MacCompute 支持项目保护功能,但不排除在运营过程中出现仍然需要与其它项目互访,或受信外部项目访问的情况。为此,阿里云MacCompute为系统增加了ProjectProtection模式下的例外机制和项目互信机制。

3.7.1 例外策略机制

通过编写策略文件 PolicyFile并将其加入到项目Protection 的里外中,可以实现项目空间例外访问控制策略,命令如下:

USE ProjectA;
SET ProjectProtection=true with exception policy.json;

3.7.2 项目互信与互信组

若因项目需求关系,经过严格审查,确定 Project A 和 Project B 项目之间可以完全互信,互相访问,则通过设置信任项目的方式,可以设置 A、B 项目互信,实现数据互访。具体操作指令如下:

USE ProjectA;
ADD trustedproject  ProjectB

经上述设置后,A 和 B 在同一个受信域内,允许各自授权用户的互相访问。如果出现 A 信任 B、B 信任的情况,则表明 A、B、C 三者是完全互信的,可以直接设置一个项目互信组 TrustedGroup,同样能满足项目互信要求。

3.8 Policy 授权机制

如此前章节介绍,项目访问控制除了标准的 ACL 控制策略外,还有基于 Policy 的授权机制。Policy 主要解决 ACL 无法实现的一些复杂场景授权,通常可以实现:一次操作对一组受访问课题资源的授权,带限制条件的授权等。该授权机制可以更加方便灵活地定义用户对数据的访问权限控制。以下是一个简单的实例:

以下是参考Policy的JSON样例,该策略允许user_b@aliyun.com使用odps:Select权限访问项目ProjectA的 datas 表。

{"version": "1","statement": [{"Effect": "Allow","Principal": "ALIYUN$user_b@aliyun.com","Action": ["odps: Select"],"Resource": "acs: odps: *: projects/ProjectA/tables/datas","Condition": {"StringEqual": {"odps: TaskType": ["DT","SQL"]}}}]
}

典型的 Policy 使用方法如下图:

GET POLICY;
PUT POLICY policy.json;
PUT POLICY policy.json on role <role name>;

3.9 LabelSecurity实现列级别访问控制

基于标签的安全(LabelSecurity)是项目空间级别的一种强制访问控制策略(Mandatory Access Control, MAC),它的引入是为了让项目空间管理员能更加灵活地控制用户对列级别敏感数据的访问。

LabelSecurity需要将数据和访问数据的人进行安全等级划分。在政府和金融机构,一般将数据的敏感度标记分为四类:0级 (不保密, Unclassified), 1级 (秘密, Confidential), 2级 (机密, Sensitive), 3级 (高度机密, Highly Sensitive)。MaxCompute也遵循这一分类方法。ProjectOwner需要定义明确的数据敏感等级和访问许可等级划分标准,默认时所有用户的访问许可等级为0级,数据安全级别默认为0级。

一个典型的应用场景:某数据表格中存放了大量用户基本信息,字段安全标记为0,1,,也存放了一些用户手机号等隐私信息,字段安全标记为3。此时,如果用户 A 的访问许可等级为1,则该用户只能查询等级为0和1的数据,而不能查询等级为2和3的数据。

image

LabelSecurity对敏感数据的粒度可以支持列级别,管理员可以对表的任何列设置敏感度标记(Label),一张表可以由不同敏感等级的数据列构成。

对于view,也支持和表同样的设置,即管理员可以对view设置label等级,view的等级和它对应的基表的label等级是独立的,在view创建时,默认的等级也是0。

LabelSecurity默认安全策略
在对数据和user分别设置安全等级标记之后,LabelSecurity的默认安全策略如下:
(No-ReadUp) 不允许user读取敏感等级高于用户等级的数据,除非有显式授权。
(Trusted-User) 允许user写任意等级的数据,新创建的数据默认为0级(不保密)

4.企业敏感数据处理实践

某企业底层数据系统中存放有各类敏感信息,包括:用户名、手机号、身份证号码等。数据分析团队需要对数据进行挖掘,那么下面的问题将不得不面对:

  • 哪些数据需要加密?
  • 敏感数据如何存储和使用?
  • 如果兼顾业务需要和数据安全保护?

根据上文对MaxCompute安全特性的介绍,我们可以按照如下策略开展。

  • 对于永远都不能明文显示的信息,应该在业务数据写入 RDS、MongoDB 等系统时就直接加密,不要等到写入MaxCompute 才加密。数据安全保护要在全生命周期内开展,不仅仅是大数据计算环节。此类信息通常包括:身份证全字符、银行卡全字符、企业核心业务敏感字段等。
  • 对于业务分析要用到的一般敏感数据,建议遵循最小权限原则,在落入 MaxCompute 时进行加密,如登录名、Email、手机号等。只有在真正需要的时候才做解密动作。比如:抽取1000名活跃用户进行奖品发放和短信通知。这个场景只适合通过大数据平台算出 UID,然后通过特定的业务系统完成数据提取。
  • 对安全性要求高的表,应启用标记安全功能实现列表及访问控制;
  • 对于不需要使用,但又不能明文计算的数据可以考虑摘要、截断或掩码等方式进行预处理,如:手机号前 X 位,邮箱 SHA 摘要等;
  • 如非必须,请勿开通 select 结果下载功能;
  • 如有可能,应通过安全的环境进行大数据访问,如:堡垒机、云主机等;
  • 核查项目互信机制和互信清单,确保仅授权用户才能使用;
  • 核查发布到 MaxCompute 环境中的Jar、Python 等文件包;
  • 为项目设置不同角色的人员,按需设置设置权限;
  • 定期审计项目授权清单,确认权限控制合理;
  • 区分开发环境和生产环境,Job 推送前务必核实。

image

5.参考资料

  • https://help.aliyun.com/document_detail/27927.html
  • https://help.aliyun.com/document_detail/27929.html
  • https://help.aliyun.com/document_detail/34604.html

相关文章:

自创设计模式-----答题卡模式

该模式是解决触发条件和触发结果的解耦&#xff0c;同时兼顾触发条件资源的可释放性。目的是为了获得触发结果。 /*** */package com.baidu.coolapp.answer;import java.util.Hashtable;import com.baidu.coolapp.composite.IComposite;/*** author liweigao**/public interfac…

The system cannot find the file specified

在家工作&#xff0c;程序在家里的电脑运行时&#xff0c;出现一个异常&#xff0c;还是第一见到&#xff1a; Server Error in / Application. The system cannot find the file specified Description: An unhandled exception occurred during the execution of the current…

【ACM】杭电OJ 1002

题目链接&#xff1a;杭电OJ 1002 表面上看是ab&#xff0c;很简单&#xff0c;其实是大数的相加&#xff0c;所以要考虑的因素有很多&#xff1b;&#xff08;瞬间觉得要是能用Python多好&#xff0c;哈哈哈&#xff09; 还有&#xff01;&#xff01;&#xff01; 要特别注…

Excel VBA 教程

https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.accessoft.com/article-show.asp?id16502 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别 转载于:https://www.cnblogs.com/onelikeone/p/…

NDK环境搭建

一、Eclipse关联cygwin 1. 工程->右击选择Properties->选择Builders&#xff0c;在Builders中选择New创建一个Program 2. 参数配置 二、Eclipse关联ndk-build&#xff08;自建Builder方法&#xff09; 1. Project->Properties->Builders->New&#xff0c;新建一…

【ACM】杭电OJ 2000

题目链接&#xff1a;杭电OJ 2000 注意使用getchar()&#xff0c;因为“\n”也是一个字符 #include "stdio.h" int main () {char a,b,c,t;while(scanf("%c%c%c",&a,&b,&c)!EOF){getchar();if(a > b){ta;ab;bt;}if(a > c){ta;ac;ct;}/…

bat批处理文件启动Eclipse和ivy本地仓库的配置

一、bat批处理文件启动Eclipse 所需文件&#xff1a; 1、eclipse 2、jre 3、startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set dir%CD% cd %dir%\eclipse eclipse.exe -vm %dir%\jre\bin -vmargs -Xms512M -Xmx1024M -XX:PermSize128M -XX:MaxPermSize256…

helm安装配置

简介 helm是kubernetes的包管理工具&#xff0c;用于简化部署和管理 Kubernetes 应用。用来管理charts——预先配置好的安装包资源。 Helm和charts的主要作用&#xff1a; 应用程序封装版本管理依赖检查便于应用程序分发helm是一个C/S框架的软件&#xff0c;helm相当于一个客户…

ndk-build 参数NDK_APPLICATION_MK问题

被网络传闻和文档无限坑啊&#xff0c;竟然都说的是错的参数名&#xff1a;NDK_APP_APPLICATION_MK是错误的&#xff0c;NDK_APPLICATION_MK才是正确的 I am trying to pass a preprocessor define into my native code using the Android NDK that is dependent on build conf…

【GOF】23中设计模式深析

2019独角兽企业重金招聘Python工程师标准>>> ###对象创建 原型模式、工厂模式、抽象工厂模式、生成器、单例模式###接口适配 适配器模式、桥接、外观模式、迭代器###行为扩展 访问者模式、装饰模式、责任链模式###算法封装 模板方法模式、策略模式、命令模式、###性…

【ACM】杭电OJ 2005

题目链接&#xff1a;杭电OJ 2005 第一次写的时候&#xff1a; #include "stdio.h" int main () {int year,month,day,days,flag;while(scanf("%d/%d/%d",&year,&month,&day)!EOF){if((year%40 && year%100!0)||(year%4000)){flag1;…

详解数组中的reduce方法

前言 这几天面试被问到了数组的方法有哪些&#xff0c;回答得简直一塌糊涂&#xff0c;面试官说reduce的功能很强大&#xff0c;于是想对这个方法进行总结&#xff0c;在红宝书中对这个方法的描述并不算多&#xff0c;我也是参考了其他文章才进行总结的&#xff0c;下面就开始吧…

NDK注意事项

1. ifeq 等命令后面要加空格 2. 换行缩进用tab&#xff0c;不要用多个空格 3. 判断编译目标需要用NDK 变量 TARGET_ARCH_ABI, 包含CPU类型&#xff0c;和ABI标识

mac os x常用快捷键及用法

最近在研究mac os x系统&#xff0c;开始入手&#xff0c;很不习惯&#xff0c;和windows差别很大&#xff0c;毕竟unix内核。使用中总结了一些使用快捷键&#xff08;默认&#xff09;&#xff0c;持续更新&#xff0c;欢迎大家补充。1.撤销&#xff1a;commandz 保存&#x…

【ACM】杭电OJ 2007

题目链接&#xff1a;杭电OJ 2007 本题容易出错的地方在于&#xff1a;要考虑输入的两个数的大小&#xff0c;一定是小的在前&#xff0c;大的在后 #include "stdio.h" int main () {int a,b,sum1,sum2,t;while(scanf("%d%d",&a,&b)!EOF){if(a&g…

iOS FMDB之FMDatabaseQueue(事物与非事物)

事物与非事物 事物是一个并发控制的基本单元&#xff0c;所谓的事务&#xff0c;它是一个操作序列&#xff0c;这些操作要么都执行&#xff0c;要么都不执行&#xff0c;它是一个不可分割的工作单位。 事物与非事物&#xff0c;简单的举例来说就是&#xff0c;事物就是把所有的…

NDK crash栈信息的错误定位

Android NDK是什么&#xff0c;为什么我们要用NDK&#xff1f; Android NDK 是在SDK前面又加上了“原生”二字&#xff0c;即Native Development Kit&#xff0c;因此又被Google称为“NDK”。众所周知&#xff0c;Android程序运行在Dalvik虚拟机中&#xff0c;NDK允许用户使用类…

【ACM】杭电OJ 1096

题目链接&#xff1a;杭电OJ 1096 只要注意输出格式就好&#xff0c;其他没有问题&#xff01; #include <stdio.h> int main () {int a,N,n,sum;scanf("%d",&N);while(N--){sum0;scanf("%d",&n);while(n--){scanf("%d",&a…

Eclipse中SVN设置文件为ignore后重新添加至版本控制

先前把需要版本控制的文件夹ignore了&#xff0c;用了很长时间找解决方法&#xff0c;结果发现竟如此简单&#xff0c;对eclipse的功能不熟悉啊。 方法如下&#xff1a;在Window->Show View -> Navigator 中可以看见所有的项目文件&#xff0c;找到ignore的文件&#xff…

第四范式完成C轮融资,金额超10亿元

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;12月19日&#xff0c;第四范式于近期完成C轮融资&#xff0c;融资金额超过10亿元&#xff0c;估值约12亿美金。同时引入包括国新、启迪、保利、三峡、中信、农银、交银等战略股东&#xff0c;红杉中国继续追加投资。本轮新晋投…

android mediaplayer状态机

对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个 MediaPlayer 对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表 MediaPlayer 对象可能驻留的状态。弧线表示驱动 MediaPlayer 在各个状态之间迁移的播放控制操作。 这里有两种类型的弧线。由一个箭…

刚刚、几秒前,时间格式化函数

应用场景 浏览实时信息网站时&#xff0c;总会看到发布时间&#xff0c;是这么显示的 例如 刚刚、几秒前&#xff0c;几分钟&#xff0c;几天&#xff0c;日期 ...&#xff0c;提供以下处理方案 服务端 ——PHP客户端 ——JavaScript处理方案 服务端 ——PHP 使用服务器端实现&…

【ACM】杭电OJ 1241(深度优先搜索小结)

题目链接&#xff1a;杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一。它从某个状态开始&#xff0c;不断地转移状态直到无法转移&#xff0c;然后回退到前一步的状态&#xff0c;继续转移到其他状态&#xff0c;如此不断重复&#xff0c;直至找到最终的解。 油…

阿里云双12服务器和阿里云双12数据库活动又开始了

一年一度的阿里云双12服务器活动又开始了&#xff0c;非常的便宜&#xff0c;只需原价的二折即可。 双12活动地址 https://m.aliyun.com/act/team1212

android audiotrack使用问题:listener不回调的原因

部分人使用audiotrack&#xff0c;有可能会发现audiotrack的回调方法不回调&#xff0c;其实很多情况下是这样子的&#xff1a; 一般的音频数据源会起一个线程获取&#xff0c;一般新起的线程都没有looper,而audiotrack的创建必须要一个looper,如果没有拿到当前线程的looper,就…

老男孩IT教育在线3期新学员司毅的计算机的基础知识

1&#xff1a;CUP在各个组件中相当于人的头主要负责运算数据和控制其他部件2&#xff1a;内存在各个组件中是临时存放数据的地方当电脑关机或重启后数据就会丢失但是它的运算速度非常快&#xff0c;因为CUP先调用它的数据。&#xff08;他的容量和处理速度直接决定了电脑的数据…

【C++】stack的部分使用(之后会不定时进行更新)

栈具有First In Last out&#xff08;FILO&#xff09;的特点&#xff0c;只能在栈顶进行插入和删除操作。 头文件&#xff1a;<stack> 成员函数&#xff1a; 1、size()&#xff1a;返回栈中的元素值 2、empty()&#xff1a;判断栈是否为空&#xff0c;为空的话返回t…

std::string的find问题研究

https://files-cdn.cnblogs.com/files/aquester/std之string的find问题研究.pdf 目录 目录 1 1. 前言 1 2. find字符串 1 3. find单个字符 2 4. 问题分析 3 4.1. gcc-4.1.2 3 4.2. gcc-4.8.2 4 5. a.cpp源代码 5 6. 单个字符版本find源码 5 7. 字符串版本find源码 6 7.1. gcc-4…

从内存溢出看Java 环境中的内存结构

作为有个java程序员&#xff0c;我想大家对下面出现的这几个场景并不陌生&#xff0c;倍感亲切&#xff0c;深恶痛绝&#xff0c;抓心挠肝&#xff0c;一定会回过头来问为什么为什么为什么会这样&#xff0c;嘿嘿&#xff0c;让我们看一下我们日常在开发过程中接触内存溢出的异…

【ACM】杭电OJ 1003。

运行环境VS2017 题目链接&#xff1a;杭电OJ 1003 主要思想是&#xff1a; 用d[i]来存放前i项中最大的和&#xff0c;得到end&#xff0c;然后再倒推&#xff0c;得起始的位置begin 然而在程序42行的疑问&#xff0c;大家可以讨论一下吗&#xff1f;&#xff1f;&#xff…