自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lyzxii

学习记录

  • 博客(80)

原创 基于Netty实现dubbo RPC调用

Dubbo底层使用Netty作为网络通讯框架,根据Netty手写简单的RPC框架具体步骤:定义一个接口和抽象方法,用于消费者和服务提供者之间的约定定义一个服务提供者,该类需要监听消费者的请求,并按照约定返回数据定义一个服务消费者,该类需要透明的调用自己不存在的方法,内部使用Netty请求提供者返回数据定义接口协议和抽象方法,如下的HelloService接口//提供给服务消息者和服务提供者使用public interface HelloService { publi.

2020-09-10 11:51:27 14

原创 Netty的多协议开发和粘包拆包

Bootstrap和ServerBootstrapBootstrap是引导的意思,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中的Bootstrap是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类常见API//应用于客户端,设置一个EventLoopGrouppublic B group(EventLoopGroup group)//应用于服务端,设置两个EventLoopGrouppublic

2020-08-18 11:48:57 71

原创 Netty入门和原理架构解析

TCP中的粘包和拆包简述TCP的粘包和拆包TCP编程中无论是服务端还是客户端,读取和发送消息时都要考虑TCP底层的粘包和拆包机制,TCP是一个‘流’协议,数据是没有界限的,TCP底层不知道上层业务数据的含义,它会根据TCP缓冲区的实际情况进行包的划分,所以相对于业务来说,一个完整的包可能会被TCP拆分多个包进行发送 ,也有可能把许多小的包封装成一个大的数据包发送,这就是TCP的粘包和拆包的问题粘包、拆包问题说明现在假设客户端向服务端连续发送了两个数据包,用packet1和packet2来表示,

2020-06-02 11:16:13 97

原创 Java的BIO和NIO模型

Linux 网络I/O模型简介Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor (fd, 文件描述符)。 而对一个socket的读写也会有相应的描述符,称为socketfd (socket 描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模型

2020-04-07 21:36:04 121

原创 java常见的几种排序

常见的排序常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。JAVA实现常见的排序冒泡排序(Bubble Sort):相邻的2个元素相互依次比较,大的往后放,经过一次循环就会拿到最大的,多次循环实现排序实现原理图代码实现: public static void bubbleSort(...

2020-03-26 22:25:56 62

原创 记录一次内存泄漏排查

问题说明 1. 网贷目前体系架构下,资金方进件审批结果,资金方放款结果,都需要跑批系统自动执行 拉取业务结果job来拉取, 该job执行间隔设置为1分钟 2. 在测试过程中发现,一段时间过后就发现跑批执行运来越慢,结果长期无法准时拉回网贷,查询hades日志发现 hades通过 order ex和loan ex 拉取5-6条省联社结果数据,竟然要花到6分钟 3. 重启hades...

2020-03-13 14:27:50 142

原创 面试总结

你们有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题?这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?面试题剖析(1)如何...

2020-03-12 21:39:11 56

原创 zookeeper

zookeeper的简介Apeche Zookeeper是由Apache Hadoop的子项目,起源于雅虎研究院的一个研究小组开发的一个无单点问题的分布式协同服务系统,这就是zookeeper,主要提供:统一命名服务、组成员管理、配置管理和分布式锁等分布式的基础服务(分布式应用程序可以基于zookeeper实现诸如数据发布和订阅、负载均衡、命名服务、分布式协调和通知、集群管理、Master选举...

2020-03-08 17:58:27 172

原创 分布式事务的理解

事务数据库事务:是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性...

2020-03-08 14:20:40 155

原创 Spring如何解决循环依赖

什么是循环依赖循环依赖就是循环引用,就是两个或者多个Bean相互之间持有对象最终反映为一个环,注意此处㐊循环调用,循环调用是方法之间的环调用,循环调用是无法解决的,除非有终结条件,否则就是死循环,最后导致栈内存溢出Spring如何解决循环依赖Spring容器循环依赖包括:构造器循环依赖和setter方法循环依赖1.构造器循环依赖表示通过构造器注入构成的循环依赖,此依赖是无...

2020-02-25 21:37:25 151

原创 一致性协议和paxos算法

集中式和分布式的架构所谓的集中式系统就是由由一台或多台主计算机组成中心节点,数据集中存储于这个中心节点,整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由其集中处理。集中式系统最大的特点就是部署结构简单。由于集中式系统往往基于底层性能卓越的大型主机,因此无须考虑如何对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作问题。分布式系统是一个硬件活软件组件分布在不同...

2020-01-07 14:25:01 105

原创 SpringRetry重试机制

前言Spring实现了一套重试机制,功能简单实用。Spring Retry是从Spring Batch 2.2.0版本中独立出来,变成了Spring Retry模块。,已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。使用Spring Retry(一)Maven依赖 <!--...

2019-12-31 19:36:57 272

原创 SpringBoot整合Kafka

SpringBoot整合Kakfapom.xml文件引入kafka相关依赖<dependencies> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId...

2019-12-25 13:27:40 163

原创 Kafka消费者(四)

Kafka中的offset对于 Kafka 中的分区而言,它的每条消息都有唯一的 offset,用来表示消息在分区中对应的位置。对于消费者而言,它也有一个 offset 的概念,消费者使用 offset 来表示消费到分区中某个消息所在的位置。为了区分,对于消息在分区中的位置,我们将 offset 称为“偏移量”;对于消费者消费到的位置,将 offset 称为“位移”或者“消费位移”。...

2019-12-17 21:00:09 175

原创 Kafka的消费者(三)

消费者和消费组消费者(Consumer)负责订阅 Kafka 中的主题(Topic),并且从订阅的主题上拉取消息。与其他一些消息中间件不同的是:在 Kafka 的消费理念中还有一层消费组(Consumer Group)的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者。消费者和消费组与分区的关系如上图,某个主题中共有4个分区(P...

2019-09-30 11:22:10 180

原创 Kafka的生产者(二)

Kafka的历史变迁在 Kafka 的历史变迁中,一共有两个大版本的生产者客户端:第一个是于 Kafka 开源之初使用 Scala 语言编写的客户端,;第二个是从 Kafka 0.9.x 版本开始推出的使用 Java 语言编写的客户端,它弥补了旧版客户端中存在的诸多设计缺陷。虽然 Kafka 是用 Java/Scala 语言编写的,但这并不妨碍它对于多语言的支持,在 Kafka 官网中,...

2019-09-29 11:45:24 602

原创 Kafka的介绍和安装(一)

初识KafkaKafka 起初是由 LinkedIn 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现已被捐献给 Apache 基金会。目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Storm、Spark...

2019-08-27 11:00:06 141

原创 RabbitMQ的总结(二)

使用Spring Boot整合RabbitMQ来演示hello word配置文件:application.propertiesspring.rabbitmq.host=119.65.182.47spring.rabbitmq.port=5672spring.rabbitmq.username=guestspring.rabbitmq.password=guestRabbitCo...

2019-08-25 20:49:22 383

原创 RabbitMQ的总结(一)

安装RabbitMQ这里是基于docker安装的,非常的方便,拉取RabbitMQ镜像,运行即可RabbitMQ自带的管理页面:http://119.25.162.48:15672/#通过默认账户guest/guest 登录,如果能够登录,说明安装成功。了解一下消息中间件的应用场景异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行...

2019-08-25 20:48:54 2043

转载 理解HTTP和HTTPS

HTTPhttp协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。它是互联网交互的一种规则http的特点:1、默认端口是80(如果端口号是80,可以省略不写)2、http协议永远是客户端(浏览器或者手机等)发送请求,服务器回送响应...

2019-08-21 23:10:02 64

原创 理解OAuth 2.0

什么是OAuthOAuth是一个关于授权(authorization)的开放网络标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,在全世界得到广泛应用,目前的版本是2.0版,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。oauth是Open Aut...

2019-07-31 19:08:45 105

原创 数据库缓存一致性的讨论

引入在项目中,我们通常会适应缓存这个技术来避免巨大的数据库访问压力和提高获取数据的效率问题,在使用缓存中我们通常的模式是,第一次查询数据库,然后把结果放入缓存中,下次的查询会先访问缓存,当缓存不存在的时候才会访问数据库或者是其他的设置缓存策略,但是原理是一样的,在这种情况下会引发以下问题:问题:怎么保持缓存与数据库一致?也就是说在数据更新的时候,如何做到DB和缓存同时更新且保持一致?要...

2019-07-13 23:27:14 60

原创 总结

hashMap源码解析数据结构:数组+链表,即hashMap里面是个数组,数组的每个元素都是一个单向链表 * 默认容量,必须是2的n次方 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * 最大容量,桶的最大值,必须是2的n次方 */ s...

2019-07-12 10:27:19 62

原创 一致性哈希算法

我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离比如现在有大概2000W左右的数据,按照我们约定的规则进行分库,规则就是随机分配,我们可以部署8台缓存服务器,每台服务器大概含有500W条数据...

2019-07-11 09:15:34 872

转载 JAVA类加载器的理解

引入一般情况下,我们平时写的java类需要通过打包成.jar或者是.war的包,然后把打包好的jar包或者war包放到机器上部署,通过 java命令去运行一个jar包中的代码,这其中包含一个重要的步骤,就是编译,我们需要把写好的.java文件编译成.class字节码文件,字节码才是可以被运行起来的,一般我们需要使用诸如java-jar 之类的命令来运行,一旦使用java命令实际上相当于启动一个...

2019-07-08 15:59:04 78

原创 深入理解JAVA中的SPI机制

什么是SPISPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件,简单来说,它就是一种动态替换发现的机制。在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现...

2019-07-08 13:55:42 354

原创 MySQL百万级数据分页查询及优化

MYSQL分页基础语法mysql使用查询语句的时候,经常要返回前几条或者中间某几行数据,也就是我们说的分页,语法如下:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,...

2019-07-03 11:33:57 2455 1

原创 redis的底层数据结构

Redis 是一个基于键值对(key-value)的分布式存储系统,Redis 数据库里面的每个键值对(key-value)都是由对象(object)组成的:数据库键总是一个字符串对象(string object);数据库的值则可以是字符串对象、列表对象(list)、哈希对象(hash)、集合对象(set)、有序集合(sort set)对象这五种对象中的其中一种。Redis底层数据...

2019-06-23 15:18:34 94

原创 12

服务容错保护:Spring Cloud Hystrix在微服务的架构中,存在着很多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障蔓延,最终导致整个系统瘫痪,这样的架构相较传统的架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的保护机制针对上述问题,Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能,该框架的目标在于通过控制那些远程系统、...

2019-06-14 11:50:25 77

原创 RabbitMQ总结

连接:connection通道:channel队列:queue交换机:Exchange发送消息:channel.basicPublish()5种队列简单模式生产者发送消息到队列,消费者监听队列并获取消息消息的确认模式:true:自动确认,只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。false:手动确认,消费者...

2019-06-02 23:45:43 263

原创 MySQL索引的原理和实现

索引简介索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多...

2019-05-21 23:26:56 148

原创 Docker实践指南(三)

容器配置容器网络容器网络实质上也是由 Docker 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块。在 Docker 网络中,有三个比较核心的概念,也就是:沙盒 ( Sandbox )、网络 ( Network )、端点 ( Endpoi...

2019-05-13 22:36:28 194

原创 Docker实践指南(二)

镜像与容器Docker 镜像如果进行形象的表述,我们可以将 Docker 镜像理解为包含应用程序以及其相关依赖的一个基础文件系统,在 Docker 容器启动的过程中,它以只读的方式被用于创建容器的运行环境。从另一个角度看,Docker 镜像其实是由基于 UnionFS 文件系统的一组镜像层依次挂载而得,而每个镜像层包含的其实是对上一镜像层的修改,这些修改其实是发生在容器运行的过程中的。...

2019-05-12 22:47:49 181

原创 Docker实践指南(一)

浅谈虚拟化和容器技术虚拟机虚拟机,通常来说就是通过一个虚拟机监视器 ( Virtual Machine Monitor ) 的设施来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的。这个夹在其中的虚拟机监视器,常常被称为 Hypervisor。容器技术容器技术,指的是操作系统自身支持一些接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行...

2019-05-12 19:36:29 117

原创 Mysql锁机制解析

mysql的锁是由具体的存储引擎实现的。所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的。Mysql有三种级别的锁定:表级锁定、页级锁定、行级锁定一、定义每次锁定的是一行数据的锁机制就是行级别锁定(row-level)。行级锁定不是MySQL自己实现的锁定方式,而是由其他存储引擎自己所实现的表级锁:每次锁定的是一张表的锁机制就是表级别锁定(...

2019-05-10 18:32:33 2840

原创 缓存穿透,缓存击穿,缓存雪崩的解决

缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是缓存数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是:缓存穿透、缓存雪崩和缓存击穿。缓存穿透缓存穿透:是指查询一个数据库一定不存在的数据。(想象一下这个情况,如果传入的参数为-1,会是怎么样?这...

2019-05-06 18:04:50 665

原创 深入理解java虚拟机

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。主要分为::堆,虚拟机栈,本地方法栈,方法区,程序计数器如下图:1.程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它...

2019-04-03 00:14:03 121

原创 Spring Cloud 学习笔记(二)

客户端负载均衡:Spring Cloud RibbonSpring Cloud Ribbon的简介Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,基于Netflix Ribbon实现,可以让我们将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用,是一个工具框架,无需部署负载均衡:通过维护一个下挂可用的服务端清单(服务端的清单来自服务注...

2019-03-11 10:08:30 180

原创 Spring Cloud 学习笔记(一)

了解微服务架构为什么出现微服务架构?单体系统随着业务的需求变得越来越臃肿,暴露的问题越来越多,1.由于单体系统部署在一个进程内,虽然功能调用方便,但是调用的杂乱冗余,我们修改很小的功能部署上线就会影响其他功能的运行,还有系统中各个模块并发消耗的资源各有不同,很难有个准确的评估,单体系统的维护成本越来越大,且难以控制。什么是微服务?微服务是系统架构上的一种设计风格,将原本独立的系统拆...

2019-03-11 09:41:06 295

原创 Spring中的动态代理

1.Spring AOP 就是要对目标进行代理对象的创建, Spring AOP是基于动态代理的,有动态代理机制: JDK动态代理和CGLIB动态代理 动态代理:在虚拟机内部,运行的时候,动态生成代理类(运行时生成,runtime生成) ,并不是真正存在的类,一般格式:Proxy$$ (Proxy$$Customer)静态代理:实际存在代理类 (例如:struts2 Action...

2018-10-30 22:59:57 902

空空如也

空空如也

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