自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Dubbo SPI机制

SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。Dubbo 并未使用 Java SPI,而是重新实现了一套功能更强的 SPI 机制。

2023-03-01 22:49:10 575

原创 JAVA 类型简写对照表

Java类型 符号 Boolean Z Byte B Char C Short S Int I Long L Float F Double D...

2020-10-21 10:51:29 894

原创 InnoDB索引

什么是索引:索引是存储引擎用于快速找到记录的一种数据接口,这是索引的基本功能,除此之外,在InnoDB,索引是聚集数据的一种方式(聚集索引),InnoDB的加锁机制也是通过索引实现的,相关的内容可以看我的另一篇博客《InnoDB 存储引擎》。InnoDB索引的结构:如图所示,在InnoDB中,索引通过B+Tree进行组织,所有的数据存在与叶子节点,叶子之间首尾相连。为什么选择B+Tree作为索引的存储结构,而不选择二叉平衡树或者B-Tree,首先我们要明确一点,数据是存在磁盘上而不是内存中,

2020-06-17 22:26:17 309

原创 InnoDB 存储引擎

学习Mysql有一段时间了,对SQL语法、索引、查询优化做了一定的了解,但是总感觉浮于表面,所以想换一种角度去理解Mysql-它的存储实现引擎:InnoDB。InnoDB是Mysql5.5之后默认的存储引擎,本文也主要是参照Mysql5.6的官方手册。一、存储引擎的作用是什么?在深入讨论InnoDB前,想先讨论以下存储引擎的作用。数据库是我们用来组织和存储数据的工具,在Mysql系统的三层结构中,数据的组织和存储主要由存储引擎层实现。我们知道,Mysql的数据是存在磁盘中,数据的计算是在内存中,所以

2020-06-11 13:05:19 260

原创 多路平衡查找树B-Tree

多路平衡查找树(下面简称B-Tree)是一棵自平衡树,可以认为是平衡二叉树的泛化版。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:根结点至少有两个子女; 每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1; 除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ; 所有的叶子结点都位于同

2020-06-10 21:10:38 2211

原创 Schema与数据类型优化

一、Mysql支持的数据类型数据类型 BIT 描述 TINYINT 8 整型,有符号范围-128~127,无符号范围0~255, SMALLINT 16 整型,有符号范围-32768~32767,无符号范围0~65535, MEDIUMINT 24 整型,有符号范围-8388608~8388607,无符号范围0~16777215, INT 32 整型,有符号范围-2147483648~2147483647,无符号范围0~4294

2020-06-04 09:55:26 232 1

原创 Mysql架构与概念

今天开始正式对《高性能Mysql》进行学习,博客主要记录学习的过程及一些认为比较重要的知识点,对于一些内容会从Mysql官网进行确认,一、Mysql的逻辑架构Mysql在逻辑上主要分为三部分:第一部分主要用于处理客户端连接,授权认证和安全。对于Java程序来说,第一部分主要对应于MySQL Connector/J 第二部分主要是服务器层,包含Mysql大多数的核心服务功能,例如:查询解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图。 .

2020-06-02 22:21:20 146

原创 Redis简单介绍-内存优化

Redis是一种基于内存的数据存储,内存的大小决定Redis的容量,在Redis的使用过程中,可以使用一些技巧,减少内存的消耗Redis的内存分配:当key被移除时,Redis不会总是释放(返回)内存到操作系统。这不是Redis的特殊之处,但它是大多数malloc()实现的工作方式。例如,如果用5GB的数据填充一个实例,然后删除相当于2GB的数据,那么常驻集大小(也称为RSS,它是进程消耗的内存页数)可能仍然在5GB左右,即使Redis会声称用户内存在3GB左右。发生这种情况的原因是底层分配器无法轻

2020-05-31 18:45:30 170

原创 Redis简单介绍-管道

Redis是一个使用客户机-服务器模型和所谓的请求/响应协议的TCP服务器。这意味着请求通常通过以下步骤完成:客户端向服务器发送一个请求,并从套接字读取服务器响应,通常是以阻塞的方式。 服务端处理命令并发送响应给客户端。客户端和服务器通过网络连接。这样的链接可以是非常快(环回接口)或非常慢(在Internet上建立的连接,两台主机之间有许多跳)。无论网络延迟是什么,数据包都有一段时间从客户机传输到服务器,然后从服务器返回到客户机以携带应答。这个时间叫做RTT(往返时间)。当客户机需要在一行中执行多

2020-05-29 15:26:47 688

原创 Redis简单介绍

一、Redis是什么Redis是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、带半径查询的地理空间索引和流。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和带有Redis集群的自动分区提供高可用性。二、Redis的数据类型Redis不是一个简单的键值存储,它实际上是一个数据结构服务器,支持不同类型的值。这意味着,在传统的键值存储中,将字符串键

2020-05-27 20:12:57 210

原创 Zookeeper的Watch机制

一、什么是Watcher机制Zookeeper可以理解为是一种提供持久化功能的内存树状结构存储,树的每一个节点被称为znode,当一个zonde节点执行了更新操作,我们称之为事件,而一个监视点表示一个与之关联的znode节点和事件类型组成的一个单次触发器,当一个监视点被一个事件触发时,就会产生一个通知,通知是注册了监视点的应用客户端收到事件的报告信息。当客户端注册了一个监视点来接收通知,匹配该监视点条件的第一个事件会触发监视点的通知并且最多只触发一次。Watcher机制采用Push/Pull的方式进行数

2020-05-26 11:48:36 872

原创 Zookeeper服务启动过程与服务器角色

最近在看Zookeeper,想把学习Zookeeper的过程记录下来,这篇博客主要是为了对Zookeeper做一个宏观的记录。一、什么是Zookeeper:ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。它可以在分布式系统中协作多个任务,在分布式系统中,开发面临的困难主要有:消息延迟、处理器性能和时钟偏移,后面两个会间接引起第一个问题,当我们面临一个网络错误时,很难确定是网络超时还是系统崩溃,Zookeeper提供了一套功能强大的API去解决这些问题,这些功能

2020-05-22 21:22:25 464

原创 Reactor模式与NIO网络模型

在web开发中, 我们最常用的模式就是MVC,将web程序的不同部分分而治之。在Nio网络程序开发中,也有一些类似的开发模式,比如Reactor模式,来方便我们对程序进行解耦和控制。维基百科对Reactor pattern的解释:The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one

2020-05-18 13:27:23 267

原创 Java NIO

对Java Nio 相关的api在很早之前就使用过,但一直对nio感到陌生,我想把对这个问题的理解思路写出来,以便以后对自己的理解进行矫正。一、Java IO 是什么?IO 用来处理设备之间的数据传输,Java程序中,对于数据的输入/输出操作 都是以“流”的方式进行的。这些设备主要是网络和磁盘。二、用户态和内核态的数据交换。操作系统是管理计算机硬件与软件资源的计算机程序。其中的一个...

2020-05-07 20:48:35 116

原创 JAVA内存模型

JVM规范中实图定义一种统一的JAVA内存模型(Java Memory Model, JMM)来屏蔽掉各种硬件和操作系统访问内存的差异,实现让Java程序在各种平台下都能达到一致的内存访问效果。在JMM中,所有数据都存储在主内存中,每个线程都有自己的工作内存,当线程操作数据时,每个线程不能直接操作主内存,只能操作自己的工作内存,并且线程间的工作内存是相互不可见的。因此,需要先把数据从主内存加载...

2020-04-30 16:33:14 106

原创 JVM方法调用原理

在JVM中,方法调用主要通过四条指令:invokestatic 调用类定义的静态方法invokespecific 调用类的初始化方法<cinit>,实例的初始化方法<init>,私有方法和父类方法invokevirtual 调用实例方法invokeinterface 调用接口方法在类加载到内存中时,方法的引用是符合号引用,在连接的解析阶段,虚拟机...

2020-04-29 16:53:38 254

原创 对象的创建和访问

一、对象的组成:JVM堆上的对象主要由三部分组成:对象头、对象实例数据和对齐填充。对象头:对象头主要由两部分组成,对象运行时的数据和指向对象所属类信息的指针。数组对象还包含一个数组长度信息。对象运行时的数据主要包含对象的hashcode 25b,GC 分代年龄4位,锁状态标志,线程持有的锁,偏向线程ID,偏向线程时间戳等。通过句柄访问对象指向对象所属类信息的指针为空。对象的实例...

2020-04-29 15:01:20 174

原创 JAVA类加载器

JAVA类加载器的作用主要是将class格式的二进制字节流加载到JVM中并在JVM的方法区创建该类的运行时结构,二进制字节流可以存储在任何地方,例如本地磁盘,网络等,只要符合jvm要求的class文件格式即可。从JVM的角度来看,主要有两类类加载器,由JVM自己用C++实现的Bootstrap类加载器和实现ClassLoader抽象类的用户自定义类加载器。Bootstrap类加载器由JVM自己...

2020-04-29 11:20:25 90

原创 JVM类加载过程

理解JVM的类加载过程,主要要回答两个问题:1、类在什么时候被加载。2、类是怎样被加载的。一、触发类加载的条件:类的加载过程主要分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载7个过程,加载、验证、准备、初始化、卸载这五个过程顺序是确定的,jvm必须严格按照这个顺序执行,jvm没有规定类加载的时机,但却严格规定了五种情况下必须立即对类进行初始化,加载自然要在此之前。1、...

2020-04-28 20:47:51 2812

原创 JVM 自动内存管理

本文主要整理自《深入理解Java虚拟机》,有不合理的地方可以直接参考书籍,写这篇博客的目的主要是为这一章做一个自我总结。内存自动管理主要是回答三个问题?1、哪些对象可以回收--回收判定算法:引用计数法和可达性分析。2、什么时候可以回收--回收位置:安全点和安全区。3、怎么进行回收--回收算法:标记-清楚算法、复制算法、标记整理。一、回收判定算法:1、引用计数法:引用计数法是...

2020-04-27 12:55:36 99

原创 JAVA虚拟机内存结构

最近在看JAVA虚拟机规范《jvms8》,分享一写里面的内容。1、class文件格式:Java虚拟机执行二级制格式class文件来执行操作指令。2、数据类型:Java的数据类型主要有基本类型(primitive type)和 引用类型(reference type)3、基本类型:类型 内存(字节) 范围 描述 boolean 4 ...

2020-04-23 20:49:35 136

原创 Apache Tomcat 学习(由浅入深)

今天,我们一起学习一下Tomcat,本文内容主要参考与 Apache Tomcat 7官方文档,以及Tomcat 7源码。内容主要分为一下五个方面:一、什么是Tomcat?Apache Tomcat 是一个Java Servlet、JavaServer Pages、Java Expression Language 和Java WebSocket技术的开源实现。二、Tomcat安装和配...

2020-04-12 18:27:49 329 1

原创 HashMap内部原理详解

1、什么是HashMap?答:HashMap 根据hash实现的一种Map接口实现类。2、HashMap的底层数据结构?答:在1.8之前,HashMap的数据结构:数组+链表 在1.8之后,HashMap的数据结构:数组+链表+红黑树3、HashMap的初始值?答:capacity:代表table.length loadfactor:加载因子 threhold:扩容的门槛值1)、DE...

2020-01-03 10:08:46 239

原创 Mysql Innodb Lock

本文主要介绍Mysql中Innodb的锁类型,主要参考自Mysql5.6手册Innodb Lock一节,附上连接:https://dev.mysql.com/doc/refman/5.6/en/innodb-locking.html本文内容:Innodb中的锁类型: Shared and Exclusive Locks Intention Locks Innodb中锁的...

2019-11-03 12:00:15 148

转载 关于MySQL 建表的一些建议

MySQL作为关系型数据库,被用来存储持久化的数据,避免不了需要创建表。如果没有利用ORM(对象关系模型)来自动创建表,则需要开发者通过图形界面(Navicat)或者手写MySQL语句。由于在生产环境下,我们对MySQL数据库的操作通常是通过命令行进行操作,因此,建议建表的时候也手写MySQL语句(不建议用图形界面建表)。1、添加注释的格式在编写MySQL语句时,我们通常会被要求加上注...

2019-01-22 11:40:32 167 1

原创 在图片上加播放按钮示例代码

 重点:大家都知道relative是相对定位,absolute是绝对定位,他们的单一用法我们非常熟悉,但是,怎样让某个元素在他的父级块中决对定位呢,答案就是relative+absolute。absolute在某些情况下也不是绝对的,比如在父级通过相对定位的情况下,子级绝对定位的元素不再是相对body定位了。读一下absolute的官方解释:absolute 生成绝对定位的元素,...

2019-01-10 21:41:44 5025

转载 Java Proxy和CGLIB动态代理原理

Java Proxy和CGLIB动态代理原理动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询、测试框架的后端mock、RPC,Java注解对象获取等。静态代理的代理关系在编译时就确定了,而动态代理的代理关系是在编译期确定的。静态代理实现简单,适合于代理类较少且确定的情况,而动态代理则给我们提供了更大的灵活性。今天我们来探讨Java中两种常见的动态代理方式...

2018-12-11 20:36:31 66

转载 [Git高级教程(二)] 远程仓库版本回退方法

1 简介最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客。2 问题如果提交了一个错误的版本,怎么回退版本?如果提交了一个错误的版本到远程分支,怎么回退远程分支版本?如果提交了一个错误的版本到公共远程分支,又该怎么回退版本?3 本地分支版本回退的方法如果你在本地做了错误提交,那么回退版本的方法很简单 先用下面命令找到要回退的版本的commit...

2018-11-21 11:30:47 105

转载 理解 JavaScript 的 async/await

随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await。我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中。C# 的 async/await 需要在 .NET Framework 4.5 以上的版本中使用,因此我还很悲伤了一阵——为了要兼容 XP 系统,我们开发的软件不能使用高于 4.0 版本的 .NET Fr...

2018-11-20 15:24:30 77

转载 Ibatis TypeHandler使用总结

iBATISSQLDAOGoogleXML ibatis中有一个TypeHandler(准确的说应该是TypeHandlerCallback), 这个接口一般用的比较少, google一下, 大部分就是用来将数据库中的值与java的枚举值或者clob与字符串之间的转换. 最近本人也用到了这个东东. 不过我们使用的是将保存在数据库中以一定分隔符连接的字符串转换成List类型. 开始不知道有Typ...

2018-10-18 21:54:23 271

转载 DATE_FORMAT函数用法

DATE_FORMAT函数用法一、在oracle中,当想把字符串为‘2011-09-20 08:30:45’的格式转化为日期格式,我们可以使用oracle提供的to_date函数。sql语句为:SELECT to_date('2011-09-20 08:30:45', 'yyyy-MM-dd hh24:mi:ss') FROM dual;                 反之...

2018-10-18 18:21:54 100892 2

转载 深入理解Java:注解(Annotation)自定义注解入门

深入理解Java:注解(Annotation)自定义注解入门  要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解:  元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定...

2018-09-30 10:59:51 67

原创 Spring Cloud Eureka 配置详解

在分析了Eureka的部分源码之后,相信大家对Eureka的服务治理机制已经有了进一步的理解。在本节中,我们从使用的角度对Eureka中的一些常用配置内容进行详细的介绍,以帮助我们根据自身环境与业务特点来进行个性化的配置调整。在Eureka的服务治理体系中,主要分为服务端与客户端两个不同的角色,服务端为服务注册中心,而客户端为各个提供接口的微服务应用。当我们构建了高可用的注册中心之后,该集群中...

2018-08-24 11:25:14 300

原创 Spring Cloud Eureka 源码分析

Eureka服务治理体系三个核心角色:服务注册中心、服务提供者以及服务消费者。后两者(也就是Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处理请求的接收者。所以,我们可以从Eureka的客户端作为入口看看它是如何完成这些主动通信行为的。我们在将一个普通的Spring Boot应用注册到Eureka Server中,或是从Eureka Server中获取服务列...

2018-08-23 18:21:05 140

原创 HTTP状态码详解

200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码。代码   说明 100   (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。  101   (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。2xx (成功) 表示成...

2018-08-12 15:10:25 128

原创 Spring Cloud Eureka 详解

一、Spring Cloud Eureka简介              Spring Cloud Eureka,使用Netflix Eureka 来实现服务的注册与发现, 他既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用Java编写,所以Eureka主要适用于通过Java编写的分布式系统,或是与JVM兼容语言构建的系统。但是,由于Eureka的服务端的服务治理机制提供了完备...

2018-08-12 02:17:39 705

原创 ibatis demo简单实现

开发平台:idea开发步骤:一、引入maven项目&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:...

2018-07-07 15:58:48 635

原创 mybatis demo简单实现

开发工具:IDEA开发步骤:一、建立maven项目    &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

2018-07-07 15:49:17 211

转载 秒懂,Java 注解 (Annotation)你可以这样学

文章开头先引入一处图片。 这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。Annotation 中文译过来就是注解、标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。我个人认为,比较糟糕的技术文档主要特征之一就是:用专业名词来介绍专业名词。比如:J...

2018-07-04 22:16:27 147

原创 maven+spring+dubbo简单demo搭建

总览Apache Dubbo是一款高性能、轻量级基于java的RPC框架。Apache Dubbo提供三个主要功能,基于接口的远程过程调用、容灾和负载均衡以及服务的自动注册与发现。Dubbo是一种典型的面向服务的架构(SOA),根据服务的功能,将服务分为服务消费者和服务提供者两个角色。Apache Dubbo的主要架构如图所示:Provider: 暴露服务的服务提供方。Consumer: 调用远程...

2018-07-03 15:56:18 989

空空如也

空空如也

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

TA关注的人

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