Gas Station
2017-10-14
加油站问题,LeetCode 链接: https://leetcode.com/problems/gas-station/description/ There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations. …
分析和解决手机重启若干次后,虚拟按键、状态栏等失效的问题
2017-09-19
Android 有种特殊的 App 叫老化测试工具,一般包括若干次重启、存储读写、音频播放、视频播放等流程,是一个预装在手机的 APK,出厂时会去掉。 测试做老化测试挂机 24 小时后,手机概率性出现问题,现象主要包括** Home 键和 Recent 键不能用、无法下拉快捷设置和通知栏、锁屏失效、开发者模式无法打开**等。复现概率很低,每台重启 50 次,10 台中出现 0 ~ 3 台。诡异的是,我这边也会每天挂机,但一台都没有复现。 …
工厂模式 Factory Pattern
2017-09-09
工厂模式可分为简单工厂模式 Simple Factory Pattern、工厂方法模式 Factory Method Pattern 和 抽象工厂模式 Abstract Factory Pattern。 简单工厂模式 简单工厂模式实际上是对产品创建逻辑做了统一的封装,包含如下角色: …
在 Android Java 核心库 libcore 中打印 Log
2017-08-30
Android Java 核心库中是无法直接使用 android.util.Log 的,添加后编译不通过,因为 framework 中的 Java API 依赖于 Java 核心库。 在 Android 7.0 之前,Java 核心库源码在libcore/luni/下,luni 代表 lang、util、net、io,是 Java 中最常见的包;Android 7.0 中,核心库在libcore/ojluni/下,oj 代表 OpenJDK。 …
求两个有序数组的中位数 Median of Two Sorted Arrays
2017-07-24
这是 LeetCode 上的一道题,求两个有序数组的中位数: https://leetcode.com/problems/median-of-two-sorted-arrays/description/ Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. Follow up: The overall run time complexity should be O(log (m+n)). Example 1: Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2. …
装饰器模式 Decorator Pattern
2017-06-22
在面向对象编程中,要扩展一个类或对象的功能,可以使用继承机制。 举例来说,咖啡店可能会提供拿铁、卡布奇诺、美式咖啡、意式浓缩等供客人选择,我们可以先定义一个 Coffee 类,并在其中声明价格、成分等方法,然后为每种咖啡继承它:Latte、Cappuccino、Americano、Espresso 等,每个类中都实现自己的一套价格、成分信息,这些类都是预先定义好的。 …
Android 消息机制原理
2017-06-02
概述 Android 的 UI 控件不是线程安全的,因此规定访问 UI 必须在主线程(即 UI 线程)中进行。ViewRootImpl 的checkThread()方法对 UI 操作进行验证,如果在后台线程中访问 UI,程序就会抛出异常。 …
单例模式 Singleton Pattern
2017-05-26
许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。单例模式限制只有一个实例存在。 通常单例模式有两种构建方式: 懒汉方式,全局的单例实例在第一次被使用时创建,不试图获取这个实例就不会创建,从而实现了延迟加载 …