分类 默认分类 下的文章

TypeToken

由于类型擦除,您不能在运行时传递泛型类对象——您可以转换它们并假装它们是泛型的,但实际上它们不是。

示例:

ArrayList<String> stringList = Lists.newArrayList();
ArrayList<Integer> intList = Lists.newArrayList();
System.out.println(stringList.getClass().isAssignableFrom(intList.getClass()));
// returns true, even though ArrayList<String> is not assignable from ArrayList<Integer>

Guava提供了TypeToken, 它使用了基于反射的技巧甚至让你在运行时都能够巧妙的操作和查询泛型类型。想象一下TypeToken是创建,操作,查询泛型类型(以及,隐含的类)对象的方法。

- 阅读剩余部分 -

Python MySQLdb 库, 查询结果返回的是tuple, 输出的时候不是很方便, 因为只能通过索引读取内容, 查找了下, 可以通过指定 MySQLdb.cursors.DictCursor 返回 dict 内容数据.

默认情况下, 调用过程和返回结果:

import MySQLdb
db  = MySQLdb.connect(host='localhost', user='root', passwd='admin', db='test')
cur = db.cursor()
cur.execute('select * from user')
rs = cur.fetchall()
print rs
# 返回类似如下
# ((1000L, 0L), (2000L, 0L), (3000L, 0L))

- 阅读剩余部分 -

MySQL 5.0.37 以上开始支持 MySQL Query Profiler, 可以查询到此 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 System lock, Table lock 花多少时间等等.

启用 MySQL Query Profile

mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

测试查询语句

mysql> select count(*) from user;
+----------+
| count(*) |
+----------+
|      200 |
+----------+
1 row in set (0.00 sec)

查看 Profiles

mysql> show profiles;
+----------+------------+-----------------------------------------------+
| Query_ID | Duration   | Query                                         |
+----------+------------+-----------------------------------------------+
|        0 | 0.00007300 | set profiling=1                               |
|        1 | 0.00048366 | select count(*) from user |
+----------+------------+-----------------------------------------------+
2 rows in set (0.00 sec)

- 阅读剩余部分 -

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

算法

归并操作的工作原理如下:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

- 阅读剩余部分 -

介绍

Java数据类型有两种,一种是基本数据类型,另一种是引用数据类型。本文主要介绍Java的8种基本数据类型,byteshortintlongfloatdoublebooleanchar

整型

对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)

byte

  • byte数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默认值是 0;
  • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
  • 例子:
byte a = 100;
byte b = -50;

- 阅读剩余部分 -

内容

  • 基本的独立数学函数根据涉及的主要数字类型分为IntMathLongMathDoubleMathBigIntegerMath。这些类具有并行结构,但每个类只支持函数的相关子集。请注意,在com.google.common.primitives类中也可以找到类似的函数,它们本质上不那么数学化。
  • 为单个和成对的数据集提供了各种统计计算(平均值、中位数等)。从阅读本文开始,而不仅仅是浏览Javadoc。
  • LinearTransformation 表示 y = mx + b的两个值之间的线性变换; 例如,英尺和米之间的换算,或者凯尔文和摄氏温度之间的换算。

示例:

int logFloor = LongMath.log2(n, FLOOR);

int mustNotOverflow = IntMath.checkedMultiply(x, y);

long quotient = LongMath.divide(knownMultipleOfThree, 3, RoundingMode.UNNECESSARY); // fail fast on non-multiple of 3

BigInteger nearestInteger = DoubleMath.roundToBigInteger(d, RoundingMode.HALF_EVEN);

BigInteger sideLength = BigIntegerMath.sqrt(area, CEILING);

- 阅读剩余部分 -

Mako是什么?Moko是Python写的一个模板库,Python官网http://python.org/ 用的就是它哦。

(Mako官网地址:http://www.makotemplates.org/ ,可以下载安装包,推荐使用 easy_install 安装, 或者 通过 pip)

先来个简单的使用示例, 通过文本直接构建模板

from mako.template import Template
mytemplate = Template("hello world!")
print mytemplate.render()
mytemplate = Template("hello, ${name}!")
print mytemplate.render(name="jack")

通过文件构建模板

mytemplate = Template(filename='/docs/example.txt')
print mytemplate.render()

- 阅读剩余部分 -

Python 环境使用 MySQL, 需要安装 Python MySQL 的 lib 库, 早期需要手工从源码安装, 目前来说已经可以很方便的从 pypi 下载就可以了.

pip install MySQL-python

如果环境无网络,才需要手工安装, 可以按下述流程来安装.

tar zxvf MySQL-python-1.2.2.tar.gz
cd MySQL-python-1.2.2
python setup.py install

- 阅读剩余部分 -

事件总线

EventBus允许组件之间的发布-订阅式通信,而不需要组件彼此显式注册(因此可以相互感知)。它专门用于使用显式注册替代传统的Java进程内事件分发。它不是一个通用的发布-订阅系统,也不是用于进程间通信。

示例:

// Class is typically registered by the container.
class EventBusChangeRecorder {
  @Subscribe public void recordCustomerChange(ChangeEvent e) {
    recordChange(e.getChange());
  }
}
// somewhere during initialization
eventBus.register(new EventBusChangeRecorder());
// much later
public void changeCustomer()
  ChangeEvent event = getChangeEvent();
  eventBus.post(event);
}

- 阅读剩余部分 -

二分查找算法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

算法

  1. 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  3. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

- 阅读剩余部分 -