素数筛法和哥德巴赫猜想
2019-01-03
起因是看到了这个帖子如果高中生能证明哥德巴赫猜想,会被清华北大数学系保送吗? - 知乎,emmm… 本文的目标是筛选 32 位无符号整数(约 40 亿)中的所有素数,并在此范围内验证哥德巴赫猜想。 …
CSAPP 读书笔记
2018-12-24
第一个大于等于某个正整数的 2 的幂
2018-07-13
在计算机中,2 的幂是神奇的数,很多运算可以用位操作来完成。 求第一个大于等于某个正整数的 2 的幂,例如 1023 则返回 1024,这个算法在 Java 中哈希表分配桶就有所运用。 容易想到的一个实现是将 2 的幂一个个拿来比较,不过看起来不够优雅。 Java 源码给出了位运算的实现: …
在 Java 中使用 Map 计数的几种姿势
2018-06-02
一个老生常谈的问题:在 Java 中,如何使用 Map 给对象计数,例如统计字符串出现的次数? 姿势一:containsKey() Map<String, Integer> map = new HashMap<>(); for (String word : words) { if (map.containsKey(word)) map.put(word, map.get(word) + 1); else map.put(word, 1); } …
二叉树非递归遍历算法的快速实现
2018-03-25
二叉树的递归遍历简洁明了,而非递归遍历则相对复杂,三种递归思路有很大区别,还容易忘。如果不用线索二叉树的话,一般要用栈来实现,即便都是用栈实现,实现思路也有差别,这给我们理解和记忆带来困扰。 本文介绍利用栈来实现的二叉树非递归算法,主要目的是快速实现,而不是详细解释。 …
分析和解决手机重启若干次后,虚拟按键、状态栏等失效的问题
2017-09-19
Android 有种特殊的 App 叫老化测试工具,一般包括若干次重启、存储读写、音频播放、视频播放等流程,是一个预装在手机的 APK,出厂时会去掉。 测试做老化测试挂机 24 小时后,手机概率性出现问题,现象主要包括 Home 键和 Recent 键不能用、无法下拉快捷设置和通知栏、锁屏失效、开发者模式无法打开等。复现概率很低,每台重启 50 次,10 台中出现 0 ~ 3 台。诡异的是,我这边也会每天挂机,但一台都没有复现。 …
在 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。 本文简单介绍在核心库中打印 Log 的几种方法。 …
LeetCode 题解
2017-07-24
Android 消息机制原理
2017-06-02
概述 Android 的 UI 控件不是线程安全的,因此规定访问 UI 必须在主线程(即 UI 线程)中进行。ViewRootImpl 的checkThread()方法对 UI 操作进行验证,如果在后台线程中访问 UI,程序就会抛出异常。 但主线程中不适合进行耗时操作,因为这样会导致 ANR,所以耗时操作应在后台线程中进行。执行完成后,再使用 Handler 切换到主线程进行 UI 操作。 …
Java 设计模式
2017-05-26