大家在学习 python 的时候是不是会遇到这种问题? name 某某某 is not defined, 那这种问题是由什么原因去导致的呢?这个问题的话是因为在代码当中我们去使用了未定义的变量 s, 所以他就会去进行一个报错。 那么在拍选当中的话,变量米可以是由字母或者说数字和下划线去进行一个组合,但是不能由我们的一个数字去进行一个开头的。 所以说我们当代码是等于 s 等于 s 加 i 的时候,他这样子一个语句写的时候就会去进行个报错。那么解决办法是什么呢?就是我们要在负循环前面去进行一个定义,那比如说我做的 s 等于我们的一个 es, 等于一写上去,写上去之后的话,我们这就直接再次运行我们这个代码, 那么这一次他就不会去进行一个报错了。大家这个一定要记住,如果说你学会的话,记得给我点赞与关注哦!
粉丝3663获赞2.5万

三十七岁,行政失业,闲夫在家挑战零基础,跟豆包学 linux 加 python, 办公自动化转运为坚持打卡 会直接打印出来,导致输出乱码,我们直接用简单的和符号就可以了。三、变量引用格式 output file equals with intro dollar slice 这一行是对的,保持不变。 修正后的完整脚本,你可以把下面这段修正后的代码直接替换掉 nano 里的全部内容。修正步骤一,在 nano 没法用啊,因为一复制到微信里面排版就是一行了,我得重新排版,我再对一下, 我给你一个竹行对照版,你照着一行一行敲就不会错了。 你可以这样核对,一,第一行 in dash, 注意是两个斜杠 and 二第三行井号开场视频路径点点点三第四行 intial video equals home 你 要鹦鹉下载 self 杠 introduce, 点 mp 四四第六行 for slice in output asterisk 点 mp 四 do 五,第七行 if 杠 f 美元 slice then 六,第九行 output five 开场视频路径第三行 intro video 等于斜杠后下载。 这第一个错误我没看出来啊,我写的是对的呀,和你给的它总共也是两个斜杠啊。 我帮你把需要修改的地方标出来,你照着改就行。一,第一行 shift, 你 现在写的是这行是对的,不用改。二、 emoji 代码问题,关键脚本里所有 span class 等于 emoji, 点点点这种代码 shell 不 认识,会直接打印出来导致报错。你需要把它们全部替换成简单的符号, 把 span class, equals, emoji, emoji, 但是我也打不出这种符号来呀,我直接打成汉字行不行?或者打打成英文 完全可以用汉字或英文最稳妥,终端兼容性也好,不用纠结符号,推荐替换。方案二,选一直接照敲方案一,纯汉字最直观, 成功生成成功生成处理失败,失败处理,所有切片合并完成完成,所有切片合并完成。 方案二,纯英文更简洁,成功生成, ok generated 处理失败, error failed process, 所有切片合并完成,当 all slices merged, 最终可直接敲的脚本纯汉字版无特殊符号。核对要点一。

这个 steam 错误代码问题确实很令人头疼啊,今天总结了网上比较实用的方法,看看能不能帮助到大家。首先我们打开 c 盘,找到 hosts 文件。我们的 hosts 文件一般默认路径为, c, w, i, n, d, o, w, s, s, y, s, t, e, m 三十二 d, r i, v e, r, s, e, t c。 进入 etcetera 文件夹后,我们会看到有一个名为 house 的文件。通过修改 house 文件,我们可以解决一些网站四零四的问题。 以记事本格式打开,然后我们在 house 文件下方添加以下内容,内容我已经打在公屏上了,有需要的小伙伴可以截图保存。 接下来我们打开 c m d 命令符,修改 d n s 命令为, net interface ip c d n s 本地连接 static 幺幺四点幺幺四点幺幺四点幺幺四我们也可以通过手动修改,这只是修 改 dns 的几种方式之一。然后我们重启 steam 软件,这时候可以挂一个加速器,推荐爆喵加速器,这样你会发现之前 steam 显示四零四的问题就已经解决了。当然,我们必须要确定自己的电脑可以正常连接网络。

三十七岁,行政失业,闲夫在家挑战零基础跟豆包学 linux 加 python, 办公自动化转运为坚持打卡,我把空格符删了就可以了,别的都不动。 完全正确,只要你粘贴进来的代码里每一行末尾的前面没有多余空格,其他的空格换行缩进都不影响脚本运行。 你现在只需要做一把那段 f、 f、 m、 p、 e、 g 代码里每一行前面的多余空格删掉。二、确认最后一行是。三、保存退出 ctrl 加 o, 回车 ctrl 加 x。 四、运行脚本,我保证这次脚本会完美合并,你的横屏片头加横屏录屏,不会再报任何分辨率错误,生成的视频直接可以用来生成字幕和发布,等你跑完,咱们就可以一口气走完。生成字幕和 你刚才给我的替换代码写成一行也是可以的对吧? 对,完全可以写成一行,但是脚本里只要序行符正确,换行与否不影响执行,两种写法都百分之一百等价。写法一,多行可读性好。 写法二,整行不换行,去掉所有核心规则,只要所有参数连在一起,没有也能运行,写成一行反而更不容易出错。不用担心前面的空格问题,你现在直接把那段代码整合成一行,删掉所有保存后运行,这次绝对一次成功, 等你跑完,我就带你下一步生成字幕和自动发布,把第一条视频发出去,要不要我现在就把生成字幕的脚本也给你,让你一次跑通全练路。等一下,一步一步来。 好,咱们就一步一步来,稳扎稳打不着急,现在你要做的就这一件事,把你刚才粘贴进来的那段 f、 f、 m、 p、 e、 g。 代码整合成一行,删掉所有的换行符,这样就彻底避免了格式问题。 操作步骤,一,在 nano 里把光标移到那段 f、 f、 m、 p、 e、 g。 代码里。二、删掉所有的,把所有内容连起来变成一整行。比如三、保存退出, ctrl 加 o 回车保存, ctrl 加 x 退出 nano 确认无误后运行脚本,这次不会再有任何格式或分辨率问题,脚本会把你的片头和横屏录屏完美合并,生成可发布的视频。等你确认脚本跑完, waiting publish 里有了正常的视频文件。再 有问题, 现在有两个问题,咱们逐个解决。问题一,脚本语法错误。寻找匹配的巨犬上金的其中名车时遇到了未预期的 e、 o f, 这说明你在修改代码时引。

在上一条视频,我分享了自己的个人网页,这是不写一行代码,完全的否定用 ai 做的,学会这个教程,你还可以制作出自己的原创个人网页,这是我做的小狗动态网页,我是一名美术师,发现很多朋友很感兴趣,那么今天我就来分享一下如何使用 ai 做出一个属于自己的个人 网页。这个界面的整个设计流程可以完全复制到其他的网页界面,比如说像电商的网页,或者呃,个人作品集, 应该怎么做吧。第一步是找案例,参考以下这四个网站,有些非常好的参考案例。在这个网页的设计过程中,我选择的 a 站,它是 coser, 模型是 cloud office。 点七, 我们打开这个网页界面,在里面选择你喜欢的风格类型,点击右上角复制提示词,并且在 coser 里面输入提示词。 我的这个花朵案例的提示词已经分享给大家了,大家可以直接截图放到豆包里面进行文字提取。后来我在想,如果我想设计一款完全符合自己想法的动态页面,而不是复制别人的 proma 提示词,应该怎么做呢? 那么以下就是设计一个原创页面的教程。我们打开 pinterest, 在 pinterest 上搜索一些你比较喜欢的网页风格,把它点击保存到桌面 之后呢?我们打开 love art, 在 love art 里面,嗯,绘出一张你比较喜欢的插画,你也可以把自己画的画倒进去,让它生成首尾帧。这是拼翠斯通过我发给他的图生成的一个小狗跳跃的首尾帧图像,是不是很可爱呢?我们现在把这个图像生成视频, 考虑到 love art 可能会收费,大家也可以使用小圆圈进行视频的制作,把视频保存到桌面,并且记住它的文件夹位置,把文件夹的位置告诉 coser, 复制提示词,就可以生成这样的网页动画了。 以上就是今天的教程,不用写一行代码零接受,小白也可以在固定出自己的网页,快去试试看吧!我是此钉男,关注我,分享更多教程!

电脑正常用着突然直接蓝屏,出现一串代码 or co, not less or equal, 是 不是特别崩溃?其实这个蓝屏非常常见,大多是驱动不兼容、 新装软件冲突、外设硬件干扰或是系统文件内存异常导致的。完全不用急着重装系统,首先最简单的办法, 直接重启电脑,偶尔一次蓝屏,大多是临时系统小故障,重启就能恢复正常。如果反复蓝屏,那就这样操作,连续强制关机三次,触发 win 十一自动恢复环境进入疑难解答。点开高级选项, 先运行启动修复,让系统自动扫描并修复损坏的启动文件。启动修复无效就选择启动设置重启,按提示快捷键进入安全模式。进到安全模式后,卸载近期刚安装的软件,显卡、网卡驱动,还有最近的系统更新补丁, 这些都是蓝屏高发诱音。也可以直接用系统还原功能把电脑回溯到没出故障之前的正常还原点。如果以上方法都没用,就拔掉最近新增的 u 盘、 外设、网卡等硬件,重新插拔内存条,清理金手指。还可以进 bios 暂时关闭内存缓存和虚拟化相关选项 基本都能根治。整套流程一步步排查,不用找维修,不用重装系统,新手也能自己搞定。建议收藏起来,以后遇到蓝屏直接照着操作。

在这段时间里,我一次又一次的看到大家犯同样的错误。首先是第一个坏习惯,没有出式化变量。前段时间我和一个人聊到他的代码就是这样写的,我告诉他应该在这个结构题里出式化变量, 他的回应是他会在后面出式化这些变量,所以没必要在构造函数里也出式化。乍一看这好像没什么问题,但实际上这是一个非常糟糕的做法。 随着项目的扩展,你在越来越多的地方使用这个结构体,并且开始添加越来越多的结构体。你忘记在所有地方出土化他们的概率会呈指数级增长。比如说这是一个一万行代码的项目,你能告诉我这个变量在代码的所有地方都被正确出土化了吗? 那现在呢?所以如果你总是确保出土化每一个变量,你就能在五分里拿到一分,而且这本来就是构造函数的作用, 你应该在这里促使你的成员变量,而不是在结构体外部,这样别人就能很容易的知道这个结构体应该如何工作。所以一定要促使化你所有的变量。这样一来,所有内容都会处于一个相对有效的状态,你也可以用这个方法将结构体重置为默认状态。 另外,如果可能的话,尽量把默认值设为零。最后,请不要再在构造函数内部促使化你的成员变量了。 现在已经是二零二六年了, c 加加十一已经发布了十五年,这样的代码真的很难读。我完全不明白为什么有人会这样写代码。如果你也是其中之一,我刚刚已经证明了这样做很糟糕,因为这段代码实际上有一个很大的漏洞。我敢打赌,你甚至都没有发现 这个成员。变量从未被初始化。但如果你像这样写代码,你就能看出来。但如果你像这样做,你会立刻发现问题,而且你也可以很容易看出每个变量是如何被初始化的。但说到变量,我简直不敢相信,我还得提这个。第二个坏习惯,就是把所有变量都声明在同一个地方。 如果这段代码让你想吐,那你在这方面就得了一分。但如果你像这样写代码,你就得不到分数。简单讲一下历史,很久以前编一起非常简单,无法处理在函数中间声明新变量。 所以在 c 语言的第一个版本中,你必须在函数的顶部声明所有变量。这种做法一代代传下来,结果三十年后居然还有些老师在这样做。如果你不明白为什么这样做很糟糕,让我从我用 c 加加写的 minecraft 游戏里,随便拿一段代码,把所有变量都移到函数顶部。 天呐,养成在需要用到变量时再声明变量的习惯。你只想在负循环里用这个变量,那就把它放到负循环里面。 在大型函数中,我有时甚至会创建空白作用域,把变量和其他代码隔离开来。接下来我们来说说第三个坏习惯,那就是把本不该放在堆上的东西分配到堆上。 每当我看新手的代码时,到处都是纸真,我立刻就知道有问题。因为如果你看我的代码,你会发现纸真其实很少见。需要说明的是,使用纸真本身没有错, 但在我解释完这个坏习惯和下一个坏习惯后,你就会明白,其实你并不需要像想象中那么频繁的用到指征。所以很多人在 cia 里创建类的实力时,都会直接把它分配到堆上。可能是因为其他语言就是这么做的。 如果你觉得这里的这段代码没问题,那你在这个习惯上得零分。如果你更愿意像这样写代码,那你就得一分。原因是把它分配到堆上。其实完全没有任何好处,反而会带来一些弊端。 随着你的代码规模变大,如果太多东西被随意的分配到堆上,而且每个对象的所有权都成了问题,你的代码最终会变得一团糟。只有在有充分理由的情况下,你才应该把东西分配到堆上。比如说,如果你想实现一个树状的数据结构,你可能会把内容分配到堆上,或者对象很大,或者你想用 vector, 我 自己也经常用 vector 以及类似的东西。这里说的大并不是指里面有几个成员那么简单。我听过各种各样的借口和想象中的问题, 比如有些人担心他们会用光占空间,那是不会发生。如果你不相信我,我曾经做过一个完全在站上运行的三维游戏,你可以去看看。如果你保持简单 c 加加的内存管理其实很容易,我还专门做过一期视频讲这个。 举个简单的例子,这就是我游戏里的资源管理器,我就在这里存放所有的贴图和其他资源。当我需要用它们的时候,我不会把它们当做纸真来用,更不会用引用技术,我只是在需要用的时候直接从资源管理器里拿来用,就这么简单。 所以如果你看我的多人版 microsoft 游戏,你会发现整个代码库里我只用了大约十次 new 这个词,所以不要无缘无故的随意把类放到堆上。 接下来讲第四个错误,我还有更多例子要给你们看。第四个错误就是以一种容易引发问题的方式编辑代码。 你可能已经知道,当你要解决一个大任务时,必须把它拆分成更小的系统。但如果你希望你的代码在扩展时不会崩溃,你就必须把这些系统设计的让你很难用错。他们假设你想实现一个从文件中提取所有数据并返回结果。很多人在这里会分配数据并返回它, 但这意味着用户很容易忘记删除这些数据。所以我会选择直接返回一个字不串或者一个无符号整形的项链,这样用户可以很方便的对数据进行任何操作,而且数据会被自动删除。现在轮到你了,这个还算有什么问题?我经常看到这种情况,这看起来可能没什么害处, 一直为类粗制化一些东西。但因为我们要求传入一个指征,用户有可能会不小心传入一个空指征。如果你发现了空指征的问题,你就得一分。这里最基本要做的事情就是检查数据是否为非空。而且每当你有一个可能为闹的指征时,你都应该这样做。 但其实有一个更好的选择,你可以通过要求传递引用来保证纸质不是空的,这样你就可以确定数据一定不是空的。同时用户也知道他不能向函数传递空数据。 作为一种惯例,每当我使用纸质时,这就意味着该纸质可能为 no, 所以 它是可选。而每当我使用引用时,就很清楚数据不允许为 no。 你看我是不是在让出错变得更难?还有更多例子,这个函数从数组中提取数据,但我总是会检查输入是否正确。这个函数用于出水化系统,但如果我传递了一些过大的值,系统就会崩溃,所以我会对此进行检查。 每当我为我的游戏加载设置时,我都会调用这个方法。它确保所有加载的数值都在允许的范围内,所以基本上设置系统永远不会出错。 你完全可以尽你所能去破坏这个加载函数,或者修改保存文件来给他错误的数据。但无论函数最后发生了什么,设置值依然会保持在正常范围内。但现在,让我们终于来谈谈第五个错误, 因为它将决定你在 c 家家之路上能否进化,还是只是停留在原地。在 c 家家学习之路上,唯一能让你进步的方法就是做大型项目。我说的是一个真正的大项目。每当我和初学者交流时,他们总是问我应该读哪本书,或者应该学习哪些功能,但这并不是正确的学习方式。 你为什么觉得观看关于整洁代码和设计模式的讲座让人感觉良好又轻松?因为你并没有以任何方式进步。你必须做一个大型项目, 而且他对你来说必须是有难度的。之所以感觉困难,是因为你的大脑正在训练并提升你的编程技能。需要说明的是,我并不是说你不应该学习新东西,你必须学习新知识,但你会在做大型项目的过程中学到它。比如,在制作游戏的过程中,你可能会想要实现物理和碰撞效果, 所以你会去研究游戏中的物理原理,然后真正的在游戏里自己编辑实现。所以,第五个错误就是没有花时间真正去编辑大型项目。什么是大型项目? 这取决于你当前的水平。所以,如果你刚刚用两百行代码在控制台里做出了你的第一个贪吃蛇游戏,那么你下一个大型项目应该更大更难一些。比如用五百行代码做一个俄罗斯方块。所以,如果你经常通过挑战难度较高的项目来提升自己, 恭喜你,你得到了最后一分。但如果你最近一直拖延,只是看一些理论知识而没有写代码,那你就拿不到这一分,那么你可以这样做。我知道开始一个大型项目可能看起来很可怕,但其实并没有那么难。 你要做的就是保持简单,一步一步来。比如,你可以通过观看 james 九的这个视频来学习如何制作这个俄罗斯方块游戏,然后利用这些知识,你可以在控制台里做一个像这样的简单 rpg 游戏。 不要想的太复杂,不要过度提前规划,绝对不要试图同时编辑太多系统。你需要为游戏显示一张地图, 所以你可以从这一步开始,只需把地图存储为一个字母串并显示出来。然后你需要一个玩家,所以你需要一个位置和一种移动它的方法。接下来你可能需要一个摄像机,那就实现它,以此类推,这适用于你所处的任何阶段。

推荐一个目前最完整的网页复刻 ai 工具,只需要丢给他一个网址,他会自动看页面,抓样式,拆主键,然后 ai 就 能把整个网页重新搭出来。 关键不是截图,是给你一个能继续修改的项目文件,每一行都能调,每一个主键都能改。以前看到好看的设计,要么截图存着吃灰,要么从头对着抄。现在一个链接过去,落地页,产品原型仿真练习,直接拿来改思路,很实用,今天就可以试一下,觉得有用点个关注,更多 ai 干货,翻我主页!

运营甩给你一个需求,查出今天没有下单的客户,准备发召回短信。你一看,太简单了,直接写一个 not in, 子查询,在客户表里找,排除掉今天下过单的 id 代码极其优雅,毫无破绽。结果一敲,回车,见鬼了, 结果是一片空白。运营说,我们有几百个客户,今天就俩人下单了,你跟我说没下单的名单是空的?这种灵异事件问题就出现在子查询这棵老鼠屎上。 仔细看今日的订单表,里面有一条没有绑定客户 id 的 散客数据,他的直是闹。 在 c 库的底层逻辑里, not in 等同于不等于 a, 且不等于 b, 且不等于 c。 只要这串判断里混进了一个闹,整个逻辑链条就会瞬间坍塌,结果全部变成未知。这就是臭名昭著的闹黑洞 业务。等着发短信,怎么就把它摘出来?直接在子查询最后硬加上一句, where customer id is not not, 保证子查询吐出来的全部都是干净确定的 id。 你 看一桥回车没下单的王总和赵总,瞬间全部都找回来了。 急救归急救,但作为老鸟,我们从不写这种容易踩坑的代码。教你个更高级、性能更好且完全免疫闹黑洞的写法。抛弃 not in, 拥抱 not exists, 用 not exist 判断关联关系。哪怕有成千上万个 no 脏数据,也绝对影响不了你的主查群。我是极简 it, 只教保命干货,我们下期见!

这一期视频来给大家分享一个坑,首先我们看第一行 a 这个变量,显然它的结果肯定是 two, 大家再看一下 b 这个变量,可以暂停一下视频,猜一下它的结果是 two 还是 force, 我们直接运行一下看一下结果,结果显示 b 是 force。 这个坑就是想告诉大家 is not。 合起来用跟拆开来用是两回事,最好是把它们合起来用,拆开来用的话,你不知道你的结果会出个什么牛马出来。

今天我们讲解此查询 in 和 not in 的使用,请看视力,先做演示,再做讲解。请看这里有两张表,一张是学生信息表 su info, 一张是学生成绩表 su max。 我们先查看一下它的全部数据。 slide xing from s u n for sled xing from s u marks。 选中执行代码,按快捷键 f 五执行,执行成功。这是两张表的全部数据, 这是学生信息表的数据,这是学生成绩表的数据。 chinese exam 是语文成绩。假设我们现在需要查询语文成绩是九十三分的学生信息,应该 如何做?请看我们使用硬操作符很容易就可以实现这样写。 sled 是查询关键字后面写列名称,这里我们写通配符星号代表所有列。 from 关键字后面写表名称,这里我们写 su 英否。学生信息表 后面写查询条件 where 查询关键字,后面写查询描述,这里我们写 suno。 学生编号列 后面写查询判断语句,这里我们写应查询操作符,后面跟括号语法这么规定,里面写具体查询条件,我们这样写,里面再写一个子查询 键字,后面写查询输出列,这里我们写 s t u n o。 学生编号列后面写 prom, 关键字后面写表名称,这里我们写 s t u max 后面写 where 查询关键字后面写 chinese exam。 语文成绩列后面写 in。 关键字括号里面写具体查询描述,这里我们写九十三。再给大家解释下这句代码的意思。 先查询 su max, 表中语文成绩是九十三分的学生编号 suno, 再通过学生编号 suno 列查询查询 su 英报表中学生信息。简单解释就是查询语文成绩是 九十三分的学生。信息,选中执行代码,按快捷键 f 五执行,执行成功。语文成绩是九十三分的学生有四位,那如何查询语文成绩不是九十三分的学生?信息 非常简单,我们修改 in 关键字为 not in 就可以了。选中执行代码,按快捷键 f 五执行,执行成功。语文成绩不是九十三分的学生有两位。 总结一下,通过这个案例的演示,我们得出了一个结论,子查询中硬操作符可以返回多条记录。其他比较用算符,如等号不等号、小于、小于等于、大于、 大于等于,这些操作符在子查询中只能返回一条或空的记录。给大家演示下。假如我们把 note in 修改为等号查询语句,在执行的时候就会报错, 因为我们的紫查询返回的不是一条记录,而是多条记录,所以会报错。选中执行代码,按快捷键 f 五执行执行报错。 通过对比,相信大家对 in 和 not in 在紫查询中已经掌握了 in 和 not in, 它可以返回多条记录。下一节我们讲解照影。

你看一下这里五行代码,哪一行代码有错误?第四行有错误,为什么?呃,看起来感觉有错误。为什么?感觉他有错误,为什么?我觉得不应该凭空多刷点。那我这里标出来了, 你看一下能不能看出来。看小宝瑞你看从上到下看仔细一点,你肯定知道哪里有错误。 这是啥? print b 哪来的 b 啊?是的,他说对了。哎呀,说反了。我应该说的还是他 b 不应该说的啊是吗?对,所以你看嘛。啊所以这里 b 没有。所以他这个打印就会有问题了啊。所以这个问题就 是哎,为什么?因为 b 他没有定义对不对,你前面都没有,他直接打印他哎。是不是?你把他加个引号是不是就可以?或者对不对是吗?对,你如果不加引号,他就是个变量,你这个变量一定要定义才行。 ok? 好。

给大家分享两个报错代码的解决方法。那么咱们在上传产品的时候不是那么一帆风顺,大部分在提交页面的时候会出现 页面数字编码的一个报错问题。第一个呢是八五四幺,八五四幺通常提醒的是说此商品编码已经被某某产品某某 agent 使用过,证明呢,这个编码呢被别人给占用了,那么这时候呢就需要更换 u p c, 因为我们一个商品它只支持一个身份证编码, 这个很好解决,直接去找你的 upc 库去直接更换一批就可以了。第二个是八五七二报错,八五七二报错它提醒的是说你的 upc 码呀, ean 码和你的现在的品牌不符合。大部分情况下后续的解决方案 官方给出来的是让你去找客服去提供什么 u p c 购买证书,什么 e a n 专业的证书,其实不需要一招就可以解决。首先呢你需要去店铺里面注册好你的牌子,然后呢给他 那个备案在店铺上面,比如说我注册了一个牌子叫 abc, 那 么此时我上传的时候只需要去点开产品页面有一个制造商,把制造商这一栏也填上 abc, 此时我上传产品用的这个品牌和我制造商的这个牌子是完全一致的,都是我的牌子,这个时候就不会出现八五七二的报错,你不需要重复地去更换 u p c, 在 那儿试,一般的情况下也试不出来啥效果, 一般没有用。另外一个说也不用去找客服去开 case, 开案例,让你提供证书呀什么的,这个都是很没有用的一个办法,所以说可以试一下一个小妙招,解决你的大烦恼。

刚灭了个三年,前端问他项目依赖怎么管理,他说用 package 点 jason 锁版本有问题就删 note, 猫就死冲装。我接着问了个场景,新同事拉代码 npm install 后启动报错,猫就 not found, 让他删了冲装还是报错,你亲自试也不行,但你电脑上跑得好好的,根因可能是什么?他想了想,依赖版本不一致或者锁文件冲突。如果是锁文件问题,你怎么证明是他电脑环境问题? 如果用了 n p m c i 保证安装一致性,为什么还会出现在我电脑能跑,他电脑就炸。他陷入沉思,面试到这里结束了。这正是依赖黑洞的典型特征。你以为锁了版本就万事大吉,却不知道依赖树深处某个包正在腐烂。为什么这个问题能筛出高手? 因为他考察的不是会不会用 n p m install, 而是有没有依赖及资产的治理意识。如果你对这问题也发怵,我整理了让面试官沉默的大场必考题库,包含 mexico 灵魂拷问、 reddis 高频陷阱、 spring boot 十连问、 留六六六打包带走。一个能应对依赖治理问题的前端工程师,必须建立四层认知,第一层理解锁文件的本质与局限。 package lock jason 锁的不是版本,而是整个依赖数。它锁定了每个依赖包的具体版本和下载地址,理论上能保证安装一致性, 但它锁不住原站。如果某个依赖包的作者删除了那个版本或者路由器挂了,你的锁文件就成了一张废纸。 m p m c i versus m p m install m p m c i 会严格按锁,文件安装速度快且一致性强。 m p m install 则会根据货 升级符合条件的包可能悄悄改写了锁文件。很多本地能跑服务器炸的问题,就是因为有人物提交了 n p m install 后修改的锁文件。第二层,建立依赖健康度监控机制。定期依赖审计,用 n p m audit 或 snake 扫描已知漏洞, 并把审计结果接入 c i 流程。高危漏洞直接阻止合并。依赖版本漂移预警,像 deppadot 或 renovate 这样的工具,能自动检测依赖更新并提 pr, 让你主动掌控升级时机,而不是被动等出问题。 幽灵依赖检测,如果一个项目直接用了 webpack 的 某个内部模块,但 package json 只依赖了 viewkly, 这叫幽灵依赖。 一旦 viewkly 升级换了内部实现,你的代码就炸了。用 dependency cruiser 或 excellent plugin import 可以 提前发现这类问题。 第三层,制定团队依赖治理规范,所文件必须提交且受保护。 package lockheed json 必须进版本库,禁止任何人手动修改。 任何依赖变更必须通过包管理工具自动生成,定期清理。无用依赖,用 dash check 找出那些 package 点, jason 里写但代码里没用到的包,以及那些被依赖但不再需要的包。定期修剪依赖树。重大依赖升级必须演练。像 react view 这种核心依赖的大版本升级,不能直接在生产环境冒险。 先在独立分支升级,跑完所有测试,再挥动一小部分流量观察几天。第四层,极端情况下的自救手段,依赖锁定到具体版本号,如果某个依赖的作者频繁发布问题版本,可以考虑直接锁定到已知稳定的具体版本,甚至把依赖代码复制到项目里。 vendor 化作为最后手段。 私有镜像与缓存。对于核心项目搭建私有的 n p m 镜像,如 verdashio, 把关键依赖提前缓存下来, 防止公共 registry 出问题时无法安装。所以这道题考的是什么?它考的是你能否从使用者升级为治理者。普通开发者把 nodemojus 当成用完机器的消耗品,而高级工程师把它当成需要持续监控、定期维护甚至涉防的技术资产。当依赖树伸出某个你从未听说过的包突然爆炸时, 前者只能山库种庄赌一把,后者则早有预案。你们项目里有没有一个谁都不敢动的祖传 package? jason 因为依赖问题引发过最诡异的线上事故是什么?

你有没有过这种感觉,脑子里想法一大堆,但一打开电脑就卡住了。以前你要自己写代码、查文档、调 bug, 现在你可以把想法直接交给 codex, 你 只需要说清楚你想实现什么。 codex 会自己写项目、改代码、跑任务,你负责想象,他负责把想象往实现推进一步。这是一期教学视频, 我将带你从零开始,用 codex desktop 把一个想法变成现实。打开 codex 客户端,首先我们来创建一个项目,点击新建空白项目,在对话框输入需求。我想要创建一个个人简历网站,该怎么办?这是一个关于想法和计划的需求, 你可以点击加号,选择计划模式,选择成功之后,这边会出现计划图标,你也可以通过 shift 加 table 键 进行切换。在计划图标的右边有一个权限控制下达菜单,它有三种选项,一种是默认权限,就是在 codex 的 沙盒中自动运行命令。沙盒你可以理解成是一个与外界隔离的封闭空 间,不受外部的干扰,也不会影响外部环境。第二种是自动审查,它的权限比默认权限更高一些,通过 ai 智能的判断,哪些权限不需要人工审核而进行自动审核。第 三种是完全访问权限,当你选中这个选项, codex 对 你的计算机拥有完全访问权限,它不单单可以操作沙盒里面的内容,也可以操作沙盒以外的内容。 这个选项风险比较高,一般要慎用,不要为了方便而牺牲安全。我一般建议选择自动审查,既考虑到方便,又兼顾到安全。点击这个下拉菜单,可以对模型进行具体设置,选择模型的智能能力时, 一般建议选择中或者高,对于复杂的问题,建议选择超高模型的版本可以选择五点五、五点四或者其他的版本。 code x 客户端目前只能接入自家的模型。 这边的速度有标准和快速两种模式,注意快速模式的速度是标准的一点五倍,但是同时它的头壳用量也是增加的。所以一般情况下,我们选择标准模式。你的需求也可以通过语音的方式进行输入,单机这个按钮 可以进行语音输入,点击确认它就将你的语音转成文字。这些都设置好之后,你就可以点击发送按钮了。在发送之前,你会发现在对话框的下方有这样一些选项,点击它,你知道当前的对话是针对这个项目进 行提问的。你也可以在这边快捷地创建一个新项目,你也可以不使用任何项目进行提问。我们这边选中 new project, 即当前项目。这边还有本地处理 工作树关联。 code xwave 最下面是一个余额查询,它可以显示当前的 token 使用量。我们这边就选择默认本地处理,也就是在你的电脑上运行该项目。 这边还有一个切换分支,当你创建项目成功后,默认使用 git 进行管理, git 帮你创建一个面分支。如果你对 git 不是 很了解也没有关系,直接选择面分支就可以好了。这些选项都配置成功之后,你就可以爽快地点击发送按钮了。 在运行的过程中,它会弹出这样的选择卡片,让你进行选择。通过不断的交互, ai 可以 更加清楚地了解你的需求。比如你希望网站风格是什么, 简历内容如何提供给他,他这边提供四种方式。我们这边可以选择从现有文件提取,直接上传一个文件到对话框,点 击它,然后点击加号添加文件,将你本地个人简历发送给他。接着 ai 问你作品,即主要面向哪些机会?我们这边随便选择一个,你计划把网站发送到什么平台。这边我们选择 git hub pages。 都选择好之后, 我们可以把个人简历发送给他,点击发送这边他接着问你的网站主要使用什么语言展示,我选择中英双语,页面结构偏向于单页。滚动 来阅读一下这个计划书。如果你觉得这个计划书没有问题的话,你可以点击试开始执行。如果还是不满意,你可以在第二个选项里面告诉他进行如何修改。我这边选择试,当选择实施计划时, 你会发现这边的计划模式图标自动取消掉了。接着 ai 就 会根据计划书进行代码的生成。在生成的过程中,你会发现左侧导航栏有个项目,这是我刚刚创建的项目。下面有个对话分类标签,我们可以点击这个按钮, 新建一个对话,然后在对话框中输入今天的天气如何点击发送。这时候你会发现这次对话信息归属于对话分类中,而我们上面的项目是归属于项目分类。你可以在对话分类中新建对话,进行闲聊。而在项目分类中, 你必须要先新建项目,然后在每个项目下方新建一个个对话,这是我刚刚创建的项目,项目中的该对话右侧有一个滚动特效,表示该对话正在运行中。你也可以创建多个项目, 鼠标悬浮在项目分类上面,点击这个文件夹,我们可以创建第二个项目单机,你可以新建一个空项目,也可以打开你电脑上现有的项目,我选择使用现有的项目,点击,找到你电脑上的某个项目, 选择文件夹,点击打开,这个时候在项目分类中就有两个项目,你可以同时对着两个项目进行提问,实现多项目并行开发,提高开发效率。我们现在在每个项目下方 可以创建多个对话,这是一个对话窗口,当你点击它的时候,可以创建第二个对话窗口,你可以在这里进行提问,这时候这两个对话窗口都归属于这个项目下方。在第二个对话执行完成时, 这边就会出现一个圆点,表示执行完成,告诉你这个对话已经执行结束,你可以点击它打开对话窗口进行查看,这边已经完成代码的生成, 同时给你一个网站的预览链接,点击它就可以进行预览。单机后就可以在内置浏览器中预览网站,你也可以点击右上方的这个图标,对右侧边栏进行折叠,再次点击就是打开, 你也可以将内置浏览器进行全屏展开,点击这边的展开面板,这样预览式口变得更加的宽阔。我的简历网站支持中英文切换,点击这个图标可以对整个浏览器进行截图, 这时候截图保存到粘贴板上,你可以将截图粘贴到对话输入框中,然后根据截图进行提问,还可以点击删除按钮,进行截图引用的删除。 回到右边的面板,除了截图功能,还有批注功能,点击批注,你可以选择页面上具体某个区域,例如对这个区域进行批注操作,去掉监 ceo, 写好批注后,点击这边的勾号按钮, 这时批注就会自动添加到对话输入框内,你可以点击发送,让 ai 参考你的批注内容进行修改,这边显示它已经修改成功,你可以点击打开,再次预览一下, 我们发现这边已经修改成功。当然如果你想要撤销修改,你可以点击这边的撤销,那么就恢复到批注之前的状态。你也可以点击这边的审查,看一下代码文件中,它将这行代码进行删除, 然后新增一行代码,除了这个文件内容有改动,其他文件也进行了相关的修改。当前的页面是审查 tab 页,我们可以回到内置浏览器 tab 页。当你发现整个页面 不需要进行任何修改时,你可以将批注开关按钮关闭掉,这样就可以进行很好的预览。点击右上角的图标,可以恢复面板宽 度,这时我们在 codex 界面的中央区域就可以看到完整的历史对话记录,这就是你刚刚添加的批注对话,你可以添加多个批注,点击批注,选择这个区域删除。个人创业,按下回车键,表示添加批注。到对话输入框,按下 command 加回车,表示发送对话内容。 当你发现你的批注描写的非常具体,不需要额外补充任何信息时,你可以直接按住 command 加回车,此时就开始按照批注内容进行修改代码执行成功之后再来刷新页面,个人创业就被成功删除掉了。你再往下方看,将这个爬虫标签进行删除, 点击它加个批注,删除爬虫,按下 command 加回车键,在界面中央区域 e i 开始进行删除操作。删除成功之后,你可以点击刷新,预览一下,发现删除成功,大功告成,删除均被删除, 这时候你可以取消批注。如果这时候你后悔了,你觉得不应该删除爬虫这个标签,那么怎么办呢?你可以点击这边撤销按钮,对代码进行撤销操作。点击撤销后再来刷新页面,这时候爬虫标签就又出现了。 这种操作是对历史对话中最后一轮进行撤销。那么如何撤销到历史对话的具体某个位置呢?例如,你希望从这轮对话开始,往下所有操作均被撤销,那么如何操作呢? 这个时候你可以找到这轮对话,点击这边的分叉按钮,派身到本地,在左侧边栏给你新建一个对话窗口,在这个对话窗口里,我们只能看到这轮对话及之前的对话内容,而无法查看之前的对话内容。 你再次打开预览,这个时候点击撤销,再次刷新一下浏览器,发现被删除的间 ceo 又出现了,这样就可以实现历史绘画记录 撤销到该轮对话位置。回到右侧的内置浏览器。你现在想要对项目模块和经历模块进行同时修改,那么如何操作呢?你发现这两个模块是相互之间独立的,你可以使用工作树找到左侧的对话标题 后,进行右击,点击派生到新的工作数,这时候你发现派生失败,这是为什么呢?在派生之前,你需要进行一次 get 提交,返回到开对话输入框, 输入 commit, 这样就把我们之前所有代码提交到本地 make 之上,这边显示提交成功。如果你不放心的话,可以二次确认是否提交成功。你需要找到项目的源码,点击这边你会发现很多代码, i d e logo 图标,你希望项目源码在哪个编辑器上展示,你就点击哪个图标 标。我一般习惯使用 v s q 的 点击 v s q 的 图标,在左侧边栏中找到版本管理,当你发现这个区域没有任何文件时,说明已经提交成功。回到 q d x, 再次新建工作数,右击派升到新的工作数,这个时候一个新的工作数就新建成功了。为了方便区分, 可以对对话标题进行重命名,点击重命名,修改为项目模块,然后点击保存,这时你就可以对项目模块进行优化。这时候你发现对话框的下方显示工作数三个字。在这个对话窗口状态下,你可以打开内置浏览器,将我们的网站链接复制过去。点 点击复制,然后进行粘贴回车。我们在这个对话框中对项目模块进行优化,选择批注,找到该项目区域,添加三个项目介绍,点击添加,点击发送。接下来再次创建一个新工作数,对精力模块进行优化。同样的操作,选择这个标题,右击派生到新的工作数, 同样对它进行重命名,然后保存,同样打开内置浏览器,把网站链接复制过去,在这边粘贴,然后找到经历区域进行批注。添加多段经历, 然后点击发送。这时你会发现这两个对话框在运行工作,但是它们分别运行在不同的工作树上。对于这个创建失败的对话,你可以选择进行归导,点击确认,它就从对话列表中消失掉。对于我们暂时用不到的对话,你 可以选择进行规党操作。对于对话列表,除了规党,你还可以进行这样的设置,选择右击可以让这个对话置顶。从命名对话规党,对话标记为未读。 在访达中打开复制工作目录,复制绘画 id 等等。更有趣的一点,你还可以在迷你窗口中进行打开。点击该窗口时,它以迷你小窗口形式打开。关键一点,你可以将其置顶。它可以置顶在任何的窗口的最上层,无论你窗口如何切换,它都显示在桌面的最上一层, 点击这里可以将其关闭。你发现两个蓝色实心圆点,表示它们已经运行结束。现在可以预览一下这边它增加了三段项目内容。再来检查一下经历模块,打开预览, 点击经历导航菜单,这边也新增三段经历。你现在回到最初的那个对话窗口,点击它。刷新一下。点击项目,你会发现只有一段项目内容,这边只有一段经历内容,这是为什么呢?这时候你需要将这两个对话框中分别进行的代码修改内容 合并到本地 main 分 支里。在合并之前,我们需要对它进行一个提交,点击经历模块输入 commit。 点击项目模块,输入 commit, 然后让它合并到 main 分 支,此时两边都显示成功合并到 main 分 支。这时候你再点击这个对话窗口,刷新一下,页面上出现项目模块和经历模块的新增内容, 此时这两个对话框的使命就结束了,你可以将它们进行归档处理。回到主分支对话,你可以接着对网站进行深入优化。现在你想要让网站界面变成 ppt 风格,这时候你可以输入美元符号, 然后选择一个专门设计 ppt 风格的 skill, 我 选择这个 skill, 它是我自定义的专属 skill。 接着输入提示词,将网站转换成 ppt 网站,点击发送, 执行成功之后,点击刷新,你会看到这个网站变成 ppt 风格样式。在对话框里面直接调用某个技能, 你需要使用美元符号,这个时候就可以预览 qq 的 x 中安装的所有技能。除了这种方式预览技能,你还可以对技能进行详细的设置。找到左上角的插件导航菜单,在这边选择技能贴报页。技能一般分为两大类,一类是系统内置的技能,一类是用户自己安装的技能。 你可以管理这些技能。点击右上角的管理按钮,在这个界面你可以知道 code x 上安装了多少技能,每个技能分别是什么。 对每个技能可以选择关闭预打开,点击左边的三个点更多按钮,你可以点击打开按钮,这时候看到的是该技能的 scale md 详情,点击这边详情按钮,也可以通过这样的方式阅读 scale, 点 md 文件。当然你也可以点击左下角的卸载按钮, 将这个技能卸载掉。卸载完成后,你可以点击这边的刷新按钮,但是我发现被卸载的 skill 依然存在于技能列表中,这可能是 codex 团队需要优化的地方。右上角有个新建下拉菜单,你可以新建自己专属的插件,也可以新建个人专属技能。 点击新建技能。新建技能的本质是使用 skill create 元技能来帮助你去创建你的专属技能。比如说帮我创建一个技能,该技能的功能是该技能可以审查代码是否规范,技能的名称是悟空 code review。 点击发送自定义技能,创建成功之后,你就可以使用它回到这个对话窗口,在输入框中使用美元符号找到刚刚自定义的技能,但 关机,然后输入进行代码审查。发送该技能就会对当前项目进行代码审查。除了技能可以帮助你实现想法,你还可以使用插件。点击左边的插件导航,你会发现这里面有很多插件,比如常见的 computer use 和 浏览器两个插件,一个是负责操控你的电脑,一个是负责操控内置浏览器。学到这里,你可能好奇,插件和技能是什么关系呢?你可以理解成一个插件包含 n 个技能,它是技能的结合体。比如我们打开 superpowers 插件,你会发现这个插件里面包含了这么多技能。 特殊情况下,一个插件里也可以只包含一个技能。安装插件也很简单,我们回到插件界面,以安装 superpowers 为例,点击这里的加号,点击安装 superpowers 按钮。安装成功之后,点击 superpowers 查看一下插件详情。 默认情况下,这些技能都是起用状态。你会发现第一个技能是 brainstorming 头脑风暴。点击右上角,在对话中试用该插件,这个时候在对话输入框中自动引用这个插件。如果你只想使用该插件里面的某个具体技能,你可以使用美元符号加上插件的具体名称。比 如 brainstorming 头脑风暴技能。如果你只想直接使用插件,而不指定某个具体技能,你可以点击左下角的加号,然后选择插件,找到 superpowers 插件单机。