精华内容
下载资源
问答
  • 下载Visual Paradigm最新版本 活动图由活动和状态之间的活动,状态和转换组成,描述了如何协调活动以提供服务,例如,单个用例中的... 确定系统用例的关键方案 结合使用活动图描述的方案来生成全面的工作流程 在...

    下载Visual Paradigm最新版本

    活动图由活动和状态之间的活动,状态和转换组成,描述了如何协调活动以提供服务,例如,单个用例中的事件如何相互关联,或者用例集合如何协调创建 组织的工作流程。

    绘制活动图的步骤

    以下步骤概述了创建UML活动图时要采取的主要步骤。

    • 查找系统Actors,Classes和用例
    • 确定系统用例的关键方案
    • 结合使用活动图描述的方案来生成全面的工作流程
    • 在工作流触发重要对象行为的情况下,将对象流添加到图中
    • 工作流跨越技术边界,使用泳道来映射活动
    • 类似复杂的高级活动,嵌套的活动图

    创建活动图

    1. 单击工具栏上的New > New Diagram。

      Visual Paradigm

    2. 在New Diagram窗口中,选择Activity Diagram,然后单击Next。您可以使用上面的搜索栏来过滤图表。

      Visual Paradigm

    3. 为该图命名,然后单击“OK”。 在本教程中,该图将命名为Activity Diagram Tutorial。 然后,您将看到一个空图。

      Visual Paradigm

    4. 选择Vertical Swimlane,然后单击图表上的任何空白区域。

      Visual Paradigm

      如果您找不到垂直甬道,请尝试单击Horizontal Swimelane旁边的小三角形,然后您将看到Vertical Swimlane。

      Visual Paradigm

    5. 您可以通过双击每个分区的名称来重命名分区。本教程的前两个参与者是Customer和Sales。

      Visual Paradigm

    6. 要创建更多分区,请右键单击甬道上的任何空白区域,然后选择“Add Vertical Partition”。

      Visual Paradigm

    7. 更多分区重复步骤6。

    8. 通过选择“Initial Node/初始节点”创建初始节点,然后单击要在其中启动活动的参与者。在本教程中,我们希望活动从Customer参与者开始。

      Visual Paradigm

    9. 要创建操作,请单击初始节点,单击并按住资源按钮,然后拖动到所需位置。 释放按钮时,选择Control Flow > Action。 您可以通过双击操作重命名操作。

      Visual Paradigm

      Visual Paradigm

    10. 使用步骤9创建更多活动。

    11. 创建决策节点时,单击要连接的操作(本示例中为“合同代理商评论订单”),单击并按住资源按钮,然后拖动到所需位置并释放。 在弹出窗口中选择Control Flow > Decision Node。 您可以拖动并移动决策节点的标题。

      Visual Paradigm

      Visual Paradigm

    12. 创建更多决策节点时重复步骤11。

    13. 要创建活动最终节点,请选择最终操作(在本例中为Log Shipment),单击资源按钮,然后拖动到所需位置并释放。 在弹出窗口中选择Control Flow> Activity Final Node。

      Visual Paradigm

      Visual Paradigm

    14. 完成图表后,您会看到类似的内容:

      Visual Paradigm

     

    展开全文
  • 哈佛大学的爱德华·班菲德博士研究发现:那些成功的人往往都是有长期时间观念的人,他们在做每天、每周、每月活动规划时,都会用长期的观点去考虑,他们会规划五年、十年,甚至二十年的未来计划。职业规划对职场人和...

    哈佛大学的爱德华·班菲德博士研究发现:那些成功的人往往都是有长期时间观念的人,他们在做每天、每周、每月活动规划时,都会用长期的观点去考虑,他们会规划五年、十年,甚至二十年的未来计划。

    职业规划对职场人和即将进入职场的大学毕业生,都有很重要的作用。做好职业规划,需要根据自己的优势和特长,结合就业环境和趋势,结合自身家庭环境、专业特点找准定位,初步确定职业发展方向。

    01.认识自我,完成自我分析和职业分析

    做好职业规划,首先要对自己有一个客观的认识,通过科学的方法,对自己的职业兴趣、气质、性格、能力等进行自我分析,弄清楚“我是谁”“我能做什么”“我想做什么”的问题。

    同时弄清楚自己的优势与特长、劣势与不足,结合现代职业的区域性、行业性、岗位性等特点,进行职业分析,避免职业规划设计中的盲目性,达到职业规划设计与自身特点的紧密融合。

    68841e6fa8082ca695929acfea525d8d.png

    02.适应环境,深入了解就业形势和环境因素

    一个好的职业规划设计,离不开社会环境和市场需求的要素。这就需要对社会经济现状和发展前景有比较深入的了解,比如目标行业的人才供给情况、平均工资状况、团体规范等,都需要做深层次的调查。

    同时要考虑自身环境因素的影响,比如家族在某个领域内的影响和人脉关系,未来几年内行业发展前景和人才供需情况,以及职业所需要的特殊能力等。

    03.明确目标,以时间为梯度分阶段规划设计

    任何事情都不是一成不变的,以时间变化为梯度进行规划设计,将职业生涯目标确定为人生目标、长期目标、中期目标与短期目标,它们分别与人生规划、长期规划、中期规划和短期规划相对应。

    首先根据个人的专业、性格、气质和价值观以及社会的发展趋势,确定自己的人生目标和长期目标,然后再把人生目标和长期目标细化,根据个人的经历和所处的环境制定相应的中期目标和短期目标。

    f7b66445ce714a550b9ae09a7801f768.png

    04.制定方案,及时反馈信息和动态调整

    任何不付诸行动的目标计划都是空谈。制定职业规划目标后,第一步就是把目标转化成具体的方案和措施,根据职业生涯发展路线的选择、职业的选择,制定培训锻炼计划,参加实践锻炼和专业学习。

    在执行方案的同时,根据自己经验的丰富和认知的提升,对职业生涯规划设计进行动态评估与反馈,再进行重新评估和分析,使职业生涯规划更加有效。

    05.能力匹配,影响职业规划的重要因素

    能力是否匹配是职业生涯规划设计最为重要的关键环节,需要特别注意。最好的方法是进行职业能力测试,用心整理好行业和职业清单,并且根据自身情况,用筛选和测试的方法,找到自己最适合的职业和岗位。

    如果你不清楚自己适合做什么和喜欢什么,可以先排除能力不适合、不喜欢的行业和岗位类型,精确缩小选择范围,然后把剩下的行业和岗位类型进行组合搭配,从中找到和你能力匹配又喜欢的行业+岗位类型的组合清单。

    137d5a44a33b81ab49c4df82c1f30bfa.png

    06.结语

    职业规划就是对职业生涯乃至人生进行持续的系统的计划的过程,这个过程对每一个职场人来说都很有价值。制定科学合理的职业规划,自我评估和职业分析是基础,社会环境和自身环境相结合、长远目标和短期目标相结合是关键。职场如江湖,且行且珍惜。

    展开全文
  • 书上的方法为先从源点到汇点求解事件最早发生时间ve,再从汇点到源点求解事件最迟发生时间vl,再利用ve和vl求解每个活动的最早开始时间e(i)和最迟开始时间l(i),e(i)和l(i)相等的活动则为关键活动,他们一起组成的从...

    #引言

    求解AOE网关键路径时,书上的方法为先从源点到汇点求解事件最早发生时间ve,再从汇点到源点求解事件最迟发生时间vl,再利用ve和vl求解每个活动的最早开始时间e(i)和最迟开始时间l(i),e(i)和l(i)相等的活动则为关键活动,关键活动组成的从源点到汇点的路径即为关键路径。

    王道的书上在AOE的部分,备注了一小行话:“如果这是一道选择题,根据上述求ve()的过程就已经能知道关键路径。”,但并没有展开讲如何确定。本文就补充说明一下。

    #求法

    这里直接举例给出求法

    如下AOE图

    我们从V1开始依次求解事件的最早发生时间ve,前三个顶点答案很显然,求得如下

     

    V1

    V2

    V3

    V4

    V5

    V6

    ve()

    0

    3

    2

     

     

     

    在求解V4的时候,需要对两条路径进行比较,即ve(4)=Max{ve(2)+a3,ve(3)+a5}=Max{5,6},显然选取的是a5这条路径。

    这意味着a3这条路径对V4来讲是"冗余的",或者说因为a5的存在,它有可以改变的空间。也就是a3一定不是关键路径。我们可以叉掉它。

    按照以上思路,我们完成ve()的求解,并叉掉那些比较时被比下去的路径。
    最后得到:
    直观一点,我们把这些路径都去掉:
    上图中,V1是源点,V6是汇点,完成工程意味着V1到V6的一条路径,而去掉“不关键”的路径(活动边)后还可以走通的路径就是关键路径。
    即上图中的(V1,V3,V4,V6)或者说(a2,a5,a7)
    (注:a1和a4虽然保留在图中,但并不是关键活动,因为他们不在关键路径上)

    再举个多条关键路径情况的例子,我们从V1开始依次计算ve()。

     

    V1

    V2

    V3

    V4

    V5

    V6

    ve()

    0

    Max{3,ve(3)+4}

    8

     

     

     

     

    计算到V2时,比较两条路径,淘汰路径a,ve(2)=12

     

    V1

    V2

    V3

    V4

    V5

    V6

    ve()

    0

    12

    8

    21

    Max{ve(3)+10,ve(2)+6}

     

    计算到V5时,两条路径消耗是相同的!这时候两条路径都保留下来,他们都有可能成为关键路径。

     

    V1

    V2

    V3

    V4

    V5

    V6

    ve()

    0

    12

    8

    21

    18

    Max{ve(5)+9,ve(4)+6}

     

    计算到V6时也一样,两条路径的消耗相同,都保留。

    最终结果是只去掉了路径a:

    则此时源点V1到汇点V6的路径,即原图中的关键路径有三条:
    1. bfh
    2. bdeh
    3. bdcg
    展开全文
  • Kubelet如何确定资源不足? Kubelet如何回收资源? 最低驱逐收回 一个简单的资源短缺处理方案 结论 kubelet是Kubernetes中的主要节点组件,它执行许多关键任务。Kubelet主要职责在: •向kube-apiserver注册...

    目录

    Kubelet如何确定资源不足?

    Kubelet如何回收资源?

    最低驱逐收回

    一个简单的资源短缺处理方案

    结论


    kubelet是Kubernetes中的主要节点组件,它执行许多关键任务。Kubelet主要职责在:

    •向kube-apiserver注册节点•watch kube-apiserver中已经调度完成的Pod,并在Pod被调度完成之后告诉容器运行时(例如Docker)启动容器•监视运行中的容器并将其状态报告给kube-apiserver•执行活动性探针并在容器失败后重新启动容器•运行由kubelet直接管理的静态Pod•与Core Metrics Pipeline和容器运行时进行交互以收集容器和节点metrcis

    我们在本文中要讨论的另一个重要的kubelet任务是,当节点资源耗尽时,“agent”具有将Pods逐出的功能。当计算资源(例如磁盘,RAM或CPU)不足时,kubelet在维护节点稳定性方面起着至关重要的作用。对于Kubernetes管理员来说,了解配置资源超过配额的最佳做法很有用,以使节点资源更灵活,同时保留系统的整体容错性和关键系统进程的稳定性。

    Kubelet如何确定资源不足?

    如前所述,kubelet可以从节点上驱逐工作负载,以释放资源来处理其他Pod和/或系统任务,例如容器运行时或kubelet本身。但是,kubelet如何确定资源不足?

    Kubelet根据收回信号和收回阈值确定何时回收资源。驱逐信号是系统资源(如内存或存储器)的当前容量。反过来,驱逐阈值是kubelet应该维护的此资源的最小值。

    换句话说,每个驱逐信号都与某个驱逐阈值相关联,该阈值告诉kubelet何时开始回收资源。目前,支持以下驱逐信号:

    memory.available — 描述集群内存状态的信号。内存的默认逐出阈值为100Mi。换句话说,当内存下降到100 Mi时,kubelet开始驱逐Pod。•nodefs.available — nodefs是kubelet用于卷,守护程序日志等的文件系统。默认情况下,如果nodefs.available <10%,则kubelet开始回收节点资源。•nodefs.inodesFree — 描述nodefs索引节点内存状态的信号。默认情况下,如果nodefs.inodesFree <5%,则kubelet将开始驱逐工作负载。•imagefs.available — imagefs文件系统是容器运行时使用的可选文件系统,用于存储容器镜像和容器可写层。默认情况下,如果imagefs.available <15%,则kubelet开始驱逐工作负载。•imagefs.inodesFree — imagefs索引节点内存的状态。它没有默认驱逐阈值。

    上述驱逐阈值是非常合理的默认值。但是,用户可以通过在kubelet二进制文件上设置适当的标志来配置其自定义逐出阈值。这些用户定义的阈值可以更改默认的kubelet驱逐行为。

    目前,Kubernetes支持硬驱和软驱逐阈值。

    如果达到硬驱逐阈值,则kubelet将立即开始回收资源,而没有任何宽限期。相反,软驱逐阈值包括用户定义的宽限期,该宽限期应在kubelet开始回收任何资源之前到期。

    您可以使用kubelet二进制文件上的--eviction-hard标志定义硬驱逐阈值。例如,kubelet-eviction-hard = memory.available <1Gi将告诉kubelet在节点的memory.available低于1Gi时开始回收资源。

    如果要在驱逐之前允许宽限期,则可以将 -eviction-soft标志与--eviction-soft-grace-period标志结合使用。例如,kubelet —- eviction-soft=memory.available<2Gikubelet —- eviction-soft-grace-period=1m30s将使驱逐阈值保持90秒,然后触发驱逐阈值。

    用户还可以通过以秒为单位设置--eviction-max-pod-grace-period来指定允许的最大宽限期。

    Kubelet如何回收资源?

    Kubelet以用户Pod的利益为代价来回收资源。它首先尝试回收未使用的容器镜像或 dead 的Pod。

    如果节点具有专用的imagefs文件系统以及nodefs文件系统,则kubelet会以不同的方式回收节点资源。在这种情况下,如果nodefs达到驱逐阈值,则kubelet会删除所有已失效的Pod及其容器。相应地,如果imagefs达到驱逐阈值,则kubelet会删除所有未使用的容器镜像。

    如果没有使用imagefs,则kubelet首先删除所有无效的Pod及其容器,然后删除所有未使用的镜像。有关此过程的更多信息,请参见Kubernetes文档。

    如果回收容器镜像,失效的Pod和其他资源没有导致资源匮乏,则kubelet将删除用户Pod作为最后的选择。kubelet根据Pod的QoS等级,Pod优先级和下面讨论的许多其他参数,决定退出哪个用户Pod。在描述此过程之前,让我们回顾一下Kubernetes中的基本QoS类。

    Pod的Qos共分为Guaranteed,Burstable或Best-Effort。

    •Guaranteed : 在Pod的所有容器中都为CPU和RAM设置资源限制和请求,并且它们的值相等。•Burstable Pod中一个或多个容器的资源(例如,CPU,RAM)设置了请求和限制的容器,它们不相等。•Best-Effort Pod中的容器未设置资源限制。

    此QoS模型由kubelet在其Pod排序方案中隐式使用。通常,kubelet使用以下规则对驱逐候选人进行排名:

    •Pod是否超出其资源请求。在Kubernetes中,Pod是根据其请求而不是限制进行调度的。因此,保证所有容器和Pod都具有它们所请求的RAM / CPU数量。但是,如果没有设置限制,并且Pod超出了其资源请求,则在保证Pod或某些系统任务需要受限资源的情况下,可以终止或限制该Pod。在某些情况下,甚至那些消耗少于要求量的Pod也会被杀死。例如,当系统任务内存严重不足并且没有较低优先级的Pod被杀死时。•按Pod优先级排列。如果没有Pod超出其请求,则kubelet会检查Pod Priority。它将尝试先驱逐优先级较低的Pod。注意:在Kubernetes 1.14中,Pod的优先级和抢占式迁移到了GA。从1.11开始默认启用它们。您可以在本文中了解有关Pod Priority的更多信息。根据这些规则,kubelet会按以下顺序驱逐用户Pod:•驱逐的第一个候选对象是Best-Effort 和/或 Burstable的Pod,其受限资源的使用超出了请求。如果有多个此类Pod,则kubelet会按优先级对它们进行排序,然后将资源消耗按指定的请求进行排序。•最后驱逐了资源使用量低于请求的Guaranteed 和 Burstable Pods的Pod。但是,如果某些系统任务(如kubelet或Docker)需要更大的资源,并且节点上没有Best-EffortPod,则kubelet可以驱逐消耗量低于其请求量的Guaranteed Pod。在这种情况下,它将首先以最低优先级驱逐Guaranteed 和 Burstable Pods。

    最低驱逐收回

    如果kubelet回收的资源量很小,则系统可以反复达到驱逐阈值。这不是理想的行为,因为它可能导致不良的调度决策和Pods频繁驱逐。为了避免这种情况,用户可以使用kubelet二进制文件上的-eviction-minimum-reclaim标志设置每个资源的最小回收级别。

    例如,查看下面的kubelet配置:

    --eviction-hard=memory.available<1Gi,nodefs.available<2Gi,imagefs.available<200Gi--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=1Gi,imagefs.available=2Gi

    —- eviction-minimum-reclaim设置可确保回收后可用的nodefs最小存储量为3Gi,可用的imagefs最小存储量为202 Gi。因此,以上配置可确保系统具有足够的可用资源,以避免非常频繁地达到收回阈值。

    资源匮乏的处理配置不当可能遇到的另一个潜在问题是节点条件的波动。当kubelet收到逐出信号时,后者会映射到相应的节点条件。例如,当达到memory.available逐出阈值时,kubelet将MemoryPressure节点条件分配给该节点。此条件与相应的污点关联,该污点可防止在具有MemoryPressure节点条件的节点上调度新Pod。

    但是,如果您使用具有较长宽限期的软驱逐阈值,则节点条件可能会在宽限期内在true和false之间振荡。这可能会导致驱逐不确定性,并因此导致不良的调度决策。为避免这种情况,您可以在kubelet上使用-- eviction-pressure-transition-period标志,该标志定义kubelet在满足驱逐条件之前必须等待多长时间。

    一个简单的资源短缺处理方案

    现在,我们将说明如何为K8s集群配置资源不足的处理。让我们想象一个简单的场景,其中仅考虑节点RAM。假设我们节点的内存容量为10Gi RAM。我们希望为内核,kubelet,Docker等系统守护进程保留总内存的10%。我们还希望驱逐Pods,使其占用95%的内存。

    使用默认逐出阈值启动kubelet,并且没有系统保留。我们需要在kubelet上显式设置几个标志,以启用所需的行为。

    为了实现我们的目标,我们需要在kubelet上设置以下标志:

    eviction-hard=memory.available<500Misystem-reserved=memory=1.5Gi

    如您所见,系统保留设置为1.5Gi,尽管直观上应将其设置为10%= 1Gi。但是,“系统保留”应包括驱逐阈值(1Gi + .5Gi)覆盖的内存量。

    根据配置K8s集群的方式,可以不同地设置kubelet标志。例如,如果计划使用Kops配置K8s集群,请运行kops edit cluster $NAME以使用集群配置打开编辑器。如果是VI编辑器,则按“ I”进入插入模式以编辑文件。上述资源不足处理策略的kubelet标志应如下所示:

    kubelet:  eviction-hard=memory.available<500Mi  system-reserved=memory=1.5Gi

    结论

    在本文中,我们讨论了一些有用的Kubernetes管理实践,用于在Kubernetes中自定义kubelet超出资源的管理。该平台允许管理员设置自定义逐出阈值和逐出宽限期,以决定哪些条件被视为对节点稳定性有害。但是,有了这种自由,就要承担很多责任。Kubernetes附带了合理的资源短缺管理默认设置。因此,在将驱逐阈值设置得太高或将驱逐宽限期设置得太长时,您应保持谨慎。

    译文链接:

    https://medium.com/kubernetes-tutorials/efficient-node-out-of-resource-management-in-kubernetes-67f158da6e59
    原文链接:https://segmentfault.com/a/1190000022962779
    作者:iyacontrol

    展开全文
  • 在税收节约方面,老板希望确定,无风险,并最大化税收利润。这是许多公司非常关注的话题。如何在合理和合法的范围内最大化税收也是每家公司的情况。必修课程。因此,掌握几个关键点是至关重要的。 关键点一:节税要...
  • 根据组织目标,进行 计划、控制、组织,以及领导周围的人,进行的有序活动。 计划: 谈到计划,咱们技术出身的同学自然想到的就是进度计划,我也是,想到的无非如何安排迭代,什么时候测试上线。这个是对计划一个...
  • 在软件项目管理过程中一个关键活动是制定项目计划,它是软件开发工作的第一步。项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项目开发所需的资源、经费和开发进度,并控制软件项目开发过程按此...
  • ¶ 麦肯锡咨询项目的典型流程描述的是项目过程中咨询团队如何活动,以及您的角色。 ¶ 在团队中工作是麦肯锡的基本原则,团队是麦肯锡组织结构的基石;在麦肯锡,您遇到的团队工作的情形也许会和您以往的经验有所...
  • 在软件项目管理过程中一个关键活动是制定项目计划,它是软件开发工作的第一步。 项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项目开发所需的资源 、经费和开发进度,并控制软件项目开发过程按...
  • 如何写软件项目计划

    千次阅读 2013-06-19 17:00:32
    软件项目计划(Software Project Planning)是一个软件项目进入...在软件项目管理过程中一个关键活动是制定项目计划,它是软件开发工作的第一步。 项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项
  • 本研究确定了生产要素的关键作用,即当它们在收入的产生,分配和使用之间建立联系时。 在此过程中,还确定了输入输出矩阵(IOM)可以添加的补充细节的重要作用。 因此,作为收入的产生,商品和服务的产出以及相关...
  • 在需求分析阶段有两个关键任务,即根据系统需求确定系统需求和建立系统需求模型。 通常,负责开发软件项目的项目经理或系统分析师需要尽可能多地了解软件项目中涉及的业务活动的详细信息,因为只有熟悉项目业务活动...
  • 如何制定和编写软件项目计划 软件项目计划(Software Project Planning)是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定...
  • 当服务对象的心理状态以及治疗师与服务对象之间的关系发生质的变化时,我们确定了会议的关键点。 然后比较定性和定量分析的结果。 定量分析的结果表明,在以下三个特征场景中,服务对象与治疗师之间的身体协调度...
  • 1、明确核心业务主流程...回流”2、确定用户执行主流程时各个关键行为点例如电商APP“购买流程”可分解如下几个关键行为点搜索商品查看商品详情选择收货人创建订单支付订单每个关键行为即可以抽象为一个独立事件,...
  • 他们是否已经知道如何规划,协调一致,确定优先次序并相互协调? 您的团队是否成功结束了任何浪费的活动? 这些措施可能包括运行未使用的AWS堆栈,两次构建相同的东西,或者始终在策略上进行本地化优化,而不是与...
  • 软件项目计划(Software Project Planning)是一个软件项目...在软件项目管理过程中一个关键活动是制定项目计划,它是软件开发工作的第一步。 项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项目开
  • 如何重装系统 方法1: 首先,确定你的光驱是第一启动顺序并支持从光驱启动。 要从光盘安装,要把BIOS进行设置,使系统能够从光盘启动。其方法如下: (1)启动计算机,当屏幕上显示 Press Del to Enter BIOS Setup...
  • 由于路易丝(Louise)的竞选活动已接近其筹款目标,因此该分析试图证明其他竞选活动如何成功地基于其发起时间以及每个竞选活动的目标有多高。 为了确定这些标准集之间的关系,我使用了“结果”列和“目标”列中的...
  • 软件指令时序调度是实时软件系统运行的基本问题,如何识别出实时系统中的关键任务,并对其进行及时调度和处理则是解决这一基本问题的关键。应用企业过程建模原理,构造了实时系统的软件过程时序模型,并基于SADT模型,...
  • 如何在Linux上自动记录所有用户的终端会话活动不久前,我们写了一篇文章,使用script命令记录Linux终端会话活动。今天,我们还将讨论相同的主题。但是,本教程允许您自动记录所有用户的终端会话活动。我建议管理员将...
  • 如何确保两个或更多的进程在关键活动中不会出现交叉 比如两个进程为不同的客户视图争夺飞机上的最后一个座位 如何确定程序正确的执行 比如进程A产生数据而进程B打印数据,那么B在打印之前必须等待,直到A已经...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

关键活动如何确定