首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

代码审查|这段代码为什么复制文件夹总是“成功”?

最近开始一个人负责整个项目的全栈开发和维护,工作中没了和同事交叉 code review 的环节,所以就打算,如果工作中遇到一些比较典型的代码,包括好味道和坏味道,就拿出来分析下,与大家一起交流,作为另一种形式的...这天遇到这样一个问题:在 Android 手机上复制 assets 里的文件夹到手机里,实际并没有拷贝完成,但代码总是显示成功,看了下代码,使用的是阿里云播放器 Android SDK 的 Demo 里的一个工具类...isSuccess = true; } catch (Exception e) { isSuccess = false; } } } 这段代码使用起来若不谨慎...不可预期; 结果正确性:因为 Exception 全都被 catch 住了,这样如果 srcPath 是一个文件夹,递归调用方法自身后,最外层总是会将 isSuccess 设置为 true,导致最终结果总是显示成功...如果由我来写这段代码,我会做这样的修改: 将类改为工具类,公开的方法都是静态方法,不需要单例控制; 方法执行是否成功,由返回值、是否抛出异常来表示,不使用成员变量记录; 拷贝过程中,记录拷贝成功的文件列表

10210

为什么学了那么多门语言,我还是编不好这段代码

2 如果你不能用一种编程语言的基本特性写出好代码,那换成另外一种语言也无济于事,你会写出同样差的代码。比如,你的 Java 代码写得很糟糕,那么换成 Go、Ruby,你的代码也会一样糟糕,甚至更差。...所以,基本掌握了一门语言的功能和语法特性之后,要去做实践和练习,能写生产代码了,再回过头来去看编程语言的本质,了解这门编程语言的设计原理,能力边界和高级功能,这样有助于你更快更好掌握其他编程语言。...平时工作中我对 Ruby、Python、C++、和 Java 的熟练程度差不多,但是面试中使用 Ruby 或者 Python 答题,写代码的时间估计是那两者的一半。...如果你的数据访问模式写得很差,轻则代码性能一塌糊涂,重则引发 Bug,而涉及数据的问题,Bug 等级都比较高,后果可能很严重。...6 无论使用什么语言,工程师都应该能够基于这种语言搭建测试框架,写好测试代码和写业务代码一样重要,甚至更重要。

33710

我说我为什么抽不到SSR,原来是这段代码在作祟...

我说我为什么抽不到SSR,原来是加权随机算法在作祟 ★阅读本文需要做好心理准备,建议带着深究到底的决心和毅力进行学习! ” 灵魂拷问 为什么有 50% 的几率获得金币?...为什么有 40% 的几率获得钻石? 为什么只有 9% 的几率获得装备? 为什么才有 1% 的几率获得极品装备? 是人性的扭曲,还是道德的沦丧,请和我一起走进今日说法 !...代码如下。...我们的代码最终都是经过编译系统转换成可执行二进制文件。汇编阶段读取的是词法、语法单元输出的结果。而内联是编译器对词法、语法分析器对源代码做出的分析,然后产生二进制代码这个过程叫内联。...源代码 https://github.com/guowei-gong/weighted-random

1.3K20

pycharm代码运行不显示结果_pycharm运行配置错误

于是百思不得解的我百度了一下,找到了原因:pandas是有相关的输出显示设置的!直接放出来! 抱歉,我这是做在onenote上面的笔记,是截图来的,可能视觉效果有些差!...value = '参数值' pd.set_option('参数名', value) # 设置相关显示选项 pd.get_option('参数名', value) # 获取相关显示选项 pd.reset_option...('参数名', value) # 恢复默认相关选项 我们观察一下打印结果可以判断出来,咱们应该是最大行数和最大宽度被限制了,因此我们只要写下这三行代码: pd.set_option('display.max_columns...', None) # 显示完整的列 pd.set_option('display.max_rows', None) # 显示完整的行 pd.set_option('display.expand_frame_repr...我加上了这样的一行代码之后: pd.set_option('display.max_columns', None) # 显示完整的列 pd.set_option('display.max_rows'

92620

为什么vjudge上他人公开的代码要以图片形式显示?

vjudge用图片来显示代码,应该是为了避免抄袭。在较低水平的oier中,已经有交别人的代码来通过题目的风气。举个例子,洛谷上抄袭代码情况极其严重,而uoj相对好很多。...我有一个同学大约在NOIP二等奖的水平,现在五分钟就能A掉一个HNOI级别的题目:先用20秒钟打13个头文件,然后把别人代码抄了,一交了事。...但是为什么他们要这样做?可能大部分原因是为了自我欺骗——“我今天做了xxx”,炫耀反而在其次。...为了避免上述情况的发生,vjudge甚至在代码里加一些颗粒来干扰自动识别软件(例如“汉王OCR”),实在想得很周到。 公开自己的代码,意义是让别人了解自己使用的算法,而不是让别人拿去交题。

84220

为什么阿里代码规约要求避免使用 Apache BeanUtils 进行属性复制

缘起 有一次开发过程中,刚好看到小伙伴在调用 set 方法,将数据库中查询出来的 Po 对象的属性拷贝到 Vo 对象中,类似这样: ?...这种操作非常容易出错,因为对象的属性太多,有可能会漏掉一两个,而且肉眼很难察觉。 类似这样的操作,我们很容易想到可以通过反射来解决。...阿里代码规约 当我们开启阿里代码扫描插件时,如果你使用了 Apache BeanUtils.copyProperties 进行属性拷贝,它会给你一个非常严重的警告。...但是它们为什么会有这么大的差异呢?...包装类默认值 在进行属性拷贝时,低版本CommonsBeanUtils 为了解决Date为空的问题会导致为目标对象的原始类型的包装类属性赋予初始值,如 Integer 属性默认赋值为 0,尽管你的来源对象该字段的值为

4.2K30

我说我为什么抽不到SSR,原来是这段代码在作祟…丨技术创作特训营第一期

然后通过 rand.Intn() ,获取一个随机数,就完成了,代码如下。...代码如下。...但是我们必须写很多的 if else 代码,这看起来太难看了,为了避免编写过多的 if else 代码,衍生出了方案三。 不必将 r 与所有的范围进行比较。...源代码 https://github.com/guowei-gong/weighted-random 【选题思路】 在游戏开发的过程中,常见的场景就是通过抽奖来吸引玩家氪金,对于抽奖怎么实现的,可能读者不会感兴趣...【写作提纲】 1、随机加权概念介绍(介绍抽奖这个功能,从程序员的角度应该叫什么,再结合场景描述,什么地方会用到这个功能) 2、开始给出随机加权的实现,附带代码与描述,并且由浅入深,每一个步骤的引出,都和上一个步骤的缺陷有关或者说比上一个步骤有更好的做法

33150

错误记录】Kotlin 代码编译时报错 ( Variable ‘name‘ must be initialized | 初始化块定义在所有属性之后 )

文章目录 一、报错信息 二、问题分析 三、解决方案 ( 初始化块定义在所有属性之后 ) 一、报错信息 ---- 在 Kotlin 中 , init 初始化块 要 定义在所有成员属性之后 ; 如果在 init...初始化块 中 , 使用到了 成员属性 , 有可能出现 编译时报错信息 ; 报错代码示例 : class Hello{ init { val name1 = name.capitalize...Hello() { String var1 = StringsKt.capitalize(this.name); this.name = "Tom"; } 这里先调用 name 属性..., 然后再为 name 属性赋值 ; 这是错误的根本原因 ; 三、解决方案 ( 初始化块定义在所有属性之后 ) ---- 将属性定义在 初始化块 之前 ; 代码示例 : class Hello{..., 在代码中 , 先为 name 赋值 , 然后在 构造函数中调用 name 属性 ; public final class Hello { @NotNull private String

79820

错误记录】Kotlin 代码运行时报错 ( 成员属性初始化顺序是按照从上到下顺序进行的 , 上面的属性不要调用下面未进行初始化的属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性初始化顺序是按照从上到下顺序进行的 , 上面的属性不要调用下面未进行初始化的属性 ; 一、报错信息 ---- 执行下面的代码...initName() = "Tom $age" } fun main() { var h = Hello(18) println(h.name) } 得到的结果是 : Tom 0 在上述代码的构造函数中...类中的属性赋值 init 初始化块 中的代码执行 次构造函数 中的代码执行 在下面的代码中 , class Hello(_age: Int){ var name: String = initName..., 开始对 类中的属性赋值 , 先给 name 属性赋值 , 该赋值调用了 initName 函数 , 在该函数中调用了 age 成员属性 , 但是此时 age 属性还没有赋值 , 使用的是默认值 0...; 之后才对 age 进行赋值 ; 因此最终打印出的 name 结果是 Tom 0 ; 三、解决方案 ---- 成员属性初始化顺序是按照从上到下顺序进行的 , 上面的属性不要调用下面未进行初始化的属性

41810

你不知道的this(1)

随着使用模式越来越复杂,显示传递上下文对象会让代码变得越来越混乱,使用this则不会这样。当我们介绍到原型和对象的时候,我们就会明白函数可以自动医用合适的上下文对象多么重要。...count,但是函数内部代码this.count中的this并不是指向那个函数对象,所以虽然属性名相同,根对象却并不相同。...负责的开发一定会问 :"如果我增加的count属性和预期的不一样,那我增加的是哪个count?" 实际上,如果他深入探索的话,他就会发现这段代码在无意间创建了一个全局变量count,他的值为NaN。...bar() { console.log(this.a); } foo(); // ReferenceError: a is not defined 首先,这段代码试图通过this.bar()来引用...此外,编写这段代码的开发者还试图使用this联通foo()和bar()的词法作用域,从而让bar()可以访问foo()作用域里的变量a。

34210

错误记录】Kotlin 代码运行时报错 ( 在 init 初始化块中调用还未初始化的成员属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性 在 init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常..., 没有报错 ; 二、问题分析 ---- 从 初始化 角度分析 上述代码的执行顺序 , Kotlin 类 对象在实例化 时会执行一系列的 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 中属性赋值...类中的属性赋值 init 初始化块 中的代码执行 次构造函数 中的代码执行 首先 , 上述代码中没有主构造 函数 , 因此该项忽略 ; 然后 , 执行属性的赋值 , 代码中定义了 name 属性 ,...} 该问题的本质就是 , 成员属性 在 init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ; 三、解决方案 ---- 调换...初始化代码块 中的代码顺序 , 先给 name 成员赋值 , 然后再执行 调用 name 成员的方法 ; class Hello{ var name: String fun nameFirstLetter

1.7K10

语义耦合(Semantic Coupling)

我们当然都知道这会产生耦合,于是小伙伴试图定义一些属性、变量或接口来解决这个耦合。虽然在代码的静态分析中,这一的耦合消失了,但我始终觉得不妥。觉得耦合依然存在,只是不再能被静态分析了。...交换带有隐含意义的数据 在这段代码中,Bar 依赖于 Foo,他们都依赖于 FooInfo。至少静态代码分析工具是这么认为的。...,ViewModel 试图向 View 发送播放删除动画的消息和显示错误提示的消息,让 View 来播放动画并显示这些错误。...如果进行静态代码分析,ViewModel 依然对 View 没有任何依赖,但它们依然存在语义耦合。因为已经可以通过阅读代码来明白 ViewModel 正在试图播放动画和显示错误提示框。...如此改动,那么 ViewModel 的代码中将不再包含任何期望 View 执行的逻辑,View 自己决定删除元素时是否播放动画(还是决定元素变灰),自己决定是否显示错误提示(还是决定自动纠正)。

76410

磁盘分析工具看到有个文件夹占用空间很大,可在那个文件夹上右键查看属性显示的大小远小于wiztree看到的情况,为什么

磁盘空间占用分析的免费工具有很多,比如wiztree等图片问题:wiztree明明看到有个文件夹占用空间很大,可在那个文件夹上右键查看属性显示的大小远小于wiztree看到的情况分析:在 Windows...中,没有直接的命令可以在右键单击文件夹属性时完全隐藏文件大小,当您查看文件夹属性时,Windows 会自动统计文件夹及其子文件夹中的所有文件大小,包括隐藏文件。...然而,您可以尝试通过设置文件夹的安全权限来限制其他用户查看这些文件(大小),从而在文件夹属性上(比如文件夹大小、子文件夹/文件数量)做了手脚,但底层的空间占用并不会受此影响。...以下是如何使用 PowerShell 为文件夹设置安全权限的示例在执行powershell前,右键属性能看到文件数、大小,执行后,大小为0、文件数为0$folderPath = "C:\testtesttest...None", "Deny")$acl.AddAccessRule($denyRule)Set-Acl -Path $folderPath -AclObject $acl在执行powershell前,右键属性能看到大小

33230

【前端技能树-需要避免的坑】Javascript 开发者容易在花田里犯的错

为什么? 在大多数其他语言中,上面的代码都会导致类似这样的错误。因为变量 i 的“生命周期”(即作用域)被限制在 for 循环语句中。...但是这是为什么呢? 让我们重新更详细地检查这段代码一下,发现: 每个 theThing 对象都包含大小为 1MB 的 longStr 对象。...在 for 循环中错误地使用函数定义 考虑这段代码: const elements = document.getElementsByTagName('input'); const n = elements.length...当严格模式检测到对象中的重复命名属性或函数的重复命名参数(例如,函数foo(val1, val2, val1){})时,会抛出错误,从而捕获代码中几乎可以肯定的错误,否则可能会浪费大量时间来跟踪。...无效使用 delete 时抛出错误。删除操作符(用于从对象中删除属性)不能用于对象的不可配置属性。当尝试删除不可配置的属性时,非严格模式代码将静默失败,而在这种情况下,严格模式将抛出错误

16711
领券