左耳听风 第四十一周
左耳听风 第四十一周
每周完成一个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
附上我整理的思维导图,有一些做题技巧。
左耳听风 第四十一周相关推荐
- 左耳听风 第二十一周
左耳听风 第二十一周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 《左耳听风》-ARTS-打卡记录-第二十五周
<左耳听风>-ARTS-打卡记录-第25周 坚持不懈是一句正确的废话.前段时间,我在我的读者群中发起了一个名为 ARTS 的活动.每人每周写一个 ARTS:Algorithm 是一道算法题 ...
- 左耳听风 第三十三周
左耳听风 第三十三周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第三十八周
左耳听风 第三十八周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第四十九周
左耳听风 第四十九周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第三十五周
左耳听风 第三十五周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第四十二周
左耳听风 第四十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第三十一周
左耳听风 第三十一周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
- 左耳听风 第二十二周
左耳听风 第二十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...
最新文章
- PXE新手经典思路引导
- 神经网络谐振子模型的一组数据
- 音视频技术开发周刊 | 230
- 使用top命令监控linux系统cpu变化
- 反应式服务中的线程本地状态可用性
- Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)
- echarts地图的基本使用配置
- 游戏里的---Change
- Windows Media Center SDK 在 GitHub 上发布
- 大数据之路、阿里巴巴大数据实践读书笔记目录
- 去除新安装火狐浏览器黑色背景
- VMware esxi6.7虚拟机安装教程
- 如何查看博客是否被搜索引擎收录
- 先验分布、后验分布、共轭先验分布
- [转]800个有趣句子帮你记忆7000个单词
- 常用算法——解析算法
- 上传身份证百度ocr识别
- 三极管专题:PNP和NPN 三极管恒流电路分析
- 根据url地址生成二维码,微信扫描二维码可直接打开网址
- java毕业生设计高校教学资源系统计算机源码+系统+mysql+调试部署+lw