本文翻译自:What are the actual uses of ES6 WeakMap?

What are the actual uses of the WeakMap data structure introduced in ECMAScript 6? ECMAScript 6中引入的WeakMap数据结构的实际用途是什么?

Since a key of a weak map creates a strong reference to its corresponding value, ensuring that a value which has been inserted into a weak map will never disappear as long as its key is still alive, it can't be used for memo tables, caches or anything else that you would normally use weak references, maps with weak values, etc. for. 由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就不会消失,因此不能将其用于备忘表,缓存或其他通常使用弱引用,弱值映射等的内容。

It seems to me that this: 在我看来,这是:

weakmap.set(key, value);

...is just a roundabout way of saying this: ...只是一种回旋的说法:

key.value = value;

What concrete use cases am I missing? 我缺少哪些具体用例?


#1楼

参考:https://stackoom.com/question/1zPio/ES-WeakMap的实际用途是什么


#2楼

This answer seems to be biased and unusable in a real world scenario. 在现实世界中,这个答案似乎是有偏见且无法使用的。 Please read it as is, and don't consider it as an actual option for anything else than experimentation 请按原样阅读,不要将其视为除实验以外的其他选择

A use case could be to use it as a dictionary for listeners, I have a coworker who did that. 一个用例可能是将其用作侦听器的字典,我有一个这样做的同事。 It is very helpful because any listener is directly targetted with this way of doing things. 这非常有用,因为任何听众都可以通过这种方式直接成为目标。 Goodbye listener.on . 再见listener.on

But from a more abstract point of view, WeakMap is especially powerful to dematerialize access to basically anything, you don't need a namespace to isolate its members since it is already implied by the nature of this structure. 但是从更抽象的角度来看, WeakMap尤其强大,可以取消对基本上所有内容的访问,您不需要名称空间来隔离其成员,因为该结构的性质已经暗示了该名称空间。 I'm pretty sure you could do some major memory improvements by replacing awkwards redundant object keys (even though deconstructing does the work for you). 我很确定您可以通过替换笨拙的冗余对象键来进行一些重大的内存改进(即使解构可以为您工作)。


Before reading what is next 在阅读下一步之前

I do now realize my emphasize is not exactly the best way to tackle the problem and as Benjamin Gruenbaum pointed out (check out his answer, if it's not already above mine :p), this problem could not have been solved with a regular Map , since it would have leaked, thus the main strength of WeakMap is that it does not interfere with garbage collection given that they do not keep a reference. 我现在确实意识到我的强调并不完全是解决问题的最佳方法,并且正如本杰明·格伦鲍姆 ( Benjamin Gruenbaum)所指出的(请查看他的回答,如果它不在我的:p之上),则无法使用常规Map来解决此问题,因为它会泄漏,所以WeakMap的主要优点在于,只要不保留引用,它就不会干扰垃圾回收。


Here is the actual code of my coworker (thanks to him for sharing) 这是我同事的实际代码(感谢他的分享)

Full source here , it's about listeners management I talked about above (you can also take a look at the specs ) 这里的完整源代码是关于我在上面讨论的监听器管理的(您也可以查看规范 )

var listenableMap = new WeakMap();export function getListenable (object) {if (!listenableMap.has(object)) {listenableMap.set(object, {});}return listenableMap.get(object);
}export function getListeners (object, identifier) {var listenable = getListenable(object);listenable[identifier] = listenable[identifier] || [];return listenable[identifier];
}export function on (object, identifier, listener) {var listeners = getListeners(object, identifier);listeners.push(listener);
}export function removeListener (object, identifier, listener) {var listeners = getListeners(object, identifier);var index = listeners.indexOf(listener);if(index !== -1) {listeners.splice(index, 1);}
}export function emit (object, identifier, ...args) {var listeners = getListeners(object, identifier);for (var listener of listeners) {listener.apply(object, args);}
}

#3楼

Fundamentally 从根本上

WeakMaps provide a way to extend objects from the outside without interfering with garbage collection. WeakMaps提供了一种从外部扩展对象而不干扰垃圾回收的方法。 Whenever you want to extend an object but can't because it is sealed - or from an external source - a WeakMap can be applied. 每当您想扩展对象但由于密封而不能扩展对象时(或者从外部源扩展)时,都可以应用WeakMap。

A WeakMap is a map (dictionary) where the keys are weak - that is, if all references to the key are lost and there are no more references to the value - the value can be garbage collected. WeakMap是弱的地图(词典),也就是说,如果丢失了对键的所有引用,并且不再有对该值的引用,则可以对该进行垃圾回收。 Let's show this first through examples, then explain it a bit and finally finish with real use. 让我们首先通过示例展示它,然后进行一些解释,最后完成实际使用。

Let's say I'm using an API that gives me a certain object: 假设我使用的API给了我一个特定的对象:

var obj = getObjectFromLibrary();

Now, I have a method that uses the object: 现在,我有一个使用该对象的方法:

function useObj(obj){doSomethingWith(obj);
}

I want to keep track of how many times the method was called with a certain object and report if it happens more than N times. 我想跟踪用某个对象调用该方法的次数,并报告该方法是否发生了N次以上。 Naively one would think to use a Map: 天真的会想到使用Map:

var map = new Map(); // maps can have object keys
function useObj(obj){doSomethingWith(obj);var called = map.get(obj) || 0;called++; // called one more timeif(called > 10) report(); // Report called more than 10 timesmap.set(obj, called);
}

This works, but it has a memory leak - we now keep track of every single library object passed to the function which keeps the library objects from ever being garbage collected. 这可行,但是会发生内存泄漏-我们现在跟踪传递给该函数的每个库对象,从而避免垃圾回收。 Instead - we can use a WeakMap : 相反,我们可以使用WeakMap

var map = new WeakMap(); // create a weak map
function useObj(obj){doSomethingWith(obj);var called = map.get(obj) || 0;called++; // called one more timeif(called > 10) report(); // Report called more than 10 timesmap.set(obj, called);
}

And the memory leak is gone. 并且内存泄漏消失了。

Use cases 用例

Some use cases that would otherwise cause a memory leak and are enabled by WeakMap s include: 某些会导致内存泄漏并由WeakMap启用的用WeakMap包括:

  • Keeping private data about a specific object and only giving access to it to people with a reference to the Map. 保留有关特定对象的私人数据,并且仅授予参考地图的人员访问。 A more ad-hoc approach is coming with the private-symbols proposal but that's a long time from now. 私有符号提案中出现了一种更临时的方法,但是距离现在还有很长时间。
  • Keeping data about library objects without changing them or incurring overhead. 保留有关库对象的数据,而无需更改它们或引起开销。
  • Keeping data about a small set of objects where many objects of the type exist to not incur problems with hidden classes JS engines use for objects of the same type. 保留有关少量对象的数据(其中存在许多类型的对象)不会引起JS引擎用于相同类型的对象的隐藏类问题。
  • Keeping data about host objects like DOM nodes in the browser. 在浏览器中保留有关主机对象(如DOM节点)的数据。
  • Adding a capability to an object from the outside (like the event emitter example in the other answer). 从外部向对象添加功能(如另一个答案中的事件发射器示例)。

Let's look at a real use 让我们看一下真正的用途

It can be used to extend an object from the outside. 它可以用于从外部扩展对象。 Let's give a practical (adapted, sort of real - to make a point) example from the real world of Node.js. 让我们从Node.js的真实世界中给出一个实用的(经过改编的,真实的)实例。

Let's say you're Node.js and you have Promise objects - now you want to keep track of all the currently rejected promises - however, you do not want to keep them from being garbage collected in case no references exist to them. 比方说,你的Node.js,你有Promise对象-现在你要保留所有当前被拒绝承诺的轨道-但是,你不想让他们被的情况下,垃圾收集没有引用存在于他们。

Now, you don't want to add properties to native objects for obvious reasons - so you're stuck. 现在,你不想将属性添加到本地对象的原因很明显-这样你就完蛋了。 If you keep references to the promises you're causing a memory leak since no garbage collection can happen. 如果保留对Promise的引用,则将导致内存泄漏,因为不会发生垃圾回收。 If you don't keep references then you can't save additional information about individual promises. 如果您不保留引用,那么您将无法保存有关单个承诺的其他信息。 Any scheme that involves saving the ID of a promise inherently means you need a reference to it. 任何涉及保存承诺ID的方案本质上都意味着您需要对其进行引用。

Enter WeakMaps 输入弱地图

WeakMaps mean that the keys are weak. WeakMaps表示很弱。 There are no ways to enumerate a weak map or to get all its values. 无法枚举弱映射或获取其所有值。 In a weak map, you can store the data based on a key and when the key gets garbage collected so do the values. 在弱映射中,您可以基于密钥存储数据,并且在密钥被垃圾回收时也存储值。

This means that given a promise you can store state about it - and that object can still be garbage collected. 这意味着只要有一个承诺,您就可以存储有关它的状态-而且该对象仍可以被垃圾回收。 Later on, if you get a reference to an object you can check if you have any state relating to it and report it. 稍后,如果获得对对象的引用,则可以检查是否具有与该对象相关的任何状态并报告该状态。

This was used to implement unhandled rejection hooks by Petka Antonov as this : Petka Antonov用来实现未处理的拒绝挂钩 ,如下所示 :

process.on('unhandledRejection', function(reason, p) {console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason);// application specific logging, throwing an error, or other logic here
});

We keep information about promises in a map and can know when a rejected promise was handled. 我们将有关诺言的信息保存在地图中,并且可以知道何时处理了被拒绝的诺言。


#4楼

WeakMap works well for encapsulation and information hiding WeakMap非常适合封装和信息隐藏

WeakMap is only available for ES6 and above. WeakMap仅适用于ES6及更高版本。 A WeakMap is a collection of key and value pairs where the key must be an object. WeakMap是键和值对的集合,其中键必须是一个对象。 In the following example, we build a WeakMap with two items: 在以下示例中,我们构建了一个包含两个项目的WeakMap

var map = new WeakMap();
var pavloHero = {first: "Pavlo", last: "Hero"};
var gabrielFranco = {first: "Gabriel", last: "Franco"};
map.set(pavloHero, "This is Hero");
map.set(gabrielFranco, "This is Franco");
console.log(map.get(pavloHero));//This is Hero

We used the set() method to define an association between an object and another item (a string in our case). 我们使用set()方法定义一个对象与另一个项目(在我们的例子中为字符串)之间的关联。 We used the get() method to retrieve the item associated with an object. 我们使用了get()方法来检索与对象关联的项目。 The interesting aspect of the WeakMap s is the fact that it holds a weak reference to the key inside the map. WeakMap有趣的方面是它对地图内部的键的引用很弱。 A weak reference means that if the object is destroyed, the garbage collector will remove the entire entry from the WeakMap , thus freeing up memory. 弱引用意味着如果对象被破坏,则垃圾收集器将从WeakMap删除整个条目,从而释放内存。

var TheatreSeats = (function() {var priv = new WeakMap();var _ = function(instance) {return priv.get(instance);};return (function() {function TheatreSeatsConstructor() {var privateMembers = {seats: []};priv.set(this, privateMembers);this.maxSize = 10;}TheatreSeatsConstructor.prototype.placePerson = function(person) {_(this).seats.push(person);};TheatreSeatsConstructor.prototype.countOccupiedSeats = function() {return _(this).seats.length;};TheatreSeatsConstructor.prototype.isSoldOut = function() {return _(this).seats.length >= this.maxSize;};TheatreSeatsConstructor.prototype.countFreeSeats = function() {return this.maxSize - _(this).seats.length;};return TheatreSeatsConstructor;}());
})()

#5楼

𝗠𝗲𝘁𝗮𝗱𝗮𝘁𝗮 𝗠𝗲𝘁𝗮𝗱𝗮𝘁𝗮

Weak Maps can be used to store metadata about DOM elements without interfering with garbage collection or making coworkers mad at your code. 弱映射可用于存储有关DOM元素的元数据,而不会干扰垃圾回收或使同事生气于您的代码。 For example, you could use them to numerical index all elements in a webpage. 例如,您可以使用它们对网页中的所有元素进行数字索引。

𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗪𝗲𝗮𝗸𝗠𝗮𝗽𝘀 𝗼𝗿 𝗪𝗲𝗮𝗸𝗦𝗲𝘁𝘀: 𝗪𝗲𝗮𝗸𝗦𝗲𝘁𝘀:

 var elements = document.getElementsByTagName('*'), i = -1, len = elements.length; while (++i !== len) { // Production code written this poorly makes me want to cry: elements[i].lookupindex = i; elements[i].elementref = []; elements[i].elementref.push( elements[Math.pow(i, 2) % len] ); } // Then, you can access the lookupindex's // For those of you new to javascirpt, I hope the comments below help explain // how the ternary operator (?:) works like an inline if-statement document.write(document.body.lookupindex + '<br />' + ( (document.body.elementref.indexOf(document.currentScript) !== -1) ? // if(document.body.elementref.indexOf(document.currentScript) !== -1){ "true" : // } else { "false" ) // } ); 

𝗨𝘀𝗶𝗻𝗴 𝗪𝗲𝗮𝗸𝗠𝗮𝗽𝘀 𝗮𝗻𝗱 𝗪𝗲𝗮𝗸𝗦𝗲𝘁𝘀: 𝗪𝗲𝗮𝗸𝗦𝗲𝘁𝘀:

 var DOMref = new WeakMap(), __DOMref_value = Array, __DOMref_lookupindex = 0, __DOMref_otherelement = 1, elements = document.getElementsByTagName('*'), i = -1, len = elements.length, cur; while (++i !== len) { // Production code written this greatly makes me want to 😊: cur = DOMref.get(elements[i]); if (cur === undefined) DOMref.set(elements[i], cur = new __DOMref_value) cur[__DOMref_lookupindex] = i; cur[__DOMref_otherelement] = new WeakSet(); cur[__DOMref_otherelement].add( elements[Math.pow(i, 2) % len] ); } // Then, you can access the lookupindex's cur = DOMref.get(document.body) document.write(cur[__DOMref_lookupindex] + '<br />' + ( cur[__DOMref_otherelement].has(document.currentScript) ? // if(cur[__DOMref_otherelement].has(document.currentScript)){ "true" : // } else { "false" ) // } ); 

𝗧𝗵𝗲 𝗗𝗶𝗳𝗳𝗲𝗿𝗲𝗻𝗰𝗲 𝗗𝗶𝗳𝗳𝗲𝗿𝗲𝗻𝗰𝗲

The difference may look negligible, aside from the fact that the weakmap version is longer, however there is a major difference between the two pieces of code shown above. 除了弱映射版本更长的事实之外,这种差异看起来可以忽略不计,但是上面显示的两段代码之间存在很大的差异。 In the first snippet of code, without weak maps, the piece of code stores references every which way between the DOM elements. 在没有弱映射的第一段代码中,这段代码存储DOM元素之间的所有引用。 This prevents the DOM elements from being garbage collected. 这样可以防止DOM元素被垃圾回收。 Math.pow(i, 2) % len] may seem like an oddball that nobody would use, but think again: plenty of production code has DOM references that bounce all over the document. Math.pow(i, 2) % len]看起来像是一个没人愿意使用的怪胎,但请三思而后行:大量生产代码中都包含DOM引用,这些引用在整个文档中都会出现。 Now, for the second piece of code, because all the references to the elements are weak, when you a remove a node, the browser is able to determine that the node is not used (not able to be reached by your code), and thus delete it from memory. 现在,对于第二段代码,由于对元素的所有引用都很弱,因此当您删除节点时,浏览器能够确定未使用该节点(您的代码无法访问该节点),并且因此将其从内存中删除。 The reason for why you should be concerned about memory usage, and memory anchors (things like the first snippet of code where unused elements are held in memory) is because more memory usage means more browser GC-attempts (to try to free up memory to avert a browser crash) means slower browsing experience and sometimes a browser crash. 之所以要关注内存使用情况和内存锚点(例如未使用的元素保留在内存中的第一个代码段之类的代码),是因为更多的内存使用情况意味着更多的浏览器尝试使用GC(尝试释放内存以供释放)。避免浏览器崩溃)意味着浏览体验变慢,有时还会导致浏览器崩溃。

As for a polyfill for these, I would recommend my own library ( found here @ github ). 至于用于这些的polyfill,我会推荐我自己的库( 在@github上找到 )。 It is a very lightweight library that will simply polyfill it without any of the way-overly-complex frameworks you might find in other polyfills. 它是一个非常轻量级的库,可以简单地对其进行填充,而无需您在其他polyfill中找到任何过于复杂的框架。

~ Happy coding! 〜编码愉快!


#6楼

I use WeakMap for the cache of worry-free memoization of functions that take in immutable objects as their parameter. 我使用WeakMap缓存将不可变对象作为其参数的函数的无忧WeakMap

Memoization is fancy way of saying "after you compute the value, cache it so you don't have to compute it again". 记忆化是一种奇特的说法,即“在计算了值之后,对其进行缓存,这样就不必再次计算它”。

Here's an example: 这是一个例子:

 // using immutable.js from here https://facebook.github.io/immutable-js/ const memo = new WeakMap(); let myObj = Immutable.Map({a: 5, b: 6}); function someLongComputeFunction (someImmutableObj) { // if we saved the value, then return it if (memo.has(someImmutableObj)) { console.log('used memo!'); return memo.get(someImmutableObj); } // else compute, set, and return const computedValue = someImmutableObj.get('a') + someImmutableObj.get('b'); memo.set(someImmutableObj, computedValue); console.log('computed value'); return computedValue; } someLongComputeFunction(myObj); someLongComputeFunction(myObj); someLongComputeFunction(myObj); // reassign myObj = Immutable.Map({a: 7, b: 8}); someLongComputeFunction(myObj); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script> 

A few things to note: 注意事项:

  • Immutable.js objects return new objects (with a new pointer) when you modify them so using them as keys in a WeakMap is guarantees the same computed value. Immutable.js对象在您对其进行修改时会返回新对象(带有新指针),因此在WeakMap中将它们用作键可确保相同的计算值。
  • The WeakMap is great for memos because once the object (used as the key) gets garbage collected, so does the computed value on the WeakMap. WeakMap非常适合用于备忘录,因为一旦对象(用作键)被垃圾回收,WeakMap上的计算值也会被收集。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 摆摊经济下小程序为何如此重要?

    地摊经济也被互联网化了,地摊的确蕴含着很多人间烟火的味道,而且地摊能够感觉到很亲近,那么随着互联网的浪潮下,美团饿了么有了外卖之后,很多人在家里就能吃到了,所以地摊的很作做法,逐步变成了外卖模式,有些因此也就开始做起了专业做外卖,不对外营业的模式! 不可否认…...

    2024/4/27 23:06:23
  2. JWT单点登录(源码学习)

    你好我是辰兮,很高兴你能来阅读,本篇给是初学JWT单点登录后的困惑,现在源码学习后更加了解JWT的结构,小结下来,献给初学者,共同成长,一起进步。JWT单点登录案例:JWT单点登录代码实现文章目录一、JWT的结构二、JWT源码学习三、JWT 的特点小结一、JWT的结构 JWT的结构是什…...

    2024/4/24 10:37:44
  3. Mapbox填色图绘制

    这些天在做基于Mapbox的疫情数据可视化,感觉基于Mapbox的疫情数据可视化中,从地图看疫情 by Mofei Zhu文章中,填色专题图很有意思,如下。决定动手实现下。 首先,在这篇文章中,作者提到了大概思路:其实在Mapbox的地图中,我们可以在Studio中上传国家、省份、洲、城市等多…...

    2024/4/24 10:37:48
  4. 人工智能发展历程

    1.2人工智能发展历程 学习目标了解人工智能阶发展历程1人工智能的起源 1.1图灵测试 测试者与被测试者(一个人和一台机器)喘开的情况下,遍过一些装置(如键盘)向被测试者随意提问。 多次测试(一般为5min之内),如果有超过30%的测试者不能确定被测试者是人还是机器,那么这…...

    2024/4/24 10:37:42
  5. 从零开始玩PT-新人指南

    PT的主要作用就是下载共享资源的,其实在大学的时候多少也都接触过,比如东北大学大名鼎鼎的六维空间,北邮的BYRPT,上交的葡萄PT都是上学的时候下载资源的好地方。可惜的是由于学校的PT主要都是为了学生们的资源共享,所以一般都是限制只有教育网的ipv6才可以访问,已经不是学…...

    2024/4/28 4:16:13
  6. 二进制求和(力扣第67题)

    题目:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例1:输入: a = "11", b = "1" 输出: "100"示例2:输入: a = "1010", b = "1011" 输出: "10101"分析:其实就…...

    2024/4/28 3:29:37
  7. 《理财系列》-《穷爸爸富爸爸》

    清崎有两个爸爸:“穷爸爸”是他的亲生父亲,一个高学历的教育官员;“富爸爸”是他好朋友的父亲,一个高中没毕业却善于投资理财的企业家。清崎遵从“穷爸爸”为他设计的人生道路:上大学,服兵役,参加越战,走过了平凡的人生初期。直到1977年,清崎亲眼目睹一生辛劳的“穷爸…...

    2024/4/28 14:02:23
  8. JS高级编程笔记归总

    1.JS简史 客户端语言--- 为了解决拨号,表单验证缓慢的问题 ECMAScript的新脚本语言的标准。 1.2 JS实现 JS由三部分组成:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM) 1.2.1 ECMAScript ECMAScript与Web浏览器无关。ECMAScript这门语言并不包含输入和…...

    2024/4/24 10:37:35
  9. 875. 爱吃香蕉的珂珂

    珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再…...

    2024/4/24 10:37:34
  10. javascript的笔记总结

    认识Javascript javascript是一门面向对象的跨平台的脚本语言,由 ECMAScript、BOM和DOM所组成对象(属性和方法 ) 脚本语言:不能独立运行,需要依托其他的程序(平台)来运行javascript的特点1、解释性脚本语言、 2、弱类型语言、 3、事件驱动、 4、跨平台、运行…...

    2024/4/24 10:37:33
  11. 安装和卸载程序时总是出现2502,2503错误代码的解决方法

    安装和卸载程序时总是出现2502,2503错误代码的解决方法参考文章: (1)安装和卸载程序时总是出现2502,2503错误代码的解决方法 (2)http://www.cnblogs.com/weihanli/p/4415816.html 备忘一下。...

    2024/4/24 10:37:32
  12. 机器学习“七宗罪”:影响可信度的七个常见错误

    机器学习是一个伟大的工具,它正在改变我们的世界。在许多优秀的应用中,机器学习(尤其是深度学习)比传统方法优越得多。从用于图像分类的Alex-Net到用于图像分割的U-Net,人们看到了计算机视觉和医学图像处理领域的巨大成功。近日,机器学习专家Andreas Maier在一篇文章中列出…...

    2024/4/24 10:37:38
  13. UI导航包含常用的UI设计网站大集合!

    互联网上的一切,凡是开放出来的,所有的互联网用户都有平等的权利去使用它们。于是我看着自己这些年存在浏览器里的这些网站,想了又想,它们的开发者做出这件产品,不就是为了让更多的人知道并使用它们,作为像我这类受益者,有义务主动去传播好的东西。乐于分享的模库网 为U…...

    2024/4/24 10:37:33
  14. Linux系统下搭建Zabbix5.0.0(server篇)

    环境搭建 需要LNMP环境或者LAMP环境,本文采用LNMP zabbix下载地址 zabbix5.0.0官方要求文档 安装nginx [root@node1 ~]# yum -y isntall gcc pcre-devel openssl-devel zlib-devel [root@node1 ~]# tar -zxvf nginx-1.14.0.tar.gz [root@node1 ~]# cd nginx-1.14.0/ [root@no…...

    2024/4/24 10:37:32
  15. 1021 Deepest Root (25分)(一个字短!)

    1021 Deepest Root (25分) 分析 在深度优先遍历的同时,计算连通分量的个数,以及最大深度的节点,加入set中。 第二次选第一次遍历得到的节点中的其中一个,开始深度优先遍历,得到的深度最深的节点也加入set中,从而得到所有的可以作为高度最大的树的根节点的节点。 提供一个…...

    2024/4/24 10:37:28
  16. React项目 cdn引用

    React项目 cdn引用怎么写一个一个cdn 引用的lib怎么创建一个hook为什么引用 三个js 怎么写一个一个cdn 引用的lib 怎么创建一个hook <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /> <script src="https…...

    2024/4/18 11:51:46
  17. 手机连接电脑安装的服务器,必成功

    手机连接电脑安装服务器 我以phpnow服务器为例 1.首先查看phpnow文件夹中找到htdocs文件夹,该文件夹为执行php文件以及html文件等等的路径2.在浏览器中输入127.0.0.1:端口号/来访问phpnow中的文件,以确保服务打开3.如果访问不了,说明服务未打开,有时候在phpnow文件夹中的Pn…...

    2024/4/15 5:35:59
  18. 判断字符串是否表示数值

    #include <iostream> #include<vector> #include<string> using namespace std; /* 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100","5e2","-123","3.1416"和"-1…...

    2024/4/16 6:23:29
  19. Leetcode 数组 1051.高度检查器

    1051. 高度检查器 文章目录1051. 高度检查器题目:C代码 题目: 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。 请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。 注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的…...

    2024/4/20 16:13:52
  20. 无向图的最大割问题(分支限界)

    一、需求分析0.问题描述给定一个无向图G=(V, E),设是G的顶点集。对任意(u, v)∈E,若u∈U,且v∈V-U,就称(u, 1)为关于顶点集U的一条割边。顶点集U的所有割边构成图G的一个割。G的最大割是指G中所含边数最多的割。对于给定的无向图G,设计一个优先队列式分支限界法,计算G的最大割…...

    2024/4/24 10:37:27

最新文章

  1. PriorityQueue—优先级队列FollowUp

    FollowUp大纲&#xff1a; 思维导图&#xff1a; FollowUp PriorityQueue: Q1&#xff1a;但不知道是大根堆化石小根堆 A&#xff1a;Q1 只需要放进去几个元素peek&#xff08;&#xff09;出元素是大的还是小的 下面如果是5就是小根堆10就是大根堆 A&#xff1a;默认是小根…...

    2024/4/28 15:03:10
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 备战蓝桥杯Day37 - 真题 - 特殊日期

    一、题目描述 思路&#xff1a; 1、统计2000年到2000000年的日期&#xff0c;肯定是需要遍历 2、闰年的2月是29天&#xff0c;非闰年的2月是28天。我们需要判断这一年是否是闰年。 1、3、5、7、8、10、12月是31天&#xff0c;4、6、9、11月是30天。 3、年份yy是月份mm的倍数…...

    2024/4/24 9:33:16
  4. Linux从入门到精通 --- 2.基本命令入门

    文章目录 第二章&#xff1a;2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…...

    2024/4/25 22:53:12
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

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

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

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

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

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  44. 如何在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