0%

###老是有人问我xml和json区别、 特写此篇记录来列出xml和json区别,懒得每次都解释、网络中很多博客都没提到关键的区别点 自述性、规范性;其他什么解析方法、啥啥的都不是最重要的最主要的就是xml能够由很强的自述性、规范性
###相同点:

1
2
3
1:都是一种数据传输格式
2:都和平台没有关系 xml和json都是对平台没有限制 只需要按照他们的规则进行解析即可
3:只要是能序列化和反序列化的数据都能传输 例如图片完全可以转成二进制或者16进制字符串传输然后反序列化成图片 (不推荐这样玩 容易损坏)
阅读全文 »

重写eq 必须重写hashCode的原因
之前唆代码 每次都单独重写 eq 方法 hashCode从来不重写 这次遇到一个 Set 的内容比较 一直返回的不是理想的结果
查看源码 发现 其实 最开始是直接使用 == 方式比较 到最后才会用eq方法比较
然后顺手写了一波实例

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
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* @author ming
* @date 2017-10-31 11:30
*/
public class Test {
@org.junit.Test
public void test() {
Set<A> aSet1 = new HashSet<>();
aSet1.add(new A("a", 1));
Set<A> aSet2 = new HashSet<>();
aSet2.add(new A("a", 1));
System.out.println("未重写 eq 和hashCode---------");
System.out.println(aSet1.equals(aSet2));
System.out.println();

Set<B> bSet1 = new HashSet<>();
bSet1.add(new B("b", 1));
Set<B> bSet2 = new HashSet<>();
bSet2.add(new B("b", 1));
System.out.println("重写 eq ----------");
System.out.println(bSet1.equals(bSet2));
System.out.println();

Set<C> cSet1 = new HashSet<>();
cSet1.add(new C("c", 1));
Set<C> cSet2 = new HashSet<>();
cSet2.add(new C("c", 1));
System.out.println("重写 hashCode ------");
System.out.println(cSet1.equals(cSet2));
System.out.println();

Set<D> dSet1 = new HashSet<>();
dSet1.add(new D("d", 1));
Set<D> dSet2 = new HashSet<>();
dSet2.add(new D("d", 1));
System.out.println("重写 eq 和hashCode----");
System.out.println(dSet1.equals(dSet2));
}

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class A {
private String aName;
private Integer aNum;

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class B {
private String bName;
private Integer bNum;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

B b = (B) o;

if (bName != null ? !bName.equals(b.bName) : b.bName != null) return false;
return bNum != null ? bNum.equals(b.bNum) : b.bNum == null;
}

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class C {
private String cName;
private Integer cNum;


@Override
public int hashCode() {
int result = cName != null ? cName.hashCode() : 0;
result = 31 * result + (cNum != null ? cNum.hashCode() : 0);
return result;
}

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class D {
private String dName;
private Integer dNum;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

D d = (D) o;

if (dName != null ? !dName.equals(d.dName) : d.dName != null) return false;
return dNum != null ? dNum.equals(d.dNum) : d.dNum == null;
}

@Override
public int hashCode() {
int result = dName != null ? dName.hashCode() : 0;
result = 31 * result + (dNum != null ? dNum.hashCode() : 0);
return result;
}
}
阅读全文 »

###偶然间发现java底层是采用utf16做编码集的 突发奇想 既然是utf16做底层编码 拿起不是可以拿非英文开发 毕竟编译器可以识别中文那么肯定也可以编译中文
###代码尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
class  垃圾{
public void 一个垃圾方法(){
System.out.println("真的垃圾");
}
public void 两个垃圾方法(String 垃圾参数){
System.out.println("第二个垃圾方法的垃圾参数:"+垃圾参数);
}
public static void main(String[] args) {
垃圾 垃圾的实例=new 垃圾();
垃圾的实例.一个垃圾方法();
垃圾的实例.两个垃圾方法("啦等等单打独斗");
}
}
阅读全文 »

###在做jsp项目中除了一些框架的标签如spring、jstl、shiro等标签 可能还需要自定义一些常用标签 如page等
###自定义jsp标签有两种方式
1:java bean+ tld

1
通过tld来调用java中的代码 这种写法 参考http://www.runoob.com/jsp/jsp-custom-tags.html
阅读全文 »

###在学习docker的时候 遇到一个坑 就是当docker容器中没有前台运行的程序的时候 docker会认为这个容器没有工作内容会自动关闭这个容器
解决方法:
在写dockerfile的时候 记得留一个在前台执行的任务 特别是在做那种一般在后台运行的服务 如mysql这样的 需要让他在前台运行 mysqld.service

最近公司网docker切换 现在开发 测试环境切换 我们发现docker环境下 多节点的rocketmq存在一个重复消费的问题 一个消息 被多次消费了

阅读全文 »

daemon.json

daemon.json 在linux下呢一般在/etc/docker/daemon.json 目录
这个配置主要配置 docker守护进程的相关参数 例如代理、私服仓库、相关网络配置
避免直接配置docker.service
官方文档地址:https://docs.docker.com/engine/reference/commandline/dockerd/#examples
参考国内博客:http://blog.51cto.com/nosmoking/1881034
####常用配置

阅读全文 »

linux版本 命令 功能描述 实例
ubuntu nautilus ubuntu下面 从终端打开文件夹 nautilus .
* traceroute 跟踪域名解析 traceroute 域名
* hexdump 将文件转换成hex码 hexdump 文件
* tcpdump、wireshark 抓包工具
* sl 一个会动的火车
* nohup 忽略退出终端信号 nohup renwu &
* tmux 将单个控制台页面切分的工具 tmux 启动即可 功能巨强大 适合熟悉linux平台并且有一定的精分症的孩子使用 边编译源码边安装二进制包边解压 简直无敌
* netstat 查看端口占用情况 配合grep可以查看指定端口的占用情况 sudo netstat -apn
* top 动态查看系统的相关状态如cpu占用等 top
* grep 正则选取
* cat 输出某个文件内容 或者往某个文件写入内容 cat /etc/profile
* tee 往某个文件中追加内容 以指定字符结尾 未指定 则是EOF结尾 tee ./a.txt
* alias 命名别名 alias psa=‘ps -aux’
* sed 按行操作文本 sed ‘$d’ ./file
ubuntu gnome-screenshot -a 局域截图
* time 统计命令的在每个硬件中的执行时间 \time -v ls
* sleep 休眠 sleep 30s 单位(s:秒,m:分,h:小时,d:天) 休眠ms sleep 0.03s 有10ms左右误差
* expr 计算器 expr 10 + 10
* file 查看文件信息 file xxx,(-z:查看压缩文件的信息只能查看gzip的压缩包其他的压缩包无法查看,-i查看mime,-F 设置分隔符,-L查看软连接,-f根据文件的命长查看每一个文件)
* dig 查看dns解析信息的工具 dig 域名
* watch 定时重复执行某个命令 watch -n 1 命令
* sdkman 安装java 开发环境的工具 sdkman.io
* tldr 查看一些常用命令用法的工具 tldr 命令
* fzf 文本增强工具,我主要就是ctrl+R 搜索 -

  1. 通过unzip行命令解压,指定字符集
    unzip -O CP936 xxx.zip (用GBK, GB18030也可以)
    有趣的是unzip的manual中并无这个选项的说明, unzip –help对这个参数有一行简单的说明。
  2. 在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件
    /etc/environment中加入2行
    ?
    1
    2

UNZIP=”-O CP936”

阅读全文 »