0%

RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,

作用是有助于系统的垂直拆分,使系统更易拓展。

Java中的RPC框架比较多,各有特色,广泛使用的有RMI、Hessian、Dubbo等。

RPC还有一个特点就是能够跨语言,本文只以JAVA语言里的RPC为例。

其他的框架结构也类似,区别在于对象的序列化方法,传输对象的通讯协议,

以及注册中心的管理与failover设计(利用zookeeper)。

客户端和服务端可以运行在不同的JVM中,Client只需要引入接口,

接口的实现以及运行时需要的数据都在Server端,RPC的主要依赖技术是序列化、反序列化和传输协议,

JAVA里对应的就是对象的序列化、反序列化以及序列化后数据的传输。

RMI的序列化和反序列化是JAVA自带的,Hessian里的序列化和反序列化是私有的,传输协议则是HTTP,

Dubbo的序列化可以多种选择,一般使用Hessian的序列化协议,传输则是TCP协议,使用了高性能的NIO框架Netty。

对于序列化,我还了解一些,像Google的ProBuffer、JBoss Marshalling和Apache Thrift等

1.RMI

rmi JAVA自带的远程方法调用工具,不过有一定的局限性,

毕竟是JAVA语言最开始时的设计,后来很多框架的原理都基于RMI,RMI的使用如下:

对外接口

1
2
3
public interface IService extends Remote {  
public String queryName(String no) throws RemoteException;
}

服务实现

Read more »

如下错误提示:

mybatis:No constructor found in xxx matching [Java.lang.Integer, Java.lang.String, Java.lang.Integer]

原因:xxx 这个bean缺少一个默认的构造方法!


解决:加上默认的构造方法即可


我是在单元测试的时候遇到这个问题

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
##显示当月的日历
hisen@ubuntu:~$ cal
March 2017
Su Mo Tu We Th Fr Sa
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

##指定显示1997年11月当月的日历
hisen@ubuntu:~$ cal 11 1997
November 1997
Su Mo Tu We Th Fr Sa
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
##显示2018年全年12个月的日历
hisen@ubuntu:~$ cal -m 12 -y 2018
2018
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31


April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30


July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30

October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
##输出当前日期
hisen@ubuntu:~$ date
Tue Mar 14 11:48:14 CST 2017
##格式化输出年月日
hisen@ubuntu:~$ date "+%Y-%m-%d"
2017-03-14
##格式化输出当前时间
hisen@ubuntu:~$ date "+%H:%M:%S"
11:49:10
##格式化输出年月日时间
hisen@ubuntu:~$ date "+%Y-%m-%d %H:%M:%S"
2017-03-14 11:49:18

出现原因:
这是由于mysql服务端root用户所对应的客户端权限设置问题。

默认所对应的客户端地址只有localhost(也就是服务端的机器),

我们目的是任何地址都可以用root访问mysql服务端。

解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
$ mysql -u root -p
#进入mysql交互界面
mysql> use mysql;
#使用mysql这个库
mysql> grant all privileges on *.* to 'root'@'%' identified by 'hisen';
#让root可以在任何ip登陆,密码为:hisen
mysql> flush privileges;
#刷新
mysql> exit;
#退出
$ service mysql restart
#重启mysql

安装mysql很简单,关键是开启这个远程很坑!!!

一、安装

1.安装

1
sudo apt-get install mysql-server

等待完成即可,过程中需要设置密码

2.查看是否成功

1
sudo netstat -tap | grep mysql

3.登陆mysql

1
mysql -u root -p

这条命令回车之后需要输入mysql密码

二、开启远程访问

1
2
3
4
5
6
7
8
9
10
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#找到bind-address=127.0.0.1直接注释
$ mysql -u root -p -h
#登陆mysql
mysql> use mysql;
#使用mysql这个库
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "hisen";
#把root用户改成可以在任何ip上登陆,并且密码为:hisen
mysql> flush privileges;
#刷新

重启:service mysql restart

接下来就可以在navicat里面连接了

三、注意事项

因为在网上找的很多教程,都是说改这个配置文件:这个是错误的

1
/etc/mysql/my.cf

如果是通过apt-get方式安装的,默认的是第二步那个配置文件

Mybatis中JavaType和jdbcType对应关系

JDBC TypeJava Type
CHARString
VARCHARString
LONGVARCHARString
NUMERICJava.math.BigDecimal
DECIMALJava.math.BigDecimal
BITboolean
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEJava.sql.Date
TIMEJava.sql.Time
TIMESTAMPJava.sql.Timestamp
CLOBClob
BLOBBlob
ARRAYArray
DISTINCTmapping of underlying type
STRUCTStruct
REFRef
DATALINKJava.net.URL

不知道现在是不是还很多人首先就把关联的id放在where的第一位

这里有一个简单的对比,情况相同的时候,两个sql的时间相差八倍

优:0.077s

1
2
3
4
5
6
7
8
9
SELECT ew.all_amt ,
ew.customer_id,
cf.id,
cf.cert_id,
cf.acct_type
FROM ew_quota_info ew,
cf_customer cf
WHERE cf.acct_type in(2,3)
AND ew.customer_id = cf.id

劣:0.630s

1
2
3
4
5
6
7
8
9
SELECT ew.all_amt ,
ew.customer_id,
cf.id,
cf.cert_id,
cf.acct_type
FROM ew_quota_info ew,
cf_customer cf
WHERE ew.customer_id = cf.id
AND cf.acct_type in(2,3)

上述原因:where子句从后往前执行,应该把大的过滤条件放在后面
记录时间:2017年3月9日 10:44:59


有时候在linux环境下需要重新安装一下系统

这里我就说一下今天我安装的方法。

下载好ubuntu的镜像,随便放在一个非系统盘的根目录下

改名为:ubuntu.iso

1
2
3
4
5
6
7
8
9
10
11
sudo chmod 777 /boot/grub/grub.cfg
sudo vi /boot/grub/grub.cfg
#在 export linux_gfx_mode 下面添加如下内容
menuentry "install ubuntu powered by hisen" {
search --set -f /ubuntu.iso
loopback loop /ubuntu.iso
set root=(loop)
linux /casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu.iso
initrd /casper/initrd.lz
boot
}

保存退出,重启就会进入系统。

桌面上点击那个安装的图标即可完成重装

安装简单,下载官网的文件(with Java的比较方便)

解压之后在bin目录下执行

1
sudo sh idea.sh

就会进入安装程序,接下来会跳出图形界面,跟windows差不多的步骤

没有激活码可以看之前的文章

关键的一个是我发现网上说的建立桌面快捷方式不行

就这样弄个方便的

1
2
3
4
5
6
cd ~
ln -s /idea home/bin/idea.sh idea
#接下来执行 idea & 就可以打开,如果提示权限不够
#就执行 sudo idea &
sudo idea &
#后面的 & 代表后台运行的意思,不影响控制台

其实这玩意完全不要破解,直接官网注册就会给一个注册码

注册地址:https://zeroturnaround.com

注册完了之后在IDEA里面去设置,会提醒激活。

tomcat部署了项目之后,点击JR启动是可以热部署的!!!

改了Java代码都不要重新启动项目,哈哈!!!