通用工具导航

UPS Tracking API

Request Url:

JSON Request Sample:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"UPSSecurity": {
"UsernameToken": {
"Username": " userHere",
"Password": " passHere"
}
},
"ServiceAccessToken": {
"AccessLicenseNumber": "licNoHere"
},
"Request": {
"RequestOption": "15"
},
"InquiryNumber": "1Z12345E0291980793",
"TrackingOption": "02"
}

UPS SurePost rates:
92: UPS SurePost Less than 1LB - USL
93: UPS SurePost 1LB or greater - USG
94: UPS SurePost BPM - USB
95: UPS SurePost Media Mail - USM

参考:
https://www.ups.com/upsdeveloperkit

Rest接口批量调用

shell脚本批量执行命令

#!/bin/bash
echo “hello”
echo “world”

curl -H “Content-type: application/json” -X POST -d ‘{“param”: “test_user”}’ https://xxx:xx

使用Beyond Compare作为Git Bash文本差异对比冲突合并工具

在Windows下安装Git命令行后,默认的文本比较工具一般是Git自己内置的diff实现,可以用更为通用方便的外部工具Beyond Compare工具来代替内置diff软件来进行文件比较及合并和解决冲突。

1. 卸载

如安装过,记录当前版本号,例如:4.2.5.23088
卸载后重启计算机

2. 安装

下载地址:
https://www.scootersoftware.com/download.php

建议切换与原有安装版本不同的大版本

安装时建议记录安装路径,如:C:\Program Files\Beyond Compare

从官网上下载的评估版本评估周期为30天 - 根据打开软件的时间累加,实际评估时间根据使用频率不同,可达2~3个月
评估过期后,需要重新执行第1、2步

3. Git配置

Git用户配置文件一般路径:
C:\Users\username.gitconfig

echarts - Angular 1.x指令集成

html

1
2
3
4
5
6
<div ng-app="demo" ng-controller="myCtrl" id="demo">
<div style="width: 640px; height: 320px;" bar-chart e-data="data"></div>
<div style="width: 640px; height: 320px;" pie-chart e-data="data"></div>
</div>
<!-- ... 省略文件中其他无关内容 -->
<script src="js/echarts.min.js"></script>

js

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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
var app = angular.module('demo', []); //定义一个模块
angular.module('demo').controller("myCtrl", function($scope, $http, $interval) { //定义控制器
$interval(function() { //调用$interval服务执行循环任务,3秒自动更新一次数据
$http.get("/demo_get") //调用$http服务获取数据
.success(function(data) {
if (data.status == '0') {
$scope.data = data.data; //将数据放在model中
}
}).error(function() {
$scope.data[0].value = Math.floor(Math.random() * 2000); //模拟数据改变测试
});
}, 3000);
//假设获取到的数据如下:
$scope.data = [{
'value': 335,
'name': '直接访问'
}, {
'value': 310,
'name': '邮件营销'
}, {
'value': 234,
'name': '联盟广告'
}, {
'value': 135,
'name': '视频广告'
}, {
'value': 748,
'name': '搜索引擎'
}];

});
angular.module('demo').directive('barChart', function($window) { //定义条形图指令
return {
restrict: 'A', //以属性的方式调用指令
link: function($scope, element, attrs) { //attrs是DOM元素的属性集合
var myChart = echarts.init(element[0]); //element是一个jqlite对象,如果jQuery在AngularJS之前引入,则是一个jQuery对象,可使用jQuery所有的方法
$scope.$watch(attrs.eData, function(newValue, oldValue, scope) { //监听属性e-data的值,当数据发生改变时执行作为第二个参数的函数
var xData = [],
sData = [],
data = newValue; //获取$scope.data
angular.forEach(data, function(val) {
xData.push(val.name);
sData.push(val.value);
});
var option = {
title: {
text: '某站点用户访问来源',
subtext: '纯属虚构',
x: 'center'
},
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [{
type: 'category',
data: xData,
axisTick: {
alignWithLabel: true
}
}],
yAxis: [{
type: 'value'
}],
series: [{
name: '直接访问',
type: 'bar',
barWidth: '60%',
data: sData
}]
};
myChart.setOption(option);
}, true); //$watch的第三个参数,是否深度监听,true监听对象所有属性的变化。
$window.onresize = function() { //调用window服务,使图表能响应式调整大小
myChart.resize();
};
}
};
});

angular.module('demo').directive('pieChart', function($window) { //定义饼图指令
return {
restrict: 'A',
link: function($scope, element, attrs) { //attrs是DOM元素的属性集合
var myChart = echarts.init(element[0]);
$scope.$watch(attrs.eData, function(newValue, oldValue, scope) {
var legend = [];
angular.forEach(newValue, function(val) {
legend.push(val.name);
});
var option = {
title: {
text: '某站点用户访问来源',
subtext: '纯属虚构',
x: 'center'
},
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient: 'vertical',
left: 'left',
data: legend
},
series: [{
name: '访问来源',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: newValue,
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}]
};
myChart.setOption(option);
}, true);
window.addEventListener("resize", function() { //这里使用$window.onresize方法会使前面的图表无法调整大小
myChart.resize();
});
}
};
});

参考

ECharts - 可高度个性化定制的数据可视化图表
ECharts - API
在AngularJS中使用Echarts

proxy

代理

反向代理

redis

Redis是一个开源的使用 ANSI C语言编写,支持网络,可基于内存也可持久化的日志型,Key-Value数据库,并提供了多种语言的 API ,相比 Memcached 它支持存储的类型相对更多 (字符,哈希,集合,有序集合,列表等),同时Redis是线程安全的。

redis-cli

安装

命令

1
2
3
4
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw info memory
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "*"
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "KEY:KEYNAME*"
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "KEY:KEYNAME*" | xargs redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw del

Redis 客户端

连接池

客户端连接 Redis 使用的是 TCP协议,直连的方式每次需要建立 TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从 连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制 redis客户端对象的个数,在极端情况下可能会造成连接泄漏,而连接池的形式可以有效的保护和控制资源的使用。
客户端直连方式和连接池方式的对比:
优点缺点
直连
优点:简单方便,适用于少量长期连接的场景
缺点:

  1. 存在每次新建/关闭TCP连接开销
  2. 资源无法控制,极端情况下出现连接泄漏
  3. Jedis对象线程不安全(Lettuce对象是线程安全的)
    连接池
    优点:无需每次连接生成Jedis对象,降低开销
    缺点:使用连接池的形式保护和控制资源的使用相对于直连,使用更加麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题

Lettuce

sonar

start

1
2
3
4
5
6
7
8
9
docker run -d --name sonarqube \
-p 9797:9000 -p 9092:9092 \
-v /opt/sonarqube/temp:/opt/sonarqube/temp \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions \
-e SONARQUBE_JDBC_USERNAME=username \
-e SONARQUBE_JDBC_PASSWORD=password \
-e SONARQUBE_JDBC_URL="jdbc:mysql://192.168.20.234:3306/sonar?useUnicode=true&characterEncoding=utf8" \
sonarqube:7.1

postgres db

1
2
3
4
5
6
7
8
9
docker pull postgres:10
docker pull sonarqube:7.9.1-community
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=1 --name postgres postgres:10
docker run -d --name sonarqube \
-p 9000:9000 \
-e "SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.114.131:5432/sonar" \
-e "SONARQUBE_JDBC_USERNAME=postgres" \
-e "SONARQUBE_JDBC_PASSWORD=1" \
sonarqube:7.9.1-community

plugins

1
2
3
4
5
6
7
8
FROM sonarqube
ADD ./sonar-l10n-zh-plugin-1.15.jar /opt/sonarqube/extensions/plugins/sonar-l10n-zh-plugin-1.15.jar
ADD ./sonar-java-plugin-4.7.0.9212.jar /opt/sonarqube/extensions/plugins/sonar-java-plugin-4.7.0.9212.jar
ADD ./sonar-findbugs-plugin-3.4.4.jar /opt/sonarqube/extensions/plugins/sonar-findbugs-plugin-3.4.4.jar
ADD ./checkstyle-sonar-plugin-3.6.jar /opt/sonarqube/extensions/plugins/checkstyle-sonar-plugin-3.6.jar
ADD ./backelite-sonar-swift-plugin-0.3.2.jar /opt/sonarqube/extensions/plugins/backelite-sonar-swift-plugin-0.3.2.jar
ADD ./sonar-web-plugin-2.5.0.476.jar /opt/sonarqube/extensions/plugins/sonar-web-plugin-2.5.0.476.jar
ADD ./sonar-javascript-plugin-2.21.0.4409.jar /opt/sonarqube/extensions/plugins/sonar-javascript-plugin-2.21.0.4409.jar

IDE Support

Eclipse
IDEA

maven项目sonar扫描本地配置和扫描相关命令

1
mvn sonar:sonar

lombok

dependency

1
2
3
4
5
6
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>

IDE支持

Eclipse
IDEA

@Data

@Getter

@Setter

@Slf4j

@AllArgsConstructor

@EqualsAndHashCode

vpn

注册

连接vpn后在管理员模式命令行执行以下命令进行注册

1
2
3
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v ProhibitIpSec /t REG_DWORD /d 0x0 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AllowL2TPWeakCrypto /t REG_DWORD /d 0x1 /f
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×