app 换肤Reference Android资源篇1:资源编译与打包 Android进阶——从源文件到APK背后的所有主要流程小结 Android资源查找分析 需求 替换 res 目录中的资源; 不重启; 无闪烁。 换肤原理 1、设置 Activity 的 LayoutInflater 为自定义的 Factory2,这样当调用 Activity#setContentView() 方法时会接 2020-08-13
APK 文件加固加固原理 源码: 1、ProtectApp 2、ShellAddProject APK 文件打包流程 创建 APK 文件、壳 1gradlew assembleDebug 加壳流程 加密 DEX 文件 将 APK 文件解压缩 12345678910111213141516171819202122232425262728293031323334public static 2020-08-11
NAS 搭建环境 & 部署 Git 服务端缘起 起初购买 NAS 是因为 2018 年老家盖房,我负责弱电部分。除了电话、有线电视、网络、网络电视以外,还有监控系统。 对于监控系统,我原计划是在室外部分采用有线传输的萤石C5S及其公有云,在室内部分采用无线传输的米家智能摄像机及私有云,私有云由 NAS 实现。由于摄像机部署在室内时采集的数据属于敏感数据,所以私有云存储是很有必要的。 经过调研,最终 NAS 购买了威廉通TS-451+,并 2020-07-12
热修复Reference 全面解析 Android 热修复原理 基于QZone dex分包技术的热修复插件详解 与插件化区别 补丁包中的类和资源在宿主中已经存在,只是有 bug 需要被修复。 各框架实现原理 Andfix(兼容复杂已废弃) Java 中的类,方法,变量,对应到虚拟机里的实现是 Class,ArtMethod,ArtField。Andfix 是把旧方法的 ArtMethod 2020-04-13
插件化ClassLoader 加载 dex 文件 继承关系 BootClassLoader: 加载 Android Framework 层的 class 文件。 PathClassLoader: 加载 dex 文件,包括 jar、zip、apk 中的 dex 文件。 DexClassLoader: 加载 dex 文件,包括 jar、zip、apk 中的 dex 文件。 ClassLo 2020-04-09
《剑指 Offer》算法题(20/68)旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转,该数组的最小值为 1。 思路: 输入数组可以看成是两个递增数组的连接,其中第 2 个数组中的每一个值都不大于第 1 个数组中的任意一个值,且最小值是第 2 个数 2020-03-23
《剑指 Offer》算法题(10/68)Reference 输入某二叉树的前序遍历和中序遍历的结果,重建此二叉树。 剑指offer最优解Java版-二叉树的下一个结点 赋值运算符函数 Java 不支持用户自定义操作符重载。 实现 Singleton 模式 设计一个类,我们只能生成该类的一个实例。 饿汉式 123456789public class SingleTon{ private static Sing 2020-03-16
数据结构Reference 数据结构与算法(java) Java 8系列之重新认识HashMap 红黑树深入剖析及Java实现 深入理解Java并发之synchronized实现原理 ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock 拜托,面试别再问我堆(排序)了! 数据结构比较 数据结构选择 Jav 2020-03-12
设计模式Reference 大话设计模式 设计模式串联 创建型 单例模式(Singleton) 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 有个人自己开了一家餐厅,这家餐厅只有一个老板。 123456789101112131415161718192021222324// InputMethodManager 用于控制显示或隐藏输入法面板public final clas 2020-03-03
TensorFlow 张量排序Reference 深度学习与 TensorFlow 2 入门实战 TensorFlow-2.x-Tutorials sort、argsort 1234567891011arr = tf.range(10)arr1 = tf.random.shuffle(arr)arr21 = tf.sort(arr1, direction='DESCENDING')arr22 = 2019-05-28