WeakHashMap原理分析 HashMap 是开发中经常使用到的集合类,Java中还有一个类似的类叫 WeakHashMap,本文来分析下 WeakHashMap 的实现原理。 原理 从key的存储上分析,在put操作时,如果不存在key值,则新建一个 Entry: public V put(K key, V value) { Object k = maskNull(key); i... Posted by Codeboy on September 26, 2020 浮点精度(二) 之前有写过一篇浮点精度的文章,介绍了浮点数能够精确表示的整数,在整数超过一定大小后,将不能精确被表示,这次来聊一下浮点能表示的小数部分。先看一段简单的代码: public class Test { public static void main(String[] args) { float a1 = 0.3f; double a2 = 0.3; ... Posted by Codeboy on September 3, 2020 Java之NoClassDefFoundError错误 Java中的异常(含错误)主要包含Exception 和 Error 两种,这里简单的分析一下NoClassDefFoundError这个异常,JVM的类加载机制的委托行机制,决定了类加载器只加载一次,子类加载器不会再加载父类加载器已经加载过的类,在一些特定条件下,会出现编译时可以加载到类,运行时不可以加载到类,这时候就会出现 NoClassDefFoundError异常;与之相似的两个异常... Posted by Codeboy on July 25, 2020 Js内置函数之parseInt 前言 将一个字符串转化为数值是很经常的操作,但是你真的了解Js中的 parseInt 吗?先看几个例子: parseInt("123"); // 123 parseInt("12,3"); // 12 parseInt(1/0); // NaN parseInt("123", 8); // 83 parseInt("012"); // 12 parseInt(012); // 10 pa... Posted by Codeboy on June 26, 2020 Android 7.0+抓包 在Android 7.0+系统上,开发者可以配置不信任用户证书,进而不能进行https的数据包抓取,相关文档可以查看https://developer.android.com/training/articles/security-config 。 怎么才能像6.0-的系统一样,使用Charles等工具抓包呢? 原理 将用户的证书放进系统证书中,不过这一步的操作需要root权限。 准备... Posted by Codeboy on May 2, 2020 AOSP Mac平台编译 前言 编译Android源码是一个相对容易的事件,有存储空间和合适的编译环境即可。最近想查看一些应用的布局(Layout), 需要修改Android系统的debuggable属性,这个操作需要设备具有root权限,想着自己有一台pixel XL,何不编译个userdebug版本的rom,除了精简的的应用外,debuggable和root属性也是直接含有的,后续有其他地方调整的话,可以直接修... Posted by Codeboy on April 18, 2020 本机号码一键登录 前言 在移动app使用手机号码登录的场景中,传统模式的步骤如下: 输入手机号码 接收验证码 输入接收到的验证码 点击登陆 最近看到很多应用都采用了一种新的模式—本机号码一键登录 ,这种模式对于用户来说,只需要确认下手机号码是否正确,点击确认登陆即可,即需要操作传统模式的最后一步,方便快捷,抖音、淘宝等应用均已经接入。 那么本机号码一键登录 的原理是什么呢?下... Posted by Codeboy on March 14, 2020 Json中的key类型 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯... Posted by Codeboy on March 7, 2020 端口转发 前言 随着移动App的庞大,自动化测试越来越重要,常见的移动端测试框架有很多, Appium 是比较流行的一个 ,在电脑端安装 Appium Server , 将测试手机连接该电脑后,可以通过api/http请求操作手机。最近尝试了下自动化测试,整体结构图如下: 每一台PC连接一些手机,控制中心(Control Center)负责将指令下发给PC上的 Appium Server,最终... Posted by Codeboy on February 29, 2020 基于ElasticSearch的内容检索系统 前言 gitbook 是目前流行的电子书制作工具,很多文档基于此构建,团队内部文档也是一样的。由于模块比较的多且复杂,各个模块的文档分别对应一个gitbook,职责明确了,但查找起来却麻烦很多,同时gitbook 查看文档的方式相对简单,不能根据文档相关性进行排序。 需求 多个gitbook文档能够提供统一查询入口 全文检索,根据相关性排序 提供文章访问热度 支持文章... Posted by Codeboy on September 28, 2019 Andorid开发调试之run-as 前言 Android开发中,经常会将一些文件放在内部目录中,即/data/data/pacakge_id中,db文件也在该目录中 ,在非root的手机中,我们无法直接访问 /data/data 下的文件,调试起来非常的不方便,解决的办法有几种: 找一台root的手机,想看什么看什么 断点调试,可以稍微麻烦的看到本应用的目录及文件 r... Posted by Codeboy on September 10, 2019 Arrays.asList之UnsupportedOperationException 前言 Java中经常会数组转化为List的场景,Java中的Arrays 中提供了一个 asList 方法可以快捷的转化,我们来看下面一段代码: import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { ... Posted by Codeboy on August 20, 2019 内容共享 背景 工作时有两台主力电脑,一台Mac,一台Ubuntu,之前经常基本上是Mac共享内容给Ubuntu,也有了剪切板同步这篇文章。随着Ubuntu上做的事情越来越多,也需要反向共享,结合日常工作中也需要和很多业务方同学来进行文本、图片的共享,于是决定做一个简单内容共享的Web应用。 目标 多设备间可以访问,共享文本和图片。 支持房间,可以针对特定的共享有单独的区域。 支持... Posted by Codeboy on July 29, 2019 HashSet.add覆盖问题 背景 假定对象A、B的hash值相同,equals方法也想等,那么向 HashSet 中顺序添加A、B,最后集合中保留的是A或者B或者是A和B呢? 编码 看以下代码,分析下输出: package me.codeboy.test.hash; import java.util.Objects; /** * hash bean * Created by yuedong.li on ... Posted by Codeboy on July 4, 2019 Andorid AppLink配置 前言 客户端开发中,经常会遇到appA跳转appB的场景,之前Android中使用比较多的是 DeepLink,ios中对应的是 Scheme, 两者基本类似,在用户触发某个操作后,系统提示是否打开对应app,用户选择同意后进入指定app。 DeepLink 一方面流程上稍微长一些,另一方面存在scheme 被别人占用等问题,在Android6.0,有了 AppLink, 可以完美解决上... Posted by Codeboy on June 29, 2019 Javascript的undefined和null Javascript中的 undefined 和 null 非常的常见,它们有什么不同呢?首先看几个简单的示例: var a = undefined; var b = null; console.log(a == b); console.log(a === b); console.log(typeof(a) == typeof(b)); console.log(a + 1); consol... Posted by Codeboy on June 17, 2019 Older Posts →