自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记录一次并发问题的解决 ThreadLocal

前言最近好久没有写博文啦,一方面是自己偷懒啦。。另一方面是自己最近在写一个RPC框架,现在该框架已经初步完成了,今天在测试并发的时候,发现总有有报错,经过一番波折,最后解决啦,所以记录下来啦!过程在框架的服务发现类 ServiceDiscovery中,我声明了一个用来存储 服务器列表的成员变量 addressList ,并在后面的watchnode方法中为其添加了节点,由于我只有了本地...

2018-12-02 22:11:11 450

原创 mybatis提高

1.SqlSessionFactorySqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);后发生了啥?Configuration(jdbcDriver url username password setting...以及一个mapperStatementMap,该map负责把每一条sql(...

2018-11-14 20:11:00 185

原创 redis学习6:redis内存淘汰机制

redis 设置过期时间Redis中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们 set key 的时候,都可以给一个 expire time,就是过期时...

2018-11-08 09:48:07 313

原创 redis学习5:redis事务

目录redis事务意义使用四种情况case1:正常执行 case2:放弃事务case3:全体连坐case4:冤头债主watch监控三个阶段三个特性redis事务可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。解释下加塞:就是...字面意思啦,就是加入其它命令意义...

2018-11-07 21:52:53 157

转载 redis学习4:redis主从复制

目录概述 修改配置文件设置主从关系测试主从关系实现原理1)全量同步2)增量同步哨兵机制缺点概述 前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大...

2018-11-07 20:03:06 172

原创 redis学习3:redis持久化

目录持久化RDB配置实现优点缺点AOF配置实现AOF重写机制优点缺点 小结持久化持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或者重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在硬盘中算是一种持久化redis的数据存储在内存中,内存是瞬时的,如果linux泵机或重启,又或者redis...

2018-11-07 10:56:47 99

转载 redis学习2:redis中的数据结构结构与对象

第1章 前言redis这么强大,那么它底层是如何实现的呢?使用了哪些数据结构呢?本文就带大家来剖析剖析第2章 简单动态字符串(SDS)  redis的字符串不是直接用c语言的字符串,而是用了一种称为简单动态字符串(SDS)的抽象类型,并将其作为默认字符串。  redis中包含字符串值的键值对在底层都是由SDS实现的。2.1 SDS定义/* * 保存字符串对象的结构 *...

2018-11-07 09:57:41 108

转载 redis学习1:初识redis

redisRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。简而言之redis就是放在远程网络上的一个key-value数据结构。优点redis丰富的数据结构——更加方便操作 redis的数据都是在内存操作——更加快速操作 单线程处理——避免了锁 非阻塞式IO多路复用——充分利用网络IO 设...

2018-11-05 21:56:55 191

原创 mysql 学习与提高5:explain命令详解

目录Explain 简介Explain 使用Explain 字段1. id字段2.select_type3.table4.type5.possible_keys6.key7.key_len8.ref9.rows10.extra注意事项Explain 简介Explain 提供了 MySQL 如何执行 SQL 语句的信息,通过这些信息,可...

2018-11-04 22:04:20 202

转载 mysql学习与提高4:mysql的两种存储引擎的索引存储机制

目录概要 MyISAM索引实现InnoDB索引实现总结概要 Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是...

2018-11-04 16:00:15 143

原创 mysql学习与提高3:mysql索引

目录索引B Tree 原理索引分类B+Tree 索引哈希索引全文索引空间数据索引(R-Tree)索引的特点索引的优点索引的缺点索引失效在什么情况下适合建立索引为什么用B+树做索引而不用B-树或红黑树联合索引什么是联合索引命名规则创建索引索引类型删除索引什么情况下使用索引索引索引是什么呢?简而言之,索引就是一种高...

2018-11-04 15:41:37 316

原创 mysql学习与提高2:mysql存储引擎

目录存储引擎有哪些存储引擎如何查看存储引擎InnoDBMyISAMMyISAM 与InnoDB比较总结存储引擎什么是存储引擎呢?存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。有哪些存储引擎有MyISAM、InnoDB、CSV、Archive、Memory、Federated等存储引擎,因为后面四种用的较...

2018-11-04 10:47:05 134

转载 mysql学习与提高1:mysql架构总览

一、MySQL整体逻辑架构我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture)                      图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。第二层值得关注。这是MySQL的核心部分。通常叫做 SQL La...

2018-11-04 09:56:48 157

转载 基于redis的消息队列的设计及实现

消息队列所谓消息队列,就是一个以队列数据结构为基础的一个真实存在的实体,如数组,redis中的队列集合等等,都可以。为什么要使用队列主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队...

2018-10-19 21:15:35 1627

原创 敏感词过滤算法:前缀树算法

背景平时我们在逛贴吧、牛客网的时候,我们经常可以看到一些形如 “***”的符号,通过上下文,我们也可以很容易猜到这些词原来是骂人的话,只是被系统和谐了。那么这是如何实现的呢?作为普通人,我们最先想到的一种办法就是把所有敏感串存入一个列表中,然后用户每发一条内容后台就把该内容与敏感串列表的每一项进行匹配,然后把匹配的字符进行和谐。显然这样的效率是很低的。非常影响性能,那么我们有没有其他的算法...

2018-10-19 17:13:03 12282 7

原创 JAVA常用集合源码分析:HashSet

序言在上一篇文章中,我们介绍了HashMap,其实本来想自己完成源码分析的一系列文章的,但是HashMap的源码着实是复杂,看的我脑壳疼。。于是就自己去找了找大牛们的文章反复看,后面总算有了点门道了,大致知道了HashMap的原理,然后转载了一篇我认为总结的比较好的文章到我的博客里,供大家一起学习。初步了解HashMap的源码后,自以为自己还OK了,于是便打算独立把ConcurrentHash...

2018-10-02 14:58:20 159 1

转载 JAVA常用集合源码分析:HashMap

我们这篇文章就来试着分析下 HashMap 的源码,由于 HashMap 底层涉及到太多方面,一篇文章总是不能面面俱到,所以我们可以带着面试官常问的几个问题去看源码:了解底层如何存储数据的 HashMap 的几个主要方法 HashMap 是如何确定元素存储位置的以及如何处理哈希冲突的 HashMap 扩容机制是怎样的 JDK 1.8 在扩容和解决哈希冲突上对 HashMap 源码做了哪...

2018-10-02 09:56:52 163

转载 深入剖析红黑树以及JAVA实现

作者:美团技术团队链接:https://zhuanlan.zhihu.com/p/24367771来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。BST二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点...

2018-09-29 21:32:26 122

原创 JAVA常用集合源码分析:LinkedList

概述上一篇我们介绍了ArrayList,我们知道它的底层是基于数组实现的,提到数组,我们就马上会想到它的兄弟链表,今天我们要介绍的LinkedList就是基于链表实现的。继承结构public class LinkedList<E> extends AbstractSequentialList<E> implements List<E&gt...

2018-09-29 11:20:37 118

原创 JAVA常用集合源码分析:ArrayList

ArrayList简介ArrayList 是一个动态数组,所谓动态,是相对数组来说的,我们知道当我们在使用数组的时候必须指定大小,而且大小只能是固定的,有时候就很不方便,让人不爽。而我们的ArrayList恰恰解决了这一痛点,让我们可以不受束缚地使用数组。阅读方法看继承结构与实现接口。 看这个类的层次结构,处于一个什么位置,可以在自己心里有个大概的了解。 看构造方法 。在构造方法中,...

2018-09-28 21:08:43 155

原创 JAVA并发编程:一文全面搞懂并发编程

序言哈哈哈哈哈哈,原谅我这个标题党哈,我现在也只是刚入门并发编程,学习的过程过程中发现好多专业词语不会读或者是读不准。。所以就汇总了下,把一些比较难读的给标上英标啦。。正文callable:['kɔ:ləbl]  一个类似runnable的接口,方法可以有返回值synchronized:['sɪŋkrənaɪzd] 用来实现线程同步的ReentrantLock : [riː'e...

2018-09-27 16:24:34 241

原创 设计模式13:模板方法模式

模板方法概念:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤本质:分离算法,选择实现。即处理步骤父类中定义好,具体实现延迟到子类中定义其实这个蛮好懂啦,设想一下,当你和某个老哥一起去银行办理业务,你办理贷款,他办理存款业务,一般来说,你们去了的第一件事情都是排队,轮到你们了你们再去办理各自要办理的业务,办理好后就离...

2018-09-26 16:34:39 104

原创 设计模式12:装饰者模式

装饰者模式装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。怎么说?老样子,先设想个场景假如我要去楼下买手抓饼吃,一般来说,手抓饼都会提供不同的配料,比如加鸡蛋,加鸡柳,加肉松或者加火腿,不同的配料价钱也不同是不是感觉饿啦哈哈哈哈,我们继续...如果我们要用编程语言来描述的话,...

2018-09-24 15:01:10 103

原创 设计模式11:责任链模式

责任链模式定义:为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,这就是责任链模式。举个栗子咯,当周杰伦要在你的城市开演唱会时,而你恰好有课,这时候咋办呢?总不能不去吧,所以只有向老师请假咯。而请假的话,是有个流程滴,当你提交申请表给辅导员时,如果天数在两天以内的话,辅导员直接给你批准啦,你就可以开溜啦;...

2018-09-23 22:09:21 109

转载 设计模式10:观察者模式

观察者模式在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。人话:其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。想一想微信公众号机制主要角色抽象被观察者角色(Subject):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接...

2018-09-23 15:04:17 90

原创 设计模式9:策略模式

策略模式定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化本质:分离算法,选择实现。看不懂这个神仙一般的定义没关系,老规矩,先搞个反面例子来引出我们的策略模式在暑假的第一天,有几个选择摆在我面前,分别是打英雄联盟,做家务,睡觉,学习。显然每个行为都可以看成是一种行为策略,那么我到底会选择什么呢,这应该根据具体的情况来...

2018-09-23 14:35:21 132

原创 设计模式8:组合模式

组合模式定义:将对象组合成树形结构,表示层次结构关系,并且让对象能够以同样的方式呈现给客户端程序。在前面几篇介绍代理模式,桥接模式等模式的时候,我都会先举个实际场景,然后先介绍一种解决方案,接着指出这种方案的不足之处,最后再引出我们的xxx模式。但是我们接下来的组合模式就不采取这种讲解模式啦,因为它要解决的场景基本上没有其他的用来反衬的方案啦。记住一点,凡是碰到有树形结构的关系的场景,...

2018-09-23 10:51:05 94

转载 设计模式7:桥接模式

桥接模式先上一个稍微官方点的定义:将抽象和行为划分开来,从而将各个可能变化的维度分离开来,各自独立成一个类,但是能够动态的组合。光看上头这个定义的话,除非是神仙,否则肯定是一脸懵逼的。。接下来举个实例吧在开始学java的时候老师讲到继承的时候,总是喜欢用一个例子来讲解,那就是画图,这里有一个画笔,可以画正方形、长方形、圆形(这个大家都知道怎么做吧,我就不解释了)。但是现在我们需要给这些...

2018-09-23 09:26:42 79

原创 设计模式6:代理模式

代理模式何为代理模式?顾名思义可以简单理解为代为管理,代理模式就是为其他对象提供额外服务,控制访问(前置处理),或做善后处理(后置处理)。有了代理之后,可以在原来功能的基础上由代理完成另外一部分事情。这么说估计还是有点难理解,那我举个简单栗子吧。比如英雄联盟周年盛典要邀请周杰伦去现场唱歌,显然举办方要直接联系到周杰伦可能会有点复杂,所以举办方可以先联系到杰伦的经济人,谈好价钱后再由经纪人安...

2018-09-21 10:35:36 96

原创 设计模式5:原型模式

原型模式用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。说简单点,就是我们程序员的CV大法了既然是复制一个对象,那么直接new一个然后赋值不就完skr了吗,为什么还要搞出个原型模式这个幺蛾子呢图样图森破!如果一个对象有十几二十个属性,如果new出来再一一赋值,岂不是很难受?所以原型模式就应运而生了。如何实现Cloneable接口和clone方法Pr...

2018-09-20 15:37:07 185

原创 设计模式4:建造者模式

建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。上面是一个比较官方的解释,那么什么算是复杂的对象呢?复杂没有一个明确的定义,一般来说,当我们要构建的对象里面包含多个组件,就可以认为它是一个复杂的对象,比如我们的手机,电脑,神舟飞船等,他们都是由各种组件组合起来形成的产品。以神舟飞船为例,它有轨道舱,逃逸塔和发动机等组成,这些组件不是我们最终想要的,我...

2018-09-20 10:23:52 131

原创 设计模式3:工厂模式

工厂模式在简单的开发中,如果我们要获取一个类的实例,直接new出来就完skr了,但是当对象的实例化过程非常复杂,需要初始化很多参数或者这个类有很多子类的时候,这时候我们直接用new的话就很不方便,这时候我们不妨把复杂的对象实例化交给一个工厂来处理,我们不比关心它是如何初始化的,我们在用的时候直接调用它,直接从工厂获取就行了,这便是我们的工厂模式。目的实现解耦,将对象的创建和使用分离,也...

2018-09-19 23:07:42 110

原创 设计模式2:单例模式

单例模式确保一个类中只有一个实例,自行实例化并向整个系统提供这个实例,这个类被称为单例类,它提供全局的访问方法特点在类中只有一个实例,并提供一个静态的getInstacne()方法用于外界唯一访问这个实例防止在外部对其实例化,构造函数私有化在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例举例windows操作系统中的任务管理器,回收站等,在...

2018-09-19 17:44:31 97

原创 设计模式1:适配器模式

啥叫适配器举个栗子,我的是安卓手机,室友的是苹果手机,我的安卓机子只能用我的安卓数据线来充电,而不能使用室友的苹果数据线,但是我想借助某种工具(不知道有没有这种东东...),让我的安卓手机可以用室友的苹果数据线来充电,可以帮我们达到这个目的的工具就是适配器。通俗来说,适配器就是把原来不匹配的东西变成匹配的东西的一个中间件。而适配器模式,就是借用适配器思想的一种开发模式可以分为三类类...

2018-09-19 10:04:19 142

转载 深入理解JAVA虚拟机6:类加载机制

类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机类加载机制。(类是在运行期间动态加载的)懒加载:要用的时候再去加载。举个栗子,我们的电脑上有很多软件,比如qq,idea,网易云音乐等等,如果我们在电脑开机的时候就全部自动开启,那我们的电脑肯定会卡爆的,因为我们不是所有应用都要使用到.....

2018-09-17 20:43:18 158

原创 深入理解JAVA虚拟机5:内存分配与回收策略

分代收集算法GC机制的基本算法。之所以不把这个算法放在前面介绍GC垃圾收集算法里一起讲,是因为分代收集算法和他们不一样,它不是一种新的算法思想,而是对前面提到的三种算法思想的一个综合运用。我们知道,在JVM的堆内存中,分为新生代和老年代(jdk7以及它以前的版本还有一个永久区,在jdk8后被废弃了),其中新生代中又可以分为伊甸区(Eden)和两个存活区(Survivor1和Survivor2)...

2018-09-16 21:06:18 131

转载 深入理解JAVA虚拟机4:垃圾收集器(转)

1、垃圾收集器概述       垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。1-1、垃圾收集器组合       JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图:(A)、图中展示了7种不同分代的收集器:...

2018-09-15 11:25:08 102

原创 深入理解JAVA虚拟机3:认识GC

一、什么是GCGarbage Collection 垃圾收集二、为什么要进行GC不进行垃圾收集的话,内存中的垃圾会越来越多,最终内存满了,机器就会坏掉,坏掉就要买过,买过就要花钱三、回收什么内容要回收的当然是内存中的垃圾了,那么什么内存中的垃圾又指的是什么呢?垃圾就是死去的对象,那么问题又来了,怎么判断对象有没有死呢?这里就要介绍两种方法了 引用计数法 给对中添加...

2018-09-15 11:08:43 144

原创 深入理解JAVA虚拟机2:JVM内存结构

内存结构一览在上一篇文章中,我们最后给出了一幅图这幅图中,就包含了JVM的内存结构的所有组成元素,他们分别是:java堆内存、java栈、方法区、本地方法区以及pc寄存器,接下来我们就对这些区域逐一介绍。java堆      Java堆是Java虚拟机所管理的内存中最大的一块。是线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例...

2018-09-14 18:10:52 144

原创 深入理解JAVA虚拟机1:初识JVM

JVM是个啥      提到JVM,我们就不得不顺带提到他的两个“兄弟”:JDK,JRE,光看名字的话,确实挺像的,根据事物的发展规律和人类的做事惯例,往往比较相像的事物,我们都得把他们拿来比较一番,现在我们就来按照惯例吧,来简单比较下这三兄弟。      JDK Java Development Kit ,意为Java开发工具包,包含JRE和Java工具,如编译Java程序的Javac、...

2018-09-14 14:54:59 248

空空如也

空空如也

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

TA关注的人

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