自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

灵动的艺术的博客

新开始,新旅程

原创 聊聊网络IO模型

聊聊NIO什么是IO?Linux网络I/O模型简介用户空间和内核空间文件描述符缓存IO网络I/O模型同步阻塞I/O同步非阻塞I/OI/O多路复用信号驱动I/O模型异步I/OI/O多路复用BIO socket编程BIOClientBIOServerBIOServerHandlerNIO socket编程缓冲区:BufferChannel多路复用器SelectorNIOClientHandleMultiplexerTimerServerReactor单线程Reactor模型多线程Reactor模型主从React

2020-07-28 21:12:05 44

转载 Java线程池实现原理及其在美团业务中的实践

Java线程池实现原理及其在美团业务中的实践一、写在前面1.1 线程池是什么1.2 线程池解决的问题是什么二、线程池核心设计与实现2.1 总体设计2.2 生命周期管理2.3 任务执行机制2.3.1 任务调度2.3.2 任务缓冲2.3.3 任务申请2.3.4 任务拒绝2.4 Worker线程管理2.4.1 Worker线程2.4.2 Worker线程增加2.4.3 Worker线程回收2.4.4 Worker线程执行任务三、线程池在业务中的实践3.1 业务背景3.2 实际问题及方案思考一、写在前面1.1

2020-07-24 15:35:21 25

原创 Mysql死锁日志阅读

Mysql死锁日志阅读死锁日志案例常见事物状态锁组合锁模式锁锁组合死锁日志案例2020-07-08 22:02:10 0x7fe014c18700*** (1) TRANSACTION:# TRANSACTION 1690883715 表示事务编号为 1690883715,ACTIVE 0 sec 表示活跃0秒,starting index read 表示事务状态为根据索引读取数据TRANSACTION 1690883715, ACTIVE 0 sec starting index read#

2020-07-09 17:24:37 67

转载 解决死锁之路(终结篇) - 再见死锁

解决死锁之路(终结篇) - 再见死锁一、开启锁监控1. 基于系统表2. 基于系统参数二、读懂死锁日志三、常见死锁分析3.1 死锁案例一3.2 死锁案例二死锁案例三3.4 如何避免死锁总结在前面的几篇博客中,我们学习了事务,隔离级别,各种锁类型,以及各种 SQL 语句的加锁原理,这一系列的知识学习下来,断断续续,竟然已经过去了大半年的时间。随着对数据库原理的学习越来越深入,越发现一发不可收拾,这里...

2020-05-07 14:35:39 165

原创 @Valid 参数校验不生效问题解决

@Valid 参数校验不生效问题解决问题现象手动检查问题现象import lombok.Data;import javax.validation.constraints.NotNull;@Datapublic class IDDTO { @NotNull private Long id;}@Slf4j@Controller@RequestMapping("...

2020-04-30 13:59:39 1221

原创 jstack 线程状态详解

jstack 线程状态详解jatsck 用法线程状态一图以庇之系统线程状态 (Native Thread Status)jatsck 用法#jstack -hUsage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> ...

2020-04-22 12:03:52 78

原创 进程与线程

进程与线程进程与线程进程线程线程与进程的区别线程的状态进程与线程进程进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资...

2020-04-22 11:16:18 79

转载 mysql 索引加锁分析

mysql 索引加锁分析背景MVCC:Snapshot Read vs Current ReadCluster Index:聚簇索引2PL:Two-Phase LockingIsolation Level一条简单SQL的加锁实现分析组合一:id主键+RC组合二:id唯一索引+RC组合三:id非唯一索引+RC组合四:id无索引+RC组合五:id主键+RR组合六:id唯一索引+RR组合七:id非唯一索...

2020-04-21 14:41:05 91

转载 谈谈MySQL的锁

谈谈MySQL的锁MySQL中的锁锁的类型锁的粒度表锁页锁行锁InnoDB中的锁意向锁行锁的算法一致性非锁定读一致性锁定读锁带来的问题死锁锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有...

2020-04-21 11:11:45 52

转载 谈谈MySQL InnoDB存储引擎事务的ACID特性

谈谈MySQL InnoDB存储引擎事务的ACID特性前言ACID问题:隔离性里隔离级别的问题:Redo log对比binlogredo log blockcrash recoveryUndo log基本文件结构Undo log的格式purge多版本控制MVCCInnoDB存储引擎的行结构事务链表ReadViewRC和RR隔离级别ReadView的实现方式总结为什么InnoDB能够保证原子性A?用...

2020-04-21 10:38:34 82

原创 记一次系统频繁502故障处理

记一次系统频繁502故障处理故障说明查看机器指标继续查看指标top -p 242757 -Hprintf '%x\n' 242828查看阻塞线程在干什么查看内存使用情况jmap -histo:live 242757|lessdump内存信息故障说明最新发现线上机器总是会出现请求成功几次然后又一次502失败。查看机日志发现拒绝执行[2019-11-06 15:31:55.841][NettyC...

2019-11-06 16:22:12 1615

原创 Maven冲突 omitted for conflict with 解决

Maven冲突 omitted for conflict with 解决实际开发过程中,我们可能经常遇见omitted for conflict with/omitted for duplicate。

2019-09-29 10:21:46 5004 3

原创 IPV4内网地址网段

内网地址分为A,B和C类以下这些地址都属于内网A类地址范围:10.0.0.0 - 10.255.255.255B类地址范围:172.16.0.0 - 172.31.255.255C类地址范围:192.168.0.0 - 192.168.255.255除了以上的地址和一些比较特殊的地址如127.0.0.1, 169.254.0.0/16等,其他的都属于公网地址...

2019-09-19 11:03:31 496

原创 不建议使用sun.misc.BASE64Encoder

最近在项目中用到sun.misc.BASE64Encoder包的BASE64Encoder对字符串进行编码,但是将编码后的字符串输出后发现字符串中存在换行符\r\ngoogle 原来“回车换行符(\r\n)”是在Windows才有,而Linux只有换行(\n),Mac只有回车(\r)。建议使用import org.apache.commons.codec.binary.Base64;进行替换...

2019-07-16 19:36:29 1802 1

原创 偶像的力量-松哥经典语录

偶像的力量-松哥经典语录网络传输 拆包/粘包网络传输 拆包/粘包缓冲区不够了,就得拆包,接受端没及时读取缓冲区数据,就会粘包粘包、拆包问题很好解决的,在应用层报文中带长度信息就解决这个问题了tcp的报文头是没长度的,因为是可靠传输。udp有长度信息,所以不会发生拆包粘包问题。在应用层报文中带长度信息就解决这个问题了,否则字节流不知道从哪个地方断开。哪天tcp协议升级了,假如加入了长度信...

2019-07-12 10:27:40 113

转载 HTTP协议网络请求状态码

HTTP协议网络请求状态码2开头3开头4开头5开头1xx - 信息提示2xx - 成功3xx - 重定向301 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。   新的永久性的 URI 应当在响应的 Location 域...

2019-07-02 14:40:58 140

原创 Redis数据结构

Redis数据结构String使用场景常用命令SET可选参数SETNXINCRNoteMSETMSETNX其他List使用场景Set使用场景SortedSet使用场景:Hash使用场景:Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LR...

2019-06-28 10:45:07 98

转载 Java 8 中的 Streams API 详解

Java 8 中的 Streams API 详解为什么需要 Stream什么是聚合操作Stream 总览什么是流流的构成流的使用详解流的操作map/flatMapfilterforEachfindFirstreducelimit/skipsortedmin/max/distinctMatch进阶:自己生成流Stream.generateStream.iterategroupingBy/partit...

2019-06-26 11:48:09 81

转载 Java 8 的 Lambda 表达式和流处理

Java 8 的 Lambda 表达式和流处理Lambda 表达式引入 Lambda 表达式的动机函数式接口目标类型名称解析流顺序执行和 并行执行相遇顺序Spliterator有状态和无状态操作流水线源中间操作终结操作总结原文地址Lambda 表达式当提到 Java 8 的时候,Lambda 表达式总是第一个提到的新特性。Lambda 表达式把函数式编程风格引入到了 Java 平台上,可以极...

2019-06-26 11:27:00 502

转载 函数式编程中的重要概念

函数式编程中的重要概念函数式编程范式的意义函数类型与高阶函数部分函数柯里化闭包递归记忆化原文地址函数式编程范式的意义在众多的编程范式中,大多数开发人员比较熟悉的是面向对象编程范式。一方面是由于面向对象编程语言比较流行,与之相关的资源比较丰富;另外一方面是由于大部分学校和培训机构的课程设置,都选择流行的面向对象编程语言。面向对象编程范式的优点在于其抽象方式与现实中的概念比较相近。比如,学生、课...

2019-06-26 11:15:17 1158

转载 函数式编程思想概论

函数式编程思想概论前言函数λ 演算λ项绑定变量和自由变量约简α 变换β 约简η 变换纯函数、副作用和引用透明性函数式编程与并发编程总结原文地址前言在讨论函数式编程(Functional Programming)的具体内容之前,我们首先看一下函数式编程的含义。在维基百科上,函数式编程的定义如下:“函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声...

2019-06-26 10:57:16 2196

原创 Java8 日期、时间骚操作

Java8 日期、时间骚操作LocalDate和LocalTimeLocalDateLocalTimeLocalDateTime日期解析与格式化时间调整TemporalAdjuster定制TemporalAdjuster在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。故此,Java8引入了一套全新的...

2019-06-20 15:31:27 281

转载 Hotspot JVM的常用选项

Hotspot JVM的常用选项选项的分类XX选项的语法指定JVM的类型:-server,-client指定JIT编译器的模式:-Xint,-Xcomp,-Xmixed-version和-showversion查看XX选项的值: -XX:+PrintCommandLineFlags, -XX:+PrintFlagsInitial和-XX:+PrintFlagsFinal内存大小相关的选项Outof...

2019-06-18 19:03:25 67

原创 Java 指令与字节码

Java 指令与字节码查看class文件编写简单java代码编译代码查看class文件Java字节码总的结构表常量池常量池容量计数器鉴于十进制的计算机还遥遥无期,我们目前的计算机都是二进制的计算机,而二进制的计算机仅能识别0和1的信号。经过0和1的多位组合又可以产生更多不同的信号。另外,现在计算机领域通过进行0和1的多位组合表示对字符进行编码(例如Unicode),我们的计算机可以处理字符。同样...

2019-05-10 12:25:29 299

原创 多线程与死锁

多线程与死锁动态顺序锁死锁Jconsole 查看死锁固定锁顺序避免死锁协作锁之间发生死锁开放调用避免死锁RetreenLock锁超时解决死锁Java多线程开发中,为了避免多个线程对同一份数据的操作,我们需要对我们的线程做加锁的操作,只要加锁,就必然存在锁竞争的问题,如果锁竞争的问题处理不当就会出现死锁问题。死锁会让程序一直卡住,程序不再往下执行。我们只能通过中止并重启的方式来让程序重新执行。这...

2019-05-09 13:25:54 205

原创 Mysql 数据库事物及隔离级别

Mysql 数据库事物及隔离级别事务的基本要素(ACID)事务的隔离级别问题数据准备READ UNCOMMITTED事务的基本要素(ACID)原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。...

2019-05-08 11:24:27 83

原创 Mysql Join总结

Mysql Join总结Mysql 连接数据准备新建测试数据库新建测试数据表MySQL交叉连接(CROSS JOIN)MySQL内连接(INNER JOIN)MySQL左连接(LEFT JOIN)MySQL右连接(RIGHT JOIN)ON 与Where首先,一张最完美的图来展示我们可能遇到的各种连接场景,当然这幅图不适合Mysql,因为Mysql不支持Full Join,但是我们依然可以来理解...

2019-05-07 15:42:43 456

原创 URL和URI

URL和URIURL 统一资源定位符URN 统一资源名称URI 统一资源标识符联系与区别总结URL 统一资源定位符URL 英文全称为 Uniform Resource Locator,中文为翻译“统一资源定位符”,是Internet上资源的地址,可以定义为引用地址的字符串,用于指示资源的位置以及用于访问它的协议。URL是在网络上定位资源的最普遍使用的方式,它提供了一种通过描述其网络位置或主...

2019-05-06 17:58:39 130

原创 Mysql主从复制搭建 与读写分离

Mysql主从复制搭建准备条件Master-Server 配置修改配置重启Mysql配置主从复制账户Slave-Server 配置修改配置重启Mysql配置Master信息开启主从复制读写分离Master-Server 配置Slave-Server 配置准备条件准备2台机器先安装MySQL 5.7.20Master-Server : 192.168.0.100Slave-Server : ...

2019-04-11 13:50:30 131

原创 Centos 源码安装安装Mysql

Centos 安装Mysql源码下载安装cmake(mysql5.5以后是通过cmake来编译的)前置条件configCURSES_LIBRARY 错误安装ncurses-devel继续config安装配置初始化添加systemV控制脚本启动尝试链接修改密码尝试链接添加系统路径环境变量源码下载传送门安装cmake(mysql5.5以后是通过cmake来编译的)yum install -y...

2019-03-26 17:06:47 172

原创 Centos7增加swap交换空间避免OOM

Centos7增加swap交换空间避免OOM检查系统的Swap信息检查可用的存储空间创建Swap文件启用Swap文件使Swap文件永久生效更改Swap配置(可选)如下所示,当我们使用服务器进行比较耗内存的操作的时候,我们的进程通常会出现由于内存不足被系统内核Kill掉的情况。#tail -f /var/log/messagesMar 26 12:53:14 iZbp10exab3v6j02j...

2019-03-26 14:01:36 597

原创 FastJson的SerializerFeature序列化特性说明

FastJson的SerializerFeature序列化特性说明FastJson 简单使用SerializerFeatureSerializerFeature 说明WriteEnumUsingName || WriteEnumUsingToStringDisableCircularReferenceDetectWriteDateUseDateFormatFastJson 简单使用我们在使用f...

2019-03-20 14:16:57 2039

原创 CentOS PHP5.6源码安装

CentOS PHP5.6源码安装安装编译环境新建安装目录下载源码解压移动配置安装php虚拟机运行配置文件配置systemV控制脚本配置php.ini配置 php-fpm.conf启动安装可能出现的错误依赖记录错误一错误二错误三错误四错误五安装编译环境yum install gcc-c++新建安装目录mkdir -p /usr/local/php5.6 && cd /us...

2019-03-08 12:51:26 696

原创 CSDN2018博客之星评选结果预测第二弹

CSDN2018博客之星评选结果预测第二弹CSDN2018博客之星活动开始之初,出于个人娱乐,我做了一次《大数据预测CSDN2018博客之星评选结果》,受到了较多好评,当然也十分荣幸的受到CSDN官方重视,并将文章放置在Banner推广位。至今,CSDN2018博客之星的评选结果即将出炉。我很荣幸收到了CSDN官方的邀请,他们希望我能够在结果出炉之前再次作出一次大胆预测。所以,我将再次开启大胆...

2019-02-10 17:59:26 11176 5

原创 深度学习Python协程

深度学习Python协程基本定义可迭代对象迭代器生成器yield协程基本案例协程状态使用协程连续计算平均值协程返回值yield fromyield from与同步非阻塞基本定义可迭代对象可迭代对象(Iterable):可以直接作用于for循环的对象统称为可迭代对象。可以使用isinstance()判断一个对象是否是Iterable对象。>>> from collectio...

2018-12-24 19:49:06 517 3

原创 精通RabbitMQ之死信队列与延迟任务调度

精通RabbitMQ之死信队列与延迟任务调度死信队列死信队列实现延迟任务application.ymlAMQPConfig.java消息发送到设置过期事件的队列消费死信队列中的延迟之后的消息死信队列在某些情况下,例如当一个消息无法被成功路由时,消息或许会被返回给生产者并被丢弃;或者如果我们为消息设置了有效期,延期后消息会被放入一个所谓的死信队列中。此时,消息生产者可以选择配置死信队列参数来处理...

2018-12-23 12:54:34 1002

原创 精通RabbitMQ之RPC同步调用

精通RabbitMQ之RPC同步调用前面我们对应用解耦做过分析,我们能够使用消息中间件来完成应用解耦,很大一部分原因是因为我们的系统之间可以异步处理并且不关心结果回执。假如我们现在需要异步处理的结果,我们还可以使用消息队列吗?实际上Rabbitmq是支持Remote procedure call (RPC)同步调用的。RabbitMQ RPC同步调用实际上是使用了两个异步调用完成的,生产者投递...

2018-12-23 12:33:31 1782 1

原创 精通RabbitMQ之Exchange和路由分发

精通RabbitMQ之Exchange和路由分发交换机默认交换机直连交换机广播交换机主题交换机头交换机交换机交换机的责任主要在于路由分发生产者的消息到队列中,一个Exchange可以binding多个Queue,一个Queue可以同多个Exchange进行binding。默认交换机前面我们聊过,我们在简单的使用过程中甚至可以不声明交换机,但这并不意味者rabbitmq可以没有exchang...

2018-12-23 12:27:38 523

原创 精通RabbitMQ之消息确认回执和拒绝

精通RabbitMQ之消息确认回执和拒绝消费消息确认显式确认模式确认消息API拒绝消息API发送消息确认事务confirm消费消息确认从安全角度考虑,网络是不可靠的,消费者是有可能在处理消息的时候失败。而我们总是希望我们的消息不能因为处理失败而丢失,基于此原因,rabbitmq提供了一个消息确认(message acknowledgements) 的概念:当一个消息从队列中投递给消费者(con...

2018-12-23 12:16:38 3027 1

原创 精通RabbitMQ之安装RabbitMQ

精通RabbitMQ之安装RabbitMQ安装说明选择版本Centos下安装Erlang安装RabbitMQ安装启动rabbitmq开启管理虚拟主机(vhost)与用户管理登录管理控制台安装说明前面我们说过,RabbitMQ的服务端是使用Erlang语言编写的,所以我们需要首先安装Erlang。并且我们需要注意Erlang和RabbitMq版本需要一致,否则会因为版本不匹配而安装失败。选择版...

2018-12-23 12:05:10 226

提示
确定要删除当前文章?
取消 删除