粉丝24.3万获赞161.1万

大家好,给大家推荐一个工具,他可以把我们写的 note 的 gs 文件或者项目编译成可以直接在各个平台下运行的可执行程序,比如说 windows 是这样的, 那这个程序已经跑起来,只是在程序里我输出了一段信息。那我们来看一下这个工具,这是一个 no 的 gs 文件,写了一些代码,然后呢我们把它编一下 pkg, 然后指向这个文件,大家注意看这边, 编好之后,他生成了三个文件,一个是琳琳四,一个是麦克 os, 还有一个 windows 的 windows 呢,就是刚才给大家演示的 windows 平台下运行的效果。那接下来我们看一下 linix 平台下这个工具呢,是用来监测磁盘使用 绿的,当次盘使用率到达一个警戒线的时候呢,就会发送一个通知给我的手机。那在使用这个工具之前呢,需要把一些相关的外部回掉地址啊,一些基本的配置,配置在这个配置文件里,我们先来直接运行这个文件。 好,接下来呢我们再开一个窗口,把磁盘使用率升上来,我先生成一个文件, 大家看,收到了,那我再来把这个文件删掉。 好的,他就通知我恢复了。其实我们可以利用这个打包工具,用 note s 来写一些其他的小工具,比如我们访问各种数据库啊,或者爬一些数据啊,只要 note s 能实现的,他最终都可以打包 做成一个可知性程序。好,今天就到这里,谢谢大家,再见。


在 a 阵的开发这块, node js 这个语言呢,它的地位一点都不比 python 差,只不过我们不用 node js 来写模型层和算法层,但是从开发的角度来讲,它非常的受欢迎,为什么呢?这里边有四个典型的原因。 第一个,搞开发,搞编程排名第一的工具 cloud code, 它就是 node js, 有 它打样,那么大家就会知道这个 node js 非常的有标杆意义,但是它底层的原因是什么呢?这就是第二点, u 的 g s 这个语言有一个非常大的优点,就是它本身来讲,这种非阻涩 i o 对 于什么事非常重要呢?因为 a 智能大家都知道它需要来回的,比如说跟数据库交互, 工具交互,跟浏览器,它需要调用大量的工具,事实上来讲,它的这个 i o 操作非常的多,那么这个 i o 操作多能不能支撑这种非 非堵塞高并发症的能力就显得非常的重要,这就是 note g s 的 一个非常重大的一个优点,因为经过大量的网友,包括工业界里面的一手实测, note g s 差不多是 python 高并发症能力的一点五倍到两倍,就是说你 python 如果能支持五百,我 note g s 就 能支持千儿八百,你 python 要是能支持一千,我这边一千五没啥问题, 那这就有天然的优势啊。第三点,因为 node js 有 一个 n p m 的 这个包管理工具啊,可以说是全球最大的一个包管理工具,就是它的第三方的包,就是比 python pip 还要强大,所以说呢,社区非常的友好。再有一个呢,就是 node js 是 具备这种前后端一体的, 它不隔离,比如说不像什么呢?如果我用 python 来做后端,事实来讲,我为了有一个非常好的前端展示界面,我得额外的去通过 java script, 我 得通过 will react, 就是 它的语言和开发是隔离的。如果我的后端是纯粹用 java 来实现的,我依然前后端这两套语言在隔离,那么 note g s 直接前后端一体,这个从开发的角度来讲,效率也高,兼容度也高。所以说综合上面这四 四个,现在做 a 阵的开发这块儿凹印到 node g s 的 开发工程师也越来越多。如果你要选一个第二门的开发语言,其实恰恰是 node g s 的 优先级,现在是要高于加码的。

外部扩建我只用 low 的 结实,不用其他的所谓高大上的酷炫的技术。作为一个普通用户啊,说实话,一个 low 的 结实就够了, 不要想着用什么其他的号称非常牛逼的酷炫的技术架构,什么拉水云,什么一些新鲜的号称性能非常牛逼的 技术框架。记住,如果你只是一个普通用户,也想外部扩点的话, 只用 node js, 因为啊, node js 是 这个世界上生态最成熟的 开发框架,除了 node js 没有之一。所以大家如果想外部扩建,也想真正去构建一个 可用的产品的话,楼的结实绝对是唯一的选择。 不要去想着用什么高大上啊,性能牛逼啊,扩展性很强啊等等这种被吹得天花乱坠的技术架构, 因为啊,现在 ai 扩点外部扩点在前期啊,他写代码是非常的快, 但是啊,当一个项目在收尾的时候,那么你就会发现各种各样的问题就暴露出来了, 如果你在开发的过程之中,他比较顺利,没有碰到什么大的问题还好,但是啊,一旦你碰到一些技术上的问题,开发环境的问题,部署的问题, 那就会非常的头痛,因为啊, ai 他 也是在他已知的这个 知识的能力基础之上,才能够帮你去解决这个疑难杂症。但是像那些比较稀缺的技术框架,或者是生态不好的开发语言, 那么当他一旦遇到那种比较难啃的技术问题的时候,实际上 ai 他 也很难去帮你 很快的去定位问题,解决问题,因为他也要临时去分析大量的文档, 或者是去研究这个技术框架,甚至还需要去利用一些工具,去网络上面去搜索相关的知识库、 技术文档等等,就是现学现卖, 他才能够勉勉强强的去帮你一步一步去定位问题,诊断问题。所以啊,与其花这个时间和精力浪费在这种技术上面的问题, 还不如把这些时间和精力把它腾出来。怎么去思考当你一个产品开发完之后,怎么去获取这个流量,获取客户, 怎么样才能够让你的这个产品能够尽快的促达到更多的 目标用户。所以现在在这个 ai 扩点时代,技术在贬值,产品也在贬值, 唯一在增值的就是渠道的能力,获客的能力, 人与人怎么去链接的能力。所以作为一个普通用户, 如果你要想快速的去外部扩建一个好用的产品的话,记住只用楼的结实。

好的,观众朋友们,那今天的话,我们来讲一下 note gs 的第十八张 utel, 那 utel 呢?它是 note gs 内部提供的一个工具类型的一个 api, 主要呢就是帮我们去快速的去开发这个 notegs, 然后这个一篇呢,它是比较多的,所以说我们主要是介绍一些常用的 api。 好,我们来看一下它的官网, 它的 a p n 呢是有非常非常多的好,但是呢其实大部分 a p n 你会发现它是确定这个类型的,比如说什么 indate, 或者是 is manf, 或者是 is promise, is proxy, 哎,这些的话我就不用给大家去讲了,大家看这个字面意思也能看出来,哎,就是 它是不是一个 pro miss 的一个类型,对吧?然后把这个 y 六的圈它传进去,给你返回一个,呃,出个 force, 对,是不是一个 pro miss? 对,这些大家一看呢就能明白,所以说这些判断的东西呢,我就不再去讲了。 然后我们来讲一下常用的,比如说第一个 promise five, 哦,那这个是什么意思呢?我们来演示一下。在之前呢,我们使用这个 exact, 比如说我们想获取一个 no 的版本号,我们让他去调一下这个 no 的杠 v, 然后呢他是通过第二个参数去接收一个回调函数,对,他是这么写的, 在这个回到函数里边的第一个参数呢,就是一个失败的一个状态,然后第二个就是标准流的输出啊, s, t, d, alt, 还有第三个参数就是标准流这个输出失败的一个状态。好,一般我们是判断如果有这个 are, 那就 retar 了, 对,就不走了,对,因为也没有必要往下去走了,否则的话就把这个标准给他输出。对,我们之前的就是这么去写的。好,我们来运行一下这个脚本的。好,大家 可以看到我们这个 note 版本号呢,也是可以拿到,没有什么问题。但是呢,在 e s 六之后,有了 promise 之后呢,这种回调函数的形式呢?哎,我们就写的很少了。好,那么现在呢,可以用这个 util 呢去改造一下它,比如说我们可以把它变成一个 exact promise 类型的一个函数,好,通过 util 点这个 promise five, 好,然后把这个函数呢去给它传进去就可以了,就这个 exec。 好,然后它会返回一个新的函数,注意会返回一个新的函数。好,然后呢再调这个新的函数就可以了。 好,然后呢再传入我们这个命令,比如说 no 的杠 v。 好,要成功的话呢,就是点 then, 失败的话就点 catch。 哎,这样是不是好一点?好,然后点 catch, 对,我们可能 更多的是习惯这种写法。好,这也来一个 log。 注意,我们这个返回的它是两个参数,第一个是 s t d alt 和 s t d i 轴,那如果有两个参数的话,那么这个 r e s, 注意它是一个对象啊。 对,如果返回多个参数,那么这个 r e s 呢?它就是一个对象,如果返回一个参数, 对,就直接返回了。对,若多的多个就是对象啊,这是 r s 啊,我们来看一下运行结果啊, 对,它返回来呢就是一个对象,我们可以看到,哦,对,其实用起来也是非常简单,就是把这个回调函数的模式呢,又变成了这个 promise 的形式,这个就是 promise fire, 就是它 note g s 内部支持的一个工具函数哈,然后我们可不可以 自己呢去实现这个 pro misfy? 就实现它的底层啊?好,就是我们自己来做一下。好,我们先把这个给它注掉了 啊,我们自己来简单实现一下这个 pro misfi 的底层啊。好,我们就叫 pro misfi, 然后它是一个函数。哦,然后它接收一个什么呢?注意,它接收一个函数,也就是一个方式,然后它返回一个什么呢?它返回一个新的函数,所以说我们需要 return 一个新的函数啊,在新的函数里边返回一个什么呢?注意,它返回的是一个这个 pro miss 啊,所以说我们还有在 retur 一下这个 pro miss 哦,然后参数呢?在新的函数呢?去接收。就是我们这个 exact pro miss 这里边去接收这个参数了,所以说我们要把它 所有的参数给他去读出来。哎,很多人会问,哎,老师为什么用这个点点点把它解构出来?因为注意,我们这个例子呢,是一个参数,那他有可能别的函数呢?他是有多个参数的,所以说我们要把它解构出来。对,因为他可能是有多个参数的。 好,然后呢去调用这个函数就可以了。好,再给他透传回去。对,再给他透传回去真正的这个函数就可以了,然后在真正的这个函数里边呢,他最后一个参数呢?一定是一个回调函数。对,就这样子就可以了。 好,然后接收一个 area, 还有一个 value。 哎,我们刚才说了,这个 value 它是不是可能有多个?如果多个是什么?多个的话,它就是一个对象,所以说我们要把它结构出来。好,这儿的话也很简单了,我们判断一下就可以了。如果什么如果是 失败了,我们就 reject 给它返回就可以了,把这个 arrow 给它返回就可以了。好,那如果成功了,如果成功呢?还需要再判断一下。 对,如果成功了,这个 value 和这个 value 的愣死,如果他大于一,说明,说明是有多个。对,我们就给他返回一个对象啊。好,然后我们去给他变利一下 这个 values。 好,然后就给它填充到这个对象里边,但是你会发现一会这个会有一个问题啊。 好,然后通过 resolve 返回这个对象,那否则呢?否则直接返回就可以了,如果只有一个参数的话,那直接返 回就可以了,就是 values 中和号零。对,它的底层原理呢,其实也就是这么去实现,也是非常简单。好,我们来调一下。啊, 啊,这里边我们就不用他这个了,用我们自己写的啊,对,然后呢,把这个再给他放开。 好,我们来看一下结果啊,哎,发现是不是也是可以的,但是呢,我们拿不到这个 k。 对, 我们是拿不到这个 std out 跟这个 stdl, 拿不到这个 key, 因为啊,在它 note js 原码中呢,它是通过 symbol 呢去拿我们这个 key 的,它通过哪个 symbol? 我们可以看一下,它是通过这个 symbol 去拿这个 key 的, 也他通过这个 symbol 去拿这个 k 的。但是呢,注意这个 symbol 呢,没有对外提供啊,对,没有对外提供,只能他内部自己用,所以说我们 是读不到它的 k 的,但是呢,我们一般也没有人怎么自己去写这个东西,我们只是给大家剖析一下它的原理,自己去尝试一下,用的时候呢,还是用它官网这个 youtube promised five 就可以了。对,我们只是剖析一下它原理,对,它读 k 呢,它内部的话就会使用这个 c 目呢,去读到这个 k 就可以了, 我们这只是简单的去写一下他的原理啊,其实是一样的,这效果是一样的,只是 keep 不一样啊,然后我们给他报个错,比如说弄一点不存在的, 我们可以看到这个 iro 呢,也是可以打印出来的,所以说我们自己实现的这个呢,也是没有什么问题。好,那这个的话就是一个 promise fi 的一个作用。 好,然后我们再演示下一个啊,就是一个 callback fire, 大家听到这个名字应该也知道啥意思了,就是把 promise 类型的一个函数呢,变成一个回调函数的方式。好,我们来试一下, 比如说我们来一个 function 吧。 啊,我们简单的写个状态,比如说 type, 如果等于等于一 and 就返回一个成功啊, return pro miss 加 resolve 对不对?随便返一个。 好,否则呢我们就给他返回一个失败的状态,就 reject。 好,那这个话就是一个简单的一个 pro miss 的一个函数啊,就是把这种函数呢变成一个回调函数的模式。好,我们给他试一下, 就等于 you tell 点这个 call back five, 然后呢也把这个函数给它放进去。好, 第一个还是接受这个参数啊,比如说我们这个 type 呢,给它变成一个一吧。好,然后第二就是回到函数就是一个 error, 还有一个是 value。 好,我们可以 log 一下,这我们就判断直接 log 一下吧。 好,那现在呢,肯定是返回的是一个成功这个 area 呢?就是闹这个 value 呢?就是这个 success。 好,我们可以来看一下。 对,也是没有什么问题的,然后比如说我们把它变成一个二,哎,那他就会返回这个 error, 对,因为我们这是 reject, 所以说这个 callback fire 呢,就是又把这个 promised 类型的一个函数呢,变成一个回调函数。啊,那这个我们也可以简单自己去实现一下,这个的话就更简单。 好,我们先给他注了, 得用自己来实现这个 call back five。 首先他还是看什么?他还是去接收一个函数,然后呢去返回一个新的函数。对,套路的都是一样的 啊,然后把参数去给他读到啊,然后这个函数呢?他是不是要去调用一下,对吧?然后呢把参数去给他透传进去, 对,注意它是一个 pro miss, 所以说我们就直接可以点摁对,点摁,然后可以点 catch。 哎,但是我们这个回调函数在哪呢?对吧?注意啊,我们这个 回调函数呢,是在最后一个参数,对,注意,是在最后一个参数,但是呢,它这个参数可能会有多个,对吧?比如说它还有这种这种情况,对吧?但是呢,我们只需要读最后一个就可以了。哎,这怎么读呢?其实也非常简单,我们把这个 ax 结构出来,它就已经是数组了,所以说 我们通过什么呢?我们通过 pop, 哎,是不是就可以读到最后一个回调函数,对吧?其实也就是这么简单。好,如果成功的话就是一个闹和 are yes, 如果失败的话就一个 arrow, 对,没有其他参数,那这个话就是一个 call back five, 这个话更简单一点啊,我们可以来试一下。 好,那现在的话就是返回一个 arrow 啊,对,返回一个 arrow 也是没有什么问题,然后的话我们把它参数变成一个一, 那现在的话就是返回一个成功,对, success, 对,那这个的话就是我们简单去自己实现一下他这个底层啊,当然他底层呢有非常多的边界的一些判断,我们就不写那些了啊。然后我们介绍下一个 这个 util 的 format, 那这个东西是什么意思?这个东西跟这个 c 元的 point f 是很像的,大家如果学过 c 元的这个 point f 就跟这个是很像的,那第一个的话就是我们这个编码,第一个参数是我们这个编码,比如说 后面,比如说我们来一个什么小满,再来一个 z s, 然后比如说我们这两个座串呢?希望 通过横杠去连接,对,他是有相关字符的,如果是字母串的话就是百分号 s, 他会匹配我们这个字母串的,然后中间的范式呢,你可以自己去定义,比如说三个横杠,然后再来一个百分号 s, 注意他是跟我们这个参数是对应的,第一个百分号 s, 对,是什么匹配 字符的,然后对应第一个参数,对,对应后面的第一个参数,注意是后面的第一个参数,也就是小满,对,相当于他就把小满呢把这个东西给他剃了,然后第二个百分号 s, 就是往后接着对应第二个参数,也就是 z s, 所以说我们可以来看一下效果啊, 这也很好理解。 对,其实这个是通过范式呢,把我们这个字母串呢去给它连接起来的。对,跟 c 远的 plus 是一模一样的。还有这个百分号 d 呢,它就是匹配这个数字的,它会用 number 给它转一下, 现在的话应该是匹配不到的,因为我们这个东西他不是一个数字,对,他有非常多的这种范式。那这种范式去哪里看呢? 好,我们可以来翻到我这个博客里边,对,每一个这个对应的字符代表是什么意思呢?都给大家写到这里,当然大家也可以去官网去看,那这个的话就是 youtal 的 format。 好,那以上的话就是本场所有的知识啊。

什么是 node js? 今天我们用五分钟时间把 node js 的 本质作用,以及它为什么能改变后端开发方式讲清楚。 如果你已经了解了 javascript, 你 可能知道它最初只能运行在浏览器里,用来操作页面,处理交互。但问题是浏览器之外的世界,比如服务器、文件、系统、数据库,这些地方原本是 javascript 触达不到的。 note js 的 出现就是为了解决这个问题。 note js 不是 一门新的编程语言,它本质上是一个运行时环境。简单来说,它让 javascript 可以 脱离浏览器,在服务器上运行。 也就是说,以前你用 java、 python、 php 写后端,现在你可以用 javascript 来写。那 node js 是 怎么做到的? 核心在于它内置了一个 javascript 引擎,最常见的是 v 八引擎,这个引擎原本是浏览器用来执行 javascript, 现在被拿出来放在服务器环境中使用。同时, node js 还提供了一整套系统能力,比如文件读写、网络通信、进程管理等,让 javascript 能够真正参与后端开发。 所以你可以把 node js 理解为 javascript 加操作系统能力加运行环境。接下来我们看 node js 的 一个关键特点,事件驱动和非阻塞 i o。 传统后端模型中,一个请求进来,服务器通常会为它分配一个线程,如果这个请求需要访问数据库或者读文件,线程就会被阻塞,直到操作完成。这种方式在高病发场景下,资源消耗会很大。 而 node js 采用的是单线程加事件循环的模型。什么意思?简单来说,它只有一个主线程,负责执行代码,但不会被耗时操作阻塞。 当遇到向数据库请求文件读写这样的操作时, node js 会把任务交给底层系统处理,自己继续执行后面的代码,等任务完成后,再通过回调 promise 或 a sync await 的 方式把结果通知回来, 这个机制让 node js 在 处理高递发请求时非常高效。再来说一个核心概念,模块化。 在 node js 中,代码通常是按模块组织的,每个文件都是一个独立模块,可以通过导入和导出进行附用,这种方式让代码结构更清晰,也更易于维护。 同时, node js 拥有一个非常庞大的生态系统,也就是 npm。 你 可以通过 npm 安装各种第三方库,比如处理网络请求、连接数据库、构建接口服务等, 大多数功能都可以直接使用现成方案。那 node js 能做什么?最常见的场景是搭建后端服务,比如写接口、处理用户请求、连接数据库等。很多现代 web 应用的后端都是用 node js 构建的, 除此之外,它还可以用来做实时应用,比如聊天系统、在线协助工具,因为它对高频发和实时通信支持很好。再往外扩展, node js 还可以用于构建命令行工具、打包工具,比如前端构建工具,甚至可以参与桌面应用开发。 在当下, node js 也越来越多地和 ai 结合使用,例如通过 javascript 调用 ai 模型接口,快速构建智能应用,或者用 node js 搭建 ai 服务的中间层,处理请求和数据流。 最后我们来总结一下, node js 是 一个让 javascript 能够运行在服务器端的运行式环境,它通过事件驱动和非阻塞 i o 实现了高效的病发处理能力,同时借助模块化和庞大的生态系统,让开发者可以快速构建各种应用。 如果说 javascript 让网页动起来,那么 node js 则让 javascript 走出浏览器,成为一门完整的全站开发语言。为什么?你应该了解 node js? 第一,它打破了前后端语言的边界,让你可以用一门语言完成整个系统开发。 第二,它在高病发场景下表现优秀,非常适合现代互联网应用。第三,它的生态完善,上手成本相对较低。 node js 的 学习门槛不高,但要真正用好,需要理解它的异步模型和运行机制。

知道 typescript 其实可以做多现成吗? typescript 基本上是单现成的,这意味着它一次只能处理一个任务。但是如果因为繁重的计算导致整个应用卡死,那该怎么办呢?这时候 worker threads 就 派上用场了。 请看这段示意代码。我们通过一次 main thread 来判断当前是在主现成还是在后台的 worker 现成。重点在于执行顺序。 当我们将复杂的任务交给 worker 处理时,主线程并不会停止等待,而是直接进入下一步。任务完成后, worker 会通过消息机制把结果传回来,这是开发高性能应用必不可少的技巧。