常需要对图片进行处理,如 加水印,压缩,翻转 等。推荐使用一款开源的图片处理框架 Thumbnailator。
常需要对图片进行处理,如 加水印,压缩,翻转 等。推荐使用一款开源的图片处理框架 Thumbnailator。
Spring Cloud(二十一):Gateway 元数据,超时,跨域,HTTPS,监控,问题定位
Spring Cloud Gateway 网关除了核心的路由判断表达式(predicate :有的译为谓词)和过滤器外,还有一些其它的设置,以便于可以更好的配置和应用 Gateway。
例如,元数据配置,超时处理,跨域处理,HTTPS 安全配置,监控/指标 收集,问题定位等。可以添加一些全局配置,可以收集健康数据,便于快速定位问题等等。
Spring Cloud(二十):Gateway 路由匹配表达式工厂,过滤器工厂,全局过滤器,HTTP头过滤器
Spring Cloud Gateway 项目提供了一个基于 Spring 生态体系构建的 API 网关,包括:Spring 5,Spring Boot 2。
Spring Cloud Gateway 旨在提供一种简单而有效的方试将前端请求 URI 路由到后端服务的接口,它还提供了其它的附加实用的功能,例如:安全性,监控/指标,可伸缩性等。
Spring Cloud(十九):Gateway 特性,述语,自动配置与简单应用
即将开发的新平台在网关组件上选择了 Gateway,Spring 官方主推 Gateway。Zuul 1 虽然很成熟,但不再维护,Zuul 2 已闭源。
网关组件,不管是 Zuul 还是 Gateway,其核心技术脱离不了 代理请求 和 过滤器。本篇根据 Spring Cloud Gateway 官方文档对其功能,配置,应用进行详细描述。
1 | package main |
Go 内置两种字符类型:
byte
是 uint
的别名)rune
。rune 在 Go 内部是 int32
类型的别名,占用 4 个字节。Go 语言默认的字符编码是 UTF-8 类型,如果需要特殊的编码转换,则使用 Unicode/UTF-8 标准包。
Go 语言将字符串作为一种原生的基本数据类型,字符串初始化可以使用 字符串字面量。
字面量:用于表达源代码中一个固定值的符号,源于 C 语言中的称呼,其它语言有称为常量。
字符串字面量(stringliteral)是指双引号引住的一系列字符,双引号中可以没有字符,可以只有一个字符,也可以有很多个字符。
字符串是不可变值类型,内部用指针指向 UTF-8 字节数组
""
。字符串类型底层是一个二维的数据结构,一个是指针指向字节数组的起点,另一个是长度。例如:
1 | type stringStruct struct { |
所有类型声明都是一样的。
显示完整声明
1 | var a = "hello, word" |
短类型声明::=
只能出现在函数内(包括方法内),只是 Go 编译器自动进行数据类型推断。
Go 支持多个类型变量同时声明并赋值,但不建议这么使用,不易阅读
1 | a := "hello" |
字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的
值。例
1 | package main |
使用 ` 定义不做转义处理的原始字符串,支持跨行
1 | package main |
连符串使用 +
符号来连接,跨行连接的 +
必须在上一行的结尾,否则会报错。
1 | package main |
因字符串底层是个二维的数据结构,所以可以使用索引 和 长度(单位:字节) 来获取字符串的子串。
**注意:**中文是 三个字节 表示一个汉字,如果长度不是 3 的整数倍就会显示乱码。
1 | package main |
Go 源码采用的是 UTF-8 的编码方式,UTF-8 的字符占用的字节数可以有 1~4 个字节,Rune 字符常量使用 ''
将其括住。
支持 \uFFFF、\U7FFFFFFF、\xFF
格式, 对应 rune
类型,UCS-4。
1 | package main |
要修改字符串,可先将其转换成 []rune 或 []byte
1 | package main |
有两种方式,但都是基于 for 循环。
1 | package main |
strings
是 Go 自带的字符串工具类。
strings.HasPrefix(src, dest)
,返回 bool
值
1 | package main |
strings.HasPrefix(src, dest)
,返回 bool
值
1 | package main |
strings.Index(src, dest)
,返回 int
值
1 | package main |
strings.LastIndex(src, dest)
,返回 int
值
1 | package main |
Replace(s, old, new string, n int) string
:指定替换次数ReplaceAll(s, old, new string) string
:替换所有,实际调上面的方法,n 传的是 -1,表示不限制次数。1 | package main |
Count(s, substr string) int
:返回整数
1 | package main |
Repeat(s string, count int) string
,返回 copy n 次的新字符串
1 | package main |
ToLower(s string) string
:转小写ToUpper(s string) string
:转大写1 | package main |
Trim(s, cutset string) string
:去掉首尾指定的字符TrimSpace(s string) string
:去掉首尾空格TrimPrefix(s, prefix string) string
:去掉前缀指定的字符TrimSuffix(s, suffix string) string
:去掉后缀指定的字符1 | package main |
Fields(s string) []string
:返回空格分隔的子串Split(s, sep string) []string
:指定分隔符,返回分隔的子串1 | package main |
Join(elems []string, sep string) string
:传入字符串数组和连接符,返回字符串1 | package main |
Go 基础:标识符(预声明标识符,自定义标识符,关键字,类型,函数,常量)
Go 语言共有 65 个预声明的标识符,包括 25 个关键字(keywords)和 40 个其他预声明标识符。
40 个其他预声明标识符包括 20 个内置数据类型标识符,4 个常量标识符,1 个空白标识符,15 个内置函数。
Go 语言的 操作符 包含:算术运算符,位运算符,赋值和赋值复核运算符,比较运算符,逻辑运算符,自增自减操作符,其他运算符。
Go 的操作符 与 Java 有点点不一样。
Java 的一个很重要的优点就是提供了垃圾回收器(Garbage Collection,GC)来自动管理内存,不用向 C 语言样需要开发人员手动来释放内存。但也不等于完全不管内存的使用,系统在线上长期运行后,可能出现内存泄漏耗尽内存,系统卡死或崩溃。
若剩余内存满足不了申请的需要,或申请不到连续内存,就会存在内存溢出问题(OOM),系统就会抛出 Error,导致业务逻辑无法正常执行。
对开发人员来说应该能分析 内存泄漏 和 内存溢出 问题的根源,彻底解决问题,而不仅仅是重启应用或扩大内存。
MQ系列(九):RabbitMQ发布者确认,消费者(确认,预取,优先级,退出通知)
发布者确认解决了消息发送传输过程中因网络故章导致丢失消息的问题,RabbitMQ 为消息者确认提供了 自动确认 和 手动确认 两种方式。
消费者预取可以限制在回传确认消息之前接收的消息数量,消费者优先级允许高优先级的消息者优先接收消息,当高优先级消费者阻塞时,消息只会传递给低优先级消费者。