<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lmcs87的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lmcs87</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lmcs87]]></copyright><item><title><![CDATA[SDK -  (5) - ArrayMap]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103570813</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103570813</guid><author>lmcs87</author><pubDate>Mon, 16 Dec 2019 21:46:38 +0800</pubDate><description><![CDATA[一、内部结构







二、原理

数据结构2个数组，一个存key的hash值 ，一个存key和value的值。

Get操作

  -&gt; 通过key值得到hash值 -&gt; 通过2分查找求出index (数据量大 效率降低原因之一)

  -&gt; key = Arrays[2*index]  value = Arrays[2*index +1] 


...]]></description><category></category></item><item><title><![CDATA[SDK -  (4) - AIDL]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103570771</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103570771</guid><author>lmcs87</author><pubDate>Mon, 16 Dec 2019 21:41:44 +0800</pubDate><description><![CDATA[一、使用步骤

1、创建AIDL文件 写提供服务的接口方法

2、创建服务Service，覆盖Bind方法 返回bind对象。



3、bindService获取Service代理对象



参考:https://www.jianshu.com/p/467016b4487c



二、支持的类型







三、自定义object需满足下面2个条件

1、实现Parcelable接口

...]]></description><category></category></item><item><title><![CDATA[SDK -  (3) - Binder]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103552830</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103552830</guid><author>lmcs87</author><pubDate>Sun, 15 Dec 2019 20:14:09 +0800</pubDate><description><![CDATA[一、Linux的IPC方式

1、管道（Pipe）及有名管道（named pipe）

2、信号（Signal）

3、报文（Message）队列（消息队列）

4、共享内存

5、信号量（semaphore）

6、套接字（Socket）



二、Binder

Android独有的跨进程通信方式，具备传输效率较高、安全性更高、稳定性更好等特点。

1、传输效率较高 -&gt; 传输过程数据...]]></description><category></category></item><item><title><![CDATA[三方 - (3) - Arouter]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103430725</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103430725</guid><author>lmcs87</author><pubDate>Fri, 06 Dec 2019 22:40:22 +0800</pubDate><description><![CDATA[官方中文介绍：https://github.com/alibaba/ARouter/blob/master/README_CN.md

一、基本使用

1、添加依赖

android {

  defaultConfig {

    javaCompileOptions {

      annotationProcessorOptions {

      ...]]></description><category></category></item><item><title><![CDATA[三方 - (10) - 热修复]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103430707</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103430707</guid><author>lmcs87</author><pubDate>Fri, 06 Dec 2019 22:36:50 +0800</pubDate><description><![CDATA[一、热修复类别

阿里系：阿里百川HotFix、DeXposed从底层二进制c语言入手
	腾讯系：QQ空间的超级补丁、微信的Tinker （从java加载机制入手）


二、类加载器类别

 1. PathClassLoader：只能加载已经安装到Android系统中的apk文件（/data/app目录），是Android默认使用的类加载器。

 2. DexClassLoader：可以...]]></description><category></category></item><item><title><![CDATA[三方 - (9) - 插件化]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103430701</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103430701</guid><author>lmcs87</author><pubDate>Fri, 06 Dec 2019 22:35:04 +0800</pubDate><description><![CDATA[一、插件化需解决的问题

1、插件dex加载问题

通过反射拿到DexClassLoader,解析插件dex与宿主dex合并后，重新插入宿主DexPathList中。



2、插件组件生命周期问题

提前占坑注册代理组件, 在校验前保存真实跳转信息,利用代理组件通过系统校验, 校验后拦截h跳转，取出信息完成启动。



3、插件之间资源id冲突问题

重写Context的getAsset、g...]]></description><category></category></item><item><title><![CDATA[三方 - (11) -  组件化]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103430674</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103430674</guid><author>lmcs87</author><pubDate>Fri, 06 Dec 2019 22:33:39 +0800</pubDate><description><![CDATA[一.组件化需解决的问题

1、组件之间 - 通信问题

       数据通信 - 接口下沉

       界面     - Arouter

       事件     - EventBus



2、组件单独运行 - Application 和 module 切换

      gradle自定...]]></description><category></category></item><item><title><![CDATA[Java基础(17)   - 不可变对象]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103430558</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103430558</guid><author>lmcs87</author><pubDate>Fri, 06 Dec 2019 22:19:25 +0800</pubDate><description><![CDATA[一、存在的意义

1、让并发编程变得更简单

线程安全问题的根本原因在于：多个线程需要同时访问同一个共享资源。

假如没有共享资源，那么多线程安全问题就自然解决了，Java中ThreadLocal机制就是采取的这种思想。



2、消除副作用

防止在其他地方修改了对象属性，导致结果未按预期运行。（String设计成Final的原因之一）



3、减少容器类使用过程出错的概率

当使用Has...]]></description><category></category></item><item><title><![CDATA[Java基础(20)  - JDK各版本特性]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103395655</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103395655</guid><author>lmcs87</author><pubDate>Wed, 04 Dec 2019 22:21:18 +0800</pubDate><description><![CDATA[一、Java7

1、switch中可以使用字符串

2、泛型的自动判断

List&lt;String&gt; tempList = new ArrayList&lt;&gt;();

3、自定义自动关闭类（实现AutoCloseable接口）

只要实现该接口，在该类对象销毁时自动调用close方法，你可以在close方法关闭你想关闭的资源

4、新增一些取环境信息的工具方法（System中的...]]></description><category></category></item><item><title><![CDATA[Java基础(19)  -  网络编程]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103395643</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103395643</guid><author>lmcs87</author><pubDate>Wed, 04 Dec 2019 22:20:49 +0800</pubDate><description><![CDATA[BIO、NIO、AIO

待补充~

NIO vs IO之间的理念上面的区别（NIO将阻塞交给了后台线程执行）

IO是面向流的，NIO是面向缓冲区的
	Java IO面向流意味着每次从流中读一个或多个字节，直至读取所有字节，它们没有被缓存在任何地方；
		NIO则能前后移动流中的数据，因为是面向缓冲区的
	
	IO流是阻塞的，NIO流是不阻塞的
	Java IO的各种流是阻塞的。这意味着，当一个...]]></description><category></category></item><item><title><![CDATA[并发(2)  - 锁分类]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103395581</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103395581</guid><author>lmcs87</author><pubDate>Wed, 04 Dec 2019 22:17:32 +0800</pubDate><description><![CDATA[2种分类法

一、一类8种

1、乐观锁/悲观锁

2、独享锁/共享锁

3、互斥锁/读写锁

4、可重入锁

5、公平锁/非公平锁

6、分段锁

7、偏向锁/轻量级锁/重量级锁

8、自旋锁

参考:https://www.cnblogs.com/hustzzl/p/9343797.html



二、一类有3类

方法锁、对象锁、类锁。（方法锁也是对象锁的一种）

1、对象锁

对象锁

...]]></description><category></category></item><item><title><![CDATA[并发(1) -  JMM]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103395526</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103395526</guid><author>lmcs87</author><pubDate>Wed, 04 Dec 2019 22:13:50 +0800</pubDate><description><![CDATA[一、主存储器与工作存储器

JMM 分为主存储器（main memory）和工作存储器（working memory）两种。



主存储器（main memory）

类的实例所存在的区域(堆)，为所有线程共享。



工作存储器（working memory）

每个线程各自独立所拥有的作业区，在working memory中，存有main memory中的部分拷贝，称之为工作拷贝（wor...]]></description><category></category></item><item><title><![CDATA[并发(3)  -  关键字]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103376019</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103376019</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:28:45 +0800</pubDate><description><![CDATA[一、并发特性

1、可见性

a、 保证任何一个线程修改变量立即写入到主内存中（堆）；

b、 所有线程对该变量引用会强制立即失效，并且该线程必须去堆中获取最新的变量值。



2、指令重排序

代码的执行顺序 会在JVM中(编译器优化 指令级并行重排序 内存系统重排序 最终执行的指令序列)



3、原子性

同一时刻最多只有一个线程访问该段代码。



二、Volatile

-&gt;...]]></description><category></category></item><item><title><![CDATA[Java进阶(5)  -  JMM]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103376006</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103376006</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:25:45 +0800</pubDate><description><![CDATA[一、主存储器与工作存储器

JMM 分为主存储器（main memory）和工作存储器（working memory）两种。



主存储器（main memory）

类的实例所存在的区域(堆)，为所有线程共享。



工作存储器（working memory）

每个线程各自独立所拥有的作业区，在working memory中，存有main memory中的部分拷贝，称之为工作拷贝（wor...]]></description><category></category></item><item><title><![CDATA[Java基础(18)  -  JVM]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375933</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375933</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:24:27 +0800</pubDate><description><![CDATA[JVM由类加载器、运行时数据区、执行引擎3部分组成

一、类加载器

有启动类、扩展类、系统类、自定义4种类型加载器

(1)启动类加载器 (Bootstrap ClassLoader )-&gt; 它用来加载Java的核心库，比如String、System这些类

-&gt; JRE/lib/rt.jar

(2)扩展类加载器(Ext ClassLoader由Java语言实现，父类加载器为...]]></description><category></category></item><item><title><![CDATA[Java基础(17)   - 不可变对象]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375914</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375914</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:20:38 +0800</pubDate><description><![CDATA[一、存在的意义

1、让并发编程变得更简单

线程安全问题的根本原因在于：多个线程需要同时访问同一个共享资源。

假如没有共享资源，那么多线程安全问题就自然解决了，Java中ThreadLocal机制就是采取的这种思想。



2、消除副作用

防止在其他地方修改了对象属性，导致结果未按预期运行。（String设计成Final的原因之一）



3、减少容器类使用过程出错的概率

当使用Has...]]></description><category></category></item><item><title><![CDATA[Java基础(16) - Class类]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375901</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375901</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:19:59 +0800</pubDate><description><![CDATA[一、存在的意义

位于java.lang包下，和java.lang.reflect包下的类共同支持java反射功能

jvm在类加载时，在堆中为每个类生成一个Class对象，用于记录每个类的属性、方法等信息，

同时每个对象生成时都有特殊的标记位来指向堆中的Class对象。



二、获取的三种方式

1 、Class.forName("全路径名")

2 、类名.Class

3、实例对象...]]></description><category></category></item><item><title><![CDATA[Java基础(15) -  Object类]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375878</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375878</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:19:21 +0800</pubDate><description><![CDATA[一、Object类9大方法是哪些

1、Clone方法

实现对象的浅复制，只有实现了Cloneable接口才可以调用该方法，否则抛出CloneNotSupportedException异常

Java里参数传递，除了8种基本类型是值传递。其他类对象都是引用传递。



2、getClass方法

final方法，获得运行时类型。



3、toString方法

该方法用得比较多，一般子类都...]]></description><category></category></item><item><title><![CDATA[Java基础(13) - Error与Exception]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375853</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375853</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:17:41 +0800</pubDate><description><![CDATA[一、Error（错误）

是系统中的错误，程序员是不能改变的和处理的，是在程序编译时出现的错误，只能通过修改程序才能修正。一般是指与虚拟机相关的问题，如系统崩溃，虚拟机错误，内存空间不足，方法调用栈溢等。对于这类错误的导致的应用程序中断，仅靠程序本身无法恢复和和预防，遇到这样的错误，建议让程序终止。



二、Exception

异常 表示程序可以处理的异常，可以捕获且可能恢复。遇到这类异常，...]]></description><category></category></item><item><title><![CDATA[Java基础 (14) - 多线程]]></title><link>https://blog.youkuaiyun.com/lmcs87/article/details/103375804</link><guid>https://blog.youkuaiyun.com/lmcs87/article/details/103375804</guid><author>lmcs87</author><pubDate>Tue, 03 Dec 2019 20:16:29 +0800</pubDate><description><![CDATA[多线程的方式有Thread、Runnable、Callable、ExecutorService四种方式

1.Thread、Runnable区别

(1) Thread是类，Runnable是接口（支持多继承）。Thread可以理解成实现了Runnable接口的类。

(2) Runnable资源共享实现较简单。

(3) 增加程序的健壮性，代码可以被多个线程共享，代码和数据独立

(4) 线程池...]]></description><category></category></item></channel></rss>