SharedPreferences源码分析

前言 SharedPreferences作为Android应用配置项的存储,给上层提供了非常方便的接口,这篇Post将从源码层面分析SharedPreferences实现的细节。 获取SharedPreferences 获取SharedPreferences实例是通过ContextImpl.getSharedPreferences(String name, int mode)方法来完成的。 这里的sSharedPrefs是ContextImpl的静态成员,类型为ArrayMap<String, ArrayMap<String, SharedPreferencesImpl>>,从这个ArrayMap里,我们可以通过包名获取另一个ArrayMap packagePrefs,其中包含文件名到SharedPreferencesImpl的映射。 »

LeetCode题解

最近开始刷LeetCode了,这里整理一下部分题解,方便自己复习。这篇Post会随着时间持续更新。 Two Sum 这题很简单,最naive的方法就是两层循环,O(n2)的时间复杂度,但是这显然不是最优解,所以这里用了一个HashMap来把查找的时间复杂度降到O(1),key为nums[i],value为数组下标i,所以只要遍历两次数组即可得到结果。 Longest Substring Without Repeating Characters 比较简单的动态规划,用一个HashMap记录每个字符上次出现的位置,用一个变量记录当前字符串的起点位置, »

TLS握手过程

最近和朋友吃饭的时候,聊到了HTTPS,HTTPS其实就是基于TLS建立了安全信道的HTTP协议。所以可以说,HTTPS最重要的就是TLS的握手过程。这篇post整理了一下TLS的握手过程。 前置知识 这里要先讲几个概念,在后面对于TLS握手过程的描述中会用到这几个概念。 HTTPS TLS和SSL的关系 SSL是90年代Netscape弄出来的一套东西,为的是解决HTTP协议明文传输数据的问题。后来SSL慢慢成了事实上的标准,于是IETF就把SSL标准化了,名字叫做TLS,TLS 1.0其实就是SSL 3.1。所以SSL和TLS经常被放在一起写成SSL/TLS,因为这两个名词在现在其实就是同一个东西。HTTPS是使用TLS的HTTP协议。 证书及信任链 »

但行好事,莫问前程

首先来解读一下这个标题,但行好事,莫问前程,出自《增广贤文》。我的理解是,只要做好眼前的事情,而不要过多的忧虑以后会怎么样。如果一直都想着遥远的目标,就会很容易厌倦现在的生活,反复质疑现在做的事情有没有意义。做好眼前的每一件事,终归会有实现目标的那一天。 我一直觉得,我的生活和别人无关,所以很少把感想之类的写在博客上。我也并不是一个多愁善感的人,但是最近发生的事情,确实让我无奈和感伤。最近和女朋友分手了,虽然时间并不长,但是我个人觉得,这是一段耐人寻味的经历。 我和她算是小时候的玩伴,中间十多年没见,但是其实彼此都躺在对方的微信里, »

Port leveldb to Android

As leveldb has already implemented platform-dependent interfaces, porting leveldb is pretty simple. Cross compile the source code on Linux or build with NDK are both OK. »