5 WangCw的夏天

尚未进行身份认证

我要认证

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

等级
TA的排名 502

IO、NIO、Netty分别实现服务端与客户端通信

简化下场景:客户端每隔两秒发送一个带有时间戳的 “hello world” 给服务端,服务端收到之后打印。IO编程IO服务端:public class IOServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8000); // (1) 接收新连接线程 new Thread(

2020-08-27 11:45:43

SpringBoot源码部分阅读总结

关于启动类注解@SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeF

2020-08-26 11:05:15

重温Mysql及部分原理挖掘

01 | 基础架构:一条SQL查询语句是如何执行的?大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件...

2020-08-21 18:26:31

使用 MAT 排查分析 OOM 问题案例

MAT相信有一定经验的开发者多少都会在生产环境上碰到过内存溢出(OOM)的问题吧。对于排查 OOM 问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。Java 的 OutOfMemoryError 是比较严重的问题,需要分析出根因,所以对生产应用一般都会这样设置 JVM 参数,方便发生 OOM 时进行堆转储:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/xxx/xxx关于分析堆存储文件的话,推荐使用Eclipse 的 Memory Ana

2020-08-13 15:56:54

Java虚拟机的监控及诊断工具整理

Java虚拟机的监控及诊断工具jps在默认情况下,jps的输出信息包括 Java 进程的进程 ID 以及主类名。我们还可以通过追加参数,来打印额外的信息。例如,-l将打印模块名以及包名;-v将打印传递给 Java 虚拟机的参数(如-XX:+UnlockExperimentalVMOptions -XX:+UseZGC);-m将打印传递给主类的参数。$ jps -mlv18331 org.example.Foo Hello World18332 jdk.jcmd/sun.tools.jps.Jps

2020-08-12 16:59:40

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

查看更多

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