自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Elasticsearch入门知识(二)

1、关于put /index/type/id 和post  /index/type/id/_update两这个区别put操作,如果id不存在,则创建新的document,如果id存在是全量替换post当中的是对部分内容的替换,es对两者底层的实现也是不同的,称做是partial update,其底层实现方式是a.内部获取到全量的document对象b.将传递过来的filed更新到d...

2018-12-16 18:03:11 117

原创 Elasticsearch入门基础知识(一)

不介绍安装方式,主要是用来记录在学习elasticsearch时的一些基础入门命令和CRUD操作。以下的例子,都是经过测试的,本文的例子使用的时kibana工具来进行测试1、检查elasticsearch是否启动成功http://localhost:9200/?pretty会返回当前elasticsearch的服务名称,版本号等相关信息2、查看当前elasticsearch的状...

2018-12-16 00:13:38 166

原创 SpringBoot+dubbo 注解方式实现入门

1、前期准备工作,在 zk官网 下载需要的zk压缩文件,我下载的是3.4.9版本,在windows系统上安装,将文件解压到指定文件下面,在confg目录下面有一个zoo_sample.cfg文件,我们拷贝一份,修改文件名称为zoo.cfg修改zoo.cfg文件当中配置信息,在bin目录下,直接使用zkServer.cmd启动,默认使用端口是2181接下来搭建一个maven项目作...

2018-09-07 12:50:47 2781

原创 JVM问题总结

1、如果cpu使用率一直过高如何处理      a)  top命令查询到占用率比较高的进程pid, 如果是java进程,接下来进一步分析      b)接下来根据进程pid,去查询相应的线程id信息           ps -mp pid -o THREAD,tid,time       c)找到使用率比较高的线程id,假设为6677,通过linux命令转为16进制     ...

2018-08-08 19:40:29 156

原创 Kafka基础概念介绍

在之前的一篇文章当中介绍了kafka在windows上面的安装以及简单的使用命令,windows 系统 上启动kafka这篇主要是来介绍以下kafka当中的一些基本概念,先对kafka有一个感性的认识。消息队列的基本框架是                   生产者-------》消息队列《----------消费者生产者(Producer)   生产者就是消息的创造者,主要工...

2018-08-06 21:20:32 1573

原创 分布式缓存数据库面试题redis

redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高?区别:1.mc可缓存图片和视频。rd支持除k/v更多的数据结构;2.rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份;3.rd可以做消息队列。原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。redis主从复制如何实现的?redis...

2018-08-06 21:20:16 5667

转载 Redis问题整理

这篇文章主要是从几个方面来对redis做了一个小总结,整理的话,因为是偏向面试,所以侧重理论的内容会比较多一点使用Redis会有哪些缺点    1、缓存和数据库双写一致性问题         一致性问题时分布式架构当中比较常见的问题,还可以进一步分为强一致性和最终一致性。对于数据库和缓存分别进行操作,势必会造成缓存和数据库数据不一致问题。如果有个强一致性的要求,那么就需要把数据先保存至...

2018-08-06 21:20:00 134

原创 Redis持久化方案RDB和AOF

Redis提供了两种持久化方式RDB和AOFRDB     RDB(Redis DataBase): RDB就是在不同的时间点,将redis存储的数据生成的快照保存在磁盘等介质上。     RDB的工作原理:在进行持久化时,会将数据写入到临时文件当中,等到持久化过程结束了,会将这个临时文件替换掉上次持久化的文件。因此,我们随时都可以进行备份。     redis会fork一个子进程...

2018-08-06 21:19:42 92

原创 Redis当中的事务

数据库当中为了保证数据的一致性,都会提供一定的事务操作,对于缓存数据当然也不例外,会提供一定的事务操作,来保证整个操作过程的原子性。redis当中提供的事务性,可以从以下几个命令了解Multi 用来开启一个事务,类似于数据库当中beginEXEC 执行一个事务,类似于数据库当中的commitDISCARD 放弃一个事务的执行,类似于rollbackWATCH 监听特定的key,...

2018-08-06 21:19:25 79

原创 Spring框架面试题

Spring框架中都用到了哪些设计模式?代理模式—在AOP和remoting中被用的比较多。单例模式—在spring配置文件中定义的bean默认为单例模式。模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。工厂模式—BeanFactory用来创建对象的实例。适配器–spring aop装饰器–spring data...

2018-08-03 21:14:49 283

原创 MyBatis缓存实现源码分析

    在之前的文章里面介绍了MyBatis启动过程的调用分析,MyBatis启动流程源码分析,这篇文章介绍了MyBatis当中调用所涉及到的类。这篇文章主要是从源码来分析下MyBatis当中如何实现一级缓存,二级缓存的。     关于一级缓存和二级缓存, 一级缓存是在一个SqlSession会话当中,每次执行完查询之后,会把数据缓存到session当中,如果第二次进行查询的话,就会直接从se...

2018-08-02 21:20:39 1039

原创 Spring中bean的生命周期

关于bean的生命周期,其实过程非常多,总结起来就是在构造方法前面有其他方法可以执行,在属性设置前面,后面都也可以插入具体的方法执行,最后在关闭掉ApplicationContext的实现类时,也会有方法执行。先给出一个简易版的,仅在一个bean内需要调用的顺序public class Person implements BeanFactoryAware,BeanNameAware,Init...

2018-08-02 21:20:12 104

原创 MyBatis启动流程源码分析

先来吐槽下CSDN,我辛辛苦苦写的文章,保存到草稿之后,准备返回,结果提示我没有的登陆,等我登陆之后,发现我写的文章竟然没有了!!!!!而且这个事情已经好几次了,估计是用CSDN的人太多了吧,想逼走一部分用户。之前写了一篇关于MyBatis整个架构,工作流程的文章,保存之后发现啥都没有,也不想再写了,这篇直接就开始进入整个流程的源码分析阶段。第一阶段    获取相关配置,根据SqlSe...

2018-08-01 20:44:05 536 2

原创 设计模式——代理模式之CGLib实现分析JDK1.8(二)

上篇博客介绍了JDK当中提供的动态代理实现方式,这篇主要是来介绍,通过CGLib工具实现的动态代理。首先在maven项目当中添加jar包依赖 <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> ...

2018-07-31 21:36:45 186

原创 设计模式——代理模式之动态代理源码分析JDK1.8(一)

    代理模式其本质是,对于需要调用的方法,在其原由逻辑上进行修改,或者说是在原有方法的基础上前后都加上log日志,或者是对原有方法的结果进行二次处理等等。其结构图如下Subject     目标接口,定义RealSubject和Proxy的共同接口,RealSubject   具体的实现接口类,实现目标接口的功能Proxy   调用具体的实现接口类,并在具体实现...

2018-07-31 21:36:19 362

原创 设计模式——状态模式

    状态模式的设计实现主要是用来解决,不同状态下的不同用户行为,一般情况下,我们的处理方式是,根据状态不同,调用不同的方法,而状态模式的解决办法是,在某个对象当中持有一个状态对象的接口,当状态条件不同时,执行不同的具体的接口实现方法。    这样说可能还是比较抽象,举个例子,一个水桶,其状态可以分为三种,一种是水桶满的状态,还有一种是半桶状态,第三种是空桶状态,对于不同的状态下,我们能执行...

2018-07-31 21:35:49 103

原创 设计模式——观察者模式

   观察者模式主要是建立对象之间的一对多关系,当其中一方发生变化时,通知多个对应的对象,而具体什么时候去通知,这个就由具体的子类来实现。   下图当中给出的是观察者模式之间的结构关系图Subject    被观察的对象的抽象接口,其中包括需要通知观察者的集合,同时也提供了,添加观察者和移除观察者方法,以及通知所有的观察者的方法。ConcreteSubject   具体的被...

2018-07-30 21:43:30 94

原创 设计模式——装饰器模式(附java源码案例)

装饰器模式,其实又叫做包装模式,其主要作用就是将附加的功能添加到别的类当中,让这个类实现其包含的类的方法,在具体的调用时,就会按照包装顺序进行调用。Compoent   提供一个统一接口,是装饰类和被装饰类的基础类ConcreteComponent  具体的实现类,对于接口当中的方式进行实现Decorator    继承了Componet接口,同时包含了一个Compon...

2018-07-30 21:43:10 550

原创 设计模式——单例模式

关于单例模式,主要是为了一个类每次在使用它的实例时,都是同一个实例对象。单例模式一public class MySingleton { private static MySingleton instance = new MySingleton(); private MySingleton(){} public ...

2018-07-30 21:42:37 82

原创 设计模式——命令模式(附框架源码实现)

命令模式,其为了达到动作的请求者从动作的执行者当中进行解耦命令模式当中关系结构图Command:     定义命令的接口,以及执行命令的抽象方法ConcreteCommand:   命令的接口的实现对象,这个对象当中通常都持有一个接收者,调用接收者的功能来执行命令Receiver:   接收者,真正执行命令的对象,注意这个地方在ConcreteCommand当中很有可...

2018-07-30 21:42:21 357

原创 分库分表需要解决的问题(二)

上篇文章介绍了数据库优化,以及分库分表的一个概念,这篇主要是介绍分库分表需要解决的问题1、ID问题     当我们进行分库分表的拆分之后,如果继续使用原来的表自增的方式显然最终查询出来的结果会出现id重复问题,处理分库分表下的id,一般有两种方法1、1 UUID     使用uuid作为主键是最简单的方案,缺点也很明显,uuid长度太长,占据的空间比较大,作为索引并且基于索引的查询...

2018-07-30 20:02:32 1768 2

原创 MySQL语句执行优化及分页查询优化,分库分表(一)

下面是关于在使用SQL时,我们尽量应该遵守的规则,这样可以避免写出执行效率低的SQL1、当只需要一条数据时,使用limit 1     在我们执行查询时,如果添加了 Limit 1,那么在查询的时候,在筛选到一条数据时就会停止继续查询,但是如果没有添加limit 1即使只有一条数据,也会尝试去查询下一条满足条件的数据。2、对于搜索的字段创建索引    如果当前数据量很大的情况下,需...

2018-07-30 20:02:12 1306

原创 MySQL当中基于索引的加锁和死锁问题

    在介绍MySql引擎的时候,只是大概介绍了以下InnerDB支持行级锁、表锁,MyISAM支持表锁,这篇文章主要是来介绍关于数据库什么时候加锁,加什么样的锁,还有死锁的问题。    在介绍锁的相关内容之前,需要了解下关于MySql数据库的事务级别,MySQL数据库事务的特性和隔离级别    关于数据库当中锁的分类,及不同类型的锁,他们的特点    1、行锁:真对数据库当中特定的...

2018-07-26 22:17:53 2355

原创 数据库面试题整理

1、什么是事物?    被绑定在一起作为一个逻辑单元sql语句组,如果有任何一个语句操作失败,那么整个操作都会失败,然后回滚到操作之前的状态。    数据库事物的特性及含义:      原子性:整个事物的所有操作,要么执行,要么全都不执行      一致性:事物开始前和事物结束后,数据的完整性约束没有被修改      隔离性:如果有两个事物,运行在相同的时间内,执行相同的功能,...

2018-07-26 21:30:18 153

原创 MySQL数据库事务的特性和隔离级别

在介绍数据库事务以及隔离级别时,我们先来了解关于事务的几个概念关于事务的几个特性,简称ACIDA事务的原子性(Atomicity):对于一个事务要么全部执行,要么全部不执行,也就是说一个事务不可能执行一半就停止了。C事务的一致性(Consistency):事务的运行并不改变数据库的一致性。I事务的隔离性(Isolation):隔离性保证了并发执行多个事务和串行执行过个事务的效果是一...

2018-07-26 21:29:08 187

原创 数据库引擎对比InnerDB和MYISAM

   数据库存储引擎,是不同的存储技术将数据存储在文件或者内存当中,这些存储引擎当中每种都会使用不同的技术来进行数据的存储,索引技巧实现,或者说数据库锁的实现,通过这些不同的技巧来最终达到一定的效果。   主要来看下我们比较经常使用的InnerDB   InnerDB       InnerDB是一个事务型的存储引擎,主要是目的是大数据时提供高性能的数据服务,在运行时在内存当中建立缓冲...

2018-07-26 21:28:47 3650

原创 MySQL索引相关内容汇总

索引分类1、普通索引2、特殊键索引    2.1、主键索引:primary key    2.2、唯一索引:唯一键索引3、联合索引     包含两个,或者两个以上列的索引4、全文检索:用来搜索一段文章时效果最好5、空间索引:很少用到索引的实现方式   索引其实是一种存储结构,mysql数据库当中使用的InnerDB和MyISAM引擎都使用B+树来实现,这里就...

2018-07-25 19:58:20 163

原创 JVM常用的参数

主要是记录一些比较常用的JVM参数,总会有用到的时候。-XX:+PrintGC 打开GC的开关,如果系统发生GC,就会打印GC日志-XX:PrintGCDetails打印gc的详细信息-verbose:gc输出gc信息-XX:PrintGCTimeStamps打印GC,及GC发生的时间-Xloggc:/gc.log将gc的信息打印在当前应用的根路径的gc.l...

2018-07-23 21:28:59 78

原创 JAVA对象头信息

HotSpot虚拟机当中,java对象的结构包括以下几个方面,对象头、实例数据和对齐填充。对象头用来保存程序运行时,对象当中的信息,实例数据用来保存当前对象具体存储的数值。关于对象头当中存储的信息对象头包括两个部分:Mark Word和类型指针,如果是数组类型的话,还会多一个数组长度MarkWord    Mark Word当中包括,对象的hashCode,分代年龄,锁标记位,...

2018-07-23 21:28:46 767

原创 CMS垃圾收集器执行过程

这篇博客主要是介绍CMS垃圾收集器的执行过程,并不会进行很详细的说明,如果想了解每个过程的详细步骤,可以查看下面的参考博客。   CMS垃圾收集器首先需要注意的一点,是用来对堆中老年代当中的垃圾进行回收的,CMS收集器的主要目标就是致力于降低垃圾回收的暂停时间,CMS GC和Full GC是不同的,CMS GC主要关注的是老年代的GC, Full GC是针对整个堆的GC。关于CMS垃圾收集...

2018-07-23 21:28:33 492

转载 什么时候触发MinorGC?什么时候触发FullGC?

触发MinorGC(Young GC)    虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间    1、如果大于的话,直接执行minorGC    2、如果小于,判断是否开启HandlerPromotionFailure,没有开启直接FullGC    3、如果开启了HanlerPromotionFailure, JVM会判断老年代的最大...

2018-07-23 21:28:21 4547 6

原创 G1收集器

G1收集器是在JDK1.7开始可以设置使用,在JDK1.9时设置为默认垃圾收集器。G1收集器和其他收集器相比有以下特点并行与并发:G1能充分利用多CPU、多核的硬件优势,来缩短Stop-The-World停顿时间 分代收集:和其他收集器相同,分代概念依然保留。G1收集器不需要其他收集器的配合就可以管理整个堆,可以根据不同的方式去处理新创建的对象、存活了一段时间的对象和熬过多次GC的对象。 ...

2018-07-23 21:28:08 1667

原创 JVM什么情况下初始化一个类(代码示例)

在前面的日志当中,已经介绍过类的生命周期类加载  将已经存在的class文件从磁盘当中加载到内存中,查找类的二进制数据,如果不存在直接抛出异常连接  验证:确保被加载类的正确性,确保字节码没有被恶意修改  准备:为类的静态变量分配内存,并将其初始化为默认值,整型的默认值是0,引用类型是null, 程序当中赋值是1,但是这里会把int默认值设置为0,  解析:将类当中的符号引...

2018-07-19 21:12:59 154

原创 JVM加载类的方式及存在的问题(附带代码演示)

JVM当中提供了两种类加载器1、Java虚拟机自带的类加载器     根类加载器(Bootstrap)、扩展类加载器(Extension)、系统(应用)类加载器(System)2、自定义的类加载器   用户可以通过继承java.lang.ClassLoader类,然后重写自己定义的类加载器。何时加载一个类: 类加载器并不需要等到某个类在首次主动使用时再加载它。JVM规范允许...

2018-07-18 22:36:29 231

原创 JVM垃圾回收

之前我们介绍了jvm的内存结构,了解到对于程序计数器、jvm虚拟机栈和本地方法栈,是属于线程私有的,每个线程对应一套,而对于堆和方法区,是属于线程共享的,我们讨论的垃圾回收也主要是针对堆和方法区的内存回收  关于java堆内存的分配  虚拟机当中将堆内存从逻辑上分成了三大块:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Ge...

2018-07-11 20:28:20 72

原创 Java当中强引用、软引用、弱引用及虚引用

java当中提供了四种类型的引用,分别是强引用、软引用、弱引用和虚引用,java当中提供这些类型的引用,主要是为了方便在垃圾回收时,将不需要的对象清理掉,从而不至于引发OOM异常错误。强引用    在我们前面介绍java当中对象的生命周期时,如果一个对象有强引用关系,那么将不会被垃圾回收收走,哪怕是抛出OOM异常,也不会回收。通常我们通过new 的方式创建的引用,都是强引用关系Object obj...

2018-07-10 21:49:42 66

原创 JAVA反射中Class类源码分析及常见面试题

这篇博客主要是来分析下java反射机制实现的核心类Classpublic class Test { public static void main(String[] args) { Class clazz = String.class; Constructor[] constructors = clazz.getConstructors(); }}...

2018-07-10 20:46:06 490

原创 Java对象和类的生命周期

    在java当中一个对象被创建,再被引用指向,然后参与一系列的逻辑计算,到最后被垃圾回收掉,这个过程是怎样的,对我们开发来说也是极其重要的对象的生命周期       对象在JVM当中的生存周期一般都是从      创建(created)-->应用(in use)-->不可见(invisiable)-->不可达(unreachable)-->收集(collected)-...

2018-07-10 20:45:55 515

原创 Java内存结构

     这篇文章尽量将每个区域的作用,以及特点描述清楚,直到他们会在什么时候用到,关于其相关的概念,暂不做展开分析    java内存结构由以下几个部分组成        程序计数器        堆        本地方法栈        虚拟机栈(也叫java栈)        方法区接下来就主要介绍每个区的是干什么的,以及有什么作用程序计数器    ...

2018-07-10 20:45:44 396

原创 JAVA内存模型

这篇日志主要是来记录我在学习java内存模型的时候,需要了解的知识点。关于java内存模型这部分内容网上也有很详细的资料,这篇主要是做一个知识的梳理,总结。什么是java内存模型?在学习java内存模型的时候,我去网上找了很多资料,我发现大部分的文章,讲述的java内存模型都是这样子的主要是就是在介绍关于堆、栈啊,方法区,程序计数器之类的,这里需要明确一点,以上的模型图,是在描述java虚拟机的内...

2018-07-09 19:12:21 640

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