Home
Chirpy
Cancel

学习笔记:《The Art of Readable Code》(1) : Surface-Level Improvement

1. Surface-Level Improvement (表面层改进) 良好的命名,良好的注释,整齐的代码格式,我们从这些表面层改进开始。这类改变是比较容易实施的,你可以不做代码重构或修改程序的运行方式,原地( in-place )对它们进行修改,而且修改并不耗时。 这些话题是非常重要的,因为它们影响你的每一行代码。尽管每个修改看着都很小,但聚集起来,它们可以对代码给予巨大的贡献。有良...

靠巧合编程

“传统智慧”认为,项目一旦进入编码阶段,工作主要就是机械地把设计转换为可执行的语句。我们认为,这种态度是许多程序丑陋、结构糟糕、不可维护和完全错误的最大一个原因。 编码不是机械工作。如果它是,20 世纪 80 年代初期人们寄予厚望的所有 CASE 工具早就取代了程序员。每一分钟都需要做出决策 —— 如果要让所有的程序享有永久、无误和富有生产力的“一生”,就必须对这些决策 进行仔细的思考和判...

使用 powermock 解决 kotlin lateinit 问题,移除 application 依赖

多数情况下,Application 会被作为一个全局对象提供功能。通常的作法是给 Application 添加一个静态方法来获取其实例: class MyApplication : Application() { companion object { lateinit var sBaseApp: IApplication val instance:...

学习笔记:《The Art of Readable Code》(0) : code should be easy to understand

KEY IDEA: 代码应该易于理解 这是我们在写代码时最重要的指引原则。 如何让代码变得“更好”? 多数程序员做出编码决策时都是依据直觉。 ```c++ for (Node *node = list->head; node != NULL; node = node->next) Print(node-data); 会比以下代码要好: \`\`\`c++ Nod...

读书笔试:《Clean Code》第9章 - 单元测试

最近在学习单元测试,除了学习框架外,还动手写了些业务测试。 现在再回头看 clean code 这本书这一章,与刚开始看时似懂非懂的感觉完全不同。 纸上得来终觉浅,绝知此事要躬行 9.1 TDD 的三定律 中文翻译看得有点费力,感觉有点绕: - 在编写不能通过的单元测试前,不可编写生产代码 - 只可编写刚好无法通过的单元测试,不能编译也算不通过 - 只可编写刚好足以通过当前失败测试的生...

面试

最近一段时间看了数百份简历,总结下感受。 简历上看到过30的都基本是带着有色眼镜去挑剔。会不自觉得提高心理预期。 拿造火箭的要求去招人,招进来干拧螺丝的活,这句话有些道理。但长远看,有造火箭的精神和热情的人,连拧的螺丝也比别人要好几分。 简历阶段被 pass 的人有这个特征:简历无亮点。 3.1 普通大学(或大专)毕业 3.2 年龄大 3.3 没在大厂工作过 3.4 以上缺点...

coroutines 并发多线程问题

JetBrains 出了个EDU_TOOL,不小心打开了一个全印尼文的课程,跟着看了下 coroutines 。全程只能看懂夹杂在里面的几个英文。 之前也没深入看 coroutines 。 coroutines 解决的是“call hell”问题,但并不是解决多线程并发问题,其本质还是一个多线程封装。 下例是在这个课程代码基础上改的,容易触发并发crash的代码。 由于还没怎么学 cor...

kotlin concurency

如官方这篇文档 coroutines 使用可变数据 所说:Coroutines 用于多线程并发处理任务,他所会遇到的多线程问题与普通线程遇到的通常一样,他们的解决方案也是相似的,不过 kotlin 也有一些特殊之处。 import kotlinx.coroutines.* import kotlin.system.* suspend fun massiveRun(action: ...

100% 覆盖测试Android MVP:

Testing Android MVP 网上有成千上万的文章分析 Android 上各种架构模式的优缺点,然后让人失望的是它们都忽略了一点:测试 选择哪种模式通常取决于个人喜好和项目诉求。我不认为 MVVM 优于 MVP 或者说它是一个能完全满足用户需求的解决方案,当然,由于 MVVM 的简洁,在启动新项目时我会优先选择它。 MVP 的四个要点( bullet point) ...

flutter 踩坑记

如果需要做 jnifilter ,需要在 as 里设置 –target-platform=android-arm 本质上等同于 –target-platform=android-arm 新版本 flutter run 已移除此参数, 需使用:flutter build apk –target-platform android-arm 今天和同事交流,他说遇到一个问题,键盘的弹出弹回...