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

代码太烂了!你以为真想写“垃圾代码

:现在项目代码太烂了,前人留下了很多坑,实在忍受不了了,所以选择离职。...3、何时重构 任何情况下都反对专门拨出时间进行重构。重构本来就不是一件应该特别拨出时间做事情,重构应该随时随地进行。...把所有需要修改代码放进同一个类中,如果眼下没有合适类可以安置这些代码就创造一个。...将这些测试合并为一个条件表达式,并将这个条件表达式提炼成一个独立函数。 3、合并重复条件代码 在表达式每个分支上都执行了相同一段代码。将这段重复代码搬移到条件表达式之外。...10、塑造模板函数 子类中某些函数以相同顺序执行类似操作,但各操作细节略有不同。将操作放进独立函数(保持签名相同),然后将它们移至超类。

93430

只因少写一个代码上线后炸了!

代码炸了 前一段时间,项目紧急迭代,临时加入了一个新功能:用户通过浏览器在系统界面上操作,然后Java后台代码做一些数据查询、计算和整合工作,并对第三方提供了操作接口。...,直接链式取值必定有问题,因为中间只要某一个环节对象为 null,则代码一定会炸,并且抛出 NullPointerException异常,然而俄罗斯套娃式 if判实在有点心累。...解释一下执行过程: ofNullable(province ) :它以一种智能包装方式来构造一个 Optional实例, province是否为 null均可以。...;反之则直接返回上一步中单例 Optional包装对象 orElse(xxx ):很好理解,在上面某一个步骤值转换终止时进行调用,给出一个最终默认值 当然实际代码中倒很少有这种极端情况,不过普通...=null)判,那么他代码肯定是有一定 bug几率

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

重构 -- 一个类,难道不配有专属测试代码

这点我以前确实没想过 刚看到这个观点时候,是很不以为,谁让它标题不吸引人>>>《构建测试体系》 就这标题,谁不知道要测试啊。还好没有“以貌取文”,认真的看了下去。...每个类都配备测试代码,烦不烦啊你? 烦。但是项目run时候爆了烦不烦?那会儿可就不是一个人烦了,那是一个团队一起烦。...这种问题其实完全可以避免,甚至可以不发生,只要给每个类配备一个测试代码。 写一个测试代码能花多少时间,十分钟,测试一下能花多少时间,十分钟。害怕测出问题?...那有问题就是有问题啊,专项解决不是效率更高!!! 行吧,写,那怎么写啊? 怎么写那是个人自己事情。...但是,想说是,测试代码,最好写在功能类之前,这样可以预先界定功能类具体功能,也可以把思路清晰一下。 至于测试代码要测试哪些东西?

71640

20分钟,用简单Python代码创建了一个完整区块链!想学

接下来,将用不超过50行 Python 代码创建一个简单区块链,并给它取了一个名字叫SnakeCoin。以此帮助大家理解区块链。 一起动手创建一个极简区块链 首先,我们先对区块链进行定义。...区块链基本框架就这样搭建出来了。考虑到我们要做是「区块链」,因此,我们还需要往链上加区块。之前提到过,其中每一个区块需要包含链上前一个区块哈希值。...,如果你想在控制台看到更多信息,可以修改源代码文件,将每一个区块时间戳或者数据打印出来。...new_block_timestamp), "data": new_block_data, "hash": last_block_hash }) + "\n" 现在,我们可以控制在一个特定时间段内开采区块数量...运行完snakecoin代码后,在终端里运行以下命令(假设你用是cURL)。 1. 创建一个交易。

54110

Kotlin类型系统竟如此简单

如果我们不做任何声明,函数返回值就是 Unit,表明返回了一个什么都没做东西。 我们来验证一下,声明一个空函数,然后打印它。...Nothing 意味着不可达,程序实际运行时不会产生任何一个 Nothing 类型对象,啥?!这怎么理解。kotlin 一旦发现返回了 Nothing,会保证后面的代码不再执行。...所以 Nothing 常用于 throw 这样异常退出情况,这样后续代码就不会被执行。我们看看 kotlin 中自身例子。...Nullable kotlin 一大杀手锏就是这个类型,一种类型后面加上?,这种类型就可以为空了。我们来看看引入类型过后,类型系统是怎样。 1、首先看看普通类和类型之间关系。...} 答案是true,这里很好理解,两者之间区别在于是否可以为,可以为自然而然是基类,不可为是可以为空下一种派生。

80531

写了挺久代码,却还被异常支配?

大家好,是小菜,一个渴望在互联网行业做到蔡不菜小菜。刚,点赞则柔,白嫖则刚!死鬼~看完记得给我来个三连哦! ?...面试官: 请说一下你平时比较常遇到运行时异常 小菜: 好平时比较常遇到异常有:NullPointException (指针异常) 、ClassNotCastException (类型转换异常...我们从吐槽中回过神来想一想,自己写代码还没点 x 数,异常、bug 不就是自己精神伴侣,没这点东西支撑,自己平时怎么冠冕堂皇划水呢! ? 是什么导致我们平时遇到异常很多,却记不起几个。...不应该定义 Error 子类,虽然 Java 规范 中没有明确要求如此,但是 Error 往往是被 JVM 保留下来使用,以表明资源不足,约束失败,或者其他使程序无法继续执行条件。...这相当于,父类方法好好,被你一继承居然出现了异常,而且还可能不知道,这不是背地里砸招牌! finally 使用 对于一些代码,我们希望无论 try 块中异常是否抛出,它们都能够得到执行

54910

C# 类型

概要 C#引用类型是一项功能,允许开发人员在变量、参数、字段、属性和返回值等可能为null情况下,明确地表示其可以为null,或者不能为null。..."Default Name"; bang运算符 bang运算符其实就是个感叹号,在if布尔表达式里是用来取反但是在类型中它作用有了些变化,它允许变量被赋予一个以为值。...但是,如果你确定一个类型变量在某一点上肯定不会为,你可以使用 !.运算符 来断言它非空性。...这个操作叫做null断言操作符,它告诉编译器:“知道这个类型变量在这里绝对不是null,放心让使用它”。 例如,如果有一个整数变量 int?...运算符来断言参数为非。 C#类型会有性能问题? 通常不会引起显著性能问题。类型是C#一项特性,允许值类型(如int、float等)接受null值。

23250

『塞尔达-旷野之息』二段跳是如何实现

在塞尔达里,林克踩上盾牌之后是不能进行其他道具操作,但是在盾跳起跳后,林克就会获得一个远比普通跳跃高跳跃初始速度。 一般情况下,跳跃代码实现是一个很简单物理公式。...很显然,这个bug并不是那种『非修不可』东西,甚至于,可能是制作者故意遗留下。...毕竟塞尔达里有太多地方,你以为你走到了这个游戏『世界边缘』,想大肆分享炫耀,结果发现那里藏着个呀哈哈…… 一切都在制作者大神计算之中,气skr人。...所以,如果是制作者故意遗留下bug,那还是原本意义上bug?...『不会啊,因为如果制作网站的话,我会很不爽,但是如果制作内容是游戏,就是很高兴,因为就喜欢做游戏啊~』 『你真棒!』 这里就涉及到另一个很明显区别: 对在意形式的人而言,什么是『游戏』?

27K20

产品经理能力模型答网友问

有没有解决问题思路:做决策不拍脑袋,能为自己决策找到依据; 3. 有没有很强落地能力:有思路了以后需要推动团队执行,这个时候不能过于教条; 4....Q4:如果这些前提知识都是通用型,是不是就可提炼到一个产品职业人规范化培训体系中,让入门产品人,快速上手。 A4:做产品这件事情,可大可小,简单是上面的三个环,但涵盖东西实在太多。...今年毕业准备考交互研究生 跨专业很多不会 需求分析、流程图写不痛不痒 蛮焦虑 请问就情况关于后续 实习工作方面的职业发展有什么建议?...Q8:老兄您好,本专业是土木工程,大学自学编程毕业敲了半年代码,很喜欢做产品,现在在自学Axure和仿写需求文档,请问老兄 现在不知道从哪下手着重学习,有什么好建议?...以为新人好糊弄,殊不知新人也有自己想法和朋友圈,加上外界,网络影响,很容易离职!一个创业公司到成长后发展,就算发展成阿里巴巴之类,新人最后留下留下概率为0,这是事实不是玩笑。

41520

谈谈Kotlin:Kotlin每一行代码都有返回值

而Kotlin和Java不同,在Kotlin里每一行代码都是表达式,也就是说每一行代码执行完毕后都有一个返回值。 接下来考虑如下例子: // 例1:变量为 val nullVal: Any?...: run { println("[nullVal] null code block") } // 例2:变量为非 val notnull: Any?...在文章一开始那个例子里,由于it.name = "Hello"返回值是Unit,是一个值,因此能够如预期,呈现出和if-else等价效果,但这里实际上会留下一个隐藏坑。...写代码时候,肯定不会写出上面举例子那么傻代码,考虑如下变种: fun test_let() { val nullable: Any? = null nullable?....= null)写法其实是最可爱。 Tips 介绍一个小技巧: IDEA编辑器提供了快速判模板,在变量后输入.nn回车。 就能收获如下代码

87360

困扰开发人员八大代码异常问题

代码异常对于每个开发人员时时刻刻要面对问题,兴奋写完一段代码,信心满满运行一下,结果一个异常给你当头 一棒,你还得意?...异常处理好不好,考验着每个开发人员,是Java开发员,以下将拿Java来举例说明。 ? 网络配图 1、代码异常类型(检查与不检查) 简单说,已检查异常必须在一个方法声明处理。...2、异常处理原则 我们在写代码时,如果能很好处理异常,就要积极处理,实在不行再做抛出处理(这是下下策),不能图一时方便,给以后代码运行留下隐患。 ?...这些可以使用if语句处理,当条件不满足时,可以像如下这么写: if(obj ==null){thrownewIllegalArgumentException("对象不能为"); 4、一个catch子句可以捕获多个异常...当然可以,因为所有异常类都可以追溯到同一个超级类。 5、开发时可以在java构造函数中抛出异常? 也是可以,Java看构造函数是一种特殊方法,本质还是方法。

71940

12. Kotlin 作用域函数(scope function)

run 方法达到了三个效果: 因为this 变化,不再需要重复输入变量,和链式调用异曲同工,但你并不需要额外花费精力来编写链式调用代码; 把对象转换为了非对象,因为run方法是问号调用,...第三点是尤其喜欢一个点,觉得这样设计不仅是为了提高开发效率,它更是在引导开发者写出好维护代码。...阅读者很容易误以为这些代码之间有着顺序上耦合,从而继续按照这个“隐含规则“来维护代码。却不知当时开发者只是想到哪写到哪,实际并不存在这样隐含关系。...函数是面向过程产物,它天生就很容易产生耦合度高代码。就看来,作用域函数更像是给函数打上一个“补丁”。...但如果我们把是否为代码封装进一个扩展方法如 Any?.isNotNull() 里,那么编译器就无法识别 return 后面的代码局部变量是否为空了,这个局部变量依然是类型。

98310

阅读 Flink 源码前必知必会 - SPI 和 ClassLoader

因为框架不可能做好所有的事情,只能把共性部分抽离出来进行流程化,然后留下一些扩展点让使用者去实现,这样不同扩展就不用修改源代码或者对框架进行定制。 也就是我们经常说面向接口编程。...理解 SPI 用更通俗的话来讲,就是一种插拔技术。 最容易理解就是 USB,定义好 USB 接口规范,不同外设厂家根据 USB 标准去制造自己外设,如鼠标,键盘等。...2、如何实现 SPI 这里在 Github 上有一个工程,Flink-Practice,是公众号文章附带代码,有需要可以下载: Flink实战代码 ?...,执行时候,会把类编译成 class 文件放到当前工程 classpath 下); SPI 实现类中,必须有一个不带参数构造方法 执行测试类之后输出如下: ?...AppClassLoader,因为我们代码是在 main 函数执行,而自定义代码都是 AppClassLoader 加载

1.2K20

面经 | C++软件开发(中兴)

是提前批,是把简历发到一个师姐邮箱,在岗位上只写了一个“软件开发工程师”这一个大类,面试时候公司内部应该是进行简历评估之后选择面试官。...树遍历方式有哪些? 口述层级遍历编程实现。 把一个程序编译生成可执行文件经过了哪些步骤?...面试官是西安,问我考不考虑西安,斩钉截铁地说不考虑,一度以为自己凉了 二面 综合面 中兴综合面是现场面试,和技术面之间隔了一个来月。...一般都是说不支持强制加班,但是自己因为自己效率原因没有办法完成工作还是要加;自己作为职场新人留下来多学习不是真正意义上加班等) 在中兴这里遇到了滑铁卢 说完一套理论后,面试官反驳了。。...(这个问题也不知道要怎么回答,中兴这里没有太迂回,直接报了,但是好像报有点高了,报完之后两个面试官相视而笑了一下)。 你有什么问题想要了解

52610

【Flutter】Dart 技巧 ( 独立主函数入口 | 类型判定 | 默认值设定 )

, 即可执行该 main 函数 ; 二、类型判定 ---- 类型判定 : 不确定对象是否为 , 通过 ?....作用是先判定是否为 , 如果为 , 就终止调用 , 不会报指针异常 ; /// 脱离 Flutter 环境独立执行函数 void main(){ print("main"); Student...可以为某个值设置一个默认值 , 如果某个值没有获取到 , 或者获取到为 , 可以为该变量或表达式设置一个默认值 ; student?.name??"...可以为某个值设置一个默认值 /// 这里如果 student?.name 为 , 则默认值是 "Tom" print("打印 student 名字 : ${student?.name??"...Tom"}"); 执行结果 : 打印 student 名字 : Tom 四、完整代码示例 ---- 完整代码示例 : /// 脱离 Flutter 环境独立执行函数 void main(){ print

60600

Linux入门系列(一)换个角度看Linux其实很简单,带你一起入门

✨一起学习、成长、温情热爱生活✨ ? 图丨pexels 开头以为我会给你介绍Linux来龙去脉或者讲理论,不会吧,不会吧,你不会真的这么想吧,还真的不打算给你讲耶,因为百度百科它不香?...编程作为一门跟计算机交流语言;作为我们操控计算机 偷懒 工具,总结了学习它有三个层面,第一个层面是:用了再说;第二个层面是:开始深入怎么用更好;第三个层面好奇它是怎么实现。...觉得入门就得从第一个层面开始实际,往后深入再慢慢深耕。 准确来说,不是带你学Linux,而是和你一起使用Linux,抱着学Linux总是枯燥。...demo含有多个文件后我们再来删除,会发现rmdir不能删除不能为文件夹。 ? rmdir -p 目录/子目录1/子目录2 删除 ? cp 拷贝 格式:cp [ 源文件 ] [目的文件] ?...如果你能看到这篇,说明咱们还是很有缘,希望能带给你一些许帮助,创作不易, 把文章知识带走,你三连留下,分享,留言,在看,是最大动力。 ?

1.1K10

如果把线程当作一个人来对待,所有问题都瞬间明白了

一个线程执行,固然是安全,但是有时太慢了,怎么办? 老祖宗告诉我们,“一方有难,八方支援”,那不就是多叫几个线程来帮忙嘛,好办呀,多new几个不就行了,又不要钱。这样能管用?继续往下看。...且容慢慢道来。 开发是一门技术,管理是一门艺术。也许你正想带着兄弟们大干一场,偏偏就有人要辞职。或者你付出了这么多,但别人从来没有感动过。为什么会这样呢? 因为你面对是人。...可能你不同意这种看法,说可以“强迫”它停止运行,调用Thread类stop()方法来直接把它“掐死”,不好意思,该方法已废弃。 因为线程可能在运行一些“关键”代码(比如转账),此刻不能被终止。...事件四,魔性游戏 这是一个充满魔性小游戏,由一个团队一起参加。所有人每隔5秒钟抽一次签,每个人有50%概率留下来或被淘汰。 留下来的人下次抽签时同样有50%概率被淘汰。...当自己被叫醒后,首先要做就是清除一下这个变量,表明已经醒来复工了。 这样就需要多维护一个变量和多了一部分判断逻辑。

37240

项目优化之循环优化(Unity3D)

你时常需要遍历许多GameObject列表? 如果你有很多像这样问题,那么你就来对地方了!...2.创建一个游戏物体(Empty Gameobject)并命名为GameObjectList 3.创建一些物体(大约10-30个就可以),并绑定为GameObjectList子物体 Step 2...for循环代码,只留下了foreach循环代码 Step 3 指定引用和测试代码 指定引用和测试代码请您跟着如下步骤来执行: 1.为GameObjectList添加ForEachLoopTest.cs‍...“嘿,伙计,你在浪费我们时间没有看到任何改变,除了一个数字(GC Alloction)之外” 在这种情况下,你是对。...希望这是在你阅读完这篇文章之后感叹!如果你还是不明白,于是乎我们得到了一个很简单结论:那就是尽可能在你游戏中使用foreach循环。

72220

【3分钟速读】洞察用户3种方法,其中一种弄死数据分析师哦

做商品运营虽然看是进销存,但背后隐藏是用户消费习惯与品牌偏好。洞察用户是制定执行方案必修课,但在具体怎么做洞察上,又曾经有两种方法区别。 第一种是气宗派运营搞法:大数据洞察。...气宗运营喜欢讲核心逻辑、顶层思维,因此特别爱拿“大数据”说事——显得牛逼。经常拉着做数据分析小伙伴开会,喜欢提“我们想丰富用户画像,从深层次洞察用户特点和需求”。...因为很多真实原因,就是企业系统记录不了,就像一个用户流失了,可能真实原因是: (需求结束)用完了,隔段时间再说吧 (竞争因素)发现了同款更好用APP (认知偏差)以为这里没有XX功能...(体验不佳)觉得这个颜色看着不舒服 (单纯忘了)就是单纯忘了…… 所有这些,在数据里只会留下一条用户XX天未登陆,最后一次登陆完成了XX操作。...剩下全靠数据分析师脑补。直面用户时候,用户完全可以绘声绘色讲述别人家app怎么好用;或一脸懵逼跟你说“哦!你们原来是这样啊!”。听完之后,该调整产品还是该加强宣传,就一目了然了。

55740
领券