一、概念二、集成 Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broke...
Read More1 基本概念以下基本概念均对应Quartz的API。1.1 任务JobKey包括jobName和jobGroup。同一调度器中,任务的JobKey是唯一的,被Scheduler用来管理Job。Job代表定时任务要执行的内容,只包含一个execute方法,执行的内容写在方法里:public interface Jo...
Read More钩子函数 切面编程 代理 静态代理 动态代理 以前对钩子函数、切面编程和动态代理分别进行过了解,从来没有把三者联合起来思考过。今天在讨论一个问题的过程中,突然意识到这三者其实是为了达到同一目的的三种方法,也就是说从目的上讲是同一种东西——都是为了增强方法,让方法获得一...
Read MoreWildcard 搜索 禁止分词 注意 参考本文针对Elasticsearch 6.1版本。Wildcard 搜索类似于MySQL的模糊搜索,适用于string类型,占位符有两个: ?:匹配一个字符; *:匹配多个字符。查询时用wildcard关键字搜索,如:{ "query": { "bo...
Read More名词 节点 分片 写入 读取 根据文档 id 读取 全文检索 参考名词 node:一个运行中的 Elasticsearch 实例称为一个节点。 shard:Elasticsearch 的分片就是 Lucene 的 index,Lucene 的 index ...
Read More名词 写数据 删除和更新 查询 segment 合并 参考名词这些名词下面会用到,提前过一下。 index:类似数据库,是存储、索引数据的地方。 shard:index 由 shard 组成,一个 primary shard,其他是 replica shard。 segment:shard 包...
Read More乐观锁控制Elasticsearch 是分布式的。当创建、修改或删除一个文档的时候,这个文档的新版本会被复制到集群中的其他节点。Elasticsearch 既是异步(asynchronous)的又是同步(concurrent)的,这意味着这些复制请求是同步发送的,但是有可能不按顺序(out of sequence...
Read MoreRequest/Response 和 RTT Redis 管道 这不仅关于 RTT 真实的例子 管道 VS 脚本原文来自Using pipelining to speedup Redis queriesRequest/Response 和 RTTRedis 是使用 C/S 模式的服务器,并使用名为 R...
Read More为什么分片是有用的 分片基础 分片不同的实现 分片的缺陷 数据存储或缓存? Presharding原文来自Partitioning: how to split data among multiple Redis instances.分片是把数据分布在多个 Redis 实例的过程,每个 Redis 实...
Read More第一章:“记忆有限公司”──你的新冒险 第二章:扩大业务 第三章:你有了第一个“糟糕的服务” 第四章:你修正了一致性错误 第五章:你想到了一个最伟大的解决方案 第六章:老婆发火了 第七章:结论 彩蛋:雇佣一个跑腿的职员来保证最终一致性原文来自A plain english introductio...
Read More背景在计算程序中,调度系统会分页计算所有数据,每个分页是一个线程,所以整个计算会有多个线程操作。计算又分为多个步骤,所有的操作最后都需要更新 detail 表,update 语句的条件是 a_id 和 b_id。detail 表主要字段如下:create table srm_review_detail( id ...
Read More步骤在MySQL中任何一个查询都是一个关联。 先执行子查询生成临时表; 在最外层表中循环取出单条数据; 嵌套循环到下内层表中寻找匹配的行,直到找到内层表所有匹配的行为止; 根据各个表匹配的行,返回查询中需要的各个列。 MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个表无法找到更多的行,M...
Read More1. 综述 2. 角色 3. 授权码模式 3.1 登记第三方应用 3.2 授权过程 3.2.1 总览 3.2.2 认证请求 3.2.3 用户授权 3.2.4 重定向 URI ...
Read More一级缓存 介绍 开启方法 原理 二级缓存 介绍 开启方法 原理 使用 Redis 作为二级缓存 Spring Cache – 注解驱动的缓存 开启 注解 注解的属性 ...
Read MoreBeanUtils
和 BeanCopier
是公司内部用来进行 DTO
、Entity
和 VO
属性拷贝的工具类,本文是对他们的实现原理和性能做一个简单比较。
1. TransactionDefinition接口 2. 事务隔离级别 3. 事务传播属性1. TransactionDefinition接口TransactionDefinition接口定义了 Spring 中与事务有关的属性和方法:public interface TransactionDefini...
Read MoreThreadLocal
ThreadLocal 是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立地改变自己的副本而不会影响其他相差对应的副本。在一个类中,ThreadLocal类型的实例是典型的私有、静态(private static)
字段,因为我们可以将其作为线程的关联状态。
1、关于 this 的误解 2、this 的调用位置 3、绑定规则 (1)默认绑定 (2)隐式绑定 (3)显式绑定 (4)new 绑定 1、关于 this 的误解 ...
Read MoreOpenResty
用 Nginx 实现访问限速功能需要几个功能模块:Lua 模块
和 Redis 模块
。可以安装 Nginx 并安装模块,为了简单直接使用 OpenResty
,内置了所有常规模块。
题目
以下代码会如何输出:
for (var i = 0; i <= 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
前置概念
- 指令重排:JVM 为了优化指令、提高运行速度,在不影响单线程执行结果的前提下,会对代码进行重排。
- 内存可见性:每个线程在获取锁之后,会在自己的工作内存中操作共享变量,操作完成之后将工作内存中的副本写回内存,在此过程中共享变量的变化对其是不可见的。这样做也是为了提高效率。
1、简单动态字符串(Simple Dynamic String,SDS)
(1)结构
- SDS 遵循 c 字符串以
'\0'
结尾的惯例,但是不计算在长度里; - SDS 记录了自身长度,获取字符串长度复杂度
O(1)
;
一、前言
本文主要介绍 Flyway 在实际中的应用。在实际项目中应用 Flyway 主要要解决两个问题:
- 如何管理多个数据库;
- 如何管理不同环境的数据库。
命名规范
- master 分支:
master
; - develop 分支:
develop
; - release 稳定分支:
release_stable_YYYYMMDD_n
,YYYYMMDD 为当前日期(年月日),n 为递增序列号; - release 测试分支:
release_nightly_YYYYMMDD_n
,YYYYMMDD 为当前日期(年月日),n 为递增序列号; - 开发人员版分支:bug单号为 bugfree 编号,n 为递增序列号。
- 修复 bug:
fixbug_bug单号_邮箱前缀_n
; - 需求功能:
feature_bug单号_邮箱前缀_n
。
- 修复 bug:
实现 equals() 方法,要实现以下四点:
- 自反性:对于任何非 null 引用 x,x.equals(x)必须返回 true。
- 对称性:对于任何非 null 引用 x 和 y,当 y.equals(x) 返回 true 时,x.equals(y) 也必须返回 true。
- 传递性:对于任何非 null 引用x,y 和 z,当 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,那么 x.equals(z) 也必须返回 true。
- 一致性:对于任何非 null 引用 x 和 y,只要 equals 方法用到的信息没有被修改,多次调用 x.equals(y)应该一致性地返回 true 或 false。
一、容器启动
容器启动后,首先会加载 Configuration Metadata
,解析后编组为相应的 BeanDefinition
,最后将 BeanDefinition 注册到相应的BeanDefinitionRegistry
。
1、X-Frame-Options
X-Frame-Options 响应头是告诉浏览器是否允许一个页面在<frame>
、<iframe>
、<object>
中展示的标记。网站使用此功能确保自己网站内容没有被嵌入别人的网站,从而避免点击劫持攻击(clickjacking)。
1. ==
和 ===
(1) ‘==’ 会进行隐式的类型转换。
- 如果有一个操作数是布尔型,比较之前会转换为数值;
- 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
- 如果一个操作数是对象,另一个不是,比较之前会调用对象的
valueOf()
方法,再按照之前的规则比较;
本文旨在总结一个 HTTP 请求报文的各部分和 org.springframework.http 包中类的对应关系。
Read More5、Consumable Media Types
可以在 Mapping 中加入 consumes
条件来声明 Controller 可以被接受的媒体类型
(media type)—— 也就是首部中的 Content-Type
:
1、同一 URI 对应不同 Http 方法
@RequestMapping 可以使用在类级别上,在类中用 @GetMapping
、@PostMapping
等注解的方法会映射到统一 URL,并对应各自的方法:
一、默认情况:DefaultHandlerExceptionResolver
DefaultHandlerExceptionResolver 是 DispatcherServlet 默认的错误处理类,它会把 Spring MVC 抛出的标准异常对应一个状态码写入到 response 中,并返回默认的错误页面。
Read More背景
工作中经常用到 dubbo,出现过多次消费端获取不到服务的问题。印象中这个问题遇到过3次,每次都会耽误我很久的时间。实际上也是因为自己不求甚解,没有仔细看过 dubbo 的文档,看源码就更谈不上了。
Read More一、存储层级
- 内存存储:在
堆内存
里存储。从属于 Java GC。 - 非堆存储:受限于
RAM
的可用空间。- 不从属于 Java GC。
- 只能存储序列化的数据。
- 为内存存储提供了溢出能力。
- 磁盘存储。
- 备份内存存储。
- 为非堆存储提供溢出能力。
- 只能存储序列化的数据。
一、XML配置文件
ehcache
默认会在classpath
下查找名为ehcache.xml
的文件,当然也可以自定义名称。- 如果没有找到 ehcache.xml,ehcache 会默认试用
ehcache-failsafe.xml
,它被打包在 ehcache 的jar
文件中。如果用户使用的是这个文件,ehcache 会报一个警告
,让用户自己定义一个配置文件。 defaultCache
配置会被应用到所有没有被显示声明的缓存中。这个配置不是必需的。
今天的另外两个知识点:1、UNION: 查询中尽量不要使用 OR,可以用 UNION 代替。 UNION 和 UNION ALL 的不同点在于:UNION 会删除重复结果再返回,UNION ALL 不会。2、LIMIT 1:如果明确知道查询的结果不会多于一个,可以在查询语句的末尾加上 LIMIT 1,这样 M...
Read More一、背景
把 webapp 部署到 CentOS
服务器上,服务器预装了 MySQL 5.1
。在保存数据的时候发现字符集和时间有一些问题:中文是乱码,时间不是北京时间。
钩子函数 切面编程 代理 静态代理 动态代理 以前对钩子函数、切面编程和动态代理分别进行过了解,从来没有把三者联合起来思考过。今天在讨论一个问题的过程中,突然意识到这三者其实是为了达到同一目的的三种方法,也就是说从目的上讲是同一种东西——都是为了增强方法,让方法获得一...
Read MoreBeanUtils
和 BeanCopier
是公司内部用来进行 DTO
、Entity
和 VO
属性拷贝的工具类,本文是对他们的实现原理和性能做一个简单比较。
1. TransactionDefinition接口 2. 事务隔离级别 3. 事务传播属性1. TransactionDefinition接口TransactionDefinition接口定义了 Spring 中与事务有关的属性和方法:public interface TransactionDefini...
Read MoreThreadLocal
ThreadLocal 是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立地改变自己的副本而不会影响其他相差对应的副本。在一个类中,ThreadLocal类型的实例是典型的私有、静态(private static)
字段,因为我们可以将其作为线程的关联状态。
前置概念
- 指令重排:JVM 为了优化指令、提高运行速度,在不影响单线程执行结果的前提下,会对代码进行重排。
- 内存可见性:每个线程在获取锁之后,会在自己的工作内存中操作共享变量,操作完成之后将工作内存中的副本写回内存,在此过程中共享变量的变化对其是不可见的。这样做也是为了提高效率。
实现 equals() 方法,要实现以下四点:
- 自反性:对于任何非 null 引用 x,x.equals(x)必须返回 true。
- 对称性:对于任何非 null 引用 x 和 y,当 y.equals(x) 返回 true 时,x.equals(y) 也必须返回 true。
- 传递性:对于任何非 null 引用x,y 和 z,当 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,那么 x.equals(z) 也必须返回 true。
- 一致性:对于任何非 null 引用 x 和 y,只要 equals 方法用到的信息没有被修改,多次调用 x.equals(y)应该一致性地返回 true 或 false。
一、默认情况:DefaultHandlerExceptionResolver
DefaultHandlerExceptionResolver 是 DispatcherServlet 默认的错误处理类,它会把 Spring MVC 抛出的标准异常对应一个状态码写入到 response 中,并返回默认的错误页面。
Read More背景
工作中经常用到 dubbo,出现过多次消费端获取不到服务的问题。印象中这个问题遇到过3次,每次都会耽误我很久的时间。实际上也是因为自己不求甚解,没有仔细看过 dubbo 的文档,看源码就更谈不上了。
Read More一、存储层级
- 内存存储:在
堆内存
里存储。从属于 Java GC。 - 非堆存储:受限于
RAM
的可用空间。- 不从属于 Java GC。
- 只能存储序列化的数据。
- 为内存存储提供了溢出能力。
- 磁盘存储。
- 备份内存存储。
- 为非堆存储提供溢出能力。
- 只能存储序列化的数据。
一、XML配置文件
ehcache
默认会在classpath
下查找名为ehcache.xml
的文件,当然也可以自定义名称。- 如果没有找到 ehcache.xml,ehcache 会默认试用
ehcache-failsafe.xml
,它被打包在 ehcache 的jar
文件中。如果用户使用的是这个文件,ehcache 会报一个警告
,让用户自己定义一个配置文件。 defaultCache
配置会被应用到所有没有被显示声明的缓存中。这个配置不是必需的。
背景在计算程序中,调度系统会分页计算所有数据,每个分页是一个线程,所以整个计算会有多个线程操作。计算又分为多个步骤,所有的操作最后都需要更新 detail 表,update 语句的条件是 a_id 和 b_id。detail 表主要字段如下:create table srm_review_detail( id ...
Read More步骤在MySQL中任何一个查询都是一个关联。 先执行子查询生成临时表; 在最外层表中循环取出单条数据; 嵌套循环到下内层表中寻找匹配的行,直到找到内层表所有匹配的行为止; 根据各个表匹配的行,返回查询中需要的各个列。 MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个表无法找到更多的行,M...
Read More今天的另外两个知识点:1、UNION: 查询中尽量不要使用 OR,可以用 UNION 代替。 UNION 和 UNION ALL 的不同点在于:UNION 会删除重复结果再返回,UNION ALL 不会。2、LIMIT 1:如果明确知道查询的结果不会多于一个,可以在查询语句的末尾加上 LIMIT 1,这样 M...
Read More一、背景
把 webapp 部署到 CentOS
服务器上,服务器预装了 MySQL 5.1
。在保存数据的时候发现字符集和时间有一些问题:中文是乱码,时间不是北京时间。
一、容器启动
容器启动后,首先会加载 Configuration Metadata
,解析后编组为相应的 BeanDefinition
,最后将 BeanDefinition 注册到相应的BeanDefinitionRegistry
。
本文旨在总结一个 HTTP 请求报文的各部分和 org.springframework.http 包中类的对应关系。
Read More5、Consumable Media Types
可以在 Mapping 中加入 consumes
条件来声明 Controller 可以被接受的媒体类型
(media type)—— 也就是首部中的 Content-Type
:
1、同一 URI 对应不同 Http 方法
@RequestMapping 可以使用在类级别上,在类中用 @GetMapping
、@PostMapping
等注解的方法会映射到统一 URL,并对应各自的方法:
1、关于 this 的误解 2、this 的调用位置 3、绑定规则 (1)默认绑定 (2)隐式绑定 (3)显式绑定 (4)new 绑定 1、关于 this 的误解 ...
Read More题目
以下代码会如何输出:
for (var i = 0; i <= 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
1. ==
和 ===
(1) ‘==’ 会进行隐式的类型转换。
- 如果有一个操作数是布尔型,比较之前会转换为数值;
- 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
- 如果一个操作数是对象,另一个不是,比较之前会调用对象的
valueOf()
方法,再按照之前的规则比较;
1、X-Frame-Options
X-Frame-Options 响应头是告诉浏览器是否允许一个页面在<frame>
、<iframe>
、<object>
中展示的标记。网站使用此功能确保自己网站内容没有被嵌入别人的网站,从而避免点击劫持攻击(clickjacking)。
命名规范
- master 分支:
master
; - develop 分支:
develop
; - release 稳定分支:
release_stable_YYYYMMDD_n
,YYYYMMDD 为当前日期(年月日),n 为递增序列号; - release 测试分支:
release_nightly_YYYYMMDD_n
,YYYYMMDD 为当前日期(年月日),n 为递增序列号; - 开发人员版分支:bug单号为 bugfree 编号,n 为递增序列号。
- 修复 bug:
fixbug_bug单号_邮箱前缀_n
; - 需求功能:
feature_bug单号_邮箱前缀_n
。
- 修复 bug:
1、简单动态字符串(Simple Dynamic String,SDS)
(1)结构
- SDS 遵循 c 字符串以
'\0'
结尾的惯例,但是不计算在长度里; - SDS 记录了自身长度,获取字符串长度复杂度
O(1)
;
一、前言
本文主要介绍 Flyway 在实际中的应用。在实际项目中应用 Flyway 主要要解决两个问题:
- 如何管理多个数据库;
- 如何管理不同环境的数据库。
OpenResty
用 Nginx 实现访问限速功能需要几个功能模块:Lua 模块
和 Redis 模块
。可以安装 Nginx 并安装模块,为了简单直接使用 OpenResty
,内置了所有常规模块。
一级缓存 介绍 开启方法 原理 二级缓存 介绍 开启方法 原理 使用 Redis 作为二级缓存 Spring Cache – 注解驱动的缓存 开启 注解 注解的属性 ...
Read More1. 综述 2. 角色 3. 授权码模式 3.1 登记第三方应用 3.2 授权过程 3.2.1 总览 3.2.2 认证请求 3.2.3 用户授权 3.2.4 重定向 URI ...
Read More第一章:“记忆有限公司”──你的新冒险 第二章:扩大业务 第三章:你有了第一个“糟糕的服务” 第四章:你修正了一致性错误 第五章:你想到了一个最伟大的解决方案 第六章:老婆发火了 第七章:结论 彩蛋:雇佣一个跑腿的职员来保证最终一致性原文来自A plain english introductio...
Read MoreRequest/Response 和 RTT Redis 管道 这不仅关于 RTT 真实的例子 管道 VS 脚本原文来自Using pipelining to speedup Redis queriesRequest/Response 和 RTTRedis 是使用 C/S 模式的服务器,并使用名为 R...
Read More为什么分片是有用的 分片基础 分片不同的实现 分片的缺陷 数据存储或缓存? Presharding原文来自Partitioning: how to split data among multiple Redis instances.分片是把数据分布在多个 Redis 实例的过程,每个 Redis 实...
Read MoreWildcard 搜索 禁止分词 注意 参考本文针对Elasticsearch 6.1版本。Wildcard 搜索类似于MySQL的模糊搜索,适用于string类型,占位符有两个: ?:匹配一个字符; *:匹配多个字符。查询时用wildcard关键字搜索,如:{ "query": { "bo...
Read More名词 节点 分片 写入 读取 根据文档 id 读取 全文检索 参考名词 node:一个运行中的 Elasticsearch 实例称为一个节点。 shard:Elasticsearch 的分片就是 Lucene 的 index,Lucene 的 index ...
Read More名词 写数据 删除和更新 查询 segment 合并 参考名词这些名词下面会用到,提前过一下。 index:类似数据库,是存储、索引数据的地方。 shard:index 由 shard 组成,一个 primary shard,其他是 replica shard。 segment:shard 包...
Read More乐观锁控制Elasticsearch 是分布式的。当创建、修改或删除一个文档的时候,这个文档的新版本会被复制到集群中的其他节点。Elasticsearch 既是异步(asynchronous)的又是同步(concurrent)的,这意味着这些复制请求是同步发送的,但是有可能不按顺序(out of sequence...
Read More1 基本概念以下基本概念均对应Quartz的API。1.1 任务JobKey包括jobName和jobGroup。同一调度器中,任务的JobKey是唯一的,被Scheduler用来管理Job。Job代表定时任务要执行的内容,只包含一个execute方法,执行的内容写在方法里:public interface Jo...
Read More一、概念二、集成 Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broke...
Read More