软件工程之需求分析

一、对需求的基本认识

1.需求分析简介

(1)什么是需求

  • 用户需求:由用户提出。原始的用户需求通常是不能直接做成产品的,需要对其进行分析提炼,最终形成产品需求。

  • 产品需求:产品经理针对用户需求提出的解决方案。

(2)为什么要做需求分析

  • 做软件本身就是为了满足用户需求。那么,用户需求到底为何, 清楚定义。

  • 需求边界定义的需要。用户需求理清楚了,不代表产品理清楚了。用户需求的满足一 定会有行业分工,我们做什么,合作伙伴做什么,需要厘清大家的边界。

  • 架构设计的需要。架构需要切分子系统,需要我们梳理并对用户需求进行归纳与抽 象。架构还需要防止过度设计,把简单的事情复杂化。

(3)需求分析过程

  • 面向的核心用户人群是谁?

  • 用户原始需求是什么?最核心问题是哪几个?

  • 已经有哪些玩家在里面?上下游有哪些类型的公司,在我们之前,用户是怎么解决他们的 问题的?我们的替换方案又是怎样的?

  • 产品创造的价值点是什么?用户最关注的核心指标是什么?

  • 用户需求潜在的变化在哪些地方?区分出需求的变化点和稳定点。

产品设计过程需要架构师的深度参与,而不是单向的信息传递。产品是桥,它一端连接了用户需求,一端连接了先进的技术。产品经理是

需要有技术高度的,他不一定要深刻了解技术的原理,但是一定要深刻理解新技术的边界。产品经理和架构师其实是一体两面。两者都需要关心用户需求与产品定 义。 只不过产品经理更多从用户需求出发,而架构师更多从技术实现出发,两者是在产品这座桥 的两端相向而行,最终必然殊途同归。架构师在整个架构设计的过程中,至少应该花费三分之一的精力 在需求分析上。

2.需求分析内容

需求分析不是一个动作,而是一个过程,需要经历三个步骤:

  • 挖掘真实需求

  • 提出解决方案:直到目标用户,其使用场景和想要解决的问题,就可以结合产品定位,提出相应的解决方案。

  • 筛选和验证方案:对方案进行筛选,去掉不合适的方案,选定方案后,需要对方案进行验证,确保能解决用户需求。

挖掘用户的真实需求,可以聪三个角度入手:

  • 目标用户

  • 使用场景

  • 要解决的问题:用户背后想要解决的问题是什么

3.怎么做需求分析

软件项目的需求从来不是单一的,是一系列需求,需求分析的整个过程是迭代进行的:

  • 收集需求:对用户需求进行收集整理

  • 分析需求:对需求进行分析,挖掘用户真实需求

  • 需求评估:筛选过滤掉不可行的需求

  • 需求设计:针对用户需求提出解决方案,设计成产品方案

  • 验证需求:验证方案是否可行

(1)收集需求

收集用户需求有很多方法,可以参考:

  • 头脑风暴:头脑风暴会议

  • 用户调研:通过调查问卷或访谈,收集问题反馈

  • 竞品分析:通过分析同类产品的功能获得需求

  • 快速原型:通过原型来收集反馈,确认需求

(2)分析需求

用户的真实需求有三个层次:

  • 表层需求:用户对解决问题的期望

  • 深层需求:用户的深层次动机,诉求产生的原因

  • 底层需求:人性本能的需求

(3)需求评估

需求评估需要考虑的因素有:

  • 可行性:技术能否实现

  • 成本:人力成本、时间成本

  • 商业风险和收益:有没有商业风险,收益是否合理

  • 紧急性与重要性:是不是用户迫切的需求

确定可行后,需要评估优先级,简单的可以使用四象限法,复杂的有KANO模型

(4)需求设计

在需求设计的时候,可以用草图、原型设计工具、界面设计工具进行设计。同时,设计阶段可以参考其他成熟的产品。

(5)验证需求

对需求的验证方式其实是贯穿整个软件项目生命周期的,在需求分析阶段,会反复验证,确认设计好的需求是否满足用户的真实需求,比如各种设计评审。

产品开发完成后,需要有需求的验收,来确保开发出的需求满足用户的真实需求,比如可以使用 A/B测试。

4.注意事项

(1)避免过早精细化

需求分析不能过早的进行精细化,业务方还没有启动项目就要精确知道最后得到什么;开发方没有评估项目就希望知道要交付什么,这是不合理的,因为需求与实现都是变化的,随着项目的不断推进与开发,会发现到最初没有考虑到的地方,所以需求分析和架构设计都不可能在一开始就预估到了所有场景

(2)避免过晚模糊化

需求的大致方向一定要在最开始就达成统一,完成确定,否则开发将在大方向偏离

5.需求明确

下面给出一个简单的例子。你在一家出版纸质书和电子书的公司工作。你接到一个新的需求:所有 50 美元以上的订单都应该免运费。停一秒钟,把自己带入这个场景。首先想到的是什么?你有大把机会发现问题:

1、50 美元含税吗?

2、50 美元算没算上本应支付的运费?

3、50 美元必须全是用来买纸质书吗?还是允许在同一订单中有部分电子书?

4、包邮指的是怎样的服务?是加急还是平邮?

5、如果是国际订单如何处理?

6、未来会经常改变 50 美元这个限制吗?

这就是我们所做的。当某些事情看起来很简单的时候,我们却会去寻找那些边缘情况,并就其不胜其烦地问人。

很可能客户已经想到了其中的一些问题,并假定实现将以某种方式工作。问这类问题只是把信息明确下来。但有些问题可能客户之前并没有考虑到。这就是事情变得有趣之处,也能让好的开发人员从此处事老练。

6.需求拆解

无论是新功能,还是历史功能,都需要关注如下点:

  • 需要多少UI(UI组件、功能页面)(UI=User Interface)

  • 数据从哪里来?

  • 数据与UI如何关联?(数据到哪里去、怎么去)

  • 用户行为响应

  • 用户行为采集

  • 发布后,如何运维与监控(出现问题的时候,可以有哪些方法帮助问题的排查)

(1)关注点1:需要多少UI

要绘制多少UI组件、要增加多少UI页面,首先取决于“需求文档(PRD)”、“视觉交互设计稿”。对于开发来说,请重视需求评审、视觉交互评审。对于质量良好的需求文档或者视觉设计稿,文档中给出的UI组件/页面范围一般就是开发要实现的UI范围;对于质量差的需求甚至是一句话的需求,UI范围则需要研发“梳理确定”。无论需求文档或视觉设计稿质量如何,研发人员在需求评审、视觉交互评审、技术设计、编码实现过程中都需重点关注“异常逻辑”。什么是异常逻辑?比如,一个查询类的需求,“查询结果为空”“查询时无网络”这类场景就属于“异常逻辑”。很多时候,新手容易出问题或者遗漏的地方就是异常逻辑的处理与显示。

需求拆解阶段,关注UI如何实现的同时,也请务必关注UI的展示对象,包括:图片与多媒体内容(CDN图片、OSS图片文件、base64编码后的图片)、文案(文案的长度、多语言翻译的来源)、RTL(Right to Left)适配。已一个支持17种语言甚至是更多语言的海外APP开发为示例,这些内容虽不影响开发进度,但是会影响需求在交付时的质量、或者是到了需求实现后期补作业。

实操方法:需求拆解的时,对于UI范围,可以拆解出如下内容用于辅助后续研发实现:

  • UI范围:功能页面范围、页面状态及状态的变化逻辑、界面的异常逻辑态等等

  • 页面元素的拆解:列表元素、卡片元素、动画元素、UI特效等(这个也是沉淀通用组件的依据)

  • UI展示的对象:文案的范围、多语言翻译的来源、RTL适配的范围、图片、短视频等。

(2)关注点2:数据从哪里来?

这里的数据是包括用户直接感知的数据与富媒体内容流,也包括用户不感知但是用于支撑功能的研发类型的数据。数据的来源包括:网络数据、本地存储的数据、内存数据。不同的数据类型,需求实现的处理有差异,例如:

  • 网络数据:需求拆解时候重点关注接口文档、接口名称、接口返回的数据字段(包括字段类型、范围、字段名称等等)、接口对应的团队或具体的开发、接口的上下游链路(示例:搜索的接口会涉及广告、算法等)、接口测试与联调方式等。对于新手,需求拆解的时候还需要确认:数据网关类型(MTOP网关、Node编排后的数据、Web网站对应的数据网关等),明确网络数据调度所用的域名(比如,部分APP交易功能的域名与非交易功能的域名是分开的,调度方式也会有差异)。

  • 本地存储数据:需求拆解阶段,要明确本地存储数据还是自己负责还是使用他人的能力。如果是自己负责则需要进一步判断数据是写本地数据库,还是写本地文件;如果是他人负责,数据的读写方式与接口是什么。

  • 内存数据:需求拆解重点关注内存数据的读写方式,数据使用后的释放方式。

  • 富媒体内容流:图片、短视频、直播等多媒体流。需求拆解时关注这些内容存储的形式(以图片为示例:图片是CDN的URL,还是OSS的文件地址或者ID,甚至是base64处理后的编码结果);同时还需要判断这些展示能力是已有的还是需要新引入等。

总结来说,“数据从哪里来”很好记忆,但是,在真实的研发过程中,“数据从哪里来”往往是研发过程中最容易出问题的地方。以网络数据为例,典型的问题有:联调环境不稳定、接口返回的字段未遵守约定、接口上下游数据链路不通导致无法测试等。即使需求完成并且交付上线,也还是会有各类问题,比如:引入了新CDN导致现有的图片/短视频加载过程的优化策略不支持,导致线上反馈性能或者是稳定性问题等。

对于“数据从哪里来”,在拆解需求的时候,一定要关注到每一个字段。这么强调,既因为这个点既影响实际投入工作量,还特别影响交付的需求的可用性与质量。

实操方法:进行需求拆解的时候,围绕数据从哪里来,可以拆解出以下内容:

  • 数据逻辑的分层结构图(根据实际需要)

  • 功能与数据接口的对照关系、接口文档、接口的承接平台、接口的Mock方式等

  • 功能的数据流转与逻辑流程图

(3)关注点3:数据与UI如何关联?

“数据要到哪里去,怎么去”,也可以理解为数据绑定。对于有一定复杂度的需求,“数据与UI如何关联”很大程度上会决定这个功能的实现与维护难易。需求拆解的时候,无论是选择MVC、MVP、还是MVVM,数据绑定这个过程比较考验开发人员的设计能力。我个人将数据绑定总结为如下几种:

  • 单向数据绑定:数据变化自动驱动UI刷新,代码实现会体现为各种Observer或者Observable等。

  • 双向数据绑定:数据改变的同时使视图刷新,而视图改变也可以同时改变数据。

  • 无所谓数据绑定,数据关联到UI是过程式的编程,体现为:加载数据、加载成功手工代码上屏等。

当然,以上总结是简化后的总结。对于新功能,建议需求拆解的时候,反复理解所需的数据源、充分理解UI范围,结合控制逻辑,仔细提取关键特征后,充分设计后再进行编码等操作。设计的时候多借鉴团队内或行业内的最佳实践。

对于维护类型的需求,特别是有浓重祖传特质的功能(比如2013年功能迭代至2022年的需求),则要花点时间理解原有的关联关系,这个很有可能是一个不大不小的难点。比如,有的历史功能在实现的时候,数据与UI的关系是通过EventBus/消息广播类的事件触发;还有的功能数据在独立进程加载,加载完成后通过进程间通信再通过事件通知机制绑定数据到UI。总结来说,部分历史功能在最开始的实现,会用到各种酷爽的方案,但是到了后期维护,这类酷爽方法则会以一种超长技术链路或者拗口的技术链路呈现给维护者,变成一座需要咬牙才能翻阅的“山”。本质上来说,编码不是人与机器的交流,而是人与人之间通过写作的交流。对于一个维护性质的功能,掌握原有关系的一种方式就是植入各种测试性的代码辅助自己理解。

实操方法:拆解时,数据与UI关联,可拆解出的内容(数据与UI的关联,建议将“克制”作为自己的原则):

  • 功能的数据流转与逻辑流程图

  • 代码设计、数据关系流转设计等等

  • 数据状态变化、UI刷新时机等

  • 关联所用的绑定能力、数据变化后的通知机制等

(4)关注点4:用户行为响应

相对于上文提及的三个点,这一点相对容易。对于带UI的需求,按照如下范围拆解与实现即可:

  • 归纳需求文档或设计文档中的用户行动点,包括:点击、上下滑动、左右滑动、长按、开锁屏、虚实键盘响应、缩放手势等等。

  • 行动点的常见处理:页面跳转、tips/toast/弹窗等展示、动画处理、界面缩放、界面关闭等

  • 需约定的接口或规范:页面跳转的schema/传参、二三方能力唤起的方式等

(5)关注点5:用户行为采集

也就是收集用户行为的数据,简称“数据埋点”。比如,用户点击按钮、进入页面、在某区域停留一定时长之类的行为数据。这些行为数据是产品、数据、BI等角色关心并用于分析用户特征的数据。用户行为采集与用户行为响应密切相关。

数据埋点作为独立的关注点强调,是因为即使研发在每个需求都会与“页面点”“点击点”“曝光点”“自定义事件点”打交道,同时也是最容易出问题的地方,问题示例::

  • 数据漏采集:有可能是产品/数据同学无明确的数据要求,也有可能是开发漏写数据埋点代码等。

  • 数据点错误:包括事件类型错误、数据点名称错误,采集时机错误、多采集、少采集、数据参数错误(数据参数错误包括字段名称不对、字段实际传递的值不对)等等。

实操方法:研发人员在拆解需求的时候,针对用户行为采集,check以下点:

  • 需求是否需要采集埋点数据

  • 点的名称是否符合产品/数据等消费方的要求

  • 参数范围与参数值是否有要求

  • 需求完成后,数据采集谁验证?

(6)关注点6:发布后,如何运维与监控

线上一旦出问题,开发或测试可以用什么工具或者方法进行排查分析。这就涉及到:需求如何发布、交付后的功能如何监控、开发过程中是否要提前布点以支撑排查分析工具的使用。

功能发布形式有多种,例如:灰度、Beta、A/B测试形式发布、动态配置下发、直接全量等。不同发布形式对于功能发布之初的观测有差异,要支撑不同的发布形式,具体的实现也有差异:比如,通过Google Play进行APP灰度测试不需要开发人员针对功能做额外处理;以A/B测试形式上线的功能则需要在编码之初就要考虑通过什么平台能力进行,同时还需要编写对应代码。

关于如何监控:需要区分是技术指标监控,还是业务类指标的监控。不同的监控范围,在需求拆解的时候就要决定哪个平台进行,比如:业务类的指标可以在xflush平台上进行(需求拆解时要考虑数据回流xflush是已有的能力,还是需要新建能力);性能类指标可以在魔兔/iTrace上观测;研发问题的排查可以通过SLS进行,还可以自建排查能力。监控虽可以跟随功能的交付逐步补充完善,考虑需求的完整性,建议是在需求拆解的时候明确监控范围与形式。毕竟,实现监控也是需要工作量的。

上线后有哪些工具可以用于排查分析问题,在需求实现的时候就需要将能力预置好的。例如,对于“用户下单”这类容错较低的需求,研发在需求实现过程中如果没有写入足够的日志,一旦线上用户反馈“同一个产品在同一个时间下两个订单”,大概率这个问题就是无头无解问题。

总结来说:需求发布到线上后如何运维与监控,研发人员在拆解需求的时候需要思考明白:需求发布形式、上线后期望的监控方式、出问题时可用的排查方式与与排查数据。这些明确后,具体的实现,很容易通过历史功能、咨询、查资料等方式学习到。

二、原型设计

明确用户需求是一件至关重要的事,想要低成本地确认用户需求,可以借助原型工具来实现。

瀑布模型的衍生模型中有一个叫:快速原型模型。可以低成本、快速地确认好请求。但也有一个问题,需要开发人员配合才能完成。

快速原型模型可以简单分为三个阶段,原型设计对应这三个阶段要达到的效果进行分类:

  • 低保真原型设计:通过线框图来展示界面上有什么,布局是什么样的。

  • 中等保真原型设计:不仅反映界面上的布局和内容,还可以展示网站的整体结构和交互。在真实度、色彩上要比最终的产品差一些。

  • 高保真原型设计:在界面的美观和交互的炫酷上要求真高。学习和制作成本都比较高,一般和低保真原型设计配合使用,先用低保真原型设计快速确认清楚需求,再用高保真原型确认最终的交互和UI设计。

1.如何做好原型设计

(1)分析:搞清楚用户需求,原型设计目标

(2)设计:划分好产品的信息架构,设计好产品操作的流程

在设计阶段主要从两个维度来考虑:

  • 信息框架:考虑清楚整个产品的信息框架,划分出模块。比较好的实践:画产品的信息结构图。

  • 使用流程:考虑清楚界面之间的流程。好的实践:画产品使用流程图。

(3)实施:按照设计的结果,对每个界面制作原型,并做好界面之间的链接

(4)验证:和项目成员、客户进行确认,收集意见反馈,根据反馈进行修改。

2.原型设计工具

原型设计工具很多,选择的时候可以从这几个维度去考虑:

  • 面向的平台:web、桌面、移动端

  • 保真度

  • 功能

  • 成本

三、需求变更

目前有很多管理需求变更的解决方案。比如:

  • 增强需求变成流程,让需求变更规范起来。通过严格的流程来过滤没有意义的变更

  • 快速迭代,缩短版本周期。

比解决方案更重要的是,追本溯源,分析原因,做到即使场景变换,也可以对症下药。

1.需要变更的原因

对比建筑行业的需求变更,软件行业的变更可以说是非常频繁了,究其原因,主要是两个方面:

  • 需求的确定性:软件工程的需求经常是抽象的、模糊的、不精确的。

  • 需求变更的成本:软件行业中,很多老板对软件项目需求变更导致的成本缺少系统认识。

2.如何解决需求变更问题

在软件项目开发中,需求变更其实不可避免的,一味地址需求变更也是不可取的。我们能做的就是利用软件工程的知识,理解需求变更背后深层次的原因,找到合适的方案来改善,积极拥抱合理的需求变化,减少不必要的需求变更。

从源头出发,针对需求变更发生的原因来给出解决方案:

  • 提升需求确定性,把需求分析做好,减少需求变更

  • 提高需求变更的成本,让客户或者产品经理不能太容易变更需求,这样就可以达到减少需求变更的目的。

  • 降低响应需求变更的成本,可以方便快捷地响应需求变更。

四、软件分析

1.分析全景图

分析的起点是问题本身,比如现象、痛点、挑战、价值等,从这些基础点去分析,如分析一个业务时,从业务愿景和业务目标去看这个业务有哪些利益相关者,也即有哪些角色在使用这个业务,从这些利益相关者的角度去思考他们的本质诉求,正是他们的诉求构成了我们要做什么的输入,不管外部怎么变化,他们的本质诉求是不变的,如对于消费者来讲,他们的诉求是花最短的时间、最少的钱、更好的体验买到心仪的商品;对于商家来讲,他们的诉求是怎么卖出更多的货、怎样获得更大的利润。反而如果我们不去关注利益关注点的本质诉求,而只是自己凭空想出来的,自以为有价值,结果一落地就出现了问题。

    当明确了要做什么(What)之后,接下来就要思考业务流程以及业务中包含的要素(业务对象)、业务模型以及业务能力(How),实际上这部分就是提供一个解决方案去实现前面提到的诉求。分析的阶段,一定要非常细,在软件分析中,有一些分析的工具帮助我们更好地理解事物本身,具体地在下一节中讲到。分析的产物是业务模型和业务能力地图,通过业务模型可以看出业务是什么、有什么,通过业务能力地图可以看出具体的业务能力有哪些,可以支撑哪些业务场景。

    分析往上看一层,就是要分析商业价值链和商业模式,虽然这一块并不是开发同学负责的范畴,了解一些还比较好,能让我们对业务有更深刻的认识,商业模式决定商业结构,商业结构决定交易结构,交易结构决定业务组成结构。利益相关者也是从业务组成结构中推导出来的,这一部分是最顶层的分析,分析业务的可行性,也即我们常说的Why。

2.具体分析方法

在实际中,会看到各种各样的分析方法,这些方法本身并不重要,重要的是它能给我们带来什么的帮助,为什么需要它,个人的观点是分析方法不要贪多,真正融汇到实际中,有那么1、2个方法就足已,不要迷失在各种各样的分析方法中,真正还是要了解分析的本质是什么,在第一部分中,已经提到分析的本质是要洞察出事物的组成,包含组成结构和运行机制,你再去看各种各样的分析方法,它们都是为了找出事物的组成结构和运行机制。如黄金圈分析方法,它就包含了三层(Why、What、How),分析事物不断从宏观到微观、从目的到实现;再比如5W2H,真正的把一件事分析得非常仔细,什么人在什么时间什么地点因为什么做了什么事。

画UML图并非是做做样子,而是真正地挖掘出业务能力有哪些、系统能力有哪些、业务模型是怎样的、要有哪些对象、对象之间的关系是怎样的。在实际工作中,有些人在分析阶段在这一块落实得并不那么好,其实问几个问题很容易暴露出来,比如设计的类图的出发点是什么、这个类的职责为什么有这些、这个职责为什么在这个类而不是在另外一个类中。如果我们分析阶段做得不扎实,设计阶段的输入就会比较少,或者是浅层次的输入,设计的质量也不会高,因为并没有真正洞察出问题。

3.1个分析案例

了几个关键词进行概括:打基础、拓渠道、夯能力、搭体系、数据化。当有了这些认识之后,再去推导技术侧要做哪些就比较容易,以拓展渠道为例,当多个渠道接入进来时就暴露了一些问题,比如答疑成本比较高,因此就有一个重要的方面就是渠道接入保障,怎么减少渠道接入成本、答疑成本就是技术侧要思考的问题。

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

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

相关文章

【Python】Flask + MQTT 实现消息订阅发布

目录 Flask MQTT 实现消息订阅发布准备开始1.创建Flask项目2创建py文件:mqtt_demo.py3.代码实现4.项目运行5.测试5.1 测试消息接收5.2 测试消息发布6、扩展 Flask MQTT 实现消息订阅发布 准备 本次项目主要使用到的库:flask_mqtt pip install flask…

Leetcode刷题详解——最长湍流子数组

1. 题目链接:978. 最长湍流子数组 2. 题目描述: 给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。 更正式地来说,当 arr 的子…

ALPHA开发板烧录工具MfgTool简介

一. 简介 前面我们已经移植好了 uboot 和 linux kernle ,制作好了根文件系统。但是我们移植都是通 过网络来测试的,在实际的产品开发中肯定不可能通过网络来运行。 因此,我们需要将 uboot 、 linux kernel 、 .dtb( 设备树 ) 和 rootf…

串口环形收发原理及实现

一、环形收发队列构建 1、构造环形收发数组及其长度 #define buff_size 10 Unsigned char buff[buff_size]; 2、定义环形收发读/写位置 u16 R_Buff; u16 W_Buff; 3、结构体封装 typedef struct Qbuff {u16 write; //写位置u16 read; //读位置u8 buf…

Zabbix自定义飞书webhook告警媒介1

说明:此配置仅适用于7版本及以上,低版本可能有问题 JavaScript 内容如下: try {var sourceData JSON.parse(value),req new HttpRequest(),response;if (sourceData.HTTPProxy) {req.setProxy(sourceData.HTTPProxy);}req.addHeader(Conte…

pytorch中的transpose用法

注意:维数从0开始,0维 1维2维…,负数代表从右往左数,-1代表第一维,以此类推 import torch import numpy as np# 创建一个二维数组 arr torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]]) print("原始数组:"…

Docker部署.NET6项目

Docker的三大核心概念 1、docker仓库(repository) docker仓库(repository)类似于代码库,是docker集中存放镜像的场所。实际上,注册服务器是存放仓库的地方,其上往往存放着很多仓库。每个仓库集…

案例058:基于微信小程序的智能社区服务系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

操作符(原码反码补码)

目录 前言&#xff1a; 原反补码&#xff1a; 位操作符&#xff1a; &#xff06; &#xff5c; &#xff3e; &#xff5e; >> << 总结&#xff1a; 逻辑操作符 && || 其他操作符&#xff1a; sizeof -- () &#xff1f;&#xf…

AMEYA360--罗姆与Quanmatic公司利用量子技术优化制造工序并完成验证

全球知名半导体制造商罗姆(总部位于日本京都市)于2023年1月起与 Quanmatic Inc.(总部位于日本东京都新宿区&#xff0c;以下简称“Quanmatic”)展开合作&#xff0c;在半导体制造工序之一的EDS工序中测试并引入量子技术&#xff0c;以优化制造工序中的组合。目前&#xff0c;双…

C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库 dategridview增加一行或几行一键保存数据库 ExcelHelper类(这个要导入NPOI包) using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using Syste…

dtaidistance笔记:dtw_ndim (高维时间序列之间的DTW)

1 数据 第一个维度是sequence的index&#xff0c;每一行是多个元素&#xff08;表示这一时刻的record&#xff09; from dtaidistance.dtw_ndim import *s1 np.array([[0, 0],[0, 1],[2, 1],[0, 1],[0, 0]], dtypenp.double) s2 np.array([[0, 0],[2, 1],[0, 1],[0, .5],[0…

Elasticsearch--解决磁盘使用率超过警戒水位线

原文网址&#xff1a;Elasticsearch--解决磁盘使用率超过警戒水位线_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES磁盘使用率超过警戒水位线的问题。 问题描述 当客户端向 Elasticsearch 写入文档时候报错&#xff1a; cluster_block_exception [FORBIDDEN/12/inde…

Qt进程和线程

一、进程 在设计一个应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好的实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序…

亿胜盈科 HT4182,HT4186,HT4188 电量均衡 同步升压型 双节理电池充电器

HT4182&#xff0c;HT4186&#xff0c;HT4188是一款5V输入&#xff0c;升压模式的充电管理IC&#xff0c;适用于双节串联鲤电池。其能自适应任意5V电源进行充电&#xff0c;并且由输入过压、欠压保护。 HT4182&#xff0c;HT4186&#xff0c;HT4188采用同步升压结构&#xff0…

基于单片机出租车计价器控制系统

**单片机设计介绍&#xff0c;基于单片机出租车计价器控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的出租车计价器控制系统是一个用于控制和管理出租车费用计算的电子设备。下面是一个简单的系统设计介绍&…

Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版

1.确定自己的硬件信息&#xff0c;确定电脑有英伟达 (NVIDIA)显卡 在任务栏上右键打开任务管理器 2.下载安装 Anaconda &#xff08;建议安装迅雷下载&#xff0c;同时浏览器添加扩展 “迅雷Chrome支持”&#xff09; https://www.anaconda.com/ https://repo.anaconda.com/arc…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验&#xff0c;加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑&#xff0c;比如标题、注解、评论之类的内容。 Ulysses让注意力专…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

Linux shell编程学习笔记33:type 命令

目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令&#xff08;以echo命令为例&#xff09;2.2 用type命令查看别名&#xff08;以ls命令为例&#xff09;2.3 用type命令同时查看shell内置命令和别…