一.redis中的sort排序:
1.1 redis支持对list,set,sorted set元素的排序
比如:
127.0.0.1:6379> lpush mimvp 12
(integer) 1
127.0.0.1:6379> lpush mimvp 11
(integer) 2
127.0.0.1:6379> lpush mimvp 13
(integer) 3
127.0.0.1:6379> lpush mimvp 10
(integer) 4
127.0.0.1:6379> lrange mimvp 0 -1
1) “10”
2) “13”
3) “11”
4) “12”
127.0.0.1:6379> sort mimvp
1) “10”
2) “11”
3) “12”
4) “13”
127.0.0.1:6379> sort mimvp desc
1) “13”
2) “12”
3) “11”
4) “10”
1.2 sort默认的排序方式(asc)是从小到大排的,当然也可以按照逆序或者按字符顺序排。
逆序可以加上desc选项,想按字母顺序排可以加alpha选项,alpha可以和desc一起用。
sort 默认以分数(数值)排序,字母使用默认的sort排序,会报错!
127.0.0.1:6379> lpush mylist forum
(integer) 1
127.0.0.1:6379> lpush mylist proxy
(integer) 2
127.0.0.1:6379> lpush mylist blog
(integer) 3
127.0.0.1:6379> lpush mylist apptop
(integer) 4
127.0.0.1:6379> sort mylist
(error) ERR One or more scores can't be converted into double
127.0.0.1:6379> sort mylist alpha
1) “apptop”
2) “blog”
3) “forum”
4) “proxy”
127.0.0.1:6379> sort mylist alpha desc
1) “proxy”
2) “forum”
3) “blog”
4) “apptop”
127.0.0.1:6379> sort mylist desc alpha
1) “proxy”
2) “forum”
3) “blog”
4) “apptop”
1.3
除了可以按集合元素自身值(数字,字母)排序外,还可以将集合元素内容按照给定pattern组合成新的key,并按照新key中对应的内容进行排序。
示例:
127.0.0.1:6379> set mimvp_12 mimvp_12
OK
127.0.0.1:6379> set mimvp_11 mimvp_11
OK
127.0.0.1:6379> set mimvp_13 mimvp_13
OK
127.0.0.1:6379> set mimvp_10 mimvp_10
OK
127.0.0.1:6379> sort mimvp by mimvp_* // mimvp_* 是字符串,因此需要alpha
(error) ERR One or more scores can't be converted into double
127.0.0.1:6379> sort mimvp by mimvp_* alpha
1) “10”
2) “11”
3) “12”
4) “13”
127.0.0.1:6379> sort mimvp by mimvp_* alpha desc
1) “13”
2) “12”
3) “11”
4) “10”
更多详细例子在【转载】Redis sort 排序命令详解 - 徐继收 - 博客园 (cnblogs.com)
二 。锁
可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。
三.集合并发不安全
3.1ArrayList线程安全吗?
不安全,因为会存在并发争抢的问题。
举例:
随便开几个线程同时对List集合中添加元素,有时候会出现ConCurrentModificationException异常
导致原因:
并发争抢修改导致,一个线程正在改数据,另一个线程过来抢夺,会导致数据不一致,并发修改异常
解决:
1.用Vector
2.用Collections.synchronizedlist(new ArrayList<>());
3.用CopyOnWriteArrayList
说一下对CopyOnWriteArrayList的理解:
CopyOnWriteArrayList是相当于一个容器,当你写入时,复制这个容器并且写入,但其他的读取的引用还是连接到当初的容器,当修改完成后,把引用修改到那个容器后,这样做的好处是,对CopyOnWrite进行并发的读时,可以不用枷锁,就相当于把读和写分离开了,提高了效率。
其他几个集合都跟这个差不多,比如Set,也可以Collections.synchronizedlist(new Set<>()),也有CopyOnWriteHashSet,说到这,顺便说一下可能有人会问的,HashSet底层是什么?是HashMap,但是为什么呢,你Set可以add(“a”),map是key value,这俩都不一样多的呀,
答案是,add时把a作为key,因为key是唯一的,所以Set能保证唯一。value是一个object。
还有HashMap,Collections.synchronizedlist也可以用,然后他还有hashTable,ConcurrentHashMap
三。分割汉字和数字
String s = "字符串123456楼";
Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]+|\\d+");
Matcher m = p.matcher( s );
for (int i = 0; i < 3; i++) {
m.find();
System.out.println(m.group());
}
js生成时间戳:
var timestamp = Date.parse(new Date());//生成时间戳 qrcode.makeCode(elText.value+"?t=" + '1.'+timestamp);
Linux部署springboot项目:
先把springboot达成war包或者jar包,然后再解压出来,因为target下面的结构不一样
Jsoup发送json请求:
版本换成1.10.2
String url = "http://17683805448.wicp.vip/ilasWebService/Service.asmx";
Connection connection = Jsoup.connect(url);
connection.header("Content-Type", "application/soap+xml; charset=utf-8"); //这是重点
connection.header("Accept", "text/plain, */*; q=0.01");
connection.timeout(15000);
String data ="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n" +
" <soap12:Body>\n" +
" <ReserveBook xmlns=\"ilasIII OpenAPI\">\n" +
" <strCardno>1230082</strCardno>\n" +
" <strBarno>0303813</strBarno>\n" +
" <strType>J</strType>\n" +
" <nWay>1</nWay>\n" +
" <strEndDate>2023</strEndDate>\n" +
" </ReserveBook>\n" +
" </soap12:Body>\n" +
"</soap12:Envelope>";
try {
Document post = connection.requestBody(data).post();
System.out.println(post);
jsp想要传接收到的参数给方法要加引号:
yuyue('${item.url}')