简析 Volatile 关键字

Volatile 简介

volatile作为java关键字之一,其主要作用为在并发场景下,当某个线程更新了使用volatile修饰的变量后,会立即将修改后的值写入主存,其他线程读取的时候可以保证读到的值是最新的,而不是缓存。非volatile修饰的变量在线程并发的情况下不具备这种特性。

滴滴开源Android插件化框架VirtualAPK原理分析

概述

滴滴出行公司的首个对外开源项目 - VirtualAPK。地址:https://github.com/didi/VirtualAPK

滴滴自行研发了这款插件化框架,功能全面、兼容性好,还能够适用于有耦合的业务插件,这就是VirtualAPK存在的意义。业内认为,在加载耦合插件方面,VirtualAPK可以说是开源方案的首选。据说滴滴打车里面已经用上了,所以还是有必要一探究竟的~~

HashMap 内部原理

HashMap 内部实现

通过名字便可知道的是,HashMap 的原理就是散列。HashMap内部维护一个 Buckets 数组,每个 Bucket 封装为一个 Entry<K, V> 键值对形式的链表结构,这个 Buckets 数组也称为表。表的索引是 密钥K 的散列值(散列码)。如下图所示:

JVM 基础知识

JVM 概念

JVM(Java Virtual Mechine,Java虚拟机),是 Java 应用程序的运行时引擎。JVM 是 JRE(Java Runtime,Java运行环境)的一部分,它实际上就是去执行 Java 程序的 main 方法。

为什么说 Java 是一个平台无关的语言? Java 号称是 Write Once,Run Anywhere,能实现这个的核心,就是 JVM 。当我们通过编译器编译 .java 文件时,会生成一个同名的 .class 文件(包含字节码),当我们运行 Java 程序时,流程如图所示:

Android 7.0 之拍照与图片裁剪适配

在Android 7.0以上,在相机拍照和图片裁剪上,可能会碰到以下一些错误:

1
2
3
4
5
6
7
8
Process: com.yuyh.imgsel, PID: 22995

// 错误1
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.yuyh.imgsel/cache/1486438962645.jpg exposed beyond app through ClipData.Item.getUri()

// 错误2
android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/RxGalleryFinal/IMG_20161018180127.jpg exposed beyond app through Intent.getData()

RxJava 从入门到出轨

前言

使用了RxJava有一段时间了,深深感受到了其“牛逼”之处。下面,就从RxJava的基础开始,一步一步与大家分享一下这个强大的异步库的用法!

RxJava 概念初步

RxJava 在Github Repo上给的解释是:

1
2
3
“RxJava is a Java VM implementation of Reactive Extensions: 

a library for composing asynchronous and event-based programs by using observable sequences.”

大概就是说RxJava是Java VM上一个灵活的、使用可观测序列来组成的一个异步的、基于事件的库。咋一看好像不知道是啥东西… … 没事,往下看~