10.41.152.56
重启tomcat
jtool -mrestart
查看tomcat是否启动
在tomcat的bin目录下面执行 ps -ef |grep tomcat
日志存放路径
cd /home/zxin10/was/tomcat/logs
打开tomcat日志
tail -f catalina.out
cs日志位置/home/zxin10/was/tomcat/logs/cs.log
打开cs日志打印文件
tail -f cs.log
打开一个文件:
vi xx.xx
保存文件:wq
查看当前路径 pwd
解压压缩包
unzip -o xxx.zip -d xxx/
压缩
tar -cvf uniportal.tar uniportal
tar -cvf uniportal1230.tar uniportal
tar -cvf uniportal0117.tar uniportal
tar -cvf uniportal0120.tar uniportal
解压
tar -xvf uniportal.tar //解压 tar包
tar -xvf jdk1.7.0.tar//解压 tar包
tar -cvf ebaserdb.tar ebaserdb
tar -cvf dbbackup.tar dbbackup
打包备份
tar -cvf cs20161129.tar cs
db10$ZTE
cs客户端放置在服务器的地址
/home/zxin10/iraishare/cs/download
String xxx;
xxx.trim();
去掉字符串xxx前后的空格
//截取list前n位,如果超过n个的话
list = list.subList(0, n);
var obj = {"str.key":123};
alert(obj["str.key"]);
生成6位随机数:(int)((Math.random()*9+1)*100000)
编码格式
dos
dos2unix
Xshell操作Mysql数据库命令
/home/ebaserdb/bin/mysql -S /home/ebaserdb/bin/xsql5518.sock -uroot -p'db10$ZTE
连接Mysql数据库
使用root用户
切换到Mysql用户: su - ebaserdb
mysql -u'zxin_smap' -p'db10$ZTE'
mysql执行sql文件
mysql -uroot -p'db10$ZTE' --default-character-set=utf8 <setup/oas/ebaserdb/3.create_datas.sql
/home/ebaserdb/bin/mysql -S /home/ebaserdb/bin/xsql5518.sock -uroot -p'db10$ZTE' --default_character_set=utf8 < /home/ebaserdb/sql/ZXCLOUD-iRAIV5.01.03_to_ZXCLOUD-iRAIV5.01.04.sql
连接Sybase数据库:
su - sybase
isql -Usa -Pcgsl123
Mysql命令 打开归属服务器
call proc_res_op_function(0, 1, 1501, 150177,'归属服务器管理');
查询uniportal管理门户super密码:
select * from zxinsys.oper_information2
BCP导出数据
1、建视图create view t_mac as
SELECT distinct t.mac,u.username FROM irai_userportallog_09 u LEFT JOIN tempTable t ON (t.mac=u.usermac)
WHERE not (t.mac ='' OR t.mac is NULL)
2、命令行执行bcp raicfgdb..t_mac?out /home/sybase/test.csv -c -Usa -Pcgsl123 -Jcp936 -t","
连接云桌面拼接的连接参数:
--usb-redirect enable:DenyUSB=class_03&subclass_01:AllowUSB=VID_05F9&PID_2202 -d enable -a enable -v enable -c enable -r enable -i enable -j enable -g enable --color-depth 32 --usb-disk all --usbredirecttype mdisk --stream x264 -t "h00001(yft2)" --uls 0 --dls 0 -f
-h 10.47.181.36 -p 10031 -k 1QuwJhmi --usb-redirect enable:DenyUSB=class_03&subclass_01:AllowUSB=VID_05F9&PID_2202 -d enable -a enable -v enable -c enable -r enable -i enable -j enable -g enable --color-depth 32 --usb-disk all --usbredirecttype mdisk --stream x264 -t "h00001(yft2)" --uls 0 --dls 0 -f
17186763207
UAC认证返回结果:
{"code":{"code":"0000","msgId":"RetCode.Success","msg":"操作成功"},"bo":{"code":"5001","msg":"用户密码为初始密码,<a id=\"url\" href=\"http://it.zte.com.cn\">请修改</a>","enMsg":"The user password is the initial password.,<a id=\"url\" href=\"http://it.zte.com.cn\">Please modify it.</a>"},"other":{"message":"【VPN权限控制策略start】【通过:accountId或networkArea为空】【初始密码控制策略start】【不通过:employeeType为F】【用户密码为初始密码,<a id=\"url\" href=\"http://it.zte.com.cn\">请修改</a>,错误码5001】"}}
先UTF-8编码,再Base64编码
new String(Base64.encode(waterMark.getBytes("UTF-8")));
判断字符串以特定字符开头、结尾、包含:
String str;
str.stortsWith("String");
str.endsWith("class");
str.indexOf("ABC")!=-1;
license 目录:/home/zxin10/was/tomcat/webapps/uniportal/WEB-INF/classes
临时license:
{
'common': {
'userName': 'super',
'createTime': '2017-06-16',
'mac1': 'TEMP',
'mac2': 'TEMP'
},
'iecs': {
'cpuPhyNum': '4',
'deadLine': '2017-06-16'
},
'irai': {
'onlineUserNum': '8',
'maxVmTimes': '3',
'maxVmNum': '24',
'deadLine': '2017-06-16'
},
'voi': {
'onlineUserNum': '10',
'deadLine': '2017-06-16'
},
'app': {
'onlineUserNum': '10',
'deadLine': '2017-06-16'
}
}
和正常license的区别是mac地址,正常的license会有mac地址,临时的license的mac是TEMP
正则表达式:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
$('#log_export').on('click', function() {
var table = "";
$("#log_table").find("tr").each(function() {
var tr = "";
$(this).find("td").each(function(index) {
tr += $(this).html() + ",";
});
if (tr != "") {
table += tr + "#";
}
});
var param = {
table: table
};
$.post(path + "/paas/logExportDoc.action", param, function(data) {
if (data.success) {
$.umapMessager.alert(title, "导出日志成功!", "info");
} else {
$.umapMessager.alert(title, data.message, "info");
}
}, "json");
});
}
StringUtils的isBlank与isEmply
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0
下面是 StringUtils 判断是否为空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于 !isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace) 构成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符
StringUtils.isBlank() //均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成,等于 !isBlank(String str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
Spring中什么时候用@Resource,什么时候用@service
当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX;
当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该属性注入一个名称为xxx的bean。
===================================================================================================
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
跳板机:10.41.242.52 administrator/1qaz@WSX Windows
10.41.81.252 root/zte@123456 Linux
三地xen环境VMC信息:
南京:10.41.161.11 主备节点 10.41.161.12/13 root/cgsl123(下同)
深圳:10.5.133.13 主备节点 10.5.133.11/12
西安:10.90.21.35 主备节点 10.90.21.33/34
三地KVM环境VMC信息:
南京vmc浮动ip10.40.253.48 主备节点 10.40.253.49/50
深圳vmc浮动ip10.5.216.11 主备节点 10.5.216.12/13
西安cmc浮动ip10.90.8.11 主备节点 10.90.8.12/13
jquery validate 增加过滤特殊字符的方法:
jQuery.validator.addMethod("specialCharFilter", function(value, element) {
var pattern = new RegExp("[`~!@#$^&*()=|{}':;,.<>/?~!@#¥……&*()——|【】‘;:”“'。,、?%+ \"\\\\]");
var specialStr = "";
for(var i=0;i<value.length;i++){
specialStr += value.substr(i, 1).replace(pattern, '');
}
if( specialStr == value){
return true;
}
return false;
});
注:过滤 "\" 反斜杠 需要 \\\\
隐藏手机号码中间四位:
s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
隐藏邮箱:只显示@前面的首位和末位
s.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
curl -l -H "Content-type: application/json" -X POST -d '{"eventType":"systemConfig"}' http://10.47.161.126:8080/cs/httppro_data.action
tcpdump -i eth1 port 8888 -s0 -w e.pcap
把该变量声明为volatile(不稳定的),这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
volatile不保证原子操作,所以,很容易读到脏数据。
在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
有序性:即程序执行的顺序按照代码的先后顺序执行。
还记得马云前几天在阿里做演讲的时候,我刚好坐在第一排,在40分钟慷慨激昂的演技后,大家都站起来热烈鼓掌,马云在大家的掌声中走下了演讲台,突然摔倒在了我的面前,那一刻我都没有去扶马云,就扶你!
重启tomcat
jtool -mrestart
查看tomcat是否启动
在tomcat的bin目录下面执行 ps -ef |grep tomcat
日志存放路径
cd /home/zxin10/was/tomcat/logs
打开tomcat日志
tail -f catalina.out
cs日志位置/home/zxin10/was/tomcat/logs/cs.log
打开cs日志打印文件
tail -f cs.log
打开一个文件:
vi xx.xx
保存文件:wq
查看当前路径 pwd
解压压缩包
unzip -o xxx.zip -d xxx/
压缩
tar -cvf uniportal.tar uniportal
tar -cvf uniportal1230.tar uniportal
tar -cvf uniportal0117.tar uniportal
tar -cvf uniportal0120.tar uniportal
解压
tar -xvf uniportal.tar //解压 tar包
tar -xvf jdk1.7.0.tar//解压 tar包
tar -cvf ebaserdb.tar ebaserdb
tar -cvf dbbackup.tar dbbackup
打包备份
tar -cvf cs20161129.tar cs
db10$ZTE
cs客户端放置在服务器的地址
/home/zxin10/iraishare/cs/download
String xxx;
xxx.trim();
去掉字符串xxx前后的空格
//截取list前n位,如果超过n个的话
list = list.subList(0, n);
var obj = {"str.key":123};
alert(obj["str.key"]);
生成6位随机数:(int)((Math.random()*9+1)*100000)
编码格式
dos
dos2unix
Xshell操作Mysql数据库命令
/home/ebaserdb/bin/mysql -S /home/ebaserdb/bin/xsql5518.sock -uroot -p'db10$ZTE
连接Mysql数据库
使用root用户
切换到Mysql用户: su - ebaserdb
mysql -u'zxin_smap' -p'db10$ZTE'
mysql执行sql文件
mysql -uroot -p'db10$ZTE' --default-character-set=utf8 <setup/oas/ebaserdb/3.create_datas.sql
/home/ebaserdb/bin/mysql -S /home/ebaserdb/bin/xsql5518.sock -uroot -p'db10$ZTE' --default_character_set=utf8 < /home/ebaserdb/sql/ZXCLOUD-iRAIV5.01.03_to_ZXCLOUD-iRAIV5.01.04.sql
连接Sybase数据库:
su - sybase
isql -Usa -Pcgsl123
Mysql命令 打开归属服务器
call proc_res_op_function(0, 1, 1501, 150177,'归属服务器管理');
查询uniportal管理门户super密码:
select * from zxinsys.oper_information2
BCP导出数据
1、建视图create view t_mac as
SELECT distinct t.mac,u.username FROM irai_userportallog_09 u LEFT JOIN tempTable t ON (t.mac=u.usermac)
WHERE not (t.mac ='' OR t.mac is NULL)
2、命令行执行bcp raicfgdb..t_mac?out /home/sybase/test.csv -c -Usa -Pcgsl123 -Jcp936 -t","
连接云桌面拼接的连接参数:
--usb-redirect enable:DenyUSB=class_03&subclass_01:AllowUSB=VID_05F9&PID_2202 -d enable -a enable -v enable -c enable -r enable -i enable -j enable -g enable --color-depth 32 --usb-disk all --usbredirecttype mdisk --stream x264 -t "h00001(yft2)" --uls 0 --dls 0 -f
-h 10.47.181.36 -p 10031 -k 1QuwJhmi --usb-redirect enable:DenyUSB=class_03&subclass_01:AllowUSB=VID_05F9&PID_2202 -d enable -a enable -v enable -c enable -r enable -i enable -j enable -g enable --color-depth 32 --usb-disk all --usbredirecttype mdisk --stream x264 -t "h00001(yft2)" --uls 0 --dls 0 -f
17186763207
UAC认证返回结果:
{"code":{"code":"0000","msgId":"RetCode.Success","msg":"操作成功"},"bo":{"code":"5001","msg":"用户密码为初始密码,<a id=\"url\" href=\"http://it.zte.com.cn\">请修改</a>","enMsg":"The user password is the initial password.,<a id=\"url\" href=\"http://it.zte.com.cn\">Please modify it.</a>"},"other":{"message":"【VPN权限控制策略start】【通过:accountId或networkArea为空】【初始密码控制策略start】【不通过:employeeType为F】【用户密码为初始密码,<a id=\"url\" href=\"http://it.zte.com.cn\">请修改</a>,错误码5001】"}}
先UTF-8编码,再Base64编码
new String(Base64.encode(waterMark.getBytes("UTF-8")));
判断字符串以特定字符开头、结尾、包含:
String str;
str.stortsWith("String");
str.endsWith("class");
str.indexOf("ABC")!=-1;
license 目录:/home/zxin10/was/tomcat/webapps/uniportal/WEB-INF/classes
临时license:
{
'common': {
'userName': 'super',
'createTime': '2017-06-16',
'mac1': 'TEMP',
'mac2': 'TEMP'
},
'iecs': {
'cpuPhyNum': '4',
'deadLine': '2017-06-16'
},
'irai': {
'onlineUserNum': '8',
'maxVmTimes': '3',
'maxVmNum': '24',
'deadLine': '2017-06-16'
},
'voi': {
'onlineUserNum': '10',
'deadLine': '2017-06-16'
},
'app': {
'onlineUserNum': '10',
'deadLine': '2017-06-16'
}
}
和正常license的区别是mac地址,正常的license会有mac地址,临时的license的mac是TEMP
正则表达式:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
$('#log_export').on('click', function() {
var table = "";
$("#log_table").find("tr").each(function() {
var tr = "";
$(this).find("td").each(function(index) {
tr += $(this).html() + ",";
});
if (tr != "") {
table += tr + "#";
}
});
var param = {
table: table
};
$.post(path + "/paas/logExportDoc.action", param, function(data) {
if (data.success) {
$.umapMessager.alert(title, "导出日志成功!", "info");
} else {
$.umapMessager.alert(title, data.message, "info");
}
}, "json");
});
}
StringUtils的isBlank与isEmply
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0
下面是 StringUtils 判断是否为空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于 !isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace) 构成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符
StringUtils.isBlank() //均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成,等于 !isBlank(String str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
Spring中什么时候用@Resource,什么时候用@service
当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX;
当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该属性注入一个名称为xxx的bean。
===================================================================================================
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
跳板机:10.41.242.52 administrator/1qaz@WSX Windows
10.41.81.252 root/zte@123456 Linux
三地xen环境VMC信息:
南京:10.41.161.11 主备节点 10.41.161.12/13 root/cgsl123(下同)
深圳:10.5.133.13 主备节点 10.5.133.11/12
西安:10.90.21.35 主备节点 10.90.21.33/34
三地KVM环境VMC信息:
南京vmc浮动ip10.40.253.48 主备节点 10.40.253.49/50
深圳vmc浮动ip10.5.216.11 主备节点 10.5.216.12/13
西安cmc浮动ip10.90.8.11 主备节点 10.90.8.12/13
jquery validate 增加过滤特殊字符的方法:
jQuery.validator.addMethod("specialCharFilter", function(value, element) {
var pattern = new RegExp("[`~!@#$^&*()=|{}':;,.<>/?~!@#¥……&*()——|【】‘;:”“'。,、?%+ \"\\\\]");
var specialStr = "";
for(var i=0;i<value.length;i++){
specialStr += value.substr(i, 1).replace(pattern, '');
}
if( specialStr == value){
return true;
}
return false;
});
注:过滤 "\" 反斜杠 需要 \\\\
隐藏手机号码中间四位:
s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
隐藏邮箱:只显示@前面的首位和末位
s.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
curl -l -H "Content-type: application/json" -X POST -d '{"eventType":"systemConfig"}' http://10.47.161.126:8080/cs/httppro_data.action
tcpdump -i eth1 port 8888 -s0 -w e.pcap
把该变量声明为volatile(不稳定的),这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
volatile不保证原子操作,所以,很容易读到脏数据。
在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
有序性:即程序执行的顺序按照代码的先后顺序执行。
还记得马云前几天在阿里做演讲的时候,我刚好坐在第一排,在40分钟慷慨激昂的演技后,大家都站起来热烈鼓掌,马云在大家的掌声中走下了演讲台,突然摔倒在了我的面前,那一刻我都没有去扶马云,就扶你!