2020
12 月
11 月
- 11-26 Kotlin核心编程 - lambda 和集合
 - 11-24 Kotlin核心编程 - 类型系统
 - 11-17 Kotlin核心编程 - 面向对象
 - 11-13 Kotlin核心编程 - 基础语法
 - 11-12 扫盲系列 - Android 主题
 - 11-07 扫盲系列 - 从一段代码理解高阶函数和扩展函数和内联函数
 - 11-06 扫盲系列 - Jetpack 之Livedata
 
10 月
- 10-22 卧槽系列 - JNI NewStringUTF called with pending exception java.lang.NoSuchMethodError 或许并不是你想的那样
 - 10-21 代码整洁之道 - 对象和数据结构
 - 10-15 代码整洁之道 - 格式
 - 10-14 卧槽系列 - junit.framework.AssertionFailedError No tests found in ** 或许并不是你想的那样
 - 10-08 代码整洁之道 - 注释
 
09 月
- 09-30 卧槽系列 - Hilt遇到的 InstantiationException *** has no zero argument constructor
 - 09-28 代码整洁之道 - 函数
 - 09-20 代码整洁之道 - 有意义的命名
 
08 月
- 08-25 扫盲系列 - kotlin 之协程 Flow 和Channel
 - 08-20 扫盲系列 - Kotlin 中的标准库函数 run、with、let、also、apply、use、takeif
 - 08-15 扫盲系列 - kotlin 之协程相关函数
 - 08-09 扫盲系列 - kotlin 之协程简介
 
07 月
06 月
05 月
04 月
- 04-20 源码分析 - Glide4 之 缓存原理
 - 04-17 源码分析 - LeakCanery
 - 04-15 扫盲系列 - APK 打包流程
 - 04-12 工作填坑 - Retrofit 上传图片
 - 04-11 使用 Python 美化文本,使中文与英文,数字,标点之间添加空格
 - 04-07 扫盲系列 - layoutInflater中 inflate() 参数总结
 
03 月
- 03-27 扫盲系列 - Mac 上 更新 rvm 版本
 - 03-22 工作填坑 - OkHttp 支持 TCP 请求
 - 03-16 源码分析 - OkHttp
 - 03-10 工作填坑 - Retrofit 中对 addCallAdapterFactory() 的理解
 - 03-09 工作填坑 - Retrofit 同时支持对 Json 格式和原始数据
 - 03-05 Flutter 填坑 - Android 原生项目嵌入 Flutter
 - 03-01 Flutter 疑问 - FlutterPluginRegistry 无法转换为 FlutterEngine
 
02 月
01 月
2019
12 月
11 月
- 11-20 卧槽系列 - Fragment already added 或许并不是你想的那样
 - 11-01 源码分析 - Glide4 之 into()
 - 11-01 源码分析 - Glide4 之 with() 和 load()
 
10 月
- 10-21 街题系列 - 进程和线程的区别
 - 10-17 源码分析 - ANR 的机制
 - 10-16 街题系列 - 接口和抽象类的区别
 - 10-13 Pro Git 笔记
 - 10-07 源码分析 - Glide4 之 概况
 - 10-01 从一个小例子理解 Binder 整个流程
 
08 月
- 08-23 LeetCode刷题 - Z 字形变换
 - 08-14 LeetCode刷题 - 最长回文子串
 - 08-12 LeetCode刷题 - 寻找两个有序数组的中位数
 - 08-12 LeetCode刷题 - 买卖股票的最佳时机
 - 08-01 扫盲系列 - Java 泛型
 
07 月
06 月
- 06-30 街题系列 - Java 两个线程交替打印
 - 06-15 扫盲系列 - RxJava 2.0 -- Flatmap 原理
 - 06-12 扫盲系列 - RxJava 2.0 -- 线程切换原理
 - 06-03 源码分析 - Andrid 输入法框架 之 InputConnection 对象创建
 
05 月
- 05-25 源码分析 - Andrid 输入法框架 之 键盘启动的流程
 - 05-20 源码分析 - Andrid 输入法框架 之 启动服务
 - 05-12 Android 性能优化 -- 内存优化
 - 05-01 View 的一些知识点
 
04 月
03 月
- 03-26 工作填坑 - 水平方向的 RecycleView 嵌套竖直方向的 RecycleView 滑动冲突解决办法
 - 03-25 Android 四大组件之 Service
 - 03-15 Android 四大组件之 Activity
 - 03-12 Android 四大组件 概况
 
02 月
01 月
- 01-27 Activity 之 setContentView() 探究
 - 01-15 扫盲系列 - AppBarLayout
 - 01-10 Window 创建过程
 - 01-02 数据结构和算法之美 - 排序
 
2018
12 月
11 月
- 11-13 Mac 上 terminal 快捷键
 - 11-12 拜拜了,七牛。 GitHub 才是图床的王道
 - 11-12 关于乞讨
 - 11-07 工作填坑 - Android 高版本中 AlarmManager , PendingIntent 的坑
 
10 月
09 月
08 月
07 月
- 07-27 Android 性能优化 -- Bitmap 优化
 - 07-17 Android 性能优化 -- 布局优化
 - 07-12 扫盲系列 - JVM 类加载器 ClassLoader
 - 07-08 扫盲系列 - GC 算法
 
06 月
- 06-29 View 的绘制 - draw 流程, invalidate 流程 以及 requestLayout 流程
 - 06-20 View 的绘制 - Layout 流程
 - 06-12 View 的绘制 - Measure 流程
 - 06-09 View 的绘制 - 概览
 
05 月
- 05-12 Android 线程池
 - 05-09 街题系列 - 启动一个不在 AndroidManifest 中注册的 Activity
 - 05-05 我的代码块也能显示行数,滑动,高亮和一键复制
 - 05-02 扫盲系列 - Java 多线程
 - 05-02 扫盲系列 - Java 锁机制
 - 05-01 View 的事件分发机制
 
04 月
- 04-23 扫盲系列 - Groovy 语法
 - 04-22 街题系列 - HashMap 实现原理。
 - 04-15 adb 常用资源
 - 04-14 街题系列 - java 中 "==" 和 equals() 的区别
 - 04-12 街题系列 - Java 是值传递还是引用传递
 - 04-11 扫盲系列 - TCP/IP
 - 04-09 卧槽系列 - Android Studio 中 asserts 位置
 - 04-08 扫盲系列 - JVM 的垃圾回收
 - 04-02 Atom 使用技巧集合
 - 04-02 街题系列 - new String("abc") 创建了几个对象?
 
03 月
- 03-29 Markdown 语法集合
 - 03-29 扫盲系列 - MVP, MVC , MVVC 介绍
 - 03-29 扫盲系列 - Data Binding
 - 03-28 免输密码登录服务器的 Shell 脚本
 - 03-27 Ubuntu 14.04 安装 jekyll
 - 03-27 Android Studio 使用技巧集合
 - 03-26 源码分析 - Retrofit
 - 03-25 扫盲系列 - RxJava 基本用法
 - 03-25 扫盲系列 - OkHttp 基本用法
 - 03-21 Android 内存管理机制
 - 03-20 扫盲系列 - Retrofit 基本用法
 - 03-19 Linux 卸载和安装 Atom
 - 03-17 Window 基本概念
 - 03-17 Android 内存泄漏总结
 - 03-17 Bitmap 的加载和 Cache 处理
 - 03-17 AsyncTaks , HandlerThread , IntentService 小结
 - 03-17 Android IPC 简介
 - 03-17 Android Binder 总结
 - 03-17 Activity 的生命周期和启动模式
 - 03-17 Android 性能优化