0%

位置参数变量

在写shell脚本的时候,难免会进行命令行传参,下面来介绍一下位置参数变量

  • $n n为数字,$0代表本身 $1-$9代表第一到第九个参数,十以上的参数需要使用大括号,如${10}
  • $* 表示命令行中的所有参数,把所有参数看成一个整体
  • $@ 也表示命令行中的所有参数,但是把每个参数区分对待
  • $# 表示命令行中所有参数的个数

例:

1
2
3
4
5
6
7
8
#在hello.sh中
echo "参数个数为$#"
echo "第一个参数是$1"
------------------------------
#执行hello.sh
sh hello.sh 1 2 3
参数个数为3
第一个参数是1

bash中的特殊符号

符号 含义
‘’ 单引号 在单引号中所有的特殊字符都没有特殊含义
“” 双引号 双引号中$ `(反引) \ 有特殊含义,分别是调用变量的值、引用命令、转义符
`` 反引号 反引号中的是系统命令,在bash中会优先执行
$() 和反引号作用一样,用于引用命令,不过推荐使用该命令,因为反引号不明显
() 用于一串命令的执行,会在子shell中运行,括号内容仅在括号内生效,多条命令使用;隔开
{} 用于一串命令的执行,会在当前shell中执行,也可用于变量变形和替换,多条命令使用;隔开
[] 用于变量的测试
# #开头代表注释
$ 用于调用变量的值
\ 转义

intset实现

inset是set集合的底层实现之一,当set中只有整数值元素且元素数量不多时使用

1
2
3
4
5
6
7
8
typedef struct intset {
// 编码方式
uint32_t encoding;
// 元素数量
uint32_t length;
// 保存元素的数组
int8_t contents[];
} intset;

skiplist实现

skiplist跳跃表,是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,来达到快速访问节点的目的,redis使用skiplist作为zsort的底层实现之一

结构很像树形结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
typedef struct zskiplistNode {
// 对象
sds ele;
// 分值
double score;
// 后退指针,从表尾向表头方向的访问及诶按
struct zskiplistNode *backward;
// 层 数组中可以包含多个元素,每个元素都包含一个指向其他节点的指针
struct zskiplistLevel {
// 前进指针,从表头向表尾方向访问节点
struct zskiplistNode *forward;
// 跨度,记录两个节点间的距离
unsigned long span;
} level[];
} zskiplistNode;

typedef struct zskiplist {
// 头尾节点
struct zskiplistNode *header, *tail;
// 跳跃表的长度
unsigned long length;
// 记录目前跳跃表的深度(表头节点的层数不计算在内)
int level;
} zskiplist;

输出重定向

bash的输出分为标准输出和错误输出

  • 标准输出 文件描述符是1
  • 错误输出 文件描述符是2

而输出重定向可以将本应该输出到控制台的内容输出到文件

  • 标准输出重定向 命令 > 文件 覆盖原文件内容 命令 >> 文件 追加
  • 错误输出重定向 错误命令 2>文件 覆盖原文件内容 错误命令 2>文件 追加

使用

1
2
# 把命令的标准输出保存到文件中 再将错误输出保存到参数1中,即文件中
命令 >> 文件 2>&1

可以将命令输出内容追加到文件中(不管是错误信息还是正确信息)

redis性能优化

redis提供了一个性能测试工具redis-benchmark,可以使用redis-benchmark命令来了解redis的性能

1
2
3
4
5
redis-benchmark -q -c 50

---------------------
-q 表示简化输出结果
-c 50 表示有五十个客户端

运行结果展示了一些常用redis命令在1秒内可以执行的次数

springboot定制嵌入式的servlet容器

修改容器配置

有两种方式可以修改容器的配置

  • 可以直接在配置文件中修改和server有关的配置
1
2
3
4
5
6
7
server.port=8081
server.tomcat.uri-encoding=UTF-8

//通用的Servlet容器设置
server.xxx
//指定Tomcat的设置
server.tomcat.xxx
阅读全文 »

springboot扩展SpringMVC

既保留自动配置又有扩展配置

根据官网的描述,如果想要扩展SpringBoot对于SpringMVC的配置而又保留SpringBoot对SpringMVC的自动配置,可以编写一个配置类(@Configuration)继承WebMvcConfigurerAdapter类,但是不能标注@EnableWebMvc

1
2
3
4
5
6
7
8
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
}
}
阅读全文 »

springboot多环境配置

springboot对于多环境配置支持多种方式

方式一:多个配置文件

在配置多个环境的配置文件时文件名可以是application-{profile}.properties/yml

默认使用application.properties/yml的配置,然后在默认配置文件中进行环境激活

1
2
3
spring:
profiles:
active: dev
阅读全文 »

springboot配置文件

虽然springboot提供了一系列的默认配置,但是还是需要使用配置文件来进行进行一些自定义的配置

springboot中配置文件名称叫做application.properties或者application.yml

阅读全文 »