自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 MySql全局锁,表级锁和行锁

MySql全局锁表级锁表锁元数据锁行锁全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命 令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括 建表、修改表结构等)和更新类事务的提交语句。全局局锁的的典型使用场景是,做全库逻辑备份。。也就是把整库每个表都select出来存成文本。FTWRL 前有读写的话

2020-08-18 16:52:38 346

原创 养成好的java开发习惯,写出健壮的代码

养成好的java开发习惯,写出健壮的代码前言1. 调用低效的构造器,创建包装类型的对象2.使用 keySet 迭代器迭代 Map,获取对应的 value3.使用 new Date().getTime() 获取当前时间戳。4. 循环中使用 ”+“ 号拼接字符串5. 使用 switch 时,缺失 default前言在我们开始慢慢写代码的时候,养成一些比较好的习惯,会让我们的代码更加的简洁,便于遇到,也会让代码的性能提升,接下来就会根据实际开发过程中,列举一些开发一些例子,做法来优化代码1. 调用低效的构造

2020-08-12 11:54:52 282

原创 Netty实现简单的dubbo RPC案例

Netty

2020-08-05 11:35:45 224

原创 Netty入门 - TCP 粘包和拆包 及解决方案

TCP 粘包和拆包TCP 粘包和拆包基本介绍TCP 粘包和拆包解决方案案例要求代码总结TCP 粘包和拆包基本介绍TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket, 因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔 较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于 分辨出完整的数据包了,因为面向流的通信是无消息保护边界的由于 TCP 无

2020-08-03 17:12:51 182

原创 Netty入门 -- 编解码器

编解码器简介Netty 编解码器说明解码器(Decoder)ByteToMessageDecoderReplayingDecoderMessageToMessageDecode小结编码器(Encoder)MessageToByteEncoderMessageToMessageEncoder编解码器(Codec)简介计算机底层对数据的处理都是二进制的,所以即使在在网络通信交互的过程中,对传递的信息都是二进制的数据;所以在客户端发送信息的时候,需要将信息解析成二进制文件,发送给服务端的时候,也需要将二进制文

2020-08-03 15:26:17 335

原创 Netty入门 --简单案例

Netty快速入门实例-HTTP 服务要求代码服务端连接器handlerNetty 应用实例-群聊系统要求代码服务端客户端快速入门实例-HTTP 服务要求Netty 服务器在 6668 端口监听,浏览器发出请求 "http://localhost:6668/ "服务器可以回复消息给客户端 "Hello! 我是服务器 5 " , 并对特定请求资源进行过滤代码服务端public class TestServer { public static void main(String[] ar

2020-08-03 11:08:25 253 1

原创 Netty入门 -- 核心模块组件

核心模块组件

2020-08-03 09:58:47 120

原创 Netty入门 -- 异步模型

Netty基本介绍Future说明工作原理示意图Future-Listener 机制总结基本介绍异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在 完成后,通过状态、通知和回调来通知调用者。Netty 中的 I/O 操作是异步的,包括 Bind、Write、Connect 等操作会简单的返回一个 ChannelFuture。调用者并不能立刻获得结果,而是通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 I

2020-08-01 16:43:14 185

原创 Netty入门代码分析

NettyNetty模型原理示意图代码案例服务端客户端任务队列使用场景代码实现小结说明Netty模型之前我们介绍了线程模型,性能比较高的是Reactor主从多线程,而Netty就是主要基于Reactor多线程模型设计出来的,其中主从Reactor多线程模型是有多个ReactorBossGroup 线程维护Selector , 只关注Accecpt当接收到Accept事件,获取到对应的SocketChannel, 封装成 NIOScoketChannel并注册到Worker 线程(事件循环), 并

2020-08-01 16:01:07 194

原创 Netty入门教程 - 线程模型

线程模型JDK 原生 NIO 程序的问题Netty 的特点Netty 高性能设计JDK 原生 NIO 程序的问题JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下:NIO 的类库和 API 繁杂,使用麻烦:你需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能做铺垫:例如熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网路编程非常熟悉

2020-08-01 10:09:38 149

原创 Netty入门教程——认识Netty2

NIO介绍BIO和NIO的比较Channel、Buffer、Selector和NIO关系缓冲区(Buffer)介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的 输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO 有三大核心部分:Channel(通道),Bu

2020-07-30 11:37:45 404

原创 Netty入门教程——认识Netty1

认识Netty介绍NettyIO模型网络通信流程BIO介绍代码BIOServiceBIOClient总结:介绍NettyNetty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Nettery是一个广泛的网络编程框架,很多优秀的网络通信底层都是利用Nettery来实现,比如dubbo的rpc通信,底层就是利用Nettery来实现的IO模型网络通信简单说,可以是一台计算机获取另一台计算机的信息,比如常用的微信聊天,A发送信息给B,B接受

2020-07-29 13:12:39 450

原创 MySql索引

MySql索引B+树特点一个m阶的B树具有如下几个特征:B+树的优势:结构索引结构索引维护索引种类B+树MySql目前主要采用的引擎是InnoDB;在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又因为前面我们提到的,InnoDB使用了B+树索引模型,所以数据都是存储在B+树中的。特点一个m阶的B树具有如下几个特征:B+树包含2种类型的结点:内部结点(也称索引结点)和叶子结点。根结点本身即可以是内部结点,也可以是叶子结点。根结点的关键字个数最少可以只有

2020-07-14 15:13:49 75

原创 Mysql事务

Mysql事务介绍事务特性1. 原子性2. 一致性3. 隔离性4. 持久性事务隔离级别隔离性问题隔离级别事务隔离实现介绍事务是操作数据库最常见的处理问题,也是面试问的最多的一种;比如:支付宝转账;小明向大明转了100块,那么小明这边需要扣除100块,而大明这边需要增加100块;但是在这个转账过程中,如果遇到了什么问题的话,比如服务器宕机了等;那么这时候 小明的100 块是不可以被扣除了的,大明是不应该被得到100块的;如果小明的100没有扣除,大明还得到100了,那么这样的话会支付宝亏损,支付宝

2020-07-12 15:49:22 108

原创 MySql更新语句的执行过程

更新语句的执行过程流程redo logbinlog介绍更新语句执行流程两阶段提交数据库删库后恢复总结流程这是之前的查询的时候使用的流程图,更新语句的流程图和查询也是很相似的客户端获取连接器的连接由于是更新操作,这时候会清除所有的缓存,如果对表更新比较濒繁,缓存使用起来还是很坑的之后分析器来分析语法是否有问题优化器这时候就会开始决定使用哪个索引之后执行器操作,和查找不同的是,更新流程涉及到两个重要的日志模块,redo log(重做日志)和 binlog(归档日志)redo log我们的

2020-07-11 13:15:09 524

原创 MySQL查询语句的执行过程

Mysql查询语句的执行过程连接器缓存分析器优化器执行器存储引擎InnoDBMyISAM查询语句的执行过程上图就是一条查询sql所需要经历的过程;也差不多是mySql的结构MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支

2020-07-10 11:22:38 219

原创 SpringBoot 整合 Dubbo

Dubbo介绍SOA基本特征松耦合系统架构图运行原理:SpringBoot 整合 Dubbo安装zookeeper安装dubbo admin启用微服务测试sp-dubbo 父模块的 pom.xml 配置:service-interface 模块配置:service-provider 模块配置:service-consumer 模块配置:测试功能是否生效:总结介绍Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,以及SOA服务治理方案。S

2020-07-09 20:05:58 254

原创 SpringCloud Alibaba -- Seata

Seata分布式事务介绍处理方法一、两阶段提交(2PC)二、补偿事务(TCC)三、本地消息表(异步确保)四、MQ 事务消息五、Sagas 事务模型Seata下载结构组成实现流程使用Seata的使用案例Seata-Server安装1、修改file.confservice模块store模块2、数据库初始化3、修改registry.conf4、分别启动Nacos、seata-server数据库初始化1、建立对应3个数据库与对应的回滚日志表2、初始数据测试1、代码模块2、分布式事务测试Seata原理简介(1)一阶段

2020-07-08 20:39:52 452

原创 SpringCloud Alibaba -- Sentinel

Sentinel 介绍框架环境整合启动Sentinel搭建微服务启动测试流控规则降级规则热点key限流整合Fegin总结介绍Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。包括核心的独立类库,监控台,丰富的使用场景验证。(这似乎是阿里开源组件的一贯作风,极其有特点,且特点很规律)注:官网给出的中间件的基本使用思路与核心功能点框架环境整合启动Sentinel下载还是一样的在阿里的GitHub官网下载 sentinel注意:这里启动的话,需

2020-07-08 17:12:54 194

原创 SpringCloud alibaba -- Nacos

Nacos介绍安装注册中心实现案例总结配置中心基础配置分类配置持久化介绍springcloud的Netflix 公司的组件系列后,由于Netflix 的组件大多数 已经闭源了,所以现在很多公司都开始采用springcloud alibaba来开发,当然也有些大公司采用的自己研发的组件模块;今天我们介绍的是SpringCloud alibaba中比较优秀的一个组件,NacosNacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心

2020-07-06 21:37:47 138

原创 SpringCloud --- gateway

gateway介绍搭建环境gateway功能路由配置文件配置代码配置断言过滤器总结介绍zuul是Netflix开发的一套不错的网关,但是也有着一定的缺陷,目前Netflix 对着zuul2.0开始了开发;但是随着Netflix 开始对旗下很多微服务组件开始停更以后,zuul2.0以后也可能面临着停更的风险;在此基础上 spring推出了比较优秀的一款框架 – gateway;其目标是为了替换zuul,成为新一代的网关;Spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级

2020-07-02 15:31:00 173

原创 SpringCloud -- Zuul

Zuul简介搭建Zuul路由控制配置简单路由规则引入eureka路由配置优化默认路由规则路由前置配置过滤器过滤器执行生命周期自定义过滤器使用场景负载均衡,熔断保护Zuul的高可用简介在微服务中,为了保证不被恶意攻击,我们需要隐藏我们各个微服务的地址,统一提供一个在外的地址提供访问,这个时候我们就需要一个网关来承担这样的责任;zuul的介绍在Netflix的这套组件中,zuul也是不错的一套网关搭建Zuul创建maven工程导入依赖<?xml version="1.0" enco

2020-07-01 13:55:35 61

原创 SpringCloud -- Feign

Feign简介快速入门负载均衡支持Hystix支持请求压缩简介快速入门负载均衡支持Hystix支持请求压缩

2020-07-01 11:43:17 79

原创 SpringCloud -- Hystix

Hystrix介绍微服务常见问题雪崩问题线程隔离Hystrix保护服务熔断总结介绍Hystix,英文意思是豪猪,全身是刺,看起来就不好惹,是一种保护机制。Hystrix也是Netflix公司的一款组件。Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。微服务常见问题在微服务开发中,一个未付雪崩问题线程隔离Hystrix保护服务熔断总结...

2020-06-30 21:03:04 165

原创 SpringCloud -- ribbon

bibbon、Hystrix和FeignRibbonHystrixFeginRibbonHystrixFegin

2020-06-30 09:38:14 70

原创 SpringCloud之zookeeper替换Eureka

zookeeper前提zookeeper的安装zookeeper的介绍zookeeper的结构zookeeper的配置文件zookeeper的应用场景数据发布与订阅(配置中心)命名服务Master选举分布式锁分布式协调服务/通知zookeeper替换Eureka改造服务者前提在我们的之前项目中已经搭建了一个消费者一个服务者;通过Eureka作为注册中心来完成服务调用,但是Netflix 官方已经宣布不再维护 eureka了,所以现在很多公司已经用其他的注册中心来替换eureka;这次我们使用zookee

2020-06-28 19:39:56 340

原创 springCloud初见之Eureka

Eureka简介Eureka作用Eureka简介Eureka作用Eureka

2020-06-28 15:35:36 287

原创 springcloud初见之基础Springboot

springboot简介springboot依赖springboot零配置springboot注入springboot启动器springboot入门体验简介java是一直都是主流的语言,使用的地方比较广,但是java一直有一个让人诟病的缺点,那就是环境搭建太繁琐,比如一个项目,之前主流的ssm工程,我们会先导入依赖,在导入依赖过程中,可能会发生依赖冲突;在处理好依赖后,我们需要配置spring的配置文件,传统的配置文件,不仅写法繁琐,而且过程比较痛苦等。所以在我们完成这一系列配置搭配好框架后,其他语言可

2020-06-27 21:00:45 128

原创 springcloud初见

springcloud微服务简介微服务架构微服务技术维度微服务实现Netflix公司开源的组件springcloud alibabaspring官方组件其他微服务简介随着互联网的技术不断发展,用户量不断增加,一个程序需要经受的并发量也越来越大,所以那些原来的传统架构已经无法抗住强大的并发量,所以微服务的概念流行开来,他将原来传统的集中式项目拆分出来,将一个项目模块,设置是一个业务场景都可以拆分成一个一个的微服务,将这些服务微分后,来实现对并发量承受;微服务架构微服务架构是一种架构模式,它提倡将单一的

2020-06-27 10:55:57 158

原创 OkHttpClient

OkHttpClient前期准备使用OkHttpClient创建对象getpost前期准备在日常开发中,使用http的请求已经是主流;在此过程中,如果我们要使用一些对接接口的时候,比如支付宝支付的接口,需要发起http的请求来获取结果,这个时候可以使用OkHttpClient;maven导入 <dependency> <groupId>com.squareup.okhttp3</groupId> <artif

2020-06-02 15:57:14 3337 1

原创 java集合详解

java集合详解介绍数据结构ListArrayList属性新增元素删除元素查找元素LinkList属性结构结构属性新增元素删除元素查找元素mapHashMap属性HashMap的实现结构HashMap 添加元素HashMap 获取元素优化HashMap 扩容优化HashMap常见面试题介绍集合作为一种存储数据的容器,是我们日常开发中使用最频繁的对象类型之一。JDK 为开发者提供了一系列的集合类型,这些集合类型使用不同的数据结构来实现。因此,不同的集合类型,使用场景也不同。基本上我们如果对集合操作熟练,基

2020-06-02 10:34:10 125

原创 joda.time的常用api

joda.time的常用api前置准备获取时间计算时间的差异时间的转换Java 日期比较大小前置准备jdk给我们提供操作时间的类,一般用Calendar;但是在比较复杂的时候,还是无法满足一般的使用,所以在常的时候,我们一般会用 joda-time 的这个工具类 来完成我们的需要;所以我们在使用的时候 需要用maven来引入 <dependency> <groupId>joda-time</groupId>

2020-06-01 16:16:02 322

原创 java的String详解

java的String详解StringString的结构String对象的不可变性String字符串常量池String.intern常见面试题StringString 对象是我们使用最频繁的一个对象类型,但它的性能问题却是最容易被忽略的。String 对象作为 Java 语言中重要的数据类型,是内存中占据空间最大的一个对象。高效地使用字符串,可以提升系统的整体性能。String的结构在 Java6 以及之前的版本中,String 对象是对 char 数组进行了封装实现的对象,主要有四个成员变

2020-05-29 16:19:15 160

原创 JVM垃圾回收机制

JVM垃圾回收机制JVM垃圾回收介绍垃圾回收机制1. 回收发生区域2. 对象被回收时机GC算法1.标记-清除算法2.标记-复制算法3.标记-整理算法4.分代收集算法年龄代GC在什么时候触发1.Scavenge GC2.Full GCGC调优建议JVM垃圾回收介绍在 Java 开发中,开发人员是无需过度关注对象的回收与释放的,JVM 的垃圾回收机制可以减轻不少工作量。但完全交由 JVM 回收对象,也会增加回收性能的不确定性。在一些特殊的业务场景下,不合适的垃圾回收算法以及策略,都有可能导致系统性能下降。

2020-05-26 08:53:36 189

原创 JVM内存模型

JVMJVM介绍JVM 内存模型的具体设计1. 堆(Heap)2. 程序计数器3. 方法区4. 虚拟机栈5. 本地方法栈JVM 的运行原理JVM介绍JVM 不仅承担了 Java 字节码的分析(JIT compiler)和执行(Runtime),同时也内置了自动内存分配管理机制。这个机制可以大大降低手动分配回收机制可能带来的内存泄露和内存溢出风险,使 Java 开发人员不需要关注每个对象的内存分配以及回收,从而更专注于业务本身。JVM 自动内存分配管理机制的好处很多,但实则是把双刃剑。这个机制在提升 J

2020-05-25 20:48:02 131

原创 深入了解IO模型

深入了解IO模型Tomcat的IO网络 I/O 模型1. 阻塞式IO2. 非阻塞式IO3. I/O 复用select()函数poll()函数epoll()函数4. 信号驱动式 I/O5. 异步 I/OTomcat的IO在我们的开发中最常用的就是Tomcat ,Tomcat 中经常被提到的一个调优就是修改线程的 I/O 模型。Tomcat 8.5 版本之前,默认情况下使用的是 BIO 线程模型,如果在高负载、高并发的场景下,可以通过设置 NIO 线程模型,来提高系统的网络通信性能。我们可以通过一个性能对

2020-05-25 10:52:14 253

原创 IO理解(BIO,NIO,AIO)

IO理解IO介绍1. 字节流2.字符流IO优化BIONIO通道(Channel)多路复用器(Selector)AIO总结三者比较Java对BIO、NIO、AIO的支持:BIO、NIO、AIO适用场景分析:IO介绍I/O 是机器获取和交换信息的主要渠道,而流是完成 I/O 操作的主要方式。在计算机中,流是一种信息的转换。流是有序的,因此相对于某一机器或者应用程序而言,我们通常把机器或者应用程序接收外界的信息称为输入流(InputStream),从机器或者应用程序向外输出的信息称为输出流(OutputSt

2020-05-22 15:44:38 308

原创 springboot操作rocketMq

springboot操作rocketMqrocketMq介绍rocketMq下载安装1.下载2.安装rocketMq运行springboot整合1. 导入依赖2. 配置配置文件3. 创建生成者4. 创建消费者rocketMq介绍消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可

2020-05-22 11:54:58 1043

原创 springboot操作elasticsearch

springboot操作elasticsearchelasticsearch介绍Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。  Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有,但它也仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理,因为Lucene 非常复杂。  为了解

2020-05-22 11:08:13 620

原创 redis创建分布式锁

redis创建分布式锁分布式锁锁是什么我们当然知道,在多线程程序中,不予许多个线程同时操作某个变量或者同时执行某一代码块,我们就需要用锁来实现。在Java中,可以用synchronized或Lock接口的实现类来实现。那么什么是分布式锁呢?当我们的应用通过分布式部署,每个应用部署在不同的机器上,但是我们要保证这些不同机器上的同一方法在同一时间不能被多个线程执行,这时候就要用到分布式锁。分布式锁有很多种实现方式,这里我们介绍Redis实现方式。前期准备首先去redis官网下载redis,将文件解压,运

2020-05-21 17:03:22 215

java 使用泛型.txt

java 使用泛型,优化重复多余代码.

2020-07-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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