<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aiyoufang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aiyoufang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aiyoufang]]></copyright><item><title><![CDATA[针对面试线程池]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/103475120</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/103475120</guid><author>aiyoufang</author><pubDate>Sun, 15 Dec 2019 11:48:57 +0800</pubDate><description><![CDATA[1、什么是线程池？
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合，然后在需要执行新的任务时重用这些线程而不是新建一个线程（提高线程复用，减少性能开销）。
线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而，增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务，一旦任务已经完成了，线程回到池子中然后等待下一次分配任务。
2、为什么要用线程池？
本质上来讲，我们...]]></description><category></category></item><item><title><![CDATA[OKHTTP（面试二）]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/103199831</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/103199831</guid><author>aiyoufang</author><pubDate>Fri, 22 Nov 2019 15:41:45 +0800</pubDate><description><![CDATA[1、OkHttp 建立连接的过程，主要涉及到的几个类包括 StreamAllocation、RealConnection 以及 HttpCodec。
2、首先在RetryAndFollowupIntercept 中创建 StreamAllocation 对象，
到 Connection 中创建 RealConnection 和 HttpCodec，
3、OkHttp 中的连接由RealConnec...]]></description><category></category></item><item><title><![CDATA[okhttp原理（面试一）]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/103173087</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/103173087</guid><author>aiyoufang</author><pubDate>Thu, 21 Nov 2019 23:20:29 +0800</pubDate><description><![CDATA[//  构建okHttpClient，相当于请求的客户端，Builder设计模式
 		OkHttpClient okHttpClient = new OkHttpClient.Builder()
 		.readTimeout(5, TimeUnit.SECONDS)
	 	.build();
        // 构建一个请求体，同样也是Builder设计模式
        Request...]]></description><category></category></item><item><title><![CDATA[Android组件化与插件化的差别在哪里，该怎么选型？]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/102947942</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/102947942</guid><author>aiyoufang</author><pubDate>Thu, 07 Nov 2019 09:41:21 +0800</pubDate><description><![CDATA[面试官: 组件化如何实现，组件化与插件化的差别在哪里，该怎么选型？
心理分析：面试官从架构层次 了解求职者是否用过 模块化 组件化 和插件化，在过去经验有没有运用过这些技术到项目中，这道题属于一个连环炮。求职者该格外小心
求职者:应该从App开发的需求来定义技术选型，分别说说模块化，组件化 插件化的优势和区别
单工程模式
问题：
1、实际业务变化非常快，但是单一工程的业务模块耦合度太高，牵一发而动...]]></description><category></category></item><item><title><![CDATA[LruCache原理]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/102947868</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/102947868</guid><author>aiyoufang</author><pubDate>Thu, 07 Nov 2019 09:39:09 +0800</pubDate><description><![CDATA[LruCache（Least Recently Used）算法的核心思想就是最近最少使用算法。
他在算法的内部维护了一个LinkHashMap的链表，通过put数据的时候判断是否内存已经满了，
如果满了，则将最近最少使用的数据给剔除掉，从而达到内存不会爆满的状态。
一. LruCache基本原理
LRU全称为Least Recently Used，即最近最少使用。由于缓存容量是有限的，当有新的数据...]]></description><category></category></item><item><title><![CDATA[StringBuilder>StringBuffer>String详细学习]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/102947817</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/102947817</guid><author>aiyoufang</author><pubDate>Thu, 07 Nov 2019 09:35:51 +0800</pubDate><description><![CDATA[String：
public final class String
    implements java.io.Serializable, Comparable&lt;String&gt;,  CharSequence{}

被声明为 final class，除了hash这个属性其他属性都声明为final，因为它的不可变性，例如拼接字符串时候会产生很多无用的中间对象，如果频繁的进行这样的操作对性...]]></description><category></category></item><item><title><![CDATA[LinkedHashMap原理]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/102947395</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/102947395</guid><author>aiyoufang</author><pubDate>Thu, 07 Nov 2019 09:33:49 +0800</pubDate><description><![CDATA[LinkedHashMap是hashmap和链表的结合体，通过链表记录元素的顺序和连接关系，通过hashmap来存储数据，可以控制元素被遍历的时候输出的顺序（按访问顺序，还是按照插入顺序）。
元素被保存在一个双向链表中，默认的遍历顺序是插入顺序来遍历，通过构造函数的accessOder来控制是否按照访问顺序来遍历，
linkedHashMap总是将最近访问的元素放在队列的尾部，所以第一个元素就是最...]]></description><category></category></item><item><title><![CDATA[Android APK反编译 apktool、dex2jar 和 jd-gui使用教程]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/90180649</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/90180649</guid><author>aiyoufang</author><pubDate>Mon, 13 May 2019 20:25:53 +0800</pubDate><description><![CDATA[Android APK反编译 apktool、dex2jar 和 jd-gui使用教程工具介绍新版本apktool用法dex2jar工具包的使用安装 jd-gui
#最近在研究Android的混淆，需要验证混淆是否成功，就需要apk的反编译了，所以记录下apk反编译的相关工具与使用教程，大家一起学习进步。
工具介绍
apktool
作用：主要查看res文件下xml文件、AndroidManifes...]]></description><category></category></item><item><title><![CDATA[Android Studio 3.0 NDK开发转 CMake编译]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/83659222</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/83659222</guid><author>aiyoufang</author><pubDate>Fri, 02 Nov 2018 17:50:20 +0800</pubDate><description><![CDATA[1.下载好组件：

2.弄好CMakeList.txt
如果没有，就创建一个新的项目，从里面拷贝出来。弄好以后将其放进以下文件夹：

3.没有的话就创建一个项目，copy进来


4.将准备使用的C文件copy到Main目录下的cpp文件夹，如果没有，创建一个。

5.将文件拷贝到app文件夹下，打开编辑，如果只是换个编译方式，将add_Library{}下面的内容全部删除掉，同时add_Libr...]]></description><category></category></item><item><title><![CDATA[从Fragment跳转到Activity然后返回到指定的fragment页面]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/83375918</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/83375918</guid><author>aiyoufang</author><pubDate>Thu, 25 Oct 2018 10:40:16 +0800</pubDate><description><![CDATA[现在有这么一个需求：有两个fragment，分别为FA和FB依附在MainActivity,从FA跳转到页面ActivityC后，点击某个按钮进行一些逻辑后跳转到指定的FB页面。
1.从FA跳转到页面ActivityC
在startActivityForResult(intent, requestCode);方法前面加 getActivity().
可以让FA的宿主MainActivity启动目标...]]></description><category></category></item><item><title><![CDATA[RecyclerView滑动到指定的position位置不准确解决方案]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/82992115</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/82992115</guid><author>aiyoufang</author><pubDate>Wed, 10 Oct 2018 09:39:31 +0800</pubDate><description><![CDATA[RecyclerView滑动到指定的position位置不准确解决方案
 						my_recycler_view.scrollToPosition(i);
                        LinearLayoutManager mLayoutManager = (LinearLayoutManager) my_recycler_view.getLayoutManager();...]]></description><category></category></item><item><title><![CDATA[ButterKnife源码解析]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/80039784</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/80039784</guid><author>aiyoufang</author><pubDate>Sun, 22 Apr 2018 21:31:01 +0800</pubDate><description><![CDATA[1.使用ButterKnife首先在项目的build添加



 implementation 'com.jakewharton:butterknife:8.4.0'

就ok了。 
2.我们直接上代码吧



public class SideslipDeletActivity extends AppCompatActivity {
    @BindView(R.id.my_recyclerV...]]></description><category></category></item><item><title><![CDATA[android触摸事件传递机制]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79916244</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79916244</guid><author>aiyoufang</author><pubDate>Thu, 12 Apr 2018 16:45:22 +0800</pubDate><description><![CDATA[一次完整的事件传递主要包括三个阶段：事件的分发、拦截、消费。 
1.分发（Dispatch）：事件的分发对应着dispatchTouchEvent方法



public boolean dispatchTouchEvent(MotionEvent event)

2.拦截（Intercept）:事件的拦截对应着onInterceptTouchEvent方法，这个方法只在ViewGroup及其子类...]]></description><category></category></item><item><title><![CDATA[Android线程间通信机制]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79861532</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79861532</guid><author>aiyoufang</author><pubDate>Mon, 09 Apr 2018 09:44:18 +0800</pubDate><description><![CDATA[借用别人的图如下： 
 
1.Message 
线程间通信就是在传递消息，Message就是消息的载体。常用的有四个字段： 
arg1 , arg2 , what ,obj 。源代码如下：



 /**
     * User-defined message code so that the recipient can identify
     * what this message is a...]]></description><category></category></item><item><title><![CDATA[JAVA反射]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79802322</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79802322</guid><author>aiyoufang</author><pubDate>Tue, 03 Apr 2018 13:58:31 +0800</pubDate><description><![CDATA[反射：就是通过class文件对象，去使用该文件中的成员变量，构造方法，成员方法。 
Class类： 
    成员变量  Field 
    构造方法  Constructor 
    成员方法  Method 
获取class文件对象的方式： 
    A.Object类的getClass()方法 
    B.数据类型的静态属性class 
    C.Class类中的静态方法



pu...]]></description><category></category></item><item><title><![CDATA[类加载]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79787190</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79787190</guid><author>aiyoufang</author><pubDate>Mon, 02 Apr 2018 11:50:11 +0800</pubDate><description><![CDATA[1.类的加载 
A.当程序要使用某个类时，如果该类还未被加载到内存中，则系统会通过加载，连接，初始化三步来实现对这个类进行初始化。 
B.加载 
就是指将class文件读入内存，并为之创建一个Class对象 
任何类被使用时系统都会建立一个Class对象 
C.连接 
验证 是否有正确的内部结构，并和其他类协调一致 
准备 负责为类的静态成员分配内存，并设置默认初始化 
解析 将类的二进制数据中的...]]></description><category></category></item><item><title><![CDATA[线程、进程学习笔记]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79731422</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79731422</guid><author>aiyoufang</author><pubDate>Thu, 29 Mar 2018 14:48:47 +0800</pubDate><description><![CDATA[1.线程： 
在同一个进程内又可以执行多个任务，而这每一个任务我就可以看出是一个线程。 
线程：是程序的执行单元，执行路径。是程序使用CPU的最基本单位。

单线程：如果程序只有一条执行路径

多线程：如果程序有多条执行路径

2.多线程有什么意义呢？

多线程的存在不是提高程序执行速度，而是为了提高应用程序的使用率。 
程序的执行其实就是在抢占CPU的资源，CPU的执行权。 
多个进程是在抢这个...]]></description><category></category></item><item><title><![CDATA[APK包里面都有什么]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79729877</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79729877</guid><author>aiyoufang</author><pubDate>Wed, 28 Mar 2018 16:36:35 +0800</pubDate><description><![CDATA[1.APK由来的一张图片如下： 


2.解压一个普通的apk如图 
 
3.classes.dex是.des文件。 
4.resources.arsc是resources resources文件。 
5.AndroidManifest.xml是AndroidManifest.xml文件。 
6.res是uncompiled resources。 
7.META-INF是签名文件夹。他的目录如下：...]]></description><category></category></item><item><title><![CDATA[android APK打包过程学习笔记分享]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79716087</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79716087</guid><author>aiyoufang</author><pubDate>Wed, 28 Mar 2018 14:06:10 +0800</pubDate><description><![CDATA[1.先来张图压压惊 




aapt-&amp;gt;aidl -&amp;gt; javac-&amp;gt; dx(dex)-&amp;gt; apkbuilder-&amp;gt; jarsigner-&amp;gt; zipalign 


aapt:Android资源打包工具( …\Android\sdk\build-tools\25.0.0\aapt.exe)。 
     打包资源文件，生产R.java文件，在这个过程中，项目中...]]></description><category></category></item><item><title><![CDATA[Java中的String，StringBuilder，StringBuffer三者的区别]]></title><link>https://blog.youkuaiyun.com/aiyoufang/article/details/79709744</link><guid>https://blog.youkuaiyun.com/aiyoufang/article/details/79709744</guid><author>aiyoufang</author><pubDate>Tue, 27 Mar 2018 14:51:05 +0800</pubDate><description><![CDATA[1.先介绍一下他们三个是什么： 
String:是字符串常量 
StringBuffer:字符串变量（线程安全） 
StringBuilder :字符串变量（线程不安全） 
2.然后介绍一下他们的执行速度： 
StringBuilder  &amp;gt; StringBuffer &amp;gt; String 
3.为啥String的执行速度最慢呢，请听我慢慢道来： 
请看先这段代码

String s = ...]]></description><category></category></item></channel></rss>