Boredream Blog

「day day up」

ClassLoader 类加载器

是什么? 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 为什么虚拟机不自己加载类? 更灵活,可以热部署、代码加密等。 注: 不同类加载器加载的类,及时是相同类名的,也不会Class.equals()相等。 双亲委派模型 ...

Java类和对象实例化过程

什么时候加载? 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是: 使用new关键字实例化对象的时候 读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候 调用一个...

ConcurrentHashMap 简单研究

ConcurrentHashMap 可以理解为线程安全的 HashMap 对比 HashTable 不能null的key或value,线程安全的,所有方法都是synchronize的 HashMap 普通Hash表,支持null的key,把null直接作为hashcode=0 Collections.synchronizedMap 传入map,然后将所有方法都包一层synchroniz...

RecyclerView 源码解析

初始化 setAdapter触发初始化,之后开始绘制,依次走以下绘制方法 onMeasure 当宽高是 EXACTLY 或 无 adapter 时,直接测量完成,不用再dispatchLayoutStep123等步骤。 如果是其他 AT_MOST 等情况时,就要走step123根据child的宽高决定rv自己宽高了。 onLayout 正常情况下我们都是...

LeetCode Lean 分享

LeetCode是什么? 提供在线做题、社区讨论、模拟面试的网站 LeetCode Lean是什么? 官网做的系列教程,以数据结构+算法为主,介绍+题目+总结。 英文原版地址 中文版地址 为什么学? 锻炼逻辑能力。解决复杂业务 趣味性。做题的快感,解决斐波那契数列、数独等问题 面试。算法题 学哪些? 共15个课程,去掉Ruby和机器学习相关一共12个 基础数据结构...

《深入理解Java虚拟机JVM》 - 内存结构

读书笔记 内存结构图: 程序计数器 用于存放下一条指令所在单元的地址的地方 虚拟机栈 常说的堆栈结构里的栈,就是这个。 定义: 虚拟机栈描述的是Java方法执行的内存模型: 每个方法在执行的同时都会创建一个栈帧用于存储 局部变量表、操作数栈、动态链接、方法出口等信息。 每个方法从调用到执行完成的过程,就对应一个栈帧从入栈到出栈的过程。 误区: 以前看资料说栈的作用...

binder 原理

binder机制比较复杂,学习梳理过程中基本把网上可以搜到的文章都看了一遍 下面自己试着梳理一下,也会贴出参考的相关链接 https://blog.csdn.net/universus/article/details/6211589 为什么需要IPC Android基于Linux,不同应用在不同的进程里,内存空间是隔开的,无法直接互相交互数据。 但安卓是有进程间通讯IPC的需求,则系统提...

handler 原理

几年前简单看过handler原理,温故知新再捋一遍 作用 用于解决在未来某个时间处理消息、runnable任务 或由子线程向主线程发送消息、runnable任务 组成 Message 消息 Looper 轮询器 MessageQueue 消息队列 源码流程 ActivityThread 中 main 是程序的入口 其中会 Looper.prepareMainLooper...

《如何读一本书》

开篇 先提出一个概念: 读书的目的,抛去娱乐等不谈,主要分为「获取资讯」和「增进理解力」 获取资讯 一般不用太多思考,比如历史书,我看书知道秦朝第一个黄帝是嬴政,ok晓得了,就是获取资讯。 增进理解力 怎么理解呢,可以说是提升了个人的悟性。 两者是有关联的 吸收资讯是要被启发的一个前提,通过资讯、故事,进一步去理解内涵的道理,以提升自己的思想。 古语里也有类似说法,学而不思则...

《算法4》 散列表 / hash表

概念 用一个自定义的hash函数算法,将key经过计算得出一个索引值,然后用它去定位对应的值。 一般key不同的话,索引不同,可以O(1)速度查找、插入。 但算出来的索引如果相同,就需要额外处理这个碰撞情况,在一个索引上保存两个值。 Hash表是空间和时间上做出权衡的经典例子 既不能无限扩充索引,虽然更快,但太费空间。 又不能所有人都只用一个索引,那等于就是普通数组了,节省空间但浪费时间...