<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yetaoii的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yetaoii</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yetaoii]]></copyright><item><title><![CDATA[java原子类详解]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/107493600</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/107493600</guid><author>yetaoii</author><pubDate>Tue, 21 Jul 2020 17:16:56 +0800</pubDate><description><![CDATA[java原子类详解
什么原子类
原子类是具有原子性的类，原子性的意思是对于一组操作，要么全部执行成功，要么全部执行失败，不能只有其中某几个执行成功。
原子类作用
作用和锁有类似之处，是为了保证并发情况下的线程安全。
相对于锁的优势


粒度更细
原子变量可以把竞争范围缩小到变量级别,通常情况下锁的粒度也大于原子变量的粒度


效率更高
除了在高并发之外，使用原子类的效率往往比使用同步互斥锁的效率更高，因为原子类底层利用了CAS，不会阻塞线程。


原子类种类
在JDK中J.U.C包下提供了种类丰富的原子类，]]></description><category></category></item><item><title><![CDATA[java线程池详解及源码解析]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/107386816</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/107386816</guid><author>yetaoii</author><pubDate>Thu, 16 Jul 2020 16:49:05 +0800</pubDate><description><![CDATA[线程池详解
文章目录线程池详解线程池参数常用的六种线程池FixedThreadPoolCachedThreadPoolScheduledThreadPoolSingleThreadExecutorSingleThreadScheduledExecutor几种线程池参数对比ForkJoinPool核心问题拒绝策略拒绝时机AbortPolicyDiscardPolicyDiscardOldestPolicyCallerRunsPolicy常用几种阻塞队列LinkedBlockingQueueSynchronou]]></description><category></category></item><item><title><![CDATA[Activity、Window和View的关系源码分析]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/106443006</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/106443006</guid><author>yetaoii</author><pubDate>Sat, 30 May 2020 16:20:09 +0800</pubDate><description><![CDATA[Activity、Window和View的关系
文章目录Activity、Window和View的关系Activity的创建Window的创建View的创建WindowManager的addViewmWindowSession.addToDisplay触摸事件是怎么传递到Activity的总结
要说它们之间的关系，就要从Activity的创建说起
Activity的创建
在这里我们暂时不分析具体的startActivity启动过程，直接看创建Activity的部分,调用startActivity新启动了一个]]></description><category></category></item><item><title><![CDATA[AIDL设计思路]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/106125159</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/106125159</guid><author>yetaoii</author><pubDate>Thu, 14 May 2020 17:48:31 +0800</pubDate><description><![CDATA[AIDL设计思路
文章目录AIDL设计思路AIDL1.实现一个自定义的AIDL2.IDE自动生成IMyService.java文件3.本地IPC-Stub本地的使用4.远端IPC使用5.aidl整体流程
AIDL
1.实现一个自定义的AIDL
// IMyService.aidl
package com.yetao.testaidl;

interface IMyService {
    /**
     * Demonstrates some basic types that you can use a]]></description><category></category></item><item><title><![CDATA[Android资源加载流程]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/105694444</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/105694444</guid><author>yetaoii</author><pubDate>Wed, 22 Apr 2020 22:07:18 +0800</pubDate><description><![CDATA[Android资源加载流程
从使用到原理
使用
首先来看一个从资源string获取字符串的使用
public class ResourceActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        supe...]]></description><category></category></item><item><title><![CDATA[ffmpeg推拉流优化方案]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/105639287</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/105639287</guid><author>yetaoii</author><pubDate>Mon, 20 Apr 2020 17:02:46 +0800</pubDate><description><![CDATA[ffmpeg推拉流优化方案
文章目录ffmpeg推拉流优化方案一、卡顿优化设备老旧视频流音视频不同步网络二、延时优化三、传输协议优化四、首屏秒开优化服务器做优化客户端优化五、弱网优化六、DNS劫持优化七、服务端cdn优化
主要从以下几点来优化

卡顿优化
延时优化
传输协议优化
首屏秒开优化
弱网优化
DNS劫持优化
服务端cdn优化

一、卡顿优化
视频播放端卡顿主要有以下几点原因：
设备老旧
...]]></description><category></category></item><item><title><![CDATA[RxJava2核心源码解析]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/105295553</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/105295553</guid><author>yetaoii</author><pubDate>Fri, 03 Apr 2020 16:15:57 +0800</pubDate><description><![CDATA[文章目录RxJava2源码解析一、简介二、从代码看设计1、核心设计--观察者模式2、锦上添花--装饰者模式2.1  发射源切换线程2.2 订阅者切换线程总结
RxJava2源码解析
一、简介
RxJava是一款基于事件流的链式调用，支持切换线程，使用简单。
接下来，会根据RxJava2版本进行分析。本文不会讲具体详细的操作符使用，主要从下面几个问题去看待源码是如何设计实现的

怎么做到响应事件发射...]]></description><category></category></item><item><title><![CDATA[源码分析Handler+Looper+MessageQueue消息模型]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/105119159</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/105119159</guid><author>yetaoii</author><pubDate>Thu, 26 Mar 2020 15:05:21 +0800</pubDate><description><![CDATA[文章目录源码分析Handler消息模型Handler职责1.Message的发送者2.Message的处理者3.Message的移除者Looper职责Looper的创建Looper循环MessageQueue职责构造函数和部分成员变量消息入队列消息出队列消息移除退出消息循环MessageMessage设计复用总结
源码分析Handler消息模型
Handler
职责
从开发者角度来看，可分为

M...]]></description><category></category></item><item><title><![CDATA[基于OKhttp下载工具YTDownloader]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/105002863</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/105002863</guid><author>yetaoii</author><pubDate>Sat, 21 Mar 2020 01:24:10 +0800</pubDate><description><![CDATA[YTDownloader
最近对网络下载这一块比较感兴趣，所以专门整理和写了一个简易的下载库–YTDownload
特性

基于Retrofit和Okhttp3来请求网络
基于RxJava，支持链式调用
支持断点续传，默认开启
支持串行、和并行批量下载
支持进度回调
自动校验服务器文件是否更改(前提，url对应文件还未下好)

集成
在app的build.gradle中添加依赖
    //仓库m...]]></description><category></category></item><item><title><![CDATA[理解Java锁机制]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104842550</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104842550</guid><author>yetaoii</author><pubDate>Fri, 13 Mar 2020 15:48:38 +0800</pubDate><description><![CDATA[理解Java锁机制
文章目录理解Java锁机制1. synchronizedsynchronized的几种使用方式synchronized的实现原理Monitor2. lock3. volatile关键字3. 乐观锁-悲观锁（主线程锁不锁住同步资源）CAS机制问题悲观锁4. 自旋锁和适应性自旋锁(均不阻塞线程，是否有自旋次数限制)5. 公平锁-非公平锁（是否允许插队）6. 可重入锁-非可重入锁（是...]]></description><category></category></item><item><title><![CDATA[深入理解java锁机制]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104818237</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104818237</guid><author>yetaoii</author><pubDate>Thu, 12 Mar 2020 14:26:22 +0800</pubDate><description><![CDATA[深入理解java锁机制
文章目录深入理解java锁机制前言1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁Java对象头Monitor无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语
前言
Java提供了种类丰富的锁，每种锁因其特性的不同，在适当的场景下能够展现出非...]]></description><category></category></item><item><title><![CDATA[生产消费模型-lock和synchronized实现]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104792425</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104792425</guid><author>yetaoii</author><pubDate>Wed, 11 Mar 2020 11:14:27 +0800</pubDate><description><![CDATA[生产消费模型-lock和synchronized实现
lock实现AB循环输出
同一Lock锁双条件分别控制AB线程
public class TestThread {

    public static void main(String[] args) {
        //new出可重入lock锁
        Lock lock = new ReentrantLock();
     ...]]></description><category></category></item><item><title><![CDATA[ThreadLocal-从源码看设计]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104777164</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104777164</guid><author>yetaoii</author><pubDate>Tue, 10 Mar 2020 16:24:00 +0800</pubDate><description><![CDATA[ThreadLocal源码分析
一、ThreadLocal定义
ThreadLocal提供线程局部变量。这些变量与它们在每个线程中访问，每个线程有自己的、独立初始化的变量副本，实例通常是私有的类中希望将状态与线程关联的静态字段。即在每个显示访问当前实例对象，都会获取各自线程对应的值，不会相互影响，不存在线程安全问题，也不会影响程序执行的性能。由于在各自线程存储对应的值，所以内存消耗会比直接使用实际...]]></description><category></category></item><item><title><![CDATA[HTTP1.0、1.1和2.0区别]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104755939</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104755939</guid><author>yetaoii</author><pubDate>Mon, 09 Mar 2020 16:54:03 +0800</pubDate><description><![CDATA[HTTP1.0、1.1和2.0区别
Http原理请点击阅读 点击查看
HTTP 1.0
Http1.0是老的HTTP协议标准，规定了客户端和服务器只能保持短暂的连接，请求完成后就完毕，每次客户端请求都需要建立一次TCP连接，请求完就断开，不保存每次请求的状态。由于连接和关闭会消耗大量服务器和客户端资源，严重影响了客户端和服务端的性能。例如加载一个网页地址，有很多JS和CSS文件，每次请求都建立一次...]]></description><category></category></item><item><title><![CDATA[HTTP和HTTPS的理解]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104755012</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104755012</guid><author>yetaoii</author><pubDate>Mon, 09 Mar 2020 16:21:14 +0800</pubDate><description><![CDATA[HTTP和HTTPS的理解
本文有部分摘录自他人博客、书籍资料，请提出。
一、HTTP

1.简介
HTTP（HyperText Transfer Protocol）即超文本传输协议，是一种详细规定了浏览器和万维网服务器之间互相通信的规则，它是万维网交换信息的基础，它允许将HTML（超文本标记语言）文档从Web服务器传送到Web浏览器。
首先我们需要了解网络OSI模型七层协议
(1)网络七层协议
...]]></description><category></category></item><item><title><![CDATA[螺旋算法]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104691341</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104691341</guid><author>yetaoii</author><pubDate>Fri, 06 Mar 2020 10:56:13 +0800</pubDate><description><![CDATA[螺旋算法

算法题目
题来源–LeetCode（https://leetcode-cn.com/problems/spiral-matrix）
给定一个包含 m x n 个元素的矩阵（m 行, n 列），请按照顺时针螺旋顺序，返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7...]]></description><category></category></item><item><title><![CDATA[深入c++层分析Serializable和Parcelable的区别]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104681872</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104681872</guid><author>yetaoii</author><pubDate>Thu, 05 Mar 2020 19:21:21 +0800</pubDate><description><![CDATA[源码角度分析Serializable和Parcelable的区别
一、Serializable的源码分析
Serializable是为了保存对象的属性到本地文件、网络传输等方便数据传输，由于对应使用了ObjectInputStream和ObjectOutputStream进行读写，所以在读取过程中会使用了反射以及产生过多的临时变量。
由于Serializable的性能过低，不太适用于性能资源相对紧...]]></description><category></category></item><item><title><![CDATA[fastJson序列化和反序列化流程]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/104658188</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/104658188</guid><author>yetaoii</author><pubDate>Wed, 04 Mar 2020 17:31:33 +0800</pubDate><description><![CDATA[fastJson序列化和反序列化流程
一、核心源码
1、SerializeWriter
该类主要用于序列化，有以下成员变量
public final class SerializeWriter extends Writer {
  /**
     * 储存序列化结果的字段
     */
    protected char buf[];

    /**
     * 写入缓存的长度
    ...]]></description><category></category></item><item><title><![CDATA[源码分析Gson序列化和反序列化流程]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/103511873</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/103511873</guid><author>yetaoii</author><pubDate>Thu, 12 Dec 2019 16:46:08 +0800</pubDate><description><![CDATA[源码分析Gson序列化和反序列化流程
一、核心源码
1.核心对象— TypeAdapter
	类型适配器，里面
	public abstract class TypeAdapter&lt;T&gt; {
	
		/**
		 *	该方法用于toJson时写入数据序列化
		 **/
		public abstract void write(JsonWriter out, T value) thro...]]></description><category></category></item><item><title><![CDATA[Java虚拟机内存回收]]></title><link>https://blog.youkuaiyun.com/yetaoii/article/details/79807409</link><guid>https://blog.youkuaiyun.com/yetaoii/article/details/79807409</guid><author>yetaoii</author><pubDate>Tue, 03 Apr 2018 18:27:16 +0800</pubDate><description><![CDATA[感谢周志明所著的《深入理解Java虚拟机》一书。下面附上了一些我自己的理解。当说到java堆的垃圾回收，就会想到它的内存分配和回收算法。下面就详细介绍我的理解。一、内存分配。1.新对象优先分配到新生代Eden区中    内存优先分配在新生代Eden区中，该区域经过一次GC，大概会有98%新对象被回收掉，剩余的进入Survivor区中。2.大对象直接进入老年代    大对象是指需要大量连续内存空间的...]]></description><category></category></item></channel></rss>