Home

常见数据库简介

Overview 数据库在后端程序员中应该是最常使用到的中间件了,今天我们来侃一侃常见的数据库。 MySQL 派系MySQL 无疑是世界上最火热的数据库了。因为太过火热,它也有很多不同的分支,这些分支会有一些不同的特点。 MySQL在国内来说,MySQL 是一个最常见的数据库了,也是 MySQL 派系中最主流的分支,目前由 Oracle 公司维护。 特点: 源代码使用 C 和 C++ 编写,性能

常用的文件系统简介

Overview 文件系统应该是计算机软件当中比较底层的部分,可能很多程序员都不会接触到。今天简单地学习了一下,做下笔记。 FAT 文件系统FAT 文件系统起源于二十世纪七十年代,当时用于 DOS 系统。当时的设计比较简单,后来由于存储媒介的发展渐渐有一些增强的版本出现。所以现在主要包含这这几个版本:FAT8,FAT12,FAT16,FAT32。这几个版本后面带的数字是啥意思呢?其实就是「簇」的编

多级缓存的设计与实现

Overview 总览在高并发量的后端业务中,多级缓存是一个非常常见的设计。事实上,多级缓存策略在计算机硬件也是普遍存在的。 为什么会有多级缓存?通常缓存都是比原数据要小的,设立缓存的目的很简单:某些数据经常用到,我们不想每次都去最深的地方(这里一般是指数据库)去找,所以我们就在更方便取到数据的地方把这些数据保存起来。 那么,为什么要用多级缓存呢?对于所有的数据来说,并不是每一份数据使用的频率都

为什么不建议在 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 如果