[TOC]
由于github不支持显示TOC, 因此需要先用markdown-toc[4]进行预处理 也可以使用sublime里的markdown-toc[5]插件.
# content
## content
### content
......
一共可以设置六级标题
* 1
* 2
* 3 * 1 * 2 * 3
1. 1
2. 2
3. 3 1. 1 2. 2 3. 3
- AAA
+ A
- a
1. contentA
2. contentB
> contentA
>> contentB
contentA
contentB
之后的文本内容需要插入空行

[content](link to the content)
[content][1]
[1]:Url [content][1] [1]:Url
<url>
***
---
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
| Tables | Are | Cool |
|---|---|---|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
``` [python]
@requires_authorization
def add(a, b): # add a and b
return a+b
class TA:
```
@requires_authorization
def add(a, b): # add a and b
return a+b
class TA:
or 每行文字前加4个空格或者1个Tab
**content** **content**
__content__ __content__
*content* *content*
_content_ _content_
<font face="黑体">我是黑体字</font>
<font face="微软雅黑">我是微软雅黑</font>
<font face="Verdana">I like Verdana format</font>
CREATE TABLE `user_score` (
`id` bigint(64) NOT NULL AUTO_INCREMENT,
`userId` bigint(64) DEFAULT NULL,
`score` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
insert into `user_score` (`id`, `userId`, `score`) values('1','1','1');
insert into `user_score` (`id`, `userId`, `score`) values('2','2','20');
insert into `user_score` (`id`, `userId`, `score`) values('3','3','20');
insert into `user_score` (`id`, `userId`, `score`) values('4','4','60');
insert into `user_score` (`id`, `userId`, `score`) values('5','5','90');
insert into `user_score` (`id`, `userId`, `score`) values('6','6','100');
insert into `user_score` (`id`, `userId`, `score`) values('7','7',NULL);

SELECT
t1.*,
@rank := @rank + 1 rank
FROM
(SELECT
a.`userId`,
a.`score`
FROM
`user_score` a
ORDER BY a.`score` DESC) t1,
(SELECT
@rank := 0) t2

SELECT
t1.*,
(
CASE
WHEN @score = t1.score THEN @rank
WHEN @score := t1.score THEN @rank := @rank + 1
WHEN @score = 0 OR @score IS NULL THEN @rank := @rank + 1
END
) rank
FROM
(SELECT
userId,
score
FROM
user_score a
ORDER BY a.`score` DESC) t1,
(SELECT
@rank := 0,
@score := NULL) t2 ;

SELECT
b.userId,
b.score,
b.rank
FROM
(SELECT
a.*,
@index := @index + 1,
@rank := (
CASE
WHEN @temp_view_count = a.score THEN @rank
WHEN @temp_view_count := a.score THEN @index
WHEN @temp_view_count = 0 OR @temp_view_count IS NULL THEN @index
END
) rank
FROM
(SELECT
userId,
score
FROM
user_score
ORDER BY score DESC) a,
(SELECT
@rank := 0,
@rowtotal := NULL,
@index := 0) r) b



vim /etc/selinux/config
reboot, 再看selinux状态selinux -v
java中执行耗时任务,有时需要线程池、Callable、Future结合使用
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
public class MyCallable implements Callable<Boolean> {
private int no;
public MyCallable(int no) {
this.no = no;
}
@Override
public Boolean call() throws Exception {
int sleep = new Random().nextInt(15);
TimeUnit.SECONDS.sleep(sleep);
System.out.printf("task #%02d, sleep %ds, ok!\n", no, sleep);
return Boolean.TRUE;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService pool = Executors.newCachedThreadPool();
// List<Future<Boolean>> list = new ArrayList<>();
CompletionService<Boolean> cs = new ExecutorCompletionService<>(pool);
for (int i = 0; i < 15; i++) {
final int j = i;
// list.add(pool.submit(new MyCallable(j)));
cs.submit(new MyCallable(j));
}
// for (Future<Boolean> future : list) {
// try {
// future.get();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
for (int i = 0; i < 15; i++) {
try {
cs.take().get();
} catch (Exception e) {
e.printStackTrace();
}
}
pool.shutdown();
}
}

future.get();为非阻塞,不会阻塞其它线程执行location /xx {
proxy_set_header realurl $request_uri;
proxy_set_header Host $http_host;
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://xx-server;
}
ip := c.Ctx.Request.Header.Get("X-Forwarded-For")
http {
include mime.types;
default_type application/octet-stream;
...
underscores_in_headers on;
...
}
accessToken := c.Ctx.Request.Header.Get("access_token") // 从header中获取
http {
...
client_max_body_size 20m;
...

redis出现数据短暂丢失问题(测试环境和生产环境)