Git 必知必会:原理剖析(二)
书接上文,在上一篇文章记录Git 必知必会:原理解析 中记录了 Git 原理中的一部分信息,但在后续的学习过程中,还有部分内容需要记录,但有了此篇内容。 一、Git 中的引用从上面的 Git 仓库树目录存储结构图中,可以看到,通过 commit 的 SHA-1 值,我们就一步一步查看所有的提交记录,以及项目中的文件内容。但 40 位的字符串几乎不可能记忆下来,也没有什么实质性的意义。那如果我们能给这些值取上一个别名,那是不是就能够很容易找到以及使用了。 在 Git 中,此功能 ...
Git 必知必会:原理剖析(一)
作为程序员,最常用的版本管理工具便是 Git。但我相信大多数人和我一样,从没有认真了解过其具体实现的原理。但了解 Git 的原理,能有助于我们工作更好的使用 Git。下面,让我们一起来了解 Git 中的一些概念,以及实现。 一、概念Git 是一个分布式版本控制软件,在使用的过程中,与 CVS 类不同,不需要使用服务端,就可以实现版本控制。但在我们常用的使用过程中,依然会一个中间服务器作为 original 来实现代码的托管、控制 等,整个流程如下图所示: 从图中可以看到,虽 ...
深入理解 Java 字符串编码
近期在工作中,遇到了一段历史代码,在代码中,将一个字符串进行加密,得到一个 byte 数组, 在代码中,这个 byte 数组 需要存储到 文件中,但代码却是用这个 byte 数组 创建了一个 String ,然后在将 String 写入到文件中。 聪明的你应该发现问题了,byte 数组 直接转成 String 会有问题,一般的处理方法是将 byte 数组 使用 Base64 编码,然后将编码后的字符串写入文件中,在使用的时候,先使用 Base64 解码。 可是,为什么 byt ...
深入 Android 混淆实践:多模块打包爬坑之旅
在做 SDK 开发的时候,会将 SDK 中不同功能进行模块化拆分,分解成不同的模块,在对外提供 SDK 时,将多个 AAR 文件交付给使用方。 来看一下这个场景,假设现在 SDK 有 A模块、B模块 两个模块,其中 B模块 依赖 A模块 。现在,对这两个模块进行打包,并且要开启混淆。发现了吗?要让 B模块 中的类,能正常使用 A模块 中的接口/类,我们需要将 A模块 中的接口/类进行 keep ,才能满足相应的要求。但是 A模块 中的那些接口/ ...
深入 Android 混淆实践:ProGuard 通关秘籍
使用 Java 编写的源代码在编译时会生成 CLASS 文件,而 CLASS 字节码的规则非常的标准,按照对应的格式能够很好的反编译出原代码。市面上也存在很多很好用的工具,来帮助我们进行反编译并阅读 CLASS 中的代码逻辑。为了更好的保护代码安全,混淆是最容易做的一件事情。 针对 java 的混淆,有一个开源项目 ProGuard 就是常用的混淆工具。他可以对代码进行 压缩、优化 、混淆。本文将基于在使用过程中,用到的知识点进行记录。 ProGuard 工作流程在 ProG ...
iTerm2 常用配置
工欲善其事,必先利其器。当我们拿到一台新电脑,为了让自己的效率更高,当然需要做一些配置。本文将介绍对于终端的一些配置。 1. 安装 iTerm2Mac OS 有自己自带的终端软件 Terminal ,但其功能相对较弱。在 Mac 上,有一个三方终端 iTerm2 可以使用。当拿到新电脑时,当然是第一时间装上这个软件。 iTerm2 下载地址:https://www.iterm2.com/ 对于 iTerm2 来说,我有一个非常常用的功能就是分屏,快捷键为 command + ...
在 Android 中使用 Lambda 的原理解析
Java 在 Android 的发展过程中,扮演了非常重要的角色。在有 Kotlin 之前,开发语言是使用的 Java ,即使现在使用的 Kotlin , 也是会编译成 Java 的字节码。但受限于 Oracle 的版权,Google 在 Android 上针对 Java 版本的升级,支持的都很不积极。因此,在不同的 Android 版本中,对 JVM 的语法支持不一样?那要如何让高版本的语法,在低版本中的系统中运行呢? 本文以 Java 8 中的 Lambda 表达式运行在 ...
干货,深度解析 Base64 !
Base64 是一种常见数据编码方式,常用于数据传输。对于移动开发者来讲,网络请求中会经常使用到。对 JSON 熟悉的同学都知道,JSON 的序列化工具都不支持将 byte 数组直接放入 JSON 数据中,针对这种二进制数据,在处理的时候,都需要进行 Base64 编码,然后将编码后的字符串放入到 JSON 中。 从刚入行到现在,Base64 是一个非常常用的功能,从网上“搬运” Base64 编解码工具到使用 Android SDK 中内置的 Base64。虽熟练使用,但终 ...
这么多年,Android 虚拟机到底干了些什么?
在 Android 操作系统中,有一个非常重要的核心部分: Android Runtime。说到这个,我相信很多人都听到过 Dalvik、ART、JIT 以及 AOT。或许好多人也和我之前一样,并不了解这些名词,以及这些名词背后做了些什么事情。本文从笔者了解到的信息,记录了 Android Runtime 中设计的一些概念,以及应用。 1. 虚拟机在了解上面提到的名词之前,我们需要先知道什么是虚拟机, 它和 Android 又有什么样的渊源。 在 2017 年的 Google ...
Android 网络配置
HTTP 与 HTTPS自2017年1月1日开始,苹果要求所有的APP都要使用 HTTPS 进行网络请求,否则无法上架。但是 HTTPS 在 2000 年就已经确定下来。10多年过去,现在依然还有很多网站使用着 HTTP 协议。 HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器 ...