Home

为什么不建议在 Redis 使用大 Key

Preview 公司里某位工程师小斌发现在一个 Redis 集群中的 some_big_list 经常出现慢查询,而且 QPS 特别高。初步定位是出现了一个热点的 Key。12newexplore> llen some_big_list500000 上面的命令发现,这个 some_big_list 是一个大 Key,导致 Redis Server 的服务器 CPU idle 很低,结果出现了

求一个数组的波峰

三个月前被问到一个有趣的算法题,当时想了很久才想出来,现在写篇博客记录一下。 给定一个很长的数组 arr,已知数组的长度 length 且 length >= 3,已知数组的第一个元素不比第二个元素大,最后一个元素不比倒数第二个元素大。那么求这个数组中 任意一个 波峰的数组下标。PS:不比前一个元素小而且不比后一个元素小的元素称为波峰。 arr[1] >= arr[0],那么只需要

Java 里的构造函数需要加锁吗

我们在写 Java 的时候,经常会使用到 synchronized 关键字。synchronized 是一个相对重量级的锁,它有两种使用形式。 对一个具体的变量加锁。 12345678Logger l = LoggerFactory.getLogger(getClass().getName());synchronized (l) { // do something}sy

双向链表和哈希表实现 LRUCache

背景LRUCache 是一个很常用的缓存实现,本文会首先介绍一下 LRUCache 的定义,然后尝试用 Python 实现它。 定义LRUCache 首先是一个 Cache,那么对于一个 Cache 而言,肯定需要提供 get 和 set 两个方法,而且,这两个方法的时间复杂度越低越好,最好达到 O(1) 级别。 LRU 是 Least Recently Used 的缩写,近期最少使用策略。LRU

Android 中设置界面的思考

引言在 Android™ 中大部分应用都需要一个 系统设置 界面,有很多开发者(或者开发组)都喜欢自己做一个 Activity 或者 Fragment 作为设置界面。但是谷歌本来就为 Android™ 的设置界面提供了一个解决方案,那就是 PreferenceFragment(PreferenceActivity 已经不推荐使用)。 遗憾的是,由于 Android™ 设备的碎片化,同样的代码,在不

在Ubuntu下录制屏幕GIF

Ubuntu 是一个十分完善的 Linux 发行版,目前也是我的主要生产力工具栖息的地方,不像 Windows 或者 OS X,Ubuntu 现在没有一种非常完备的屏幕 GIF 录制工具,今天稍微折腾了一小会,总结一套比较方便完美的解决方案 安装 byzanz在我的 Ubuntu 14.04 LTS 当中,byzanz 不需要添加源1sudo apt-get install byzanz 如果

简明数据结构

数据结构是一门很重要的计算机基础课,知识点多而且难度不小,这里列出了数据结构中比较容易遗忘的内容。 在这篇博客中,我尽量用我觉得最好理解的方式描述一个算法,简明扼要,相关的代码可能不完全,如果有兴趣的话欢迎访问我的 GitHub 字符串快速匹配 - KMP next 数组的求解,即部分匹配值 123456789int q = 1, k = 0;next[0] = 0;for (q = 1;

记一次使用 RxJava 重构的经历

前言垃圾代码时常会出现在时间不够的情况下,所以重构是一件非常重要非常有意义的事情。 需求我们的 Studio 项目中需要上传头像的功能,所以选择了一个开源库 PhotoPicker 来做图片的选择。通过这个库我们就可以在Activity # onActivityResult 方法来获取用户选择的图片地址,然后通过 LeanCloud 的 AVFile 来进行上传。 原来的实现12345678910

使用二分法求整数幂

引言在应用中求幂是一个经常使用到的运算。那么我们求幂的时候是不是经常这样写 1234567int power(int x, int n){ int result = 1; while (n--) result *= x; return result;} 这样写简单直观,但是时间复杂度太高了。 解决思路为了减少时间的消耗,我们可以使用二分法。 举