首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序员必知必会那些邪恶脚本

重要事,说三遍 脚本 脚本主要由一些别名、函数、环境变量定义组织而成,执行该脚本后,你 shell 环境就变成了一个光怪陆离世界。本文主要使用bash环境,其他shell支持不能保证。...啥都看(cat)不了 当我想看(cat)一下文件居然就当没听见,到底文件里面有啥啊?...再也不要试着进入目录了 当我想进入目录看看,惊奇是居然没进去,难道没有自动补全就输入错了?用前面那个奇奇怪怪 ls 再次看看,令人惊恐是,那个目录!没有了!!!...也可以使用showkey -a命令检验你按下键值(CTRL-D 退出)。 16. 好但是不干 你说要,但是身体却说不要。明明应该应答 yes,但是却实际上拒绝了。...要编辑文件 当我用 vim 打开一个文件,为什么什么都没发生?

95670

一日一技:警告但不禁止,遗留代码优化策略

因为当你函数收到一个字典时候,你根本不知道这个字典里面有哪些Key,你必须有一层一层往上看,找到所有尝试往字典里面添加新Key地方,你才能知道总共有哪些Key。...但是,在正常公司项目中,我们可能会需要维护一些历史遗留代码。代码规模大,函数调用层级非常深。并且之前的人已经使用字典传递了大量数据。 短时间内,我们没有办法直接把字典改成Dataclass。...如果你强行要加入,代码也能运行,但出问题你要自己负责。 我们知道,Python 类型标注正好就是警告但不禁止。当你类型有问题,他会告诉你这里有错,但你强行要运行,代码也能正常工作。...,在PyCharm也看不出有什么异常: 但当我想在函数里面,额外往字典加一个新字段就会发出警报: 这个警告在一定程度上,可以提醒其他人不要往字典中乱加Key。...如果你在一开始初始化字典,就把类型指定好,那么你一开始就必须提供所有字段,否则它也会发出警告,如下图所示: 这种情况下,我们可以在初始化字典,不加类型标注,但在函数参数里面加上类型标注。

14510
您找到你想要的搜索结果了吗?
是的
没有找到

如何处理前任程序员留下代码

为了战胜这种人天性行为,我们需要采取一些小措施以避免我们代码更少地被弄脏(及时更换破掉窗户)。 一个简单方法是删除来自我们正在使用整个包或模块中所有警告。至于未使用或添加注释代码,删除。...如果我们稍后需要这部分代码,那么在存储库中,我们总是可以从先前提交中检索如果存在无法直接解决警告(例如原始类型警告),那么使用@SuppressWarnings注解注释该调用或方法。...这个定义关键在于涉及更改不会改变系统可观察行为。这意味着当我们重构代码,我们必须要有方法确保代码外部可见行为不会改变。在我们例子中,这意味着是在我们继承或自己开发测试套件中。...为了确保我们没有改变系统外部行为,每当我们进行改变,都必须重新编译和执行我们全部测试。 此外,并不是我们所做一个改变都被认为是重构。...当我们梳理代码,特别是别人代码,我们大多会添加功能,测试,然后前行,不关心我们会不会贡献软件腐烂,也不在乎我们添加到类新方法会不会导致额外混乱。

56920

node事件模块应用(译)

简单来说,使用EventEmitter,你可以监听一个事件,并且可以执行一个你绑定回调函数。...一个事件发出后,如果没有被监听,那么他也不会报错。...其实一个事件不止被监听一次,还可一个事件被监听多次,并且当事件被触发,所有监听者事件都会被触发。默认情况下,Node.js允许一个事件同时被监听10次。如果再创建Node.js会发出警告。...但是,我们可以通过使用setMaxListeners改变这个限制数。 例如,如果你运行下面的代码,你应该会看到警告信息。...然后,发出“saved-user”事件,并且对象传递数据。如果这是一个真正数据库,保存很可能是一个异步任务,这意味着与保存记录,我们就必须接受一个回调工作

42510

【Java 进阶篇】HTML DOM 事件详解

; }); 上面的代码演示了如何使用addEventListener方法为一个按钮元素添加点击事件监听器。当用户点击按钮,会触发click事件,弹出一个警告框。...按键弹起事件(keyup) 按键弹起事件在用户释放键盘上按键触发。通常用于监听用户键盘输入,并在释放键执行相应操作。...事件处理程序 事件处理程序是JavaScript函数,它们在特定事件发生执行。事件处理程序通常通过addEventListener方法将其附加到DOM元素上,以便在事件触发执行。...阻止事件冒泡 如果需要阻止事件继续向上冒泡,可以使用事件对象stopPropagation()方法。这在需要防止父元素处理同一事件非常有用。...通过检查event.target,我们可以确定用户点击是哪个元素。 示例:创建一个任务清单 让我们通过一个实际示例演示如何使用事件处理程序和事件对象创建一个简单任务清单应用。

18320

从 Vuejs 中学到了什么

应用并试图将其挂载到一个不存在 DOM 节点就会得到一个警告信息: ?...但是如果我们仔细观察会发现,foo 函数执行也没啥意义呀,就是读取了对象值,所以执行还是不执行也没有本质区别呀,所以即使把这段代码删了,也对我们应用没啥影响,那为什么 rollup 不把这段代码也作为...其实是有可能,想想一下如果 obj 对象是一个通过 Proxy 创建代理对象那么当我们读取对象属性就会触发 Getter ,在 Getter 中是可能产生副作用,例如我们在 Getter 中修改了某个全局变量...,但是对于明确知道自己不会使用选项 API 用户来说,它们就可以选择使用 __VUE_OPTIONS_API__ 开关关闭该特性,这样在打包时候 Vue 这部分代码就不会包含在最终资源中,从而减小资源体积...,接收一个回调函数作为参数,调用 foo 函数时会执行回调函数,在用户侧使用时: import utils from 'utils.js' utils.foo(() => { // ... }) 大家思考一下如果用户提供回调函数执行时候出错了怎么办

87910

从 Vuejs 中学到了什么

应用并试图将其挂载到一个不存在 DOM 节点就会得到一个警告信息: warn 从这条信息中我们得知挂载失败了,并说明了失败原因:Vue 根据我们提供选择器无法找到相应 DOM 元素(返回...但是如果我们仔细观察会发现,foo 函数执行也没啥意义呀,就是读取了对象值,所以执行还是不执行也没有本质区别呀,所以即使把这段代码删了,也对我们应用没啥影响,那为什么 rollup 不把这段代码也作为...其实是有可能,想想一下如果 obj 对象是一个通过 Proxy 创建代理对象那么当我们读取对象属性就会触发 Getter ,在 Getter 中是可能产生副作用,例如我们在 Getter 中修改了某个全局变量...但是当我们构建提供给打包工具 ESM 格式资源,我们不能直接把 __DEV__ 设置为 true 或 false,而是使用 (process.env.NODE_ENV !...,但是对于明确知道自己不会使用选项 API 用户来说,它们就可以选择使用 __VUE_OPTIONS_API__ 开关关闭该特性,这样在打包时候 Vue 这部分代码就不会包含在最终资源中,从而减小资源体积

56330

如何处理前任程序员留下代码

为了战胜这种人天性行为,我们需要采取一些小措施以避免我们代码更少地被弄脏(及时更换破掉窗户)。 一个简单方法是删除来自我们正在使用整个包或模块中所有警告。至于未使用或添加注释代码,删除。...如果我们稍后需要这部分代码,那么在存储库中,我们总是可以从先前提交中检索如果存在无法直接解决警告(例如原始类型警告),那么使用 @SuppressWarnings 注解注释该调用或方法。...这个定义关键在于涉及更改不会改变系统可观察行为。这意味着当我们重构代码,我们必须要有方法确保代码外部可见行为不会改变。在我们例子中,这意味着是在我们继承或自己开发测试套件中。...为了确保我们没有改变系统外部行为,每当我们进行改变,都必须重新编译和执行我们全部测试。 此外,并不是我们所做一个改变都被认为是重构。...当我们梳理代码,特别是别人代码,我们大多会添加功能,测试,然后前行,不关心我们会不会贡献软件腐烂,也不在乎我们添加到类新方法会不会导致额外混乱。

39220

Kotlin Flow响应式编程,StateFlow和SharedFlow

而我一直都是这个样子,写博客基本上不是为了谁而写,大部分都只是因为自己想学。但是学了不用很快又会忘记,所以经常就会通过文章形式把记录下来,算是助人又助己了。...如果只是直观地从界面上看,好像一切都是可以正常工作但是,假如我们再添加一些日志进行观察的话,问题就会浮出水面了。...但是再之前又提到了,当程序切到后台,我们希望Flow停止工作。 这该怎么区分分别是哪种场景呢? Google给出方案是使用超时机制区分。...反过来讲,这也使得程序切到后台之后,如果5秒钟之内再回到前台,那么Flow也不会停止工作但是如果切到后台超过了5秒钟,Flow就会全部停止了。 这点开销还是完全可以接受。...普通场景下,这种发送者和观察者工作模式还是很好理解但是如果在观察者还没有开始工作情况下,发送者就已经先将消息发出来了,稍后观察者才开始工作,那么此时观察者还应该收到刚才发出那条消息吗?

38610

ZYNQ从放弃到入门(十一)- XADC 报警和中断

XADC 报警和中断 Zynq SoC 监控自身电源电压和片上工作温度能力是值得深讨,我们可以在系统调试期间使用这种能力验证初始电源电压和工作温度。...如果发生警报,就会触发这些逻辑模块启动。它们还可以驱动外部指示灯(例如 LED),这些指示灯可以位于前面板上以显示设备状态。这对于在系统风扇故障等情况下提供温度视觉警告特别有用。...这些警报(总共有七个,请参见上面的 TRM 中表格)可以使用带有适当参数函数调用来启用,由 xadcps_hw.h 提供。如果需要多个报警,则将它们组合在一起。...对于此示例,没有使用任何外部模拟输入,但使用了设备内部温度测量,它是 Zynq XADC 一部分。 软件将 XADC 配置为在温度高于或低于初始加电读数上下几度发出中断。...温度读数可能不会高于中断温度,因为它会波动并且我们没有打开温度平均。 当我构建示例代码并生成启动映像在 ZYNQ 板上运行了几分钟后观察到以下结果: 如图所见,中断被触发。

1.2K40

3种适用于Python疯狂秘密武器及原因解析

使用语言(有时是库)文档建议函数名称和参数之类内容。 当然可以,但是如果编辑器可以浏览GitHub数据多年并自动完成,不仅是函数名,还可以是整行代码。...缺点很多,但也很大: 在开发周期后期,您通常会遇到错误 由于Python不断找出类型,因此代码执行效果更差 函数不稳定,因为其输入和输出可以更改数据类型而不会发出警告 交出代码会更加不稳定,因为其他人可能不知道您变量是或可能成为哪种数据类型...这些功能是喜欢原因: 注释或未调用代码 对在整个代码库中留下打印语句,注释掉代码以及未使用函数感到内gui。 这将警告,使其难以忘记,并告诉它在哪里,易于查找。...SonarLint是一个不错起点。 永远不会执行代码 与未调用代码略有不同,如果创建评估结果无法达到,这将警告。 这些问题很难发现,可能会导致数小时调试,因此这是最喜欢警告之一。...结论 如果您在此处跳过,则只是一个快速警告,除非您对这些功能有基本了解,否则可能无法正确使用它们。

89530

WinSock 完成端口模型

借用当前线程线程环境执行完成通知,也就是说要执行完成通知就必须暂停当前线程工作。...这对工作线程来说也是一个不必要性能浪费,这样我们自然就会想到,另外开辟一个线程执行完成通知,而本来线程就不需要暂停,而是一直执行自身任务。...为了解决这个问题,提出了SOCKET非阻塞模式,它不会等待连接或者收发数据操作完成,当我们调用对应accept或者send、recv时会立即返回,但是我们不知道什么时候有数据要处理,如果针对每个...节约了我们时间 重叠IO也有问题,如果使用重叠IO事件模型,也需要在合适时候等待,就好像我们虽然派了一个帮忙拿信,但是我们自己却需要停下手头上工作,询问拿信的人回来了。...而使用完成历程也存在自己问题,因为需要使用主线程资源执行历程,需要主线程暂停下来,这样就可能出现两种情况:1)有通知事件到来,但是并没有进入可警告状态;2)进入可警告状态却没有客户端发送请求。

93320

RxJS 快速入门

问题在于,传统函数式写法实在太不友好了。 传统写法下,当我们调用一个 Ajax ,就要给它一个回调函数,这样当 Ajax 完成就会调用它。当逻辑简单时候,这毫无问题。...换句话说,负责生产数据,别人可以消费生产数据。 如果你是个资深后端,那么可能还记得 MessageQueue 工作模式,它们很像。如果不懂 MQ 也没关系,还是用日常知识给你打个比方。...如果你需要这个 Promise 被消费时才执行,那就要改用接下来要讲 defer 创建器。 defer - 惰性创建流 ? 参数是一个用来生产流工厂函数。...典型用法是用来管理事件,比如当用户点击了某个按钮,你希望发出一个事件,那么就可以调用 subject.next(someValue) 把事件内容放进流中。...从图中我们可以看到两个流中内容被按照顺序放进了输出流中。前面的流尚未结束(注意竖线),后面的流就会一直等待。 这种工作方式非常像电路中串联行为,因此称其为串联创建器。

1.8K20

DevTools 不让粘贴执行代码了?

我们回想一下,当我们在网站看到某段代码想要执行试一试时候,好像很少会去考虑安全性。...所以,在近期更新中,当 Chrome DevTools 检测到没有经验用户尝试将代码粘贴到 DevTools 中就会停止执行并显示警告。 怎么判断你有没有经验呢?...DevTools 使用一个非常简单启发式方法决定是否显示 Self XSS 警告基于用户配置文件控制台历史记录。...如果个人资料在 DevTools 控制台历史记录中至少有 5 个条目,DevTools 不会通过任何警告或弹出窗口打扰你。控制台历史记录是开发者在控制台中键入和执行命令列表。...或者,如果你把代码粘贴到其他 DevTools 代码编辑器(例如 Sources 面板)中,用户体验非常相似,你会看到一个对话框警告

6.5K22

LLVM(二)——Clang插件

attrKind = propertyDecl->getPropertyAttributes(); // 拿到节点描述信息 // 如果应该使用copy但是却没有使用...// Report函数一个参数是警告报出位置,第二个参数是警告信息 // getCustomDiagID函数一个参数是警告级别...这里使用是绝对路径,但是当我们真正在项目中去使用时候,使用相对路径会更好一些。 此时,如果你编译一下,Xcode会报一个警告: ?...这是因为Clang插件需要使用对应版本去加载,如果版本不一致的话就会导致编译错误,因此我们还需要去进行编译器相关设置。...以上配置都改完之后,再运行测试工程,没有使用copy修饰NSString就会报出警告了: ? 以上。

1.5K30

瞒不住了,Prefetch 就是一个大谎言

/buy.js')).default(); }}>Buy );};但是这样做,现在你就会一个问题要解决!...当用户单击 Buy 按钮,浏览器会惰性加载 buy.js 包。根据 bundle 大小和网络速度,这可能会引入一个显著、明显延迟。那我们能做些什么改善呢?...你也不太确定,因此接着,你在 Chrome 中测试,发现一切都能正常工作但是很快,你就会得到反馈,在许多情况下,用户必须等待 Buy 按钮执行其操作。这种额外等待正是损害用户体验底线。...因此,prefetch 在某些情况下,可能导致多次请求相同资源。来自 Console 警告最后,如果某些浏览器检测到给定预取资源在 x 秒内未被使用,则会发出控制台警告。...因为浏览器会认为,你没有使用,就不应该预取

66200

瞒不住了,Prefetch 就是一个大谎言

/buy.js')).default(); }}>Buy ); }; 但是这样做,现在你就会一个问题要解决!...当用户单击 Buy 按钮,浏览器会惰性加载 buy.js 包。根据 bundle 大小和网络速度,这可能会引入一个显著、明显延迟。那我们能做些什么改善呢?...你也不太确定,因此接着,你在 Chrome 中测试,发现一切都能正常工作但是很快,你就会得到反馈,在许多情况下,用户必须等待 Buy 按钮执行其操作。这种额外等待正是损害用户体验底线。...因此,prefetch 在某些情况下,可能导致多次请求相同资源。 来自 Console 警告 最后,如果某些浏览器检测到给定预取资源在 x 秒内未被使用,则会发出控制台警告。...因为浏览器会认为,你没有使用,就不应该预取

30320

拥抱分布式上下文传播

如果你遵循良好DevOps实践,那么你可能已经进行了监视,以度量服务产生错误率,并在错误率超过某个阈值发出警报。但是,你只在生产受到影响才有兴趣获得此警告,而不是因为一些上游服务运行压力测试。...然而,如果我们限制分布式上下文传播以这种方式使用,那么人们就会找到传递此信息其他方法,只不过是以一种更临时、更不可靠方式。...然而,当我们在堆栈底层移动到共享系统(如存储或消息传递平台),将这些系统上开销划分为LOB将变得困难得多。 上下文传播救急!...流量优先级/QoS 由于LOB流量标记同样主要用于“观察”函数(度量和度量),所以让我们考虑上下文传播在“控制”函数一个应用。现代应用程序有许多工作流,用户可以通过应用程序进行跟踪。...允许我们将任意元数据与每个请求关联起来,使其在分布式调用图中每个点上可用,透明于对处理该请求所涉及服务。在这篇文章中,讨论了一些使用上下文传播解决实际问题例子。

1.3K40

用Numba加速Python代码

加速Python循环 Numba最基本用途是加速那些可怕Python for循环。 首先,如果在Python代码中使用循环,首先检查是否可以用numpy函数替换总是一个好主意。...当我们看到一个函数包含用纯Python编写循环,这通常是numba能够提供帮助一个好迹象。查看下面的代码,看看它是如何工作。 ? 我们代码只增加了两行。...第一个是导入jit修饰器import语句。第二个问题是我们在函数使用了jit修饰器。 将jit装饰器应用于函数向numba发出信号,表示我们希望将转换应用于机器码到函数。...但是即使是Numpy代码也没有Numba优化后机器代码快。下面的代码将执行与前面相同数组操作。...这一次,我们在函数上方添加了vectorize装饰器,向numba发出信号,应该对我们函数执行机器码转换。 ? vectorize装饰器接受两个输入。

2.1K43

Visual Studio 2008 每日提示(二十九)

操作步骤: 菜单:工具+选项+调试+常规,在“启动仅代码”项下面,选中“启动若没有用户代码发出警告”。...如果不选中此项,你可以使用不匹配源文件,不过在调试时候,当前行高亮部分不会全部延伸到整行,不匹配部分不会高亮。...有一个选项在模块加载时取消jit优化”项。 如果代码设置了优化,你想调试,就启动该项。如果是没有优化,就不必了。 评论:一般都启用,优化代码并不能保证逻辑正确。...,将会如下如下警告 如果你不想看到这个警告,操作如下 菜单:工具+选项+调试+常规,不选中“启动若无符号则发出警告”项。...IE中禁用了脚本调试,在vs调试时候会出现如下警告对话框 如果你想隐藏这个对话框,操作如下 工具+选项+调试+常规,不选中“如果启动禁用了脚本调试,发出警告”项。

1.2K50
领券