自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ConcurentHashMap解析

1、并发Map存储的数据结构数组+链表+红黑树,存储数据的单元是Node结构,Node结构有key,value以及指向下一个Node的引用,还有hash字段2、并发Map的负载因子可以修改吗?可以指定吗?普通的 HashMap 的负载因子可以修改,但是 ConcurrentHashMap 不可以,因为它的负载因子使用final关键字修饰,值是固定的 0.75 。3、Node对象的hash字段在一般情况下,必须是>=0,为什么?散列表在扩容的时候,会触发一个迁移数据的过程,把原表的数

2022-01-17 22:07:12 937

原创 Mysql 执行流程,binlog,undo log ,redo log

1、执行流程mysql主要分为Server层和存储引擎层Server层:主要包括连接器,查询缓存,分析器,优化器,执行器,所有垮存储引擎的功能都在这一层实现,比如存储工程,触发器,视图,函数等,还有一个通用的binlog日志模块 存储引擎:主要负责数据的存储和读取, 连接器:负责用户登录数据,进行用户的身份认证,包括校验账号密码,权限等;只要密码验证通过,连接器会到权限表中查询该用户的所有的权限,只要这个连接不断开,及时管理员在这期间对这用户进行了权限更改,但这个连接维护的还是更改之前的权.

2021-12-21 20:17:45 2863

原创 MySql MVCC、事务隔离级别的实现原理

1、什么是数据库事务事务是由一个有限的数据库操作序列构成,这些操作要么全部都执行,要么全部都不执行,通俗的说同生共死,是一个不可分割的工作单位。事务的存在,其实就是为了保证数据库的数据一致性2、事务的特性ACID,分别对应原子性,一致性、隔离性、持久性原子性:事务作为一个整体被执行,包含在其中的数据对数据库的操作,要么全部执行,要么都不会执行一致性:事务开始之前和事务结束之后,数据不会被破坏,A给B转100元,不管成功与否,A和B的总金额是不变的隔离性:多个事务并发访问时,事务.

2021-12-18 15:32:00 1248

原创 TCP三次握手四次挥手

TCP通信TCP三次握手的目的是什么?为什么不用俩次或者四次?TCP三次握手的主要目的是防止失效的链接请求报文被服务器端接收到。如果只有俩次握手,假设当客户端发送第一次链接请求,由于网络阻塞的原因迟迟没有没服务端接收,客户端未接收到确认报文,认为服务端没有收到,预售重新发送请求报文并与服务端建立链接,等这个链接断开,之前滞留的请求报文又到达了服务端,就会让服务端与客户端再次链接成功,这时服务端就会一直等待客户端发送请求,但这个链接已经是失效链接,苦苦等待没有任何的请求,造成了资源的浪费。俩次.

2020-11-29 10:48:34 326

原创 JAVA-JUC篇

JUC是并发编程中非常重要的一个模块,另外最重要的是在面试中,这一块也是最为频繁被问的,如果能把这一块掌握好,那绝对吹起来牛逼哄哄。JUC提供了比synchronized更加高级的同步结构,实现更加丰富的多线程操作。【JUC】即java.util.concurrent包,主要有以下几个模块1、原子类操作2、锁3、阻塞队列4、并发集合5、同步器6、线程池7、异步组合编...

2020-04-21 13:01:05 310

原创 JAVA-JDK1.7/JDK1.8之HashMap区别篇

上篇分别说了JDK1.7和1.8版本的HashMap具体源码解析, 但这俩者具体是有啥区别?且听这回详解不管是1.7还是1.8的HashMap,首先我们要明确HashMap是线程不安全的!!!数据结构:JDK1.7采用的是数组+单链表结构;JDK1.8采用数组+链表+红黑树结构数据插入操作:JDK1.7是采用头部插入数据,在get查询的时候能够快速的查找到数据,但是因为采用头插法可能会...

2020-04-15 17:14:50 258

原创 JAVA-HashMap1.8篇

基于JDK1.7版本或之前的HashMap,JDK1.8的HashMap基于数据结构进行了优化,采用了数组+链表+红黑树的结构主要成员变量:transient Node<K,V>[] table:这是一个Node类型的数组(也有称作Hash桶),可以从下面源码中看到静态内部类Node在这边可以看做就是一个节点,多个Node节点构成链表,当链表长度大于8的时候转换为红黑树。...

2020-04-15 14:32:04 191

原创 JAVA-HashMap1.7篇

数组:采用一定的存储单元存储一群数据,对于指定下标查找,时间复杂度为O(1),但对定值查找,则需要遍历整个数据,一个一个的比较,时间复杂度是O(n),如果说是有序数组,可以采用二分查找法,增大查找效率,不过对于新增删除等涉及到数组元素的移动,时间复杂度都是O(n)链表:对于链表的新增,删除,只需要将对应的节点引用上去就ok,时间复杂度是O(1),而查找则需要遍历链表,时间复杂度为O(N)二...

2020-04-14 17:53:34 205

原创 JAVA-LOCK锁篇

【一】ReentrantLock:重入互斥锁,可以重新进入的锁,当前线程通过调用lock.lock()获得锁,如果再进入这个方法,不会阻塞,增加重入的次数。Synchronized和ReentantLock都支持重入重入锁主要就是为了避免死循环,死锁的发生【二】ReentrantReadWriteLock读写锁...

2020-02-19 10:42:27 383

原创 JAVA-关键字volatile篇

volatile变量的特性1、保证可见性,但不保证原子性 当写一个volatile变量时,会把该线程本地内存中的变量强制刷新到主内存中 写操作会导致其他线程中的缓存无效2、禁止指令重排 重排序是指编译器和处理器为了优化程序性能对指令序列进行排序的一种手段,具体遵守以下规则: 重排序操作不会对存储数据依赖关系的操作进行重排序,比如a=1...

2020-02-19 09:00:03 210

原创 数据库 详解explain 性能优化

一、从哪几个维度优化数据库性能的问题1、数据库配置,客户端连接服务端,并发的情况下,数据库的连接不够服务端设置最大的连接数 show variables like 'max_connections' ,修改连接数的命令:set GLOBAL max_connections=100; 或者直接修改配置文件 客户端使用连接池,应用池化技术不需要新建一个连接,MyBatis自带一个连接池,或...

2020-02-16 11:39:23 460

原创 JAVA-集合篇

List,Set,Map都是接口,前俩个继承Collection接口,Map是独立接口Set接口相关的实现类:HashSet,LinkedHashSet,TreeSetList接口相关的实现类:ArrayList,LinkedList,VectorMap接口相关的实现类:HashMap,HashTable,LinkedHashMap,TreeMap---总结1、List有序,可...

2020-02-15 09:29:37 225

原创 JAVA-IO篇

一、java中有几种类型的流字节流,字符流二、字节流和字符流哪个好,如何选择所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的字节流在操作文件时,即使不关闭资源(close...

2020-02-15 08:14:41 184

原创 缓存一致性的问题

随着数据量的不断提升,数据库的瓶颈达到最大的巅峰,对于用户的查询性能将受到很大的影响,因此引入了缓存,减轻数据库的压力,提高访问请求的速度。先读取缓存数据,缓存中有的话则立即返回结果,如果没有,则从数据库中读取数据,并且把读到的数据同步到缓存里,供下次请求使用。虽说这样减轻了数据库的压力,但在多线程高并发的场景下,可能会导致缓存和数据库不一致的问题,这需要我们解决!!!一、分析问题与解决方...

2020-02-11 08:45:56 459 1

原创 设计模式-代理模式

一、代理模式基本概述代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。二、代理模式的优势1、解耦2、功能扩展三、代理模式的分类1、静态代理:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。2、动态代理:在程序运行时,运用反射机制动态创建而成。四、静...

2020-02-10 21:56:50 182

原创 RabbitMQ基本解析

RabbitMQ工作模型交换机:绑定列表 交换机和队列是多对多的关系交换机常见的路由方式1、direct直连routing key路由键和binding key绑定建一致,交换机的消息只会路由到对应的队列中2、topic主题绑定建有个通配符的概念(# 0个或多个单词,* 不多不少一个单词)路由键根据绑定建通配符的关系,将消息转发到符合要求的队列中3、fanout...

2020-01-07 22:10:00 145

原创 MySQL 索引 聚簇索引 非聚簇索引 解析

【一】索引基本概述:索引是数据库管理系统中一个有序的数据结构,协助快速查询更新数据库表中的数据索引类型:普通索引,唯一索引(唯一),主键索引(唯一非空),全文索引(解决like效率低的索引)数据结构:二叉查找树,查找效率受到其深度的影响,极端情况下会行程单链表的结构,查询效率慢,之后演变成平衡二叉查找树,通过左右旋的操作使得左右子树的深度相差不大,平衡二叉树每个节点如果只存储一条数据大...

2020-01-05 20:32:25 265

原创 springmvc详细流程解析

springmvc是0z`框架中的一个模块,是一个基于mvc模式的web模块,负责前后台的交互工作;所谓的mvc其实就是一种设计模式,从而实现系统的解耦。SpringMVC执行流程 a.客户端发送请求  b.前端控制器DispatcherServlet接收请求,并调用处理映射器HandlerMapping(可以根据xml配置、注解进行查找)  c.处理映射...

2019-12-22 12:11:14 587

原创 ElasticSearch

一、es基本概述es是基于lucene的开源分布式查询和分析的搜索引擎,可以通过简单的restful api轻松实现搜索功能,可以进行大规模的横向扩展,以支撑pb级的结构化和分结构化海量数据的处理。所谓的全文索引指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找二、es适用场景1、站内搜...

2019-12-18 14:05:32 200

原创 JAVA-内存模型(JMM)

JAVA内存模型跟CPU缓存模型类似,是基于cpu缓存模型建立的,java线程内存模型屏蔽了底层不同计算机的区别。JMM数据原子操作1、read(读取):从主内存读取数据2、load(载入):将主内存读取到的数据写入到工作内存3、use(使用):从工作内存读取数据使用4、assign(赋值):将计算好的值重新赋值到工作内存中5、store(存储):将工作内存数据写入主内...

2019-12-13 20:41:24 159

原创 JVM-运行时数据区

JVM运行时数据区基本结构【java虚拟机栈】线程私有,生命周期和线程相同,虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧 用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。局部变量表存放了编译期可知的各种基本类型数据(boolean、byte、char、short、in...

2019-12-09 17:07:30 117

原创 JVM 类加载 运行时数据区

Java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程双亲委托模型的工作过程是:    如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,  而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的  启动类加载器中,只有当父类加载器反馈自己无法完成...

2019-12-05 14:38:28 261

原创 红黑树

红黑树是一种含有红黑节点并能自平衡的二叉查找树,具有以下特征1、每个节点要么是黑色,要么是红色2、根节点是黑色3、每个叶子节点是黑色4、每个红色节点的俩个子节点一定都是黑色5、任意一节点到每个叶子节点的路径都包含数量相同的黑节点红黑树是非完美平衡二叉查找树,是完美黑色平衡二叉树红黑数自平衡的原子操作(变色,左旋,右旋)红黑树的基本操作CRUD...

2019-12-03 23:10:31 134

原创 BIO,NIO

BIO就是传统的 io包,是基于流模型实现的,交互的方式是同步阻塞方式,也就是说再读入输入流或者输出流时,在读写动作完成以前,线程会一直阻塞在那里,bio优点时代码较为简单直观,但缺点就是效率和扩展性很低,容易成为应用性能的瓶颈。再不考虑多线程的情况下,BIO是无法处理并发问题的。BIO同步阻塞,阻塞主要存于这俩块1、连接阻塞Socker socker =serverSocket.ac...

2019-11-27 23:43:37 168

原创 kafka集群搭建

kafka是分布式发布-订阅消息系统,主要功能有:1、缓冲和削峰:上游数据时有突发流量,导致下游服务器可能扛不住,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行,慢慢处理业务。2、解耦和扩展性:项目开始的时候,并不能确定具体的需求,消息队列可以作为一个接口层,解耦重要的业务流程,只需要遵守约定,针对数据编程即可获取扩展能力3、冗余:可...

2019-11-07 16:33:59 262

原创 yum离线安装

搭建docker的时候,手贱将yum卸载的干干净净,然后自己离线安装,花费了一点时间,很尴尬。简单说明一下yum离线安装的步骤1、命令:rpm -qa|grep yum 查看已存在的安装包,如果存在先卸载的干干净净2、卸载干净之后,需要离线安装一些文件wget http://vault.centos.org/7.4.1708/os/x86_64/Packages/yum-plu...

2019-11-04 09:28:34 1253

原创 redis常见问题及集群搭建

一、缓存雪崩当缓存服务器处于单点情况下,一旦缓存服务器崩溃,所有的请求就全部落到数据库层,此时,如果由于访问量过大则会导致数据库宕机,进而导致整个网站或服务不可用,这种缓存的故障就是缓存雪崩。解决方案:提高缓存服务高可用性,建立分布式的高可用缓存系统,一台服务器如果宕机,另外一台继续工作,从而分担了数据库的压力。二、缓存冲突如果某一个key对应的数据不存在,而又未对该key做缓存...

2019-10-23 16:10:42 478

原创 redis常见数据类型及相关命令

一、String设置一条数据:set key value设置数据并设置过期时间:setex key 秒 value根据key获取数据:get key获取对应key值的长度:strlen key对key值进行拼接:append key value如果不存在设置值,存在不设置:setnx key value判断key是否存在:exists key...

2019-10-22 17:12:42 372

原创 远程通信协议

在分布式架构中,涉及到一个重要的环节,就是分布式网络中的计算机节点彼此之间需要通信,这就涉及到远程通信协议HTTP协议通信原理涉及到网络协议,需要先了解一下OSI七层网络模型和TCP/IP四层概念模型请求发起过程中,在TCP/IP四层网络模型,当应用程序用TCP传输数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收到的数据要增加一些信息。...

2019-10-08 13:37:54 2068

原创 JAVA-线程篇

线程和进程的区别?1、进程式系统进行资源分配的基本单位,有独立的内存地址空间;线程是CPU调度的基本单位,没有单独的地址空间,有独立的栈,局部变量,寄存器,程序计数器等。2、创建进程的开销大,包括创建虚拟地址空间等需要大量系统资源;创建线程开销小,基本上只有一个内核对象和一个堆栈3、一个进程无法直接访问另一个进程的资源,同一个进程内的多个线程共享进程的资源4、进程切换开销大,线程切...

2019-08-25 09:09:32 173

原创 HashMap,ConcurrentHashMap(JDK1.7,JDK1.8)原理解析

JDK1.7版本HashMap原理解析(数组+链表)基本的成员变量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //初始容量,默认16,2^4static final int MAXIMUM_CAPACITY = 1 << 30; //最大初始量,2^30static final floa...

2019-08-20 15:45:07 681

原创 面试题【三】

1、java实现线程有哪几种方式?a、继承Thread类,然后调用start方法b、实现Runable接口的run方法,然后再用Thread类包裹后,调用start方法c、实现Callable接口中的call方法,用FutureTask类包裹Callable对象,然后再用Thread类包裹FutureTask类,并调用start方法,call()方法可以有返回值。可以捕...

2019-08-16 10:10:39 161

转载 面试题【二】

1、static关键字是什么意思?Java中是否可以覆盖一个private或者是static方法?修饰成员变量或者成员方法,可以在没有所属的类的实例变量的情况下被访问。static方法不能被覆盖,因为方法覆盖事基于运行时动态绑定的,而static方法时编译时静态绑定的。static方法跟类的任何实例都不想管,所以概念上不适用java中也不可以覆盖private的方法,因为private...

2019-08-15 16:29:01 359

原创 设计模式-装饰者模式

装饰者模式动态的给一个对象添加额外的扩能,对对象的扩展,装饰着模式相对于生成子类更加的灵活装饰者模式的构成: Component(抽象构件):它是装饰类和具体构件的公共父类 ConcreteComponent(具体构件):它是抽象构件对象的子类,用来定义具体的构件对象 Decorator(抽象装饰类):继承抽象构件,用于给具体的构件添加...

2019-08-11 21:06:04 207

原创 拼多多相关面试题

1、事务的ACID,其中把事务的隔离性详细解释一遍?事务其实就是单个数据逻辑单元组成的对象操作集合,而数据库的终极目标就是使数据库从一个一致的状态换成另外一个一致的状态。ACID中的一致性,原子性,隔离性,持久性就是为了实现该目标。一个事务是一连串的操作组成增删改查的集合,就好比java方法一样,java方法中有N条语句对属性进行修改,在java与剧中,有一个语句执行出现了问题导致抛出了异...

2019-08-11 20:01:06 1601

原创 java常见问题概述

1、如何理解内存泄漏问题?有哪些情况会导致内存泄露?如何解决?对于应用程序来说,当对象已经不再被使用,但是java的垃圾回收器不能回收他们的时候,就产生了内存泄漏。未引用对象将会被垃圾回收器回收,而引用对象却不会,未引用对象显然都是无用的对象,然而无用的对象并不都是未引用对象,有些无用对象也有可能是引用对象,这部分对象正是内存泄漏的来源。如何阻止内存泄漏使用List,Map等集合时,使...

2019-08-05 13:40:25 410

原创 设计模式-工厂模式

【一】工厂模式属于创建型模式,提供了一种创建对象的最佳方式,我们创建对象时不会对客户端暴漏创建逻辑,并且通过使用一个共同的接口来指向新创建的对象功能:可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口。 可以一定程度增加扩展性,若增加一个产品的实现,只需要实现产品的系欸口,修改工厂创建产品的方法,消费者可以无感知 可以一定程度增加代...

2019-08-05 07:47:16 111

原创 数据库事务

事务:事务其实就是单个数据逻辑单元组成的对象操作集合,而数据库的终极目标就是使数据库从一个一致的状态转换到另一个一致的状态,这就是ACID中的一致性,原子性,隔离性,持久性是为了实现这个目标的手段。一个事务是一连串的操作组成的,就好比我们java中写方法的时候,有一个语句有问题就会抛出异常,相当于这个方法只是执行了一般,如果执行一半的话,一致性就很可能会遭到破坏。所以原子性要求方法要么全部执行...

2019-07-17 10:59:00 396

原创 redis持久化RDB,AOF

redis是一个高级的key-value数据库,跟memcached类似,不过数据可以持久化,而且支持的数据类型也非常丰富。redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上,称为半持久化模式,也可以把每一次数据变化都写入到一个append only file里面,称为全持久化模式RDB的持久化配置?#时间策略save 900 1 :表示900秒类如果有一条写入...

2019-07-16 09:00:51 149

原创 设计模式-单例模式

【一】设计模式六大原则开闭原则对扩展开放,对修改关闭,目的是保证程序的扩展性,易于维护和升级,开闭原则被称为是面向对象设计的基石。优势可用性非常灵活,扩展性强,需要新的功能时,可以增加新得模块来满足新的需求。单一职责原则【二】单例模式特点:构造方法私有化,实例化的变量引用私有化,获取实例的方法共用应用场景:保证一个类仅有一个实例,并提供一个访问它的全局访问点。spring中...

2019-07-14 16:58:33 115

空空如也

空空如也

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

TA关注的人

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