本文总阅读量

昨天做了微软的在线笔试,那叫一个惨啊!

  • 第一题目是全英文(我是很爱国好吗)
  • 该死的输入,半天搞不定

,吐槽完毕,下面开始整理

题目

输入:

样例:

1
2
3
4
5
6
7
8
9
10
11
5 5
allow 1.2.3.4/30
deny 1.1.1.1
allow 127.0.0.1
allow 123.234.12.23/3
deny 0.0.0.0/0
1.2.3.4
1.2.3.5
1.1.1.1
100.100.100.100
219.142.53.100

  • 第一行两个数字n,m
  • n:输入n个规则
  • m:输入m个ip
阅读全文 »

本文总阅读量

刚学习了HBase的物理模型,有些心得,记录一下~

一、基本概念

1、region server

HBase是分布式数据库,region server 就是每一个存储数据的节点。

2、region

每一个region server中,按行把大文件分为小文件。一个小文件就是一个region。

二、问题引入

HBase的数据是按列族分开存储的。当一个region server上的列族文件越来越大,那么它插入、查询的速度必然降低。

三、解决方案

当一个列族文件过大时,按行,将文件划分为region。大文件变为小文件,效率就提高了。

阅读全文 »

本文总阅读量

原因

最近在学习Hive,学习到了自定义函数UDF。要继承一个类org.apache.hadoop.hive.ql.exec.UDF
所以要添加Hive的依赖,下载源码才可以进行自定义函数。

一、添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-serde</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-service</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-metastore</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-common</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-cli</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>0.14.0</version>
</dependency>

<!-- more -->
  • 把以上依赖添加到maven工程的pom.xml中。按理来说,保存后,它会自动下载所依赖的jar包。但是可能是我哪里没有配置好,它没有自动下载。

这个时候添加的依赖那里会出现一堆红叉。不要紧
,进入第二步。

二、下载依赖的jar包

1、打开cmd,进入到项目所在的目录

2、执行mvn clean package(这样可以把所有未下载的jar包重新下载)

  • 此时需要耐心等待,因为服务器在国外(你懂滴)。

  • 出现BULID SUCCESS即表示完成。

3、消除红叉

此时,虽然jar包都已经下载完毕。但是红叉依旧存在。
此时在

项目上右键->Maven->Update project…

等它结束后,红叉都消失了

p.s 我就是这样搞定的(不行的话,我也母鸡(╰_╯)# )

4、添加源码

按理说,jar包我都下载好了。源代码我应该都可以看了啊。

可是,问题依旧没有结束。。。

eclipse中open type中输入hive
结果:

source not found

真是哔了狗了。我特么都下载了源代码,居然说找不到。闹哪样啊!!!

尝试①

添加external 源。把下好的jar包添加进去。还特么不行。

尝试②

我看到项目上右键->Maven里面有一个Download Sources
我想着,不就是sources找不到吗,试试喽。点了一下。等了半天。居然好了。。。

看了一下,原来下载依赖的地方,多了一个以sources
结尾的jar包。可能必须要下载这个才可以吧。

此时,源代码都已经可以查看了。

本文总阅读量

前几天尝试map,struct,map的嵌套,结果失败。之后又查到union还不完善,就以为这个办不成。
今早机缘巧合,看到一篇文章

提到在嵌套多层的情况下,分隔符会随着复合类型嵌套层次的递增而发生变化,分隔符默认会以\001,\002,\003,\004…
变化。
我一看,不行那就试试喽,死马当活马医嘛,结果给“治”好了(¬_¬)。果然药不能停~~~

下面我们分阶段来搞这个嵌套实验,逐层增加难度

map和array嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table testmaparray(
id int,
student_id int,
staff_id int,
value int,
items array<
struct<
value:int,
staff_id:int,
logtime:date
>
>)
row format delimited fields terminated by '\t'
collection items terminated by ' '
map keys terminated by ',';

阅读全文 »

本文总阅读量

后面再来放截图2016-03-25

场景

一个公司中,上一个数据导入组有他们自己的表结构,定义的分隔符。

你们数据处理组要用人家的数据。肯定不能改动人家的表啊,没有这个权限。

假如数据导入组用的是$@_@$这种恶心的,又实用的分隔符(与内容重复的概率低)。

你用Hive要进行处理,但是分隔符又不是Hive里面的分隔符,咋办涅?

解决方案:

* 自定义InputFormat类,来实现复杂分隔符的处理

阅读全文 »

本文总阅读量

这两天正在学Hive,学习到了复合数据类型ARRAY,MAP,STRUCT。

突然想到

能不能把许多类型放在一起,用上面的类型嵌套,始终不太得劲。所以查了查,发现有个UNION类型好像可以干这个事。
百度之,资料不多,没啥用处。就找到了官网文档。

如下:

This means that UNIONTYPEs are effectively look-at-only.

这个类型目前只能看啊!卧槽◔ ‸◔?
没啥实际作用!

本文总阅读量

//有时间再排版吧,累觉不爱 3/18

一、Java的流:

  • 各种各样的流对应各种各样的管道,它们有些可以套在一起使用。

二、分类:

  • 输入流,输出流——-文件的流向不同

输入流:进入程序(写的代码)

输出流:从程序(写的代码)出去

  • 字节流,字符流——-处理的数据单位不同

  • 节点流,处理流——-功能不同

阅读全文 »

本文总阅读量

SQL

(从mysql入手)
先数据库,再表,再有数据

一、数据库管理

1、查询所有数据库

1
show databases

2、创建数据库

1
2
3
create database 数据库名称      --使用默认字符集

create database 数据库名称 default character set utf8

3、查看数据库的默认字符集

1
show create database 数据库名称
阅读全文 »

本文总阅读量

join()操作:

在主程序中,线程.join()操作,会使主程序(主线程)等待线程执行结束才继续向下执行。
相当于方法调用

yield()操作:

当在这个线程中调用了yield()之后,当前线程会让出CPU资源一小会,让别的线程去执行。

举例<( ̄︶ ̄)>:

你在厕所坑位前准备上厕所,来了一个人急的马上要拉到裤子上了。你调用一下yield(),说:“你先来吧,我先让你上厕所!”

阅读全文 »

本文总阅读量

策略模式

简单的说就是(๑•ᴗ•๑):

  • 有好几个算法(方法)的接口一样,专门让一个类A去操作它,并且把实际的操作封装到A的方法中。

专业一点就是.(๑>؂<๑)۶:

  • 定义了算法家族,分别封装起来,让它们之间可以相互替换,从模式让算法的变化,不会影响到算法的客户。


介个问题且听下回分解(✿◡‿◡)

Strategy

做法

  • Context包含一个Strategy基类的指针,可以指向传入的Strategy子类对象
  • Context的getResult方法,直接用基类指针调用子类的方法实现功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
* Strategy.cpp
* 策略模式
* Created on: 2016年3月14日 下午4:30:31
* Author: Wayne 13186259527@163.com
*/


#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

class CashSuper {
public:
virtual double acceptCash(double money) {
return 0;
}
};
//原价类
class CashNormal: public CashSuper {
public:
virtual double acceptCash(double money) {
return money;
}
};
//打折类
class CashRebate: public CashSuper {
private:
double moneyRebate;
public:
CashRebate(double mR) {
moneyRebate = mR;
}
virtual double acceptCash(double money) {
return money * moneyRebate;
}
};
//返现类
class CashReturn: public CashSuper {
private:
double moneyCondition;
double moneyReturn;
public:
CashReturn(double mC, double mR) {
moneyCondition = mC;
moneyReturn = mR;
}
virtual double acceptCash(double money) {
double reult = money;
if (money >= moneyCondition) {
reult = money - floor((money / moneyCondition)) * moneyReturn;
}
return reult;
}
};
//具体的操作类
class Context {
private:
CashSuper *cs;
public:
Context(CashSuper * CS) {
cs = CS;
}
double GetResult(double money) {
return cs->acceptCash(money);
}
};

int main(void) {
Context *c = NULL;
int choice;
double money;
double result;
//printf("hello\n");
cout << "请输入金额(>0):\n";
cin >> money;
cout << "请输入打折方式:" << endl;
cout << "1------原价" << endl;
cout << "2------打八折" << endl;
cout << "3------满300返100" << endl;
while (true) {
cin >> choice;
if (choice == 1 || choice == 2 || choice == 3) {
break;
}
cout << "输入有误,请输入1、2和3中任一数字" << endl;
}
switch (choice) {
case 1:
c = new Context(new CashNormal());
break;
case 2:
c = new Context(new CashRebate(0.8));
break;
case 3:
c = new Context(new CashReturn(300, 100));
break;
}
result = c->GetResult(money);
cout << "result = " << result << endl;
return 0;
}