本文总阅读量

执行原理

转自:http://blog.chinaunix.net/uid-20665441-id-310538.html

实现Runnable的好处

转自:http://www.oschina.net/question/565065_86563

可见, 实现Runnable接口相对于继承Thread类来说,有如下显著的好处:

(1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。

(2)可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了。

(3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象是,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。

阅读全文 »

本文总阅读量

SQL语句执行详解

转自:http://www.jb51.net/article/74083.htm

我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,由于SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。

每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑步骤的简单描述。

1
2
3
4
5
6
7
8
9
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>

逻辑查询处理阶段简介

FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1

ON:对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。

OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。

WHERE:对VT3应用WHERE筛选器。只有使为true的行才被插入VT4.

GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.

CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.

HAVING:对VT6应用HAVING筛选器。只有使为true的组才会被插入VT7.

SELECT:处理SELECT列表,产生VT8.

DISTINCT:将重复的行从VT8中移除,产生VT9.

ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).

TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

where、group by和having

转自:http://www.51testing.com/html/73/33873-212893.html

having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。

聚合函数,这是必需先讲的一种特殊的函数:0 P9 u& h7 z2 n) I5 Z) i, V2 I
例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) FROM tablename

这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有 国家的总人口数。 通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。
当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值.
也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值
HAVING子句可以让我们筛选成分组后的各组数据
HAVING子句在聚合后对组记录进行筛选
而WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前
看下面这几个例子吧:

一、显示每个地区的总人口数和总面积.
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。# B i’ z `, } S, E5 i

二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECT region, SUM(population), SUM(area)
FROM bbc8
GROUP BY region
HAVING SUM(area)>1000000
在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,HAVING子句可以让我们筛选成组后的各组数据.

三、我在多举一些例子

SQL> select * from sc;

SNO PNO        GRADE

  1 YW            95
  1 SX            98
  1 YY            90
  2 YW            89
  2 SX            91
  2 YY            92
  3 YW            85
  3 SX            88
  3 YY            96
  4 YW            95
  4 SX            89

SNO PNO        GRADE

4 YY            88

这个表所描述的是4个学生对应每科学习成绩的记录,其中SNO(学生号)、PNO(课程名)、GRADE(成绩)。

1、显示90分以上学生的课程名和成绩

//这是一个简单的查询,并没有使用分组查询

SQL> select sno,pno,grade from sc where grade>=90;

SNO PNO        GRADE

1 YW            95
1 SX            98
1 YY            90
2 SX            91
2 YY            92
3 YY            96
4 YW            95

已选择7行。

2、显示每个学生的成绩在90分以上的各有多少门

//进行分组显示,并且按照where条件之后计数

SQL> select sno,count(*) from sc where grade>=90 group by sno;

SNO   COUNT(*)

1          3
2          2
4          1
3          1

3、这里我们并没有使用having语句,接下来如果我们要评选三好学生,条件是至少有两门课程在90分以上才能有资格,列出有资格的学生号及90分以上的课程数。

//进行分组显示,并且按照where条件之后计数,在根据having子句筛选分组

SQL> select sno,count() from sc where grade>=90 group by sno having count()>=2;

SNO   COUNT(*)

1          3
2          2

这个结果是我们想要的,它列出了具有评选三好学生资格的学生号,跟上一个例子比较之后,发现这是在分组后进行的子查询,也印证了软考教材所描述是错误的。

4、学校评选先进学生,要求平均成绩大于90分的学生都有资格,并且语文课必须在95分以上,请列出有资格的学生

//实际上,这个查询先把语文大于95分的学生号提取出来,之后求平均值,分组显示后根据having语句选出平均成绩大于90的

SQL> select sno,avg(grade) from sc where SNO IN (SELECT SNO FROM SC WHERE GRADE>=95 AND PNO=’YW’) group by sno having avg(grade)>=90;

SNO AVG(GRADE)

1 94.3333333
4 90.6666667

5、查询比平均成绩至少比学号是3的平均成绩高的学生学号以及平均分数

//having子句中可进行比较和子查询

SQL> select sno,avg(grade) from sc
2 group by sno
3 having avg(grade) > (select avg(grade) from sc where sno=3);

本文总阅读量

hello

本文总阅读量

一、直接插入排序

1、思想

从第二个元素到末尾,逐个向前面的有序序列插入,使之成为有序序列。

  • 插入过程在有序序列中从后向前比较,遇到比当前元素大的元素,则把它向后移动一个。
    遇到比当前元素小的元素,直接break。把当前元素放到比它小的元素的下一个。
    阅读全文 »

本文总阅读量

一、Solr的简介

二、Java操作solr

1、添加maven依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
阅读全文 »

本文总阅读量

HBase中的observer分为三类:

MasterObserver、RegionObserver、WALOBserver。

自定义MasterObserver

1、继承BaseMasterObserver类

(是MasterObserver的默认实现类)

  • 覆盖其中的方法,实现需求

2、打成jar包,放到hbase的lib目录下

3、12.4.3.修改hbase的配置文件hbase-site.xml文件

增加如下内容

1
2
3
4
<property>
<name>hbase.coprocessor.master.classes</name>
<value>自己写的类的全路径名</value>
</property>

阅读全文 »

本文总阅读量

一、配置

1、整合工具类

(1)、版本问题

  • 我使用的是Hive-0.14.0和hbase-0.98.8

hive-Hbase-handler-0.14.0.jar

这个版本是跟着hive的

(2)、根据hive版本确定hbase版本

①、在maven仓库找到对应的依赖添加到pom.xml,例如:

1
2
3
4
5
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-hbase-handler</artifactId>
<version>0.14.0</version>
</dependency>
阅读全文 »

本文总阅读量

一、需要的工具类

1、TableMapReduceUtil

作用:设置传入MR的HBase的表名等信息

2、TableMapper

作用:mapper类继承该类,实现对HBase表的操作

二、实现的版本

版本一

  • 输入:表名,输出路径
  • 输出:该表所有行的列族,列, 值到指定目录

版本二

  • 输入:表名,输出路径,一个列族:一个列
  • 输出:该表所有行的该列族,该列, 值到指定目录

版本三

  • 输入:表名,输出路径,N,列族:列 。。。
  • 输出:该表所有行的N个(列族,该列, 值)到指定目录
阅读全文 »

本文总阅读量

一、在maven工程中加入Hbase的依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>0.98.8-hadoop2</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>0.98.8-hadoop2</version>
</dependency>

二、将hbase-site.xml放入src/main/resources目录下

三、确保HDFS、YARN、HBase都正常启动

阅读全文 »