Java main方法解释
概述
每个程序都需要一个开始执行的地方,说到Java程序,就是main
方法。
我们已经习惯在编写代码时编写main
方法,但是没有注意它的细节。在这篇简短的文章中,我们将分析这个方法,并展示其他一些编写方法。
方法签名
最常见的main
法模板是:
public static void main(String[] args) { }
September 23, 2019
September 20, 2019
由于类型擦除,您不能在运行时传递泛型类对象——您可以转换它们并假装它们是泛型的,但实际上它们不是。
示例:
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
是创建,操作,查询泛型类型(以及,隐含的类)对象的方法。
September 19, 2019
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))
September 19, 2019
MySQL 5.0.37 以上开始支持 MySQL Query Profiler, 可以查询到此 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 System lock, Table lock 花多少时间等等.
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)
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)
September 19, 2019
Java数据类型有两种,一种是基本数据类型,另一种是引用数据类型。本文主要介绍Java的8种基本数据类型,byte
、short
、int
、long
、float
、double
、boolean
和char
。
对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)
byte
数据类型是8位、有符号的,以二进制补码表示的整数;byte
类型用在大型数组中节约空间,主要代替整数,因为byte
变量占用的空间只有int
类型的四分之一;byte a = 100;
byte b = -50;
September 19, 2019
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
September 19, 2019
com.google.common.primitives
类中也可以找到类似的函数,它们本质上不那么数学化。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);
September 18, 2019
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()
September 18, 2019
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
September 18, 2019
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);
}