5 WangCw的夏天

尚未进行身份认证

我要认证

生活不止眼前的苟且,还有诗和远方。

等级
TA的排名 471

Redis配置文件redis.conf中常用配置详解

什么是Redis?Remote Dictionary Server(Redis) 是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,它也通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。与传统数据库不同的是 Redis 的数据是存在内存中的,所以存写速度非常快,因此 Redis 被广泛应用于缓存方向。Redis为分布式缓存,

2020-08-06 16:42:38

时间、空间复杂度分析

时间复杂度时间复杂度表示算法的执行时间与数据规模之间的增长关系。虽然代码千差万别,但是常见的复杂度量级并不多。我稍微总结了一下,这些复杂度量级几乎涵盖了你今后可以接触的所有代码的复杂度量级。O(1)首先你必须明确一个概念,O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码。比如这段代码,即便有 3 行,它的时间复杂度也是 O(1),而不是 O(3)。 int i ...

2020-04-15 18:38:10

MQ的常用场景 && 最佳实践

RocketMQ消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰填谷的能 力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。建议统一消息格式统一消息格式,message由两部分组成id:由生产者生成,每次不重复,...

2020-04-01 16:10:22

HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)

事故背景一个CPU使用率飙升至100%的线上故障,原因是在并发情况下使用HashMap导致死循环。当cpu使用率100%时,查看堆栈,发现程序都卡在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。HashMap结构HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示:HashMap通常会用一个指针数组...

2020-03-31 23:06:12

消息队列 RocketMQ原理和使用整理

背景由于公司之前使用的队列中间件是kafka,近期变更为使用阿里的RocketMQ,所以对RocketMQ进行一下简单的知识整理。后续研究其内部原理后,再来一篇深入理解。说明消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具...

2020-03-23 15:11:17

记一次通过优化日志解决高并发服务性能瓶颈问题

事故发现服务在生产环境中,由于同一时间段请求量过大,导致服务响应速度急剧下降。甚至会出现拒绝服务的问题,第一时间想到是机器性能问题,无法满足并发如此大的场景,需要进行扩容或者服务限流。经过扩容之后平稳了一个多月之后,又一次大量请求打进来的时候出现了此问题。这时才意识到开始从各个角度去排查问题。事故排查过程一个系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。...

2020-03-18 17:50:24

Java动态代理相关简述

一、概念:Java动态代理的优势是实现无侵入式的代码扩展,也就是方法的增强;让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(如Spring AOP、cglib等)。代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。(个人理解就是对调用目标的一种...

2020-01-20 11:53:39

Sentry基本原理

官方文档:sentry官网Sentry基本介绍Sentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web页方便查看。Sentry由pyth...

2019-11-08 18:56:05

Java位运算符

一、Java中所支持的位运算符一共有7个符号说明&按位与。当两位同时为1时才返回1。|按位或。只要有一位为1即可返回1。~按位非(取反)。单目运算符,将操作数的每个位(包括符号位)全部取反。^“异或”运算。当两位相同时返回0,不同时返回1。<<左移运算符。>>右移运算符。>>>...

2019-09-17 21:44:59

KMP、BM、Sunday、Horspool、strstr 字符串匹配算法介绍和性能比较

文章转自:https://blog.csdn.net/qq_33515733/article/details/81163135

2019-08-26 16:25:46

kafka架构分析和配置使用整理

一、软件简介Apache Kafka是开源的分布式流处理平台,也是高吞吐量的分布式跨平台订阅消息系统,主要包含Broker服务器、Topic消息类别、Partition物理分区、Producer生产者、Consumer消费者、Consumer Group消费组部分。二、架构图总结:•Broker : Kafka消息服务器,消息中心。一个Broker可以容纳多个Topic。•Prod...

2019-06-21 17:41:43

JVM调优和垃圾回收相关参数整理

一、内存调优-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)-Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大小。一般来说,这两个参数的数值单位是Byte,但同时它们也支持使用速记符号,比如“k”或者“K”代表“kilo”,“m”或者“M”代表“mega”,“g”或者“G”代表“gi...

2019-05-10 11:42:12

JVM内存模型和GC算法分析

JVM运行时数据区JVM在运行过程中会把它所管理的内存划分成若干不同的数据区域。线程私有:程序计数器、虚拟机栈、本地方法栈 (主要存放指令)线程共享:堆、方法区 (主要存放数据)一、程序计数器程序计数器是用于存放下一条指令所在单元的地址的地方。我们可以随意拿一个class文件进行反编译,看看其结构。如下,JvmDemo.class文件:cafe babe 0000 0033...

2019-05-09 12:32:19

Spring Boot引起的“堆外内存泄漏”排查及经验总结

背景为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreT...

2019-04-29 19:04:06

基于Dubbo的分布式服务日志追踪实现

日志系统中的MDC可以在服务内部提供很好的日志追踪支持。 MDC.put(C.LOG.TRACE_ID, "唯一标识串");但是分布式(RPC)的情况下,如何实现呢?以Dubbo为例,我们可以借助Dubbo的上下文信息RpcContext配合Dubbo的SPI扩展实现扩展拦截器来完成服务间的日志追踪。一、上下文信息上下文中存放的是当前调用过程中所需的环境信息。RpcContex...

2019-04-26 11:03:33

基于Redis实现分布式锁剖析

之前的文章《分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实现也顺带进去,特此做一些利用Redis实现分布式锁的分析。PS:让我做选择的话,分布式锁的选择还是更愿意选择利用Zookeeper去实现的。原因的话可以参考下面这张图:一、关于Redis分布式锁的基础知识1、缓存有效期:redis中的数据,不一定都...

2019-04-25 21:30:34

雪花算法

雪花算法雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。结构:算法描述:最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。10位的机器标识,10位的长度最多支持部署1024个节点。12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生...

2019-04-23 17:07:21

分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁

一、锁的相关描述1、锁的使用流程:首先参考一下JDK所实现的锁的通用接口Lock.java接口:/* * @since 1.5 * @author Doug Lea */public interface Lock { /** * 加锁 */ void lock(); /** * 锁中断 */ void l...

2019-04-23 15:10:16

同步锁的优化思路及JDK对锁的一些优化

一、锁优化的思路和方法主要有以下5点:减少锁持有时间主要就是精准的确定需要加锁的模块,不需要加锁的代码模块分离在同步块之外。减小锁粒度将大对象(这个对象可能会被很多线程访问),拆成小对象,大大增加并行度,降低锁竞争。降低了锁的竞争,偏向锁,轻量级锁成功率才会提高。最最典型的减小锁粒度的案例就是ConcurrentHashMap。锁分离最常见的锁分离就是读写锁ReadWri...

2019-04-10 16:47:08

总结一些索引使用和优化规范

1、索引列的数据长度能少则少。答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。2、索引一定不是越多越好,越全越好,一定是建合适的。答:索引多了,检索速度虽然可能得到提升。但是“写”相关操作的效率可就不容小觑了。3、匹配列前缀可用到索引like abc%。但是 like %9999%、like %9999用不到索引。答:最左匹配原则。4、Whe...

2019-04-01 20:40:15

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。