V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  agagega  ›  全部回复第 1 页 / 共 261 页
回复总数  5212
1  2  3  4  5  6  7  8  9  10 ... 261  
10 小时 23 分钟前
回复了 ssshooter 创建的主题 生活 我的省钱路数
我就是像楼主说的一样,买东西会加到购物车里很久再做决定,但心痒痒了很久的东西买来可能还是会吃亏。

现在的结论是,如果一个东西价格下降稳定且方便出二手(如主流电子产品),不如找个合适的渠道(如二手)收了体验一段时间再出掉。这部分折价可以解释为解决心痒痒的机会成本,而且玩多了以后对电子产品的兴趣自然会消退。

另外一个想法就是不要想着替代品,即觉得本来的商品太贵,想着节省一点成本购买便宜点的另一个商品。在高度标准化的市场(如 PC 配件)问题不大,但像消费电子和服装这些品类想着找平替很容易后悔,最后付出更多的金钱成本、情绪成本、时间成本。

还有就是,在淘宝闲鱼买优惠券这种事容易上瘾,有额外的情绪价值,所以不会觉得麻烦。而且多买几次有助于对溢价祛魅,总体上降低额外消费。
小红书首页推荐有东西的,B 站首页推的都是乐子,小红书首页看到的都是制造焦虑的东西,错失感会更强烈。现在这些 App 推荐都有个体验很差的地方:看到某个东西有意思想点进去看看,结果因为从另一个 App 切回来,当前 App 自动刷新,之前的推荐就没有了,也没有记录,还是百度贴吧那样好。
1 天前
回复了 Kathy1989 创建的主题 程序员 如何看待敏捷开发?
敏捷模型的对立面是瀑布模型…那玩意估计这里大部分程序员都没经历过也不会喜欢。国内小作坊最大的问题不是用了敏捷方法论,而是他们根本没有方法论。

典中典之马云:中国的金融没有系统性风险,因为中国金融根本没有系统
4 天前
回复了 aeucon 创建的主题 职场话题 如何学会舔领导?
真正的猎人都以猎物的形式出现,有一类人并不世故油腻,但说话总能让所有人都觉得舒服,这才是值得学习的高段位
如果 Base64 解码出来不是合法字符串怎么办呢
5 天前
回复了 fusi 创建的主题 Visual Studio Code 想找一种 vscode 扩展
Heynote
以前在本站看到过一个人贴了个特牛逼的网页,阻止用户打开控制台,标题忘了,可以搜搜
有点以偏概全了,但远离那些戾气重在推特上还一堆人捧臭脚的国内网红独立开发者确实没错😁
计算机的知识从来都是可深可浅。其实所有领域的知识都是这样,但因为计算机整个体系人造属性特别强,所以这个特征表现得更明显。

对于 async/await ,最简单的理解:某些函数需要加 await 才能调用,用到 await 的函数需要用 async 标记,而调 async 函数也需要 await 。

更深一点:await 的其实是一个 Promise 对象,所有 async/await 的代码都可以改写为 Promise 和 then 。还有个叫 Generator 的东西,它的思路和 Promise 完全不一样。更古早的代码里还有种写法叫回调函数。这四者可以相互改写。

为什么要这样?因为一些操作(如网络请求、读写文件)需要等待取回数据,在等待过程中可以让 CPU 做其他的事情提高效率,等到数据读完再回来执行下一步代码,所以有了回调函数,这种写法叫做异步。NodeJS 里有同步读写文件的方法,可以和异步写法对比感受差异。

因为浏览器环境强调实时响应,所以 JS 一开始就很重视异步,这也是其他语言容易实现 sleep 函数而 JS 很麻烦的原因。

为什么有这么多种写法?程序运行的一个本质问题是,下一步要执行什么。通常的逻辑是,如果是普通语句就正常执行,如果是函数调用就传参进入,如果是 return 则回到上一层调用继续执行。

假如所有代码都写到一个 C 函数里,那我们不需要考虑这么多复杂的问题,因为我们可以自由地自己做调度。但我们希望在保证代码结构性(拆成函数)的同时,能够继续保证效率(在等待网络响应时能执行别的代码)。对于有匿名函数的语言,最直接的想法就是回调函数,而且通常这个回调函数除了固定的参数外,还要能从发请求的地方抓一些变量写东西(这被称作闭包)。回调函数的思路和处理网页事件是一致的。

但回调函数的写法意味着,每次要发送请求或者干什么事情时,都要在上一层回调函数里再新建一层回调函数,缩进层次会特别深,这被称作回调地狱( callback hell )。更麻烦的是,真实代码的逻辑可能不是线性的,可能有一个 if 或循环,里面执行一些异步代码,然后再出来。这种时候写回调函数简直就是脑力大作战。

换种思路,我们能不能发明一种特殊的函数,比传统函数更强大?传统函数一旦 return ,只能再从头开始执行。我们想要的这个新函数,可以从中间返回,下次再从上次返回的地方继续执行。这样我们就不用写回调了,发请求的时候返回,等响应到了再跳回来就可以了。JS 本身就有闭包,且支持函数套函数(参考计数器的写法),这种功能理论上只需要实现一个返回函数的函数就行了,但 JS 还是有一个专门的语法,叫生成器( generator )。

而回调函数的写法也有改进空间。如果能把异步操作封装进一个对象里,然后动态添加每一层的回调,虽然还得写很多匿名函数,但缩进上至少可以拍平了。这就是 Promise ,它用 then 函数连接下一个回调。

如果再把一层层的 then 里的函数也抽出来,那 then 就变成了 await 。而对于用到了 await 的函数,它的执行流程和生成器就非常像了,在 await 的地方跳出去交还给 runtime ,等到合适的时候再跳回来。所以用到 await 的函数和生成器生成的函数一样,不是普通函数,必须要有区别,所以有 async 标记。但到这里应该能理解,这几种写法是等价的,await 一个 async 函数,和 await 一个返回 Promise 的普通函数,是一回事。

关于回调函数的讨论还可以更进一步。回调函数的写法,是把事件响应后要执行的代码封装成一个函数。但如果我把所有要执行的语句都写成这个样子呢?比如正常的 a=b+1;b=c+1 ,把后一句也写在一个回调函数里面会怎么样?除了极度蛋疼外,你也会获得极度的灵活性。

实际上,这个由接下来的代码组成的回调函数有个学名,叫 continuation (有时中文翻译作续体)。一些语言(如 Lisp 、Ruby )直接提供了操作 continuation 对象的能力,但这个功能太强大,所以衍生出一种弱一些的变体,叫 delimited continuation ,也就是需要指定这个接下来执行的函数到哪为止。Kotlin 里面带 @ 符号的 return 就有点这个味。

而 async/await 的语法也可以进一步泛化。await 的逻辑是跳出去再跳回来,形式上是否和异常的 try catch 有点像?特别某些语言的异常还真的支持 retry 语句。还真的有种语法概念把 await 和异常统一起来,叫 algebraic affects 。所以 await 真的没什么神秘的。

到这一步其实还有很多问题没有深入,比如这些 runtime 在操作系统和原生代码层面是怎么实现和封装的,其他模型比如 go 的 goroutine 和传统的多进程模型等。但我想你现在理解 async/await 一定容易了很多:)
那是因为用中文还能搜到东西,日语、西班牙语、俄语这些还能有内容,使用人数更少的语言就真的和计算机绝缘了。中文计算机内容有内容农场污染(但这个英文也有),独立博客少,更重要的原因或许是很多东西根本没人写。相比之下,知乎在计算机方面算得上不错的信息源,但现在也不行了。

令我比较感慨的一个时刻是,想搜 PL 相关的一些东西,知乎上有人讨论,但很多都是小圈子卖萌黑话,像是某群二次元爱好者的 play 。但我用英文搜索时,在 StackOverflow 上就有非常正经的、语言平实的回答和讨论,这对比比用中文啥也搜不出来更难受。
8 天前
回复了 pxiphx891 创建的主题 Apple 关于 iMessage 端到端加密,我有一个问题
简单来说你的信任总是要落在某个基点的,如果你觉得苹果的 A 系列芯片有手脚,那什么操作都不安全。再往上是 iOS 、App Store 和聊天 App 本身。如果你愿意信任 App 那这个问题就有讨论的意义了。

Signal 支持让联系人线下相互扫码确认公钥没被篡改,到这一步如果服务器也不记录历史消息,那基本可以确认为安全。

iMessage 因为太黑盒了,苹果说的话很暧昧,也不开源,所以无法判断。但至少可以确定,开启了 iCloud 同步的 iMessage ,不咋安全。
8 天前
回复了 pxiphx891 创建的主题 Apple 关于 iMessage 端到端加密,我有一个问题
反诈宣传各种暗示你关闭 FaceTime 和 iMessage ,但他们明明有能力直接墙掉,这很奇怪
1  2  3  4  5  6  7  8  9  10 ... 261  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   904 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 51ms · UTC 19:09 · PVG 03:09 · LAX 12:09 · JFK 15:09
Developed with CodeLauncher
♥ Do have faith in what you're doing.