本系列分三部曲:《框架实现》 《框架使用》 与 《数据流哲学》,这三篇是我对数据流阶段性的总结,正好补充之前过时的文章。

本篇是收官之作 《前端数据流哲学》。

1 引言

写这篇文章时,很有压力,如有不妥之处,欢迎指正。

同时,由于这是一篇佛系文章,所以不会得出你应该用 某某 框架的结论,你应该当作消遣来阅读。

2 精读

首先数据流管理模式,比较热门的分为三种。

  • 函数式、不可变、模式化。典型实现:Redux - 简直是正义的化身。
  • 响应式、依赖追踪。典型实现:Mobx。
  • 响应式,和楼上区别是以流的形式实现。典型实现:Rxjs、xstream。

当然还有第四种模式,裸奔,其实有时候也挺健康的。

数据流使用通用的准则是:副作用隔离、全局与局部状态的合理划分,以上三种数据流管理模式都可以实现,唯有是否强制的区别。

2.1 从时间顺序说起

一直在思考如何将这三个思维串起来,后来想通了,按照时间顺序串起来就非常自然。

暂时略过 Prototype、jquery 时代,为什么略过呢?因为当时前端还在野蛮人时代,生存问题都没有解决,哪还有功夫思考什么数据流,设计模式?前端也是那时候被觉得比后端水的。

好在前端发展越来越健康,大坑小坑被不断填上,加上硬件性能的提高,同时需求又越来越复杂,是时候想想该如何组织代码了。

最先映入眼帘的是 angular,搬来的 mvvm 思想真是为前端开辟了新的世界,发现代码还可以这么写!虽然 angluar 用起来很重,但 mvvm 带来的数据驱动思想已经越来越深入人心,随后 react 就突然火起来了。

其实在 react 火起来之前,有一个框架一步到位,进入了 react + mobx 时代,对,就是 avalon。avalon 也非常火,但是一个框架要成功,必须天时、地利、人和,当时时机不对,大家处于 angular 疲惫期,大多投入了 react 的怀抱。

可能有些主观,但我觉得 react 能火起来,主要因为大家认为它就是轻量 angular + 继承了数据驱动思想啊,非常符合时代背景,同时一大波概念被炒得火热,状态驱动、单向数据流等等,基本上用过 angular 的人都跟上了这波节奏。

虽然 react 内置了分形数据流管理体系,但总是强调自己只是 View 层,于是数据层增强的框架不断涌现,从 flux、reflux、到 redux。不得不说,react 真的推动了数据流管理的独立,让我们重新认识了数据流管理的重要性。

redux 概念太超前了,一步到位强制把副作用隔离掉了,但自己又没有深入解决带来的代码冗余问题,让我们又爱又恨,于是一部分人把目光转向了 mobx,这个响应式数据流框架,这个没有强制分离副作用,所以写起来很舒服的框架。

当然 mobx 如果仅仅是 mvvm 就不会火起来了,毕竟 angular 摆在那。主要是乘上了 react 这趟车,又有很多质疑 angular 脏检测效率的声音,mobx 也火了起来。当然,作为前端的使命是优化人机交互,所以我们都知道,用户习惯是最难改变的,直到现在,redux 依然是绝对主流。

mobx 还在小范围推广时,另一个更偏门的领域正刚处于萌芽期,就是 rxjs 为代表的框架,和 mobx 公用一个 observable 名词,大家 mobx 都没搞清楚,更是很少人会去了解 rxjs。

当 mobx 逐渐展露头角时,笔者做了一个类似的库:dob。主要动机是 mobx 手感还不够完美,对于新赋值变量需要用一些 extendObservable 等 api 修饰,正好发现浏览器对 proxy 支持已经成熟,因此笔者后来几乎所有个人项目几乎都用 dob 替代了 mobx。

这一时期三巨头之一的 vue 火了起来,成功利用:如果 ”react + mobx 很好用,那为什么不用 vue?“ 的 flag 打动了我。

一直到现在,前端已经发展到可谓五花八门的地步,typescript 打败 flow 几乎成为了新的 js,出现了 ember、clojurescript 之后,各大语言也纷纷出了到 js 的编译实现,陆陆续续的支持编译到 webassembly,react 作者都弃坑 js 创造了新语言 reason。

之前写过一篇初步认识 reason 的精读。

能接下来这一套精神洗礼的前端们,已经养出内心波澜不惊的功夫,小众已经不会成为跨越舒适区的门槛,再学个 rxjs 算啥呢?(开个玩笑,rxjs 社区不乏深耕多年的巨匠)所以最近 rxjs 又被炒的火热。

所以,从时间顺序来看,我们可以从 redux - mobx - rxjs 的顺序解读这三个框架。

2.2 redux 带来了什么

redux 是强制使用全局 store 的框架,尽管无数人在尝试将其做到局部化。

当然,一方面是由于时代责任,那时需要一个全局状态管理工具,弥补 react 局部数据流的不足。最重要的原因,是 redux 拥有一套几乎洁癖般完美的定位,就是要清晰可回溯

几乎一切都是为了这两个词准备的。第一步就要从分离副作用下手,因为副作用是阻碍代码清晰、以及无法回溯的第一道障碍,所以 action + reducer 概念闪亮登场,完美解决了副作用问题。可能是参考了 koa 中间件的设计思路,redux middleware 将 action 对接到 reducer 的黑盒的控制权暴露给了开发者。

由 redux middleware 源码阅读引发的函数式热,可能又拉近了开发者对 rxjs 的好感。同时高阶函数概念也在中间件源码中体现,几乎是为 react 高阶组件做铺垫。

社区出现了很多方案对 redux 异步做支持,从 redux-thunk 到 redux-saga,redux 带来的异步隔离思想也逐渐深入人心。同时基于此的一套高阶封装框架也层出不穷,建议用一个就好,比如 dva。

第二步就是解决阻碍回溯的“对象引用”机制,将 immutable 这套庞大思想搬到了前端。这下所有状态都不会被修改,基于此的 redux-dev-tools “时光机” 功能让人印象深刻。

Immutable 具体实现可以参考笔者之前写的一篇精读:精读 Immutable 结构共享。

当然,由于很像事件机制的 dispatch 导致了 redux 对 ts 支持比较繁琐,所以对 redux 的项目,维护的时候需要频繁使用全文搜索,以及至少在两个文件间来回跳跃。

2.3 mobx 带来了什么

mobx 是一个非常灵活的 TFRP 框架,是 FRP 的一个分支,将 FRP 做到了透明化,也可以说是自动化。

从函数式(FP),到 FRP,再到 TFRP,之间只是拓展关系,并不意味着单词越长越好。

之前说过了,由于大家对 redux 的疲劳,让 mobx 得以迅速壮大,不过现在要从另一个角度分析。

mobx 带来的概念从某种角度看,与 rxjs 很像,比如,都说自己的 observable 有多神奇。那么 observable 到底是啥呢?

可以把 observable 理解为信号源,每当信号变化时,函数流会自动执行,并输出结果,对前端而言,最终会使视图刷新。这就是数据驱动视图。然而 mobx 是 TFRP 框架,每当变量变化时,都会自动触发数据源的 dispatch,而且各视图也是自动订阅各数据源的,我们称为依赖追踪,或者叫自动依赖绑定。

笔者到现在还是认为,TFRP 是最高效的开发方式,自动订阅 + 自动发布,没什么比这个更高效了。

但是这种模式有一个隐患,它引发了副作用对纯函数的污染,就像 redux 把 action 与 reducer 合起来了一样。同时,对 props 的直接修改,也会导致与 react 对 props 的不可变定义冲突。因此 mobx 后来给出了 action 解决方案,解决了与 react props 的冲突,但是没有解决副作用未强制分离的问题。

笔者认为,副作用与 mutable 是两件事,关于 mutable 与副作用的关系,后文会有说明。也就是 mobx 没有解决副作用问题,不代表 TFRP 无法分离副作用,而且 mutable 也不一定与 可回溯 冲突,比如 mobx-state-tree,就通过 mutable 的方式,完成了与 redux 的对接。

前端对数据流的探索还在继续,mobx 先提供了一套独有机制,后又与 redux 找到结合点,前端探索的脚步从未停止。

2.4 rxjs 带来了什么

rxjs 是 FRP 的另一个分支,是基于 Event Stream 的,所以从对 view 的辅助作用来说,相比 mobx,显得不是那么智能,但是对数据源的定义,和 TFRP 有着本质的区别,似的 rxjs 这类框架几乎可以将任何事件转成数据源。

同时,rxjs 其对数据流处理能力非常强大,当我们把前端的一切都转为数据源后,剩下的一切都由无所不能的 rxjs 做数据转换,你会发现,副作用已经在数据源转换这一层完全隔离了,接下来会进入一个美妙的纯函数世界,最后输出到 dom driver 渲染,如果再加上虚拟 dom 的点缀,那岂不是。。岂不就是 cyclejs 吗?

多提一句,rxjs 对数据流纯函数的抽象能力非常强大,因此前端主要工作在于抽一个工具,将诸如事件、请求、推送等等副作用都转化为数据源。cyclejs 就是这样一个框架:提供了一套上述的工具库,与 dom 对接增加了虚拟 dom 能力。

rxjs 给前端数据流管理方案带来了全新的视角,它的概念由 mobx 引发,但解题思路却与 redux 相似。

rxjs 带来了两种新的开发方式,第一种是类似 cyclejs,将一切前端副作用转化为数据源,直接对接到 dom。另一种是类似 redux-observable,将 rxjs 数据流处理能力融合到已有数据流框架中,

redux-observable 将 action 与 reducer 改造为 stream 模式,对 action 中副作用行为,比如发请求,也提供了封装好的函数转化为数据源,因此,将 redux middleware 中的副作用,转移到了数据源转换做成中,让 action 保持纯函数,同时增强了原本就是纯函数的 reducer 的数据处理能力,非常棒。

如果说 redux-saga 解决了异步,那么 redux-observable 就是解决了副作用,同时赠送了 rxjs 数据处理能力。

回头看一下 mobx,发现 rxjs 与 mobx 都有对 redux 的增强方案,前端数据流的发展就是在不断交融。

我们不但在时间线上,将 redux、mobx、rxjs 串了起来,还发现了他们内在的关联,这三个思想像一张网,复杂的交织在一起。

2.5 可以串起来些什么了

我们发现,redux 和 rxjs 完全隔离了副作用,是因为他们有一个共性,那就是对前端副作用的抽象

redux 通过在 action 做副作用,将副作用隔离在 reducer 之外,使 reducer 成为了纯函数。

rxjs 将副作用先转化为数据源,将副作用隔离在管道流处理之外。

唯独 mobx,缺少了对副作用抽象这一层,所以导致了代码写的比 redux 和 rxjs 更爽,但副作用与纯函数混杂在一起,因此与函数式无缘。

有人会说,mobx 直接 mutable 改变对象也是导致副作用的原因,笔者认为是,也不是,看如下代码:

obj.a = 1

这段代码在 js 中铁定是 mutable 的?不一定,同样在 c++ 这些可以重载运算符的语言中也不一定了,setter 语法不一定会修改原有对象,比如可以通过 Object.defineProperty 来重写 obj 对象的 setter 事件。

由此我们可以开一个脑洞,通过运算符重载,让 mutable 方式得到 immutable 的结果。在笔者博客 Redux 使用可变数据结构 有说明原理和用法,而且 mobx 作者 mweststrate 是这么反驳那些吐槽 mobx 缺少 redux 历史回溯能力的声音的:

autorun(() => {snapshots.push(Object.assign({}, obj))
})

思路很简单,在对象有改动时,保存一张快照,虽然性能可能有问题。这种简单的想法开了个好头,其实只要在框架层稍作改造,便可以实现 mutable 到 immutable 的转换。

比如 mobx 作者的新作:immer 通过 proxy 元编程能力,将 setter 重写为 Object.assign() 实现 mutable 到 immutable 的转换。

笔者的 dob-redux 也通过 proxy,调用 Immutablejs.set() 实现 mutable 到 immutable 的转换。

组件需要数据流吗

真的是太看场景了。首先,业务场景的组件适合绑定全局数据流,业务无关的通用组件不适合绑定全局数据流。同时,对于复杂的通用组件,为了更好的内部通信,可以绑定支持分形的数据流。

然而,如果数据流指的是 rxjs 对数据处理的过程,那么任何需要数据复杂处理的场合,都适合使用 rxjs 进行数据计算。同时,如果数据流指的是对副作用的归类,那任何副作用都可以利用 rxjs 转成一个数据源归一化。当然也可以把副作用封装成事件,或者 promise。

对于副作用归一化,笔者认为更适合使用 rxjs 来做,首先事件机制与 rxjs 很像,另外 promise 只能返回一次,而且之后 resolve reject 两种状态,而 Observable 可以返回多次,而且没有内置的状态,所以可以更加灵活的表示状态。

所以对于各类业务场景,可以先从人力、项目重要程度、后续维护成本等外部条件考虑,再根据具体组件在项目中使用场景,比如是否与业务绑定来确定是否使用,以及怎么使用数据流。

可能在不远的未来,布局和样式工作会被 AI 取代,但是数据驱动下数据流选型应该比较难以被 AI 取代。

再次理解 react + mobx 不如用 vue 这句话

首先这句话很有道理,也很有分量,不过笔者今天将从一个全新的角度思考。

经过前面的探讨,可以发现,现在前端开发过程分为三个部分:副作用隔离 -> 数据流驱动 -> 视图渲染。

先看视图渲染,不论是 jsx、或 template,都是相同的,可以互相转化的。

再看副作用隔离,一般来说框架也不解决这个问题,所以不管是 react/ag/vue + redux/mobx/rxjs 任何一种组合,最终你都不是靠前面的框架解决的,而是利用后面的 redux/mobx/rxjs 来解决。

最后看数据流驱动,不同框架内置的方式不同。react 内置的是类 redux 的方式,vue/angular 内置的是类 mobx 的方式,cyclejs 内置了 rxjs。

这么来看,react + redux 是最自然的,react + mobx 就像 vue + redux 一样,看上去不是很自然。也就是 react + mobx 别扭的地方仅在于数据流驱动方式不同。对于视图渲染、副作用隔离,这两个因素不受任何组合的影响。

就数据流驱动问题来看,我们可以站在更高层面思考,比如将 react/vue/angular 的语法视为三种 DSL 规范,那其实可以用一种通用的 DSL 将其描述,并转换对应的 DSL 对接不同框架(阿里内部已经有这种实现了)。而这个 DSL 对框架内置数据流处理过程也可以屏蔽,举个例子:

<button onClick={() => {setState(() => {data: {name: 'nick'}})
}}>{data.name}
</button>

如果我们将上面的通用 jsx 代码转换为通用 DSL 时,会使用通用的方式描述结构以及方法,而转化为具体 react/vue/angluar 代码时,就会转化为对应内置数据流方案的实现。

所以其实内置数据流是什么风格,在有了上层抽象后,是可以忽略的,我们甚至可以利用 proxy,将 mutable 的代码转换到 react 时,改成 immutable 模式,转到 vue 时,保持 mutable 形式。

对框架封装的抽象度越高,框架之间差异就越小,渐渐的,我们会从框架名称的讨论中解放,演变成对框架 + 数据流哪种组合更加合适的思考。

3 总结

最近梳理了一下 gaea-editor - 笔者做的一个 web designer,重新思考了其中插件机制,拿出来讲一讲。

首先大体说明一下,这个编辑器使用 dob 作为数据流,通过 react context 共享数据,写法和 mobx 很像,不过这不是重点,重点是插件拓展机制也深度使用了数据流。

什么是插件拓展机制?比如像 VScode 这些编辑器,都拥有强大的拓展能力,开发者想要添加一个功能,可以不用学习其深奥的框架内容,而是读一下简单明了的插件文档,使用插件完成想要功能的开发。解耦的很美好,不过重点是插件的能力是否强大,插件可以触及内核哪些功能、拿到哪些信息、拥有哪些能力?

笔者的想法比较激进,为了让插件拥有最大能力,这个 web designer 所有内核代码都是用插件写的,除了调用插件的部分。所以插件可以随意访问和修改内核中任何数据,包括 UI。

让 UI 拥有通用能力比较容易,gaea-editor 使用了插槽方式渲染 UI,也就是任何插件只要提供一个名字,就能嵌入到申明了对应名字的 UI 插槽中,而插件自己也可以申明任意数量的插槽,内核中也有几个内置的插槽。这样插件的 UI 能力极强,任何 UI 都可以被新的插件替代掉,只要申明相同的名字即可。

剩下一半就是数据能力,笔者使用了依赖注入,将所有内核、插件的 store、action 全量注入到每一个插件中:

@Connect
class CustomPlugin extends React.PureComponent {render() {// this.props.Actions, this.props.Stores}
}

同时,每个插件可以申明自己的 store,程序初始化时会合并所有插件的 store 到内存中。因此插件几乎可以做任何事,重写一套内核也没有问题,那么做做拓展更是轻松。

其实这有点像 webpack 等插件的机制:

export default (context) => {}

每次申明插件,都可以从函数中拿到传来的数据,那么通过数据流的 Connect 能力,将数据注入到组件,也是一种强大的插件开发方式。

更多思考

通过上面插件机制的例子会发现,数据流不仅定义了数据处理方式、副作用隔离,同时依赖注入也在数据流功能列表之中,前端数据流是个很宽泛的概念,功能很多。

redux、mobx、rxjs 都拥有独特的数据处理、副作用隔离方式,同时对应的框架 redux-react、mobx-react、cyclejs 都补充了各种方式的依赖注入,完成了与前端框架的衔接。正是应为他们纷纷将内核能力抽象了出来,才让 redux+rxjs mobx+rxjs 这些组合成为了可能。

未来甚至会诞生一种完全无数据管理能力的框架,只做纯 view 层,内核原生对接 redux、mobx、rxjs 也不是没有可能,因为框架自带的数据流与这些数据流框架比起来,太弱了。

react stateless-component 就是一种尝试,不过现在这种纯 view 层组件配合数据流框架的方式还比较小众。

纯 view 层不代表没有数据流管理功能,比如 props 的透传,更新机制,都可以是内置的。

不过笔者认为,未来的框架可能会朝着 view 与数据流完全隔离的方式演化,这样不但根本上解决了框架 + 数据流选择之争,还可以让框架更专注于解决 view 层的问题。

从有到无

HTML5 有两个有意思的标签:details, summary。通过组合,可以达到 details 默认隐藏,点击 summary 可以 toggle 控制 details 下内容的效果:

<details><summary>标题</summary> <p>内容</p> 
</details>

更是可以通过 css 覆盖,完全实现 collapse 组件的效果。

当然就 collapse 组件来说,因为其内部维持了状态,所以控制折叠面板的 打开/关闭 状态,而 HTML5 的 details 也通过浏览器自身内部状态,对开发者只暴露 css。

在未来,浏览器甚至可能提供更多的原生上层组件,而组件内部状态越来越不需要开发者关心,甚至,不需要开发者再引用任何一个第三方通用组件,HTML 提供足够多的基础组件,开发者只需要引用 css 就能实现组件库更换,似乎回到了 bootstrap 时代。

有人会说,具有业务含义的再上层组件怎么提供?别忘了 HTML components,这个规范配合浏览器实现了大量原生组件后,可能变得异常光彩夺目,DSL 再也不需要了,HTML 本身就是一套通用的 DSL,框架更不需要了,浏览器内置了一套框架。

插一句题外话,所有组件都通过 html components 开发,就真正意义上实现了抹平框架,未来不需要前端框架,不需要 react 到 vue 的相互转化,组件加载速度提高一个档次,动态组件 load 可能只需要动态加载 css,也不用担心不同环境/框架下开发的组件无法共存。前端发展总是在进两步退一步,不要形成思维定式,每隔一段时间,需要重新审视下旧的技术。

话题拉回来,从浏览器实现的 details 标签来看,内部一定有状态机制,假如这套状态机制可以提供给开发者,那数据流的 数据处理、副作用隔离、依赖注入 可能都是浏览器帮我们做了,redux 和 mobx 会立刻失去优势,未来潜力最大的可能是拥有强大纯函数数据流处理能力的 rxjs。

当然在 2018 年,redux 和 mobx 依然会保持强大的活力,就算在未来浏览器内置的数据流机制,rxjs 可能也不适合大规模团队合作,尤其在现在有许多非前端岗位兼职前端的情况下。

就像现在 facebook、google 的模式一样,在未来的更多年内,前后端,甚至 dba 与算法岗位职能融合,每个人都是全栈时,可能 rxjs 会在更大范围被使用。

纵观前端历史,数据流框架从无到有,但在未来极有可能从有变到无,前端数据流框架消失了,但前端数据流思想永远保留了下来,变得无处不在。

4 更多讨论

讨论地址是:精读《前端数据流哲学》 · Issue #58 · dt-fe/weekly

如果你想参与讨论,请点击这里,每周都有新的主题,每周五发布。

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

相关文章

  1. 做过双眼皮多久不疼了

    ...

    2024/4/20 15:51:11
  2. 埋线双眼皮大概几天可以消肿

    ...

    2024/4/28 4:14:00
  3. 北京做双眼皮医生孙强

    ...

    2024/4/28 4:16:26
  4. 双眼皮内眼角肉条

    ...

    2024/4/27 21:43:05
  5. 高中人南昌双眼皮医院优问同济整形

    ...

    2024/4/21 13:41:46
  6. 修复双眼皮对眼球安全吗

    ...

    2024/4/21 13:41:45
  7. 双眼皮割后眼袋发青

    ...

    2024/4/21 13:41:43
  8. 烟台双眼皮看.华怡好

    ...

    2024/4/21 13:41:42
  9. 同济美容医院双眼皮专家

    ...

    2024/4/21 13:41:41
  10. Angular的启动方式

    方式 1&#xff1a;自动启动 Angular会自动的找到ng-app&#xff0c;将它作为启动点&#xff0c;自动启动 <!DOCTYPE html> <html ng-app"myModule"><head><title>New Page</title><meta charset"utf-8" /><scrip…...

    2024/4/20 15:18:21
  11. 三点打孔双眼皮能维持多久

    ...

    2024/4/21 13:41:39
  12. 睡起来双眼皮标

    ...

    2024/4/21 13:41:39
  13. 2000元双眼皮下眼睑厚

    ...

    2024/4/21 13:41:37
  14. 南山医院割台州割双眼皮高明维多利亚S

    ...

    2024/4/21 13:41:37
  15. vue概述(常用面试考点)

    文章目录1、MVC、MVP与MVVM模式1.1 mvc1.2 mvp1.3 mvvm1.4 区别2、常见的mvvm的几种方式3、Object.defineProperty()方法4、构建的 vue-cli 工程都到了哪些技术&#xff0c;它们的作用分别是什么&#xff1f;5、vue-cli 工程常用的 npm 命令有哪些&#xff1f;6、请说出vue-cli…...

    2024/4/21 13:41:36
  16. 完全离线安装 eslint 的方法

    1.在无法联网的电脑上先把VSCode安装好。 2.在家里有网的电脑上&#xff0c;在vsCode里面的扩展直接安装eslint插件&#xff0c;然后在该路径&#xff08;C:\Users\Administrator\.vscode\extensions&#xff09;下&#xff0c; 把eslint插件的文件夹&#xff08;dbaeumer.vsco…...

    2024/4/21 13:41:34
  17. 如何规范团队代码,小程序ESLint+Prettier+lint-staged+commit+changelog+standard-version自动规范实践

    文章目录如何规范团队代码&#xff0c;小程序ESLintPrettierlint-stagedcommitchangelogstandard-version自动规范实践简介以及优势ESLintPrettierhusky lint-stagedcommitizencommitlintconventional-changelogstandard-versionESLint引入安装配置使用规则使用方法Prettier引…...

    2024/4/21 13:41:33
  18. vue 第一天

    vue-介绍 三大前端框架 Vue Vue.js (view)是一套构建用户界面的前端框架技术 内部集成了许多基础技术&#xff0c;例如html、css、javascript、ajax、node等&#xff0c;当然还有vue本身高级技术体现&#xff0c;例如组件、过滤器、指令、路由、webpack等等 2012年出现&am…...

    2024/4/20 15:51:21
  19. Google JavaScript样式指南

    Google JavaScript样式指南 目录 1简介1.1术语说明1.2指南说明2源文件基础知识2.1文件名2.2文件编码&#xff1a;UTF-82.3特殊字符3源文件结构3.1许可或版权信息&#xff08;如果有&#xff09;3.2 fileoverview JSDoc&#xff0c;如果存在的话3.3 goog.module语句3.4 goog.req…...

    2024/4/20 15:51:19
  20. Dart-基础语法-更新

    Dart-基础语法 之前写过一篇基础语法&#xff0c; 后来读刘望舒的微信推文发现这篇总结的也挺全乎&#xff0c; 特别是环境搭建 &#xff0c;关键字&#xff0c;异常捕获&#xff0c; 类的继承部分 作为学习参考吧&#xff0c; 转载过来&#xff0c;也方便以后查阅。 原文链接…...

    2024/4/20 15:51:18

最新文章

  1. android layout 的文件夹可以创建子文件夹吗

    android layout 的文件夹可以创建子文件夹吗?因为layout文件夹中的文件一多管理起来就很麻烦&#xff0c;如果可以分类管理起来就会轻松许多。 Android layout的文件夹可以创建子文件夹。在Android Studio中&#xff0c;你可以通过在layout文件夹下直接创建子文件夹的方式来实…...

    2024/4/28 11:22:32
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. String类(1)

    ❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…...

    2024/4/25 22:23:30
  4. Django实现的登录注册功能

    1 前言 在Web开发中&#xff0c;用户登录和注册是最基本且必不可少的功能。Django&#xff0c;作为一个高级的Python Web框架&#xff0c;为我们提供了强大的工具和库来快速实现这些功能。下面&#xff0c;我将详细介绍如何使用Django来实现用户登录和注册功能。 2 功能介绍 …...

    2024/4/23 6:25:06
  5. STM32重要参考资料

    stm32f103c8t6 一、引脚定义图 二、时钟树 三、系统结构图 四、启动配置 &#xff08;有时候不小心短接VCC和GND&#xff0c;芯片会锁住&#xff0c;可以BOOT0拉高试试&#xff08;用跳线帽接&#xff09;&#xff09; 五、最小系统原理图 可用于PCB设计 六、常见折腾人bug…...

    2024/4/26 8:20:13
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57