Recent posts

algorithm

7.5 数据结构与算法

6 minute read

数据结构 Java数据结构 List LinkedList, 链表实现 Vector, 数组实现, 读写安全, 通过synchronized实现 栈(Stack) Set LinkedHashSet HashSet,...

7.6 头条算法习题

16 minute read

7.6.1 字符串 无重复字符的最长子串 (给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。, 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子...

7.7 数据结构-Java Map

5 minute read

数据结构-Map Map HashMap Node<K,V>[] table, 使用数组存储 put(), 将key对应value放到map, 如果map包含对应key则把之前value替换 ...

7.8 数据结构-Java Queue

1 minute read

数据结构-Queue 队列 BlockingQueue(接口, 阻塞队列) ArrayBlockingQueue Object[] items, 数组存储队列元素 a...

7.10 动态规划

1 minute read

坐标型动态规划 状态: f(x)表示从起点走到坐标x, f[x][y]表示我从起点走到坐标x,y; 方程: 研究走到x, y这个点之前的一步; 初始化: 起点; 答案: 终点 Minimum Path Sum

7.11 读书<算法第4版>

less than 1 minute read

初级排序算法 选择排序 找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置 插入排序 将每一元素插入到其他已经有序的...

7.9 高频基础算法题

less than 1 minute read

高频基础算法题 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素; ```java

7.12 字符串

less than 1 minute read

Rabin Karp算法 将sourceStr转成int, 将targetStr转成int, 即通过hash算法把字符串转成int sourceStr的子串与targetStr的hashcode一致, 则校验子串内容是否一致, 若一致则找到符合的子串并返回, 因为是hash...

7.13 二分法

1 minute read

二分法模板 给定已排序的数组, 和target, 查找数组中任意一个/第一个/最后一个位置的target, 如果找不到则返回-1

android

1.1 View绘制流程

5 minute read

View绘制流程与原理 绘制起点ViewRootImpl#performTraversals()

1.10 SurfaceFlinger

4 minute read

1.10.1 基础概念 * Image Stream Producers(图形流的生产者) 如OpenGL ES, Canvas 2D * Image Stream Consumers(图形流的消费者) SurfaceFilnger, 使用OpenGL和HW Composer组合surfaces * Window...

1.11 Native Debugger

less than 1 minute read

Native Debugger实现 sigaction()注册捕捉signal(SIGABRT[调用abort函数发的信号], SIGBUS[非法地址, 内存地址对齐出错], SIGFPE[算数错误], SIGILL[非法指令], SIGPIPE[管道破裂], SIGSEGV[访问未分配内存]) 通过s...

1.12 ANR场景与触发流程

less than 1 minute read

1.12.1 ANR场景 * Service Timeout, 20S无响应 * BroadcastQueue Timeout, 10S未执行完成 * InputDispatching Timeout, 输入5秒无响应

1.13 ContentProvider机制

less than 1 minute read

ContentProvider使用 ```java // 1. 继承ContentProvider public class XXXContentProvider extends ContentProvider { public Uri insert(Uri uri, ContentValues ...

1.14 Bitmap杂谈

1 minute read

1.14.1 Bitmap优化 Bitmap Config配置 配置inDensity和inTargetDensity inJustDecodeBounds预判Bitmap大小及使用inSampleSize压缩 2.3版本inNativeAlloc的使用

1.15 ListView & RecyclerView

less than 1 minute read

ListView 流程 核心概念, activeViews缓存当前激活(显示)的View, scrapViews缓存废弃(移除屏幕)的View 两次onLayout() 第一次: layoutChild() -> 由于getChi...

1.16 进程

less than 1 minute read

1.16.1 优先级 前台进程 进程持正在与用户交互的Activity。 startForeground() 进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法 可...

1.17 Activity & Fragment生命周期

less than 1 minute read

Activity onCreate() onStart() onNewIntent(), 当startActivity()且Activity是singleTop, 或重新启动ActivityStack栈顶的Activity被调用… onResume() onPause() onStop(...

1.2 动画流程与原理

less than 1 minute read

1.2.1 属性动画 ValueAnimator动画本质是帧刷新时, 提供相关刷新回调, 让业务可以调整View的属性 object(属性动画)必须要提供setXxx方法 TimeInterpolator(时间插值器), 根据时间的百分比来计算出当前属性值改变的百分比 TypeEvaluator...

1.3 init进程初始化流程

less than 1 minute read

初始化流程 Init.cpp 解析init.zygote.rc[parse_service] 启动main类型服务[do_class_start()] 启动zygote服务[service_start()] 创建Zygote进程[fork()] 创建Zygote Socket[creat...

1.4 Zygote启动流程

less than 1 minute read

启动流程 解析init.zygote.rc中的参数, 创建AppRuntime并调用AppRuntime#start方法 调用AndroidRuntime的startVM()方法创建虚拟机, 再调用startReg注册JNI函数 通过JNI方式调用ZygoteInit#main(), 第一次进入Ja...

1.5 SystemServer启动流程

less than 1 minute read

启动流程 创建SystemServer进程 创建AMS, PMS, LS, DMS服务 创建PMKS, WMS, IMS, NMS, DBMS, FPS等服务 AMS, PMS, LS, DMS调用systemReady 启动systemUI, 剩余服务调用systemReady, 启动Wa...

1.6 Binder机制

1 minute read

1.6.1 Binder驱动 流程 init(), 创建/dev/binder设备节点, 调用binder_init(), 注册misc设备, 即调用misc_register() open()获取Binder Driver的文件描述符, binder_open(), 打开...

1.7 ActivityManagerService

2 minute read

1.7.1 启动流程 startBootstrapService[SystemServer.java启动], (一)设置SystemServiceManager, (二)设置AMS的Installer, (三)初始化AMS相关的PMS, (四)设置SystemServer AMS创建, 创建Activi...

1.8 PackageManagerService

less than 1 minute read

1.8.1 启动流程 1. `mSystemServiceManager#startService(Installer.class)` 启动`installer`服务 -> `PackageManagerService#main()`创建`PackageManager`服务并注册到ServiceManage...

1.9 WindowManagerService

less than 1 minute read

1.9.1 启动流程 * WMS添加window的过程主要功能是添加Surface, 管理Surface布局以及Z轴排序问题 * `Systemserver`中`startOtherServices()` -> `WindowManagerService#main()`, 其中包含以下操作 * `W...

2.1 GC

1 minute read

2.1.1 Java内存模型与内存管理 Young Memory Generation (年轻代) Eden S0 (幸存区, Eden满后通过Minor GC将对象移动到这) S1 (幸存区, Eden满后通过Minor GC将对象移动到这) ...

2.11 Serializable & Parcelable

less than 1 minute read

Serializable & Parcelable区别 Parcelable 效率高, 内存小, Binder的载体, 设计用于跨进程访问, 不能序列化到本地或者网络 Serializable 反射实现, 效率低, 消耗内存多, 保存到...

2.12 equals & hashcode

less than 1 minute read

equals & hashcode hashcode用于HashMap等hash存储容器 hashMap会使用equals判断key是否相同, 因此需要根据规则复写hashcode equals 相同, hashcode一定相等, 基于这个点, equals复写, 一定要复写hashcode

2.2 多线程

2 minute read

2.2.1 锁 Java对象头和Monitor 对象在内存分为, 对象头、实例数据和对齐填充 对象头实现synchronized, 轻量锁和重量锁在Mark Word结构中定义 ObjectMonitor, wait状态的线程加入_WaitSet, 等待锁blo...

2.3 类文件结构

less than 1 minute read

类文件结构 魔数(Magic), 存放魔数和版本信息, 保证Java虚拟机轻松分辨Java和非Java文件 Class文件的版本(Version), Java类文件的版本信息 常量池(Constant Pool), 存放字符串、类名、方法名、接口名称、final常量以及外部类的引用信息等常量。常量池...

2.4 类加载器

less than 1 minute read

2.4.1 Bootstrap ClassLoader 启动类加载器, C++实现, 将JAVA_HOME下的\lib中能被虚拟机识别的类库(比如rt.jar)加载到虚拟机内存中

2.7 热修复方案

1 minute read

2.7.1 类加载方案 原理:基于类加载器, DexClassLoader, 修改dexElements元素的位置实现热修复; 流程: 1. 获取当前应用的ClassLoader, 即BaseDexClassLoader, 2. 通过反射获取DexPathList属性对象PathList, 3. 通过P...

2.9 Java异常

less than 1 minute read

2.9.1 异常捕获 Thread#setDefaultUncaughtExceptionHandler(), 类方法 Thread#setUncaughtExceptionHandler, 实例方法 备注: 未try, catch的异常, 即uncaught的情况下, UncaughtExcept...

2.13 Java SPI & WMRouter解析

less than 1 minute read

2.13.1 SPI SerivceLoader#load() -> LazyIterator#hasNext() -> Classloader#getSystemResource查找META-INF/services/目录下的Java文件 -> ServiceLoader#par...

2019-01-31 2.15 RxJava

less than 1 minute read

2.15.1 观察者模式 Observable(被观察者) Observer(观察者) subscribe(订阅)、(事件) onComplete(), 事件队列结束 onNext()发事件, 需要触发onComplete() onError(), 事件队列异常

2.17 Matrix源码解析

2 minute read

2.13.1 IO Canary 流程图 找到Hook函数, 通过PLT Hook方案 (ELF Hook方案), hook掉posix的open、read、write、close函数

2.19 AOP

1 minute read

2.13.1 AspectJ Join Points(程序中的关键函数或代码段) | Join Points | 说明 | | —————– | ——– | | method call | 函数调用, 调用的地方 | | method execution | 函数执行...

2.21 ResourceManager源码解析

less than 1 minute read

2.13.1 Drawable加载流程 Context#getResource().getDrawable(R.xxx.xxx) ComtextImpl#getResource - > ResourcesManager#getResource -> ResourcesMan...

2.26 Android Hook

1 minute read

PLT Hook - Android Native Hook IO Canary使用的方案, 当动态链接的ELF程序里调用共享库的函数时, 第一次调用先到PLT表查找, PLT表中再跳到GOT表获得该函数的地址, 最终通过_dl_runtime_resolve获得函数的实际地址, PLT Hook通过直接修改GO...

2.29 gradle和打包

less than 1 minute read

2.29.1 gradle project, gradle待编译过程即project task, project包含一系列task, 如Java源码编译等 task的依赖关系, 定义task, 并指定assemble依赖于task xxx, 当assemble执行时, 就会先处理t...

2.31 MultiDex原理

6 minute read

2.31.1 编译流程原理 MultiDexTransform(gradle中将multiDexEnabled设置为true, 则执行)

2.34 Android面试锦集

less than 1 minute read

2.34.1 Java基础总结 String、StringBuffer、StringBuilder区别 String字符常量, 不可变的好处, 线程安全, 保证安全访问 StringBuffer、StringBuilder字符变量; StringBuffer优势在#appe...

2.37 读书

4 minute read

第3章-对象的共享 3.1 可见性 只要有数据在多个线程之间共享, 就使用正确的同步 3.1.4 Volatile变量 volatile变量的典型用法, 检查某个状态标记以判断是否退出循环, vlatile boolean asleep; wh...

2.38 Java并发笔记

5 minute read

2.38.1 synchronized实现原理 实现原理 同步方法, 锁的是实例对象, 即对象锁, 方法表中的ACC_SYNCHRONIZED字段标识, 并使用该方法的对象在JVM内部对象表示的Klass作为锁对象 静态同步方法, 锁的是类对象, 即类锁, 方法表中的ACC...

2.39 Android性能优化笔记

1 minute read

2.39.1 启动加速 冷启动(App在设备刚启动或者应用被kill后首次启动即冷启动) 冷启动的开始, 系统会执行以下三个任务 加载启动App 启动后显示空白window 创建app的process ...

2.40 Android线程优先级

less than 1 minute read

2.40.1 Linux线程优先级 Linux进程优先级 Linux进程优先级图 来源于杂谈Android线程优先级

2.42 读书

less than 1 minute read

对象通用方法 覆盖equals方法的类必须覆盖hashcode方法, 否则违反Object#hashCode的通用约定, 导致该类无法结合基于散列的集合正常运作

2.43 Android匿名共享内存

2 minute read

Android的匿名共享内存 Android可以使用Linux的一切IPC通信方式,包括共享内存,不过Android主要使用的方式是匿名共享内存Ashmem(Anonymous Shared Memory), MemoryFile是Android为匿名共享内存而封装的一个对象,这里通过使用MemoryFil...

2.44 泛型

less than 1 minute read

引入泛型 类型安全 泛型主要目标是提高Java程序的类型安全 编译器可检查出因Java类型不正确导致的ClassCastException异常 符合越早出错代价越小原则 消除强制类型转换 直接得到目标类型, 消除许多强制...

2.45 反射原理

1 minute read

反射与RRTI 反射, 即提供运行时获取类信息, 调用方法等能力, 提供动态化功能; 可用于hook, 动态代理, 依赖注入等技术 RRTI(Run-Time Type Identification)运行时类型识别, 作用是运行时识别一个对象的类型和类信息; 1). 传统的”RRTI”,它假定我们在编译...

2.46 Java方法调用原理

less than 1 minute read

方法调用 方法调用即确定调用方法的版本, 一切方法调用在Class文件存储都是符号引用; 而直接引用则是方法实际内存地址

2.47 ARCore开发指南

1 minute read

启用ARCore 向manifest添加AR必备或AR可选条目 AR可选应用(包含可选AR功能)

2.48 读书<深入理解Java虚拟机3>

17 minute read

自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 2.2.1 程序计数器 程序计数器(Program Counter Register)是当前线程所执行的字节码的行号指示器 ...

cpp

2.47 NDK基础与调试

1 minute read

调试 addr2line, 定位异常堆栈代码行 获取异常堆栈中的汇编地址信息, 这里的目标地址是000a4f3c

35 Makefile入门与深入

6 minute read

跟我一起写 Makefile(一) makefile定义整个工程的编译规则, 好处是”自动化编译”, make则是解析makefile的命令工具 程序的编译和链接 把源文件(.c, .cpp)编译成中间代码文件(UNIX下为.o文件)的过程称为编译(compile); 将大量中间文...

english

34 英语生词

1 minute read

生词表 chiefly adv. 主要地,首先 例句: he is remembered chiefly for his sonatas 同义词: above all(首先), mainly(主要)

34.1 The Gulf Crisis

1 minute read

生词 Gulf n. 海湾 Crisis n. 危机 例句: The Gulf Crisis (海湾危机) Negotiation n. 谈判, 交涉 confrontation n. 对抗, 对照, 对比 例句...

34.2 How to Increase Vocabulary

less than 1 minute read

How to Increase Vocabulary Read, (such as New York Times) effect way is think of a similar word to replace Learn the pronunciation when l...

ios

11 Swift

参考 Swift 语言指南 Swift 专题页

10.1 JSPatch原理补充说明

基础原理 引用自JSPatch 实现原理详解 原文: JSPatch 能做到通过 JS 调用和改写 OC 方法最根本的原因是 Objective-C 是动态语言,OC 上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法 ...

mathematics

opengl

EGL介绍与简单GLSurfaceView实现思路

less than 1 minute read

EGL EGLDisplay: 系统显示ID或者句柄, 是对显示设备的抽象, 可以理解为前端显示窗口(Front Display) EGLContext: OpenGL ES图形图形上下文, 代表OpenGL状态机, OpenGL指令的执行环境 EGLSurface: 系统窗口或FrameBuff...

OpenGL二维图像绘制流程说明

1 minute read

Vertex Shader Shader Program必须包含Vertex Shader和Fragment Shader, 其中Vertex Shader负责告诉GPU图像顶点的位置, Fragment Shader负责告诉GPU某个位置的颜色值 Vertex Shader

37.3 音视频直播

less than 1 minute read

流程图 图片来源于《视频直播技术详解》系列之一:开篇

os

7.2 select, poll, epoll

less than 1 minute read

7.2 select/poll/epoll select, int select(), 监控三类文件描述符, writefds, readfds, exceptfds, 调用select函数后阻塞, 直到描述符准备就绪或者超时, 函数返回 poll, int poll(), 与select类似, 没有描...

7.4 http

1 minute read

7.4.1 header 常用http头

7.10 mmap

less than 1 minute read

mmap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系

7.9 TCP&HTTP面试题

less than 1 minute read

HTTP 常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。 PUT: 传输文件,报文主体中包含文件内容,...

7.11 用户态和内核态的区别

less than 1 minute read

区别 内核态:cpu可以访问内存的所有数据,包括外围设备, 内核态运行内核代码 用户态:只能受限的访问内存,且不允许访问外围设备, 运行用户代码

7.12 共享内存

less than 1 minute read

共享内存的方式 mmap()系统调用 Posix共享内存 系统V共享内存

7.13 Linux内存管理

1 minute read

内存寻址方式的发展历程 直接寻址, 程序都是通过硬编码的形式绝对定位到内存地址。这种情况下的程序都有明显的缺点:可控性弱、难以重定位、难以维护等 分段, 段的地址存放在寄存器中, 把 1M 的空间分成数个 64K(16位寄存器可寻址)的段来管理, 8086 处理器为程序使用的代码段、数据段、堆栈段分别提...

7.14 VFS虚拟文件系统

less than 1 minute read

VFS 虚拟文件系统(Virtual File System, VFS), 为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节

7.15 Linix进程

less than 1 minute read

进程基础 进程是操作系统分配资源的基本单位, 也是程序执行过程的实体。程序是代码和数据的集合,本身是一个静态的概念,而进程是程序的一次执行的实体,是一个动态的概念 进程描述符(为了管理进程,内核需要对每个进程的属性和所需要做的事情,进行清楚的描述, 即task_struct) task_struct...

web

2019-02-05 14 CSS基础语法

1 minute read

selector(选择器) selector{property:value}, 例子:h1{color:red;font-size:14sp} 派生选择器, 根据元素在其位置的上下文样式定义样式…

2019-02-12 16 JavaScript进阶

1 minute read

Node.Js 基础模块 fs文件读写模块 读文件require('fs').readFile('sample.txt', 'utf-8', function (err, data){}); 写文件require('fs').w...

2019-03-29 21 WebView性能优化

2 minute read

WebView性能优化 WebView耗时优化 WebView预加载, WebView池 IO异步化(资源、网络请求与WebView初始化加载分离) HTML页面耗时优化 静态直出, CDN直接输出可展示交互HTML(HTML不包含...

2019-05-28 23 Webpack

1 minute read

Webpack 模块化打包, 查找项目所有依赖文件, 并使用loader处理 通过npm start直接运行Webpack

2019-07-22 35 读深入了解Node.js包与模块机制

less than 1 minute read

模块机制 遵循CommonJs的require, 模块上下文, exports Node.js核心模块 文件模块 三方模块 项目模块 模块寻径 当前文件目录的node_modules目录 若1没有符合的模块, 则...