自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 (1)目录

一、编程基础[1-1] 编程基础之数据基础[1-2] 编程基础之数据结构[1-3] 编程基础之查找与排序[1-4] 编程基础之类笔试面试题[1-5]编程之美二、Java[2-1] Java之基本知识[2-2] Java之设计模式[2-3] Java之面试宝典三、J2EE[3-1] J2EE之基本知识四、Android[4-1] android之基本知识[...

2015-03-16 09:51:02 4471 2

转载 (2.1.4.1)刨根问底HTTP与WebSocket的关系

本文整理自简书作者“TheAlchemist”的技术文章,内容有修订。感谢原作者,原文链接在文末。 1、前言 本文的上篇《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 2、系列文章 本文是系列文章中的第5篇,本系列文章的大纲如下: 《WebSocket详解(一):初步认识WebSocket技术》...

2020-08-03 22:45:16 25

原创 (2.3.8)LRU算法四种实现方式介绍

RU全称是LeastRecently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。一、实现LRU 1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。...

2020-08-03 22:42:46 15

转载 (2.1.8.4)图解LinkedHashMap原理

1 前言LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理2 LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<St..

2020-08-03 22:29:50 31

转载 (2.1.8.2)图解HashMap原理(1.8之前)

1. 前言本文的源码是基于JDK1.7,JDK1.8中HashMap的实现,引入了红黑树,在后面的文章会写到。后面还有一篇LinkedHashMap的解析:图解LinkedHashMap原理。2. 使用与实现2.1 基本使用HashMap很方便地为我们提供了key-value的形式存取数据,使用put方法存数据,get方法取数据。 Map<String, String> hashMap = new HashMap<String, String>().

2020-08-03 22:28:44 18

转载 (4.1.21.9)HTTPS 加密过程演变分析

1、前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢。这其实是个误解:当今主流的移动端IM数据通信,总结下来无外乎就是长连接+短连接的方式,长连接就是众所周之的TCP、UDP、WebSocket(WebSocket的本质还是TCP),而短连接就是HTTP/HTTPS了。即时通讯IM应用中,短连接的安全跟长连接相比,同样很重要。市面上的主流短连接通信方式,都已逐步从HTTP过渡到HTTPS了(iOS上的应用就更...

2020-07-27 10:44:12 29

转载 (4.1.21.8)HTTPS 加密算法 和 中间人攻击

1、引言随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一(详见:《苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?》)。所以,无论是即时通讯IM还是其它应用,在网络安全意识增强的今天,很多场景下使用HTTPS是肯定没错的。对于即时通讯IM的开发人员来说,长连接用TLS这没疑问,短连接用HTTPS也没问题,但我想问你一个最基础的面视问题:HTTPS到底用的是对称加密还是非对

2020-07-27 10:41:13 33

原创 (5.2.4)http请求过程

http请求过程可分为以下几个部分:建立TCP连接,浏览器向服务器发送请求命令,服务器应答,服务器关闭TCP连接以及浏览器接受到服务器响应的数据一、建立TCP连接在 HTTP 工作开始之前,Web 浏览器首先要通过网络与 Web 服务器建立连接,该连接是通过TCP来完成的,该协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议,因此 Internet 又被称作是TCP/IP网络。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接.

2020-07-26 23:33:36 19

原创 (2.1.1.6)JVM之对象分配:栈上分配 & TLAB分配

文章目录一、栈上分配1.1 技术基础: 逃逸分析1.2 标量替换1.3 栈上分配示例1.4 JVM参数解析二、TLAB 分配2.1 分配策略2.2 JVM指令参考文献Java对象实例和数组元素都是在堆上分配内存的吗?答:不一定。满足特定条件时,它们可以在(虚拟机)栈上分配内存这和我们平时的理解可能有些不同。虚拟机栈一般是用来存储基本数据类型、引用和返回地址的,怎么可以存储实例数据了呢?这是因为Java JIT(just-in-time)编译器进行的两项优化,分别称作逃逸分析(escape ana

2020-07-26 23:05:24 19

原创 (2.1.8.6)ArrayList原理分析(重点在于扩容)

51 概述52 涉及过程521 规划质量管理522 实施质量保证523 控制质量53 输入输出54 工具技术541 规划质量管理 8542 实施质量保证 3543 控制质量 4 过程 输入 工技 输出 规划质量管理 项目管理计划、干系人登记册、风险登记册、需求文件、事业环境因素、组织过程资产 成本效益分析、质量成本、七种基本质量工具、标杆对照、实验设计、统

2020-07-26 22:09:11 25

原创 (2.3.15)Java的不可变类

61 概述611 项目经理必须具备的技能6111 人际关系技能 116112 领导风格与管理风格6113 权力6114 冲突612 项目团队工作分配与激励62 涉及过程621 规划人力资源管理622 组建项目团队623 建设项目团队624 管理项目团队63 输入输出64 工具技术641 规划人力资源管理 5642 组建项目团队 5643 建设项目团队 7644 管

2020-07-25 18:12:04 37

原创 (4.6.25.2)Android中为什么主线程不会因为Looper.loop的死循环卡死

线程中死循环本来就是没问题的,可以稳定运行ANR是由于Message执行超时卡死的Looper.loop的死循环其实是托管,实现了事件驱动,正常响应各种消费事件要完全彻底理解这个问题,需要准备以下4方面的知识:Process/Thread,Android Binder IPC,Handler/Looper/MessageQueue消息机制,Linux pipe/epoll机制。总结一下主要有3个疑惑:Android中为什么主线程不会因为Looper.loop()里的死循环卡死?.

2020-06-16 12:00:34 56

原创 (4.6.25.1)Android ANR监测方案解析

目录一、ANR的触发条件二、Android对ANR的监控机制三、应用ANR检测方案3.1 BlockCanary3.2 ANR-WatchDog3.3 SafeLooper3.4 FileObserver四、总结ANR(Application Not Responding),应用程序无响应,会严重影响用户体验。作为测试开发人员更深入的理解ANR原理,可以更好的针对各类卡顿性能问题制定对应的监控策略。本文简单总结了Android系统的ANR监测与现有的监测方案的原理对比。

2020-06-16 11:51:16 56

原创 (4.6.25)Android ANR源码原理分析

ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。一

2020-06-16 11:42:18 60

原创 (4.6.10.3)Binder传输数据大小限制

61 概述611 项目经理必须具备的技能6111 人际关系技能 116112 领导风格与管理风格6113 权力6114 冲突612 项目团队工作分配与激励62 涉及过程621 规划人力资源管理622 组建项目团队623 建设项目团队624 管理项目团队63 输入输出64 工具技术641 规划人力资源管理 5642 组建项目团队 5643 建设项目团队 7644 管

2020-06-15 00:10:26 57

原创 (4.2.33)Google出品的Protocol Buffer

一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21

2020-06-11 10:51:08 51

原创 (15.1.23)Feed流设计

一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21

2020-06-05 16:51:08 57

原创 (4.1.15.3)子线程更新UI校验 viewRootImpl的checkThread

一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21

2020-06-05 15:56:46 77

转载 (4.6.19.8)杀不掉的知乎 - 聊一聊 Android 的多任务保活

public class DisplayUtil { public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int

2020-06-05 15:28:42 316

原创 (4.6.10.2)Android LoadedApk详解

文章目录一、LoadedApk的构建函数和成员变量二、LoadedApk的在ActivityThread中的获取三、LoadedApk的mApplication创建Application实例四、LoadedApk的mResources创建Resources实例是ActivityThread中进行四大组件等启动过程中的重要中间变量LoadedApk对象是APK文件在内存中的表示。 Apk文件的相关信息,诸如Apk文件的代码和资源,甚至代码里面的Activity,Service等组件的信息我们都可以通过此

2020-05-30 18:11:51 83

原创 (4.6.12)Android Resource详解

参考文献Android资源访问机制–getResource()Android插件化之-Resource Hook

2020-05-28 12:22:54 76

转载 (4.1.10.5)ThreadLocal原理

什么是ThreadLocal?如果你从字面上来理解,很容易将ThreadLocal理解为『本地线程』,那么你就大错特错了。首先,ThreadLocal不是线程,更不是本地线程,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。它是每个线程独享的本地变量,每个线程都有自己的ThreadLocal,它们是线程隔离的。接下来,我们通过一个生活案例来开始理解ThreadLocal。一、使用场景 场景1:每个线程需要一个独享的对象,通常是工.

2020-05-27 11:15:54 44

原创 (4.0.22.9)RecyclerView中的itemView的Move事件被Cancle

一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21

2020-05-24 17:46:46 93

原创 (4.0.22.8)RecyclerView的空白区域点击响应

一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21

2020-05-24 15:01:46 118

转载 (1.2.5.10)30张图带你彻底理解红黑树

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!原文:RecyclerView: Grid with headerGridView和ListView有许多的相似之处,不过也有一个显著的不同:没有header和footer。现在它们两者都可以

2020-05-24 01:24:06 584

原创 (2.1.8.1)Hashtable源码分析

一、参考文章 原文地址:Tasks and Back Stack 本地地址:Java代码.\android-sdk-windows\docs\guide\topics\fundamentals\tasks-and-back-stack.html二、术语解释 1.task:一系列

2020-05-24 01:02:37 612

原创 (4.0.23.11)Viewpager与FragmentStatePagerAdapter重刷数据引发的源码分析和原生缺陷解决方案

文章目录一、问题二、源码分析2.1ViewPager#dataSetChanged2.1.1 ArrayList.ViewPager.ItemInfo. mItems2.1.2 Adapter.getItemPosition(ii.object)2.3 什么时候触发PagerAdapter#instantiateItem2.3.1 populate()2.4 FragmentStatePagerAdapter解决方案方案一:不可行方案二:可行方案三:可行参考文献一、问题public class Feed

2020-05-23 14:50:58 67

原创 (4.0.23.10)源码分析已嵌套的Fragment遇到ViewPager

近期在修改页面结构过程中,遇到了一个特殊的问题,现在做个总结。一、背景介绍先说下Feed首页的页面结构,为了满足运营多种动态化的需求,Feed首页采用了以下图所示的页面结构,从页面到最小粒度的控件可以分成5个层级HomePageActivity负责解析跳转参数、页面埋点、初始化等相关逻辑TabContainerFragmentHomepage真正的界面主体是通过该Fragment去承载的,内部是可以切换的一个tablayout;满足了运营对“HP上的tabs可以动态配置,灵活添加”

2020-05-23 14:37:51 641

原创 (14.1.2)小程序

踩坑块元素width的默认值是父元素的100%,一般情况下不用设置就可以满足需求。height的默认值是里面内容的高度,也就是auto,一般写代码的时候也不需要给元素设置高度,如果设置了高度而且设置的高度不够的时候,就会出现元素重叠的情况重叠外面一层 position:relative;里面的 position:absolute 就可以高度设置50%时是有问题的,此时可以使...

2020-05-22 19:01:44 54

原创 (4.6.32) LayoutInflater详解

参考文献LayoutInflater——你应该知道的一点知识

2020-04-26 12:31:03 61

原创 (14.1.1)CSS和JS入门

踩坑块元素width的默认值是父元素的100%,一般情况下不用设置就可以满足需求。height的默认值是里面内容的高度,也就是auto,一般写代码的时候也不需要给元素设置高度,如果设置了高度而且设置的高度不够的时候,就会出现元素重叠的情况重叠外面一层 position:relative;里面的 position:absolute 就可以width:100% 会导致滚动高度...

2020-04-26 11:32:34 36

原创 (14.1) 跨端语言对比

weex rn这些都是使用jscore作为解释控制器,通过jscore和native的交互,引导native讲dom树渲染为原生控件树,同时jscore也能对逻辑代码进行处理,并在适当时机通知native刷新dom因为是原生控件,所以并不是所有的css语法都支持weex更适合以单页面发布,是一种比较轻量级的方案,多页面问题较大,而rn比较适合整个模块的多页面编写dynamic...

2020-04-26 11:21:25 73

原创 (4.0.22)嵌套RecyclerView中内层RecyclerView的缓存机制分析

一、getChangedScrapViewForPosition(mState.isPreLayout())二、 getScrapOrHiddenOrCachedHolderForPosition(int position, boolean dryRun)mAttachedScrap用于布局过程中屏幕可见表项的回收和复用没有大小限制,但最多包含屏幕可见表项mChildHelp...

2019-08-08 16:42:32 179

原创 (4.4.16)use a ContentProviderClient obtained using acquireUnstableContentProviderClient

acquireContentProviderClient 与 acquireUnstableContentProviderClient 的差别How and when to use a ContentProviderClient obtained using acquireUnstableContentProviderClient?If you use acquireContentPro...

2019-01-25 14:28:36 705

原创 (4.2.50)一种业务控件实现的方式

文章目录一、UiViewPool 业务控件的视图控件池1.1 业务控件UiType和视图控件ViewType的区别与转换1.1.1 业务控件UiType和视图控件ViewType转换器UiTypeMapToViewType1.2 BaseUiViewPool 基础控件池1.2.1 功能:生成视图控件View并返回1.2.2 功能:初始化 持有视图控件ViewMakers 的 HashMap1.2....

2019-01-22 17:16:39 199 1

原创 (2.1.8.8)SparseArray稀疏数组与ArrayMap源码分析

文章目录一、稀疏数组的由来1.1 源码解析1.2 构造方法1.3 put(int key, E value)1.4 get(int key)1.5 gc()二、android.support.v4.util.ArrayMap2.1 构造函数2.2 put(K key, V value)参考文献SparseArray,通常来讲是Android中用来替代HashMap的一个数据结构。准确来讲,是用...

2019-01-22 15:22:33 193 1

原创 (4.2.49)微信APM:Matrix源码浅析

文章目录一、官方地址二、Demo分析三、整体结构四、matrix-android-lib4.1 Plugin监控能力4.2 IssuePublisher被监控事件观察者4.3 Utils 辅助能力4.4 Matrix对外接口五、ResourceCanary内存泄露检测六、IOCanaryPlugin七、matrix-trace-canary八、matrix-sqlite-lint九、APK Che...

2018-12-28 17:33:14 3882

原创 (4.1.27.20)JNI原理

文章目录System的load和loadLibrary方法System的loadSystem的loadLibrary0loader的findLibrary方法DexPathList的构造函数DexPathList的findLibrarynativeLoaded方法LoadNativeLibraryLoadNativeLibrary的part1LoadNativeLibrary的part2LoadN...

2018-12-14 15:31:20 157

原创 (4.1.28.7)HTTPS加密原理

我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议;使用浏览器打开网页,也是利用 HTTP 协议。看来 HTTP 真是使用广泛啊,但是,HTTP 是不安全的。利用网络抓包工具就可以知道传输中的内容,一览无余。比如我经常会使用 Fiddler 来抓包,搜集一些有趣的 API 接口。那么问题来了,如何保证 HTTP 的安全性呢?基本上所有的人...

2018-11-15 15:18:44 204

原创 (4.6.31)Android Bitmap 详解

文章目录一、从相册加载一张图片1.1 打开相册加载图片1.2 根据Uri得到Bitmap二、Bitmap 内存计算方式2.1 density 和 densityDpi2.2 getByteCount处理格式字节2.3 Density处理转换映射字节2.4 精度调整三、想办法减少 Bitmap 内存占用3.1 Jpg 和 Png3.2 压缩图片方案一(Compress)压缩文件3.3 压缩图片方案二...

2018-11-13 17:46:22 265 1

提示
确定要删除当前文章?
取消 删除