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

【翻译】Kotlin致简代码之路

在文章的最后,我会最终讨论 Kotlin 是走向 “一个黑暗之路还是光明之路”。...Code " + code); } 事实上这段代码并没有做很多事情。它只是处理一些错误分类( null 空指针响应和错误的 HTTP 状态码 )。它甚至没有做实际的映射机制。...在 Java 中的一个解决方案就是把 try 分解成子程序。尽管我们可以给这个子程序一个具有很好描述性的名称,但有时候还是有点过头了。 单函数表达式 另外一个很贴心的特性是单函数表达式。...如果左边是 null 那么右边的部分(“ default ”字符串)会被赋值。 空安全实践 让我们假定有一个嵌套域的层级结构:一个订单有一个客户属性,客户拥有一个地址,因此也就有了城市的信息。...这能够满足编译器的要求。但是当这个链条里有一个元素是空值得时候,就会抛出一个 NullPointerException 的异常。还是让我们力求另一个更好的方式吧。

1.4K30

Python程序员经常犯的10个错误,这些坑你踩过吗?

在上面的代码中,例如,人们可能会希望反复(即不明确指定bar参数)地调用foo()时总返回'baz',由于每次foo()调用时都假定(不设定bar参数)bar被设置为[](即一个空列表)。...因此,bar参数在初始化时为其默认值(即一个空列表),即foo()首次定义的时候,但当调用foo()时(即,不指定bar参数时)将继续使用bar原本已经初始化的参数。...所以在上面的代码中,由于class C中的x属性没有找到,它会向上找它的基类(尽管Python支持多重继承,但上面的例子中只有A)。换句话说,class C中没有它自己的x属性,其独立于A。...在一个except语句中捕获多个异常的正确做法是将第一个参数指定为一个含有所有要捕获异常的元组。...,从一个列表或者数组中删除元素,对于任何有经验的开发者来说,这是一个众所周知的错误。

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

    PHP安全基础第一章

    例如,在用户进行重要操作前进行重新用户认证就是一个很好的习惯,尽管你的用户认证逻辑里面没有已知缺陷。...> 当然,函数basename( )可以替代上面的所有逻辑,同时也能更安全地达到目的。不过重要点是在于任何试图纠正非法数据的举动都可能导致潜在错误并允许非法数据通过。只做检查是一个更安全的选择。...使用这个方法,一个错误只会导致你把合法的数据当成是非法的。尽管不想犯任何错误,但这样总比把非法数据当成合法数据要安全得多。通过减轻犯错引起的损失,你可以提高你的应用的安全性。...尽管这个想法在理论上是很自然的,但历史证明,这是一个很有价值的方法。 如果你能正确可靠地识别和过滤输入,你的工作就基本完成了。...> 尽管在这种情况下可以用正则表达式,但使用PHP内置函数是更完美的。这些函数包含错误的可能性要比你自已写的代码出错的可能性要低得多,而且在过滤逻辑中的一个错误几乎就意味着一个安全漏洞。

    1.6K30

    数据库查询优化

    但第一个是不可SARG的(因为使用了函数)将运行得慢些,而第二个是可SARG的,将运行得快些。...还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。...为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。...虽然这些不直接提升应用程序的性能,通过减少代码量和减少调试时间来提升开发人员的效率。 * 存储过程能封装逻辑。你能够改变存储过程代码而不影响客户端(假定你保持参数相同也不移除任何结果集的列)。...这是因为SQLServer在执行以sp_为前缀的任何一个存储过程时缺省地首先试图在Master数据库里寻找,尽管那儿没有,这就浪费了寻找存储过程的时间。

    4.3K20

    Stack Overflow上最火的答案居然有Bug?

    无论是 KB、MB 还是 GB,所有单位的本质实际都是 1000 的幂(当然,按 IEC 标准来讲是 1024),意味着应该可以使用对数而非循环来计算正确的量级单位。 基于以上思路,修改答案为: ?...当然,这段代码可读性不高,而且 log/pow 也可能在一定程度上影响执行效率,但至少这里没有循环,几乎不涉及分支,所以还是比较整洁的。...答案的早期版本中确实有这个问题,但很快就得到了修复。 那么,是不是 exp 可以为 0 会导致 charAt(exp-1) 发生错误?不是的。...第一个 if 语句也涵盖了这种情况,因此 exp 值将始终至少为 1。 那就只剩最后一种情况了,输出结果中是否存在某些奇怪的舍入错误?这正是我们接下来要讨论的部分…… ? 太多个9 ?...尽管 999999 比 999.9 x 10001 更接近于 1000 x 10001,但根据规范,1000 的“有效位数”超出了范围。正确的结果应该是“1.0 MB”。 最终版本: ? ?

    69520

    敏捷微服务在几分钟内

    在本文中,我们将解决以下问题: 敏捷宣言:将可运行的软件的关键敏捷宣言原则,作为客户协作和变更响应(快速迭代)的基础是一个正确的目标,但关键的挑战是:现在如何获得可运行软件的敏捷宣言?...例如,设想从一个正在运行的(空的)应用程序开始,并添加一个按钮来添加一个表。我们点击它,并添加客户表。...在用户心目中,表格和屏幕之间没有区别 - 他们关注业务成果。 现在我们添加一个订单网格(列表)到我们新创建的客户页面。系统很容易推断订单对客户有外键,并自动创建表格和外键。我们将在下面看到一个例子。...尽管我们不会在本文中讨论,但共同的第一步是指定API访问授权,包括直到行/列级别的细粒度安全性。 API创建:点击并点击 与现有数据库相同,数据库创建将创建一个默认API。...如果验证返回false,则事务将回滚,并返回一个异常并显示错误消息。 图7 - 选择规则类型。 图8 - 验证规则。

    1.3K30

    最失败的 JavaScript 面试问题

    一个正确回答了这个测验的开发者的内部对话可能是这样的: 给定 0 延迟,我们传递给 setTimeout 的函数会同步调用还是异步调用?...尽管 setTimeout 函数有零延迟,回调函数是异步调用的。引擎会将回调函数放在回调队列(宏任务队列)中,并在调用栈为空时将其移至调用栈。...所以,答案是:helper.js index.js 3 提升 另一个热门的面试题目是提升。 小测验1:只有40%的正确答案 尽管选定的小测验与现实脱节,但它完美地解释了提升的机制。...第一个 then 处理程序抛出一个错误(意味着 — 返回一个被拒绝的promise)。 下一个 then 处理程序由于错误被抛出而没有触发,取而代之的是执行转移到下一个 catch。...catch 处理程序打印一个错误并返回一个空的 promise。像 then 处理程序一样,catch 处理程序总是返回一个 promise。

    17920

    论文Express | AI的智商(IQ)怎么测?这其实是个策略比赛

    考试中给出的问题是随机选择的,但所有考生都会遇到同样的问题。此外,解决问题需要进行逻辑思考,因为我们的目标是招收那些具有逻辑思维的学生,而不是偶然蒙对正确答案的幸运学生。...“真实生命”应该没有不正确的移动。因此,所有的奖励值是不正确移动的三元素都会被移除,剩下的就是真实生命。。...动作”(moment)由一系列步骤组成,而在这些步骤中,只有最后一步是正确的,除此之外,其他所有的步骤都将是错误的。...应该指出的是,世界的策略不依赖于错误的动作。因此,我们可以把世界的策略想象成现实生活的函数。相反,设备的策略将取决于不正确的移动(这些移动将提供设备使用的附加信息)。...只有当图灵循环,即在没有到达最终状态的情况下执行1000步以上,或崩溃(例如,当堆栈为空时调用返回命令)时才会返回此奖励。 符号的数量尽可能的满足编码、行动和观察所需。

    46641

    算力共享中数据切片:按照神经网络层数;算力共享-策略

    这里的抽象方法是 partition,它接受一个 Topology 类型的参数并返回一个 Partition 类型的列表。...这一步是多余的,因为上面的逻辑已经确保了最后一个分区会覆盖到最后一层,除非 partitions 是空的或者最后一个分区的 end 小于1但不为0,但通常这种情况下,partitions 的设计会避免这种情况...如果 partitions 列表为空或所有分区的 end 值都小于1,则该函数可能返回一个空的 shards 列表,除非逻辑被进一步修改以处理这种特殊情况。...这一步是多余的,因为上面的逻辑已经确保了最后一个分区会覆盖到最后一层,除非 partitions 是空的或者最后一个分区的 end 小于1但不为0,但通常这种情况下,partitions 的设计会避免这种情况...如果 partitions 列表为空或所有分区的 end 值都小于1,则该函数可能返回一个空的 shards 列表,除非逻辑被进一步修改以处理这种特殊情况。

    16420

    并发编程原理剖析——浅谈偏向锁、轻量级锁、重量级锁

    具体如下: 当前线程竞争锁失败时,打算阻塞自己 不直接阻塞自己,而是自旋(空等待,比如一个空的有限for循环)一会 在自旋的同时重新竞争锁 如果自旋结束前获得了锁,那么锁获取成功;否则,自旋结束后阻塞自己...如果不仅仅没有实际竞争,自始至终,使用锁的线程都只有一个,那么,维护轻量级锁都是浪费的。偏向锁的目标是,减少无竞争且只有一个线程使用锁的情况下,使用轻量级锁产生的性能消耗。...“偏向”的意思是,偏向锁假定将来只有第一个申请锁的线程会使用锁(不会有任何线程再来申请锁),因此,只需要在Mark Word中CAS记录owner(本质上也是更新,但初始值为空),如果记录成功,则偏向锁获取成功...锁分配和膨胀过程 重申,这部分主要是根据网上的多方资料整理。核心是这位巨巨整理的流程图,相当详细,基本符合逻辑。 前面讲述了内置锁在使用过程中的一些基本问题和解决方案,实现原理一笔带过。...内置锁只能沿着偏向锁、轻量级锁、重量级锁的顺序逐渐膨胀,不能“收缩”。这基于JVM的另一个假定,“一旦破坏了上一级锁的假定,就认为该假定以后也必不成立”。

    58210

    写了个数据查询为空的 Bug,你会怎么办?

    大家在开发时,遇到的一个典型的 Bug 就是:为什么数据查询为空?对应的现象就是:前端展示不出数据、或者后端查询到的数据列表为空。...遇到此类问题,其实是有经典的解决套路的,下面鱼皮给大家分享如何高效解决这个问题。只需 4 个步骤:解决步骤1、定位问题边界首先要定位数据查询为空的错误边界。说简单一点,就是要确认是前端还是后端的锅。...如果数据库直接执行语句都查不出数据,那就确认是查询条件错误了还是数据库本身就缺失数据。...4、后端验证数据处理逻辑如果数据库查询出了结果,但最终响应给前端的数据为空,那么就需要在数据库查询语句后继续逐行 Debug,验证是否有过滤数据的逻辑。...比较典型的错误场景是查询出的结果设置到了错误的字段中、或者由于权限问题被过滤和脱敏掉了。最后以后再遇到数据查询为空的情况,按照以上步骤排查问题即可。

    38210

    写了个数据查询为空的 Bug,你会怎么办?

    大家在开发时,遇到的一个典型的 Bug 就是:为什么数据查询为空? 对应的现象就是:前端展示不出数据、或者后端查询到的数据列表为空。...在浏览器中按 F12 打开浏览器控制台,进入网络标签,然后刷新页面或重新触发请求,就能看到请求的信息了。 选中请求并点击预览,就能看到后端返回结果,有没有返回数据一看便知。...如果数据库直接执行语句都查不出数据,那就确认是查询条件错误了还是数据库本身就缺失数据。...4、后端验证数据处理逻辑 如果数据库查询出了结果,但最终响应给前端的数据为空,那么就需要在数据库查询语句后继续逐行 Debug,验证是否有过滤数据的逻辑。...比较典型的错误场景是查询出的结果设置到了错误的字段中、或者由于权限问题被过滤和脱敏掉了。 最后 以后再遇到数据查询为空的情况,按照以上步骤排查问题即可。

    30150

    【Python】已解决:IndexError: list index out of range

    已解决:IndexError: list index out of range 一、分析问题背景 在Python编程中,IndexError: list index out of range 是一个常见的错误...这个错误通常出现在尝试访问列表(list)中不存在的索引时。该错误会导致程序运行中断,需要及时修复。本文将详细分析这一错误的背景信息、可能出错的原因,并通过代码示例展示如何正确解决这一问题。...空列表:尝试访问一个空列表中的元素。 动态修改列表:在迭代过程中动态修改列表,导致索引超出范围。 逻辑错误:程序逻辑错误导致计算出的索引值不正确。...三、错误代码示例 以下是一个可能导致该错误的代码示例: grades = [85, 90, 78] # 访问一个不存在的索引 try: print(grades[3]) except IndexError...代码逻辑检查:确保程序逻辑正确,避免计算出错误的索引值。

    1.6K10

    数字硬件建模SystemVerilog(八)-端口声明

    组合样式端口列表,组合样式端口列表将每个端口的完整声明放在端口列表括号内。大多数工程师都喜欢这种风格。 请注意,每个端口声明都用逗号分隔,并且列表中的最后一个端口在右括号前没有逗号。...未指定大小No size specified-默认大小是端口数据类型的默认大小。该条例;逻辑和位数据类型默认为1位宽。 下面的代码片段不是真实的RTL编码样式,但用于说明模块端口声明的隐式默认值。...尽管前面代码段中的端口声明是可综合的,但对于可综合的RTL模型,不建议使用这种编码样式。 继承的端口声明。端口的方向、类型、数据类型、有无符号或大小的显式声明可以由端口列表中的后续端口继承。...传统的Verilog会为所有端口假定一种端口类型wire,除非该端口被显式声明为reg,这将推断出一个变量。工程师必须小心地使用显式端口声明,以确保每个端口具有模块内功能的正确类型和数据类型。...只需将所有端口声明为logic数据类型,并让语言正确推断出正确的网络或变量类型。SystemVerilog几乎在所有情况下都能正确推断出网络或变量。

    2.2K50

    浅谈偏向锁、轻量级锁、重量级锁

    具体如下: 1、当前线程竞争锁失败时,打算阻塞自己 2、不直接阻塞自己,而是自旋(空等待,比如一个空的有限for循环)一会 3、在自旋的同时重新竞争锁 4、如果自旋结束前获得了锁,那么锁获取成功;否则,...如果不仅仅没有实际竞争,自始至终,使用锁的线程都只有一个,那么,维护轻量级锁都是浪费的。偏向锁的目标是,减少无竞争且只有一个线程使用锁的情况下,使用轻量级锁产生的性能消耗。...“偏向”的意思是,偏向锁假定将来只有第一个申请锁的线程会使用锁(不会有任何线程再来申请锁),因此,只需要在Mark Word中CAS记录owner(本质上也是更新,但初始值为空),如果记录成功,则偏向锁获取成功...2、内置锁只能沿着偏向锁、轻量级锁、重量级锁的顺序逐渐膨胀,不能“收缩”。这基于JVM的另一个假定,“一旦破坏了上一级锁的假定,就认为该假定以后也必不成立”。...另外,当重量级锁被解除后,需要唤醒一个被阻塞的线程,这部分逻辑与ReentrantLock基本相同 简化版 上图记载的很详细,也有Mark Word的图解。

    56620

    简明数据科学(3):你信吗?猜猜看哪!

    (“反间”机制也是同理,技能虽强可惜大都督还是输给了诸葛村夫) 步骤1:做出假定 不同类型的假设检验有不同的假定。假定和数据分布、取样策略和数据是否线性有关。...事实:他不是一个透视。 测试结果:埃西铎/甘道夫是透视。事实:他不是一个透视。 测试结果:埃西铎/甘道夫不是透视。事实:他是一个透视。 测试结果1、2正确,3、4错误。...测试结果3推翻了原假设,尽管它与原假设事实相符。这是一个假阳性(false positive),这种错误也被称作I型错误。 测试结果4接受了原假设,尽管它与原假设事实不符。...这是一个假阴性(false negative),这种错误也被称作II型错误。 如同所有的统计测试,假设检验必须应对这种不确定性,它必须应对概率。世上没有绝对真理。...对于埃西铎而言:p值大于设定的显著性水平(10% > 5%)。尽管平均而言,他已经正确地预测了八张牌;但统计学的结论如下: 结论:没有实质性的证据否定原假设。原假设不能被推翻。

    76930

    聊一聊软件测试的原则有哪些

    如果某个测试用例的预期结果事先没有得到定义,由于“所见即所想”现象的存在,某个似是而非、实际上是错误的结果可能会被解释成正确的结论。...换句话说,尽管“软件测试是破坏性”的定义是合理的,但人们在潜意识中仍然渴望看到正确的结果。克服这种倾向的一种方法,就是通过事先精确定义程序的预期输出,鼓励人们对所有的输出进行仔细检查。...原则4:应当彻底检查每个测试的执行结果。这个原则可能是最显而易见的原则,但也同样常常被忽视。我们见过大量的例子,即便错误的症状在输出清单中可以清楚地看到,但还是没有找出那些错误来。...原则8:计划测试工作时不应默许假定不会发现错误。项目经理经常容易犯这个错误,这也是使用了不正确的测试定义的一个迹象—也就是说,假定“测试是一个证明程序正确运行的过程”。...该原则的另一个说法是,错误总是倾向于聚集存在,而在一个具体的程序中,某些部分要比其他部分更容易存在错误,尽管没有人能够对这种现象给出很好的解释。

    11510

    【计网不挂科】计算机网络第五章< 传输层 >习题库(含答案)

    以下选项错误的是()。...答案: 空 1: 53 题号:26405 2.3 当运输层采用面向连接的()协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。...答案:错误 题号:26437 3.2 运输层为应用进程之间提供端到端的逻辑通信。...答案:正确 题号:26459 3.24 当发送方的TCP再传输数据过程中,连续收到了对方发送的对已发送的同一个报文段连续的三个确认,表示网络很有可能没有发生拥塞,此时应采用快重传和快恢复算法。...64KB时发生超时重传,并假定后续TCP报文段都能成功传输,则发送端发送窗口重新回到64KB所需要的时间为()毫秒。

    14310

    教你写出可读性高的Python代码

    一般概念 明确代码意义 尽管 Python 可以写出从各种意义上来说都像是黑魔法的代码,但最简单直白的表达才是正道。...通常,移除一个用作『以防万一』但从未使用的可选参数(以及它在函数中的逻辑),比添加一个所需的新的可选参数和它的逻辑要来的困难。 任意参数列表 是第三种给函数传参的方式。...如果函数要求一系列待定的命名参数,我们可以使用 **kwargs 的结构。在函数体中, kwargs 是一个字典,它包含所有传递给函数但没有被其他关键字参数捕捉的命名参数。...在函数中返回结果主要有两种情况:函数正常运行并返回它的结果,以及错误的情况,要么因为一个错误的输入参数,要么因为其他导致函数无法完成计算或任务的原因。...这将帮助扁平化函数的结构:我们假定在『因为错误而返回』的语句后的所有代码都能够满足函数主要结果运算。这种类型的多发挥结果,是有必要的。

    1.3K20

    谷歌:LLM找不到推理错误,但能纠正它

    自我校正是指由生成输出的同一模型来完成校正。尽管 LLM 没有发现错误的能力,但本文表明:如果能提供有关错误的信息(如通过一个小型的监督式奖励模型),LLM 可以使用回溯方法校正输出。...研究者为此收集并发布了一个 CoT 类型的轨迹信息数据集 BIG-Bench Mistake,该数据集由 PaLM 生成,并标注了第一个逻辑错误的位置。...这个加权 F1 分数表明,对于确定最终答案的正确性而言,通过 prompt 寻找错误是一个很糟糕的策略。 回溯 Huang 等人指出 LLM 无法在没有外部反馈的情况下自我校正逻辑错误。...这些分数结果表明:校正 incorrect_ans 轨迹的收益大于改变原本正确的答案所造成的损失。此外,尽管随机基准也获得了提升,但它们的提升显著小于使用真正错误位置时的提升。...这表明尽管更高的准确度能得到更好的结果,但即便没有黄金标准的错误位置标签,回溯也依然有效。

    27810
    领券