看完《js 不使用 promise 完成一个 sleep 函数》真诚发问,技术领域什么才是值得深入学习的?

21 天前
 superhot

原帖提了一个面试题,用来考察对 JS 异步控制的熟悉程度。

个人在学习 JS 时特意看了一遍 Promises/A+ 并尝试实现过,感觉这类东西跟算法等计算机基础课一样,平时工作中肯定用不到,99% 的概率不需要你手搓一个 Promise 或事件循环之类的东西,但仅读过文档说明,跟真的参考规范并尝试实现过,理解程度肯定是不一样的。

又或者以 Java 举例,仅了解 Java 语法和标准库,和深入探索过 JVM 的各种机制与细节,在线上排查 OOM 问题的时候,思考的层次和维度就会不同。

然而人生苦短,学海无涯,没人且没必要事无巨细地深入到这种程度,需要将有限的精力投入到更重要的地方去,所以才有此疑惑:

对一个软件工程师(而非研究人员或特定领域的技术专家)来说,技术领域什么才是值得深入学习的?

或者回过头来,仅以 Promise 为例,如果不去了解 Promises/A+ 等规范,想要加深对异步本质(是什么,解决了哪些问题、如何解决)的理解,应该去学习哪些方面的内容呢?

3648 次点击
所在节点    程序员
49 条回复
allencloud
21 天前
就像“回”字的几种写法? 我倒是觉得这种技术讨论挺有意思的,平时工作不会钻研这么细节,可以开拓思路
catazshadow
21 天前
数学和物理
GuguDan
21 天前
找不到文档的领域
Brain777
21 天前
看了下,有种感觉是个杠精,就是来秀优越感的
GuuJiang
21 天前
一道好的面试题,应该是让候选人能够一步一步想出来,并且整个思考过程中能够展开挖掘出很多的点,而不是用来区分听过和没听过这个东西的,很可惜现实中被赶鸭子上架临时拉来的面试官能想出来的题绝大部分都是后者
momocraft
21 天前
对于大多数人,一件事值不值得做是由结果反推的。但是很多成功结果无法复制,或者说能复制的结果我们不称为成功。

活着就是用自己的时间赌,只有自己能为自己负责
icy37785
21 天前
你们都基于面试题在讨论,可那老哥根本就不承认是面试题啊,他说这是有用的解决现实问题的,这是高性能开发。
当然后来他是不是招了这是他出的面试题我就不得而知了,我把他 block 了
ckvv
20 天前
实际工作中能用到的, 用 Promise 写一个任务调度器要比那好的多, 比如说
```js
function timeoutConsole(timeout) {
return new Promise(() => {
setTimeout(() => {
console.log(timeout);
}, timeout)
});
}

class Scheduler {
constructor(limit) {
this.limit = limit; // 最大并发数
}

addTask(task, ...args) {
}
}

// 同时运行的任务最多有两个
const scheduler = new Scheduler(2);

// 添加任务
scheduler.addTask(timeoutConsole, 1000);
scheduler.addTask(timeoutConsole, 500);
scheduler.addTask(timeoutConsole, 400);
scheduler.addTask(timeoutConsole, 300);

// 输出
// 500
// 400
// 1000
// 300
```
momo2789
20 天前
superhot
20 天前
@jybox
@GuuJiang
同意,面试也是个技术活
superhot
20 天前
@momo2789 耗子叔太可惜了,哎,发现他的极客时间专栏整理成书了,打算买一本支持下
enpitsulin
20 天前
这种题就是没有任何意义的,本质和语文考试考察古诗词背诵一样,有的人可能是理解了含义从而记住了题目,但是拦不住死记硬背的
你硬要说我掏出 `Atomics.wait` 原 OP 都不知道该怎么办了,甚至是同步方法🤡
momo2789
20 天前
@superhot 是的,耗子叔的“我做系统架构的一些原则”写的太好了,工作超过五年之后,技术本身可能真的没那么重要了。所以我也觉得这种原 po 把这道题当面试真的是浪费时间,面试一个小时需要考察的地方太多了,我宁愿问一些 behaviour questions 而不是这种看过就会写,没接触过就完全没有思绪的问题。
yzqtdu
20 天前
推荐两个我时常回看的回答给 op ,也许看了会有不同体会
什么才算是真正的编程能力?
https://www.zhihu.com/question/31034164/answer/553533545
计算机的哪些学科是被建议在本科阶段学掉的?
https://www.zhihu.com/question/595969891/answer/3054501672
iceheart
20 天前
单线程模型的场景搞什么 sleep ,真 sleep 会赌死,假 sleep 的意义何在?
wefgonujnopu
20 天前
我觉得这不算深入吧,就是普通的 js 知识,要真深入那得学浏览器进程模型,底层 c++事件循环,我 js 就学了一个月而已,现在基本不怎么用了,都有点生疏了,还有我学编程不是为了工作,单纯的兴趣,也没有工作过
xFrye
20 天前
原帖 op 就不是带着讨论的心态来发帖,就好像他发现了新大陆然后过来发帖炫耀一下看这里有多少人不知道的,显得自己很牛,还自己创造了很多不必要的东西来支撑他的观点

什么领域的技术值得学习?我觉得都可以,前提你最好是真的带有学习的心态去对待它
SanjinGG
20 天前
能得到应用的就值得深入,相反,无法应用的,深入也没用
qingyingwan
20 天前
如果觉得计算机技术的核心是语法糖或者各种规范,那估计够呛。技术方面的核心是如何实现语法糖,比如 js 多线程或者协程,另一个核心是让技术和现实世界产生联系
burnsby
20 天前
人力有穷的,值得深入的领域其实就是那些有难度有挑战的工作(需求)。软硬件(底层到顶层)的迭代和深入也都是需求驱动的,实现需求才是让你深入某一领域的最佳实践。

原帖的 Promise 中一个有 then 方法的对象会被 await 调用并生成一个新的 Promise 这种情况在 JS 中比比皆是,比如`Array.from`方法,只要传入带 length 属性的对象即可。

寻找**解决问题**更好的方法才是值得深入的,所有的有现成内容(知识点)的你都应该使用 AI 来帮助你,AI 是效率更高的搜索引擎,AI 无法解决的问题才是值得深入的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1140614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX