左耳听风 第四十一周

每周完成一个ARTS: 每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)

Algorithm

继续按顺序来完成「LeetCode」前 200 题,以下为个人题解:

LeetCode45. 跳跃游戏 II

LeetCode46. 全排列

LeetCode48. 旋转图像

review

Finally understanding how references work in Android and Java 「彻底弄懂引用时如何在 安卓 和 Java 中工作的」

首先要知道 Java 中默认的 4 类引用:强引用(Strong reference)、软引用(SoftReference)、弱引用(WeakReference)、幻象引用(PhantomReference)

强引用,是我们日常编程中最常见的引用,当我们创建一个新的对象时,默认就是强引用。例如:

Object object = new Object();

这里要衍生到 Java 垃圾回收的机制,当有对象处于 强引用 状态时,Java 的垃圾收集器是不会帮我们回收这部分内存的。

于是这就有可能引发「内存泄漏」问题。当一个对象,我们不再需要使用时,却有其他对象持有其 强引用,该对象内存就无法被垃圾收集器回收。

于是,基于内存正确回收的需要,弱引用 承担了这部分责任。被弱引用所引用对象的内存,随时可能被垃圾收集器回收。但是能够在对象还存在时继续或者该对象的使用。

好了, 强引用弱引用 各有优势,但是编程的要求总是多变的。即不想一直保持对象的引用、又不想对象在内存足够的被垃圾收集器清零怎么办?软引用 出现了,二者综合,在内存足够的时候保持对对象的引用,在内存不够的时候,把相应的引用清理,然后再被垃圾收集器释放内存。—— 综合通常是计算机的具体实践,不做最极端,但做最适用。

幻象引用,当一个对象在垃圾收集器收集时,它可以被 幻象引用 引用。(很少见,作者所在正式的生产环境中掰手指也能数出遇见的次数)

总结,通过这篇文章,我们能够对于 Java 中的四种引用有一定的认识,当我们的程序出现「内存泄漏」时,我们可以从错误的引用来排查一些问题,了解这些是为了让我们写出更健壮的代码以及如何改善,希望对你有所帮助。

Tip

从 Java HashMap 中学习的技巧,putVal() 函数中用位运算 & 代替求余数 (n - 1) & hash

这里 hash 是经过哈希函数计算出的哈希值(Int),n 代表的是哈希表的容量 n-1 代表哈希表下标的取值范围(底层结构为 数组,索引从 0 开始)。

根据与运算的特性,只有当前运算的两个数二进制位都为 1 时,结果为 1,其余都为 0。则 (n - 1) & hash 的取值范围为 [ 0,n-1 ],相同 hash 计算的结果一致。相比 % 运算(底层还是转换为二进制操作),& 运算直接操作二进制位效率更高,在 HashMap 想要达到的效果一致。

同样,当我们在相同场景中也可以使用 & 运算帮我们提高效率。

附上异或运算交换值的技巧。(原理:二进制数,A^A=0,任意数 ^ 0=它本身)

交换 A、B 的值,不借助辅助空间。

    A=A^B;B=A^B;A=A^B;

share

《剑指offer》攻略

把《剑指 offer》的题目用 Java 语言(书中是 C++)实现了一遍,希望能给大家一些参考。

GitHub 地址:https://github.com/hackhu2019/offer

附上我整理的思维导图,有一些做题技巧。

左耳听风 第四十一周相关推荐

  1. 左耳听风 第二十一周

    左耳听风 第二十一周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  2. 《左耳听风》-ARTS-打卡记录-第二十五周

    <左耳听风>-ARTS-打卡记录-第25周 坚持不懈是一句正确的废话.前段时间,我在我的读者群中发起了一个名为 ARTS 的活动.每人每周写一个 ARTS:Algorithm 是一道算法题 ...

  3. 左耳听风 第三十三周

    左耳听风 第三十三周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  4. 左耳听风 第三十八周

    左耳听风 第三十八周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  5. 左耳听风 第四十九周

    左耳听风 第四十九周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  6. 左耳听风 第三十五周

    左耳听风 第三十五周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  7. 左耳听风 第四十二周

    左耳听风 第四十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  8. 左耳听风 第三十一周

    左耳听风 第三十一周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  9. 左耳听风 第二十二周

    左耳听风 第二十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

最新文章

  1. PXE新手经典思路引导
  2. 神经网络谐振子模型的一组数据
  3. 音视频技术开发周刊 | 230
  4. 使用top命令监控linux系统cpu变化
  5. 反应式服务中的线程本地状态可用性
  6. Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)
  7. echarts地图的基本使用配置
  8. 游戏里的---Change
  9. Windows Media Center SDK 在 GitHub 上发布
  10. 大数据之路、阿里巴巴大数据实践读书笔记目录
  11. 去除新安装火狐浏览器黑色背景
  12. VMware esxi6.7虚拟机安装教程
  13. 如何查看博客是否被搜索引擎收录
  14. 先验分布、后验分布、共轭先验分布
  15. [转]800个有趣句子帮你记忆7000个单词
  16. 常用算法——解析算法
  17. 上传身份证百度ocr识别
  18. 三极管专题:PNP和NPN 三极管恒流电路分析
  19. 根据url地址生成二维码,微信扫描二维码可直接打开网址
  20. java毕业生设计高校教学资源系统计算机源码+系统+mysql+调试部署+lw

热门文章

  1. 数学简史:数学是一门非常重要的学科,它在各个领域都有着广泛的应用。从古代到现代,数学一直在不断发展和演变,为我们提供了无尽的智慧和启示。
  2. 电商产品精修训练营第1天_三大面_五大调
  3. python 文件路径切分
  4. openstack实例空间不足,增加磁盘大小
  5. 强化学习(一)-->隐马尔科夫模型HMM-->HMM模型基础
  6. Linux-hexdump命令调试event驱动
  7. C语言:mmap函数实现
  8. Unity AssetStore打不开怎么办
  9. OFD格式如何在线转成PDF?
  10. PPT学习(一)基础操作