自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 idea maven 无法下载远程快照

最近 idea 无法下载远程快照jar包,确认了maven本地配置无问题,网上各种排查没有解决,最终查看maven文档查看原理解决问题。在任何Maven命令中使用-U参数强制Maven下载最新的快照构建。命令如下:mvn clean package -U文章参考:https://blog.csdn.net/u014209205/article/details/85080374https://www.jianshu.com/p/0c57535d1da8https://www.ite

2020-11-21 20:24:33 688

原创 算法总结

package com.daojia.jz.cashierconfig.service.deposit;import com.alibaba.fastjson.JSON;import com.google.common.collect.Lists;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util..

2020-06-23 18:51:02 301

原创 高并发架构系列:RPC通信机制你了解吗

前言在分布式系统中,因为每个服务的边界都很小,很有可能调用别的服务提供的方法。这就出现了服务A调用服务B中方法的需求,即远程过程调用。要想让服务A调用服务B中的方法,最先想到的就是通过HTTP请求实现。是的,这是很常见的,例如服务B暴露Restful接口,然后让服务A调用它的接口。基于Restful的调用方式因为可读性好(服务B暴露出的是Restful接口,可读性当然好)而且HTTP请求可以通过各种防火墙,因此非常不错。然而,基于Restful的远程过程调用有着明显的缺点,主要是效率低、封装调用

2020-05-24 00:31:32 1465

原创 翻车现场一:由synchronized的使用场景引发 static和this关键字你真的了解吗

前言我们在开发的时候往往会忽略java知识的一些细节使用,但是这些细节点往往是面试的时候比较关注的,下面总结下面试过程中容易翻车的一些细节点,供大家参考。synchronized的使用场景可以归结为3种:① 修饰静态方法,给当前类对象加锁,进入同步方法时需要获得类对象的锁② 修饰实例方法,给当前实例变量加锁,进入同步方法时需要获得当前实例的锁③ 修饰同步方法块,指定加锁对象(可以是实例对象,也可以是类变量),对给定对象加锁,进入同步方法块时需要获得加锁对象的锁1、静态方法Class

2020-05-20 09:25:47 304

原创 全面解析IO流一:Java IO流详解

数据流的基本概念几乎所有的程序都离不开信息的输入和输出,比如从键盘读取数据,从文件中获取或者向文件中存入数据,在显示器上显示数据。这些情况下都会涉及有关输入/输出的处理。在Java中,把这些不同类型的输入、输出源抽象为流(Stream),其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为...

2020-05-07 21:27:32 716 1

原创 Redis全面解析三:redis分布式锁的实现原理你了解吗

前言分布式概念提出之前,项目结构基本都是通过单机部署,针对多线程并发问题,java为我们已经提供了各种锁来解决问题。随着用户量的提升单体服务已经不能满足高并发场景的需求,于是兴起了分布式系统以及微服务的理念。由此引出分布式锁的概念,在多台机器与客户端之间引入一个分布式锁层,在高并发场景当多个线程访问服务器资源时,可以通过不同的机器对共享资源进行操作,jdk锁保证了单台机器内的线程安全(即单机里...

2020-05-04 15:59:38 4836

原创 Redis Cluster为什么有16384个槽?

前言Redis 集群并没有使用一致性hash,而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。但为什么哈希槽的数量是16384(2^14)个呢,这个问题在github上有人提过,作者也给出了解答(点击查看),下面我们来简单分析一下。正文Redis Cluster的工作原理:...

2020-05-03 10:42:05 2036

原创 Redis全面解析零:redis从入门到精通

Redis 数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。①string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。Redis常用SET和GET命令。②Redis hash 是一个键值(key=>value)对集合...

2020-05-03 10:09:29 222

原创 Redis全面解析二:redis高可用高并发集群方案

前言Redis 缓存作为使用最多的缓存工具被各大厂商争相使用。通常我们会使用单体的 Redis 应用作为缓存服务,然而我们日常在对于redis的使用中,经常会遇到一些问题:高可用问题,如何保证redis的持续高可用性。 容量问题,单实例redis内存无法无限扩充,达到32G后就进入了64位世界,性能下降。 并发性能问题,redis号称单实例10万并发,但也是有尽头的。如果只使用一个r...

2020-05-02 18:38:24 1852

原创 Redis全面解析一:redis是单线程结构为何还可以支持高并发

前言redis设计成单线程结构考虑:从redis的性能上进行考虑,单线程避免了上下文频繁切换问题,效率高;从redis的内部结构设计原理进行考虑,redis是基于Reactor模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器理解redis单线程Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来...

2020-05-01 10:14:36 1385

原创 Java设计模式七:深入理解策略模式(Strategy Pattern)

前言在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。用法:它定义了一系列算法,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。策略模式...

2020-04-14 09:02:16 196

原创 Java设计模式六:深入理解适配器模式(Adapter Pattern)

前言适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其...

2020-04-13 23:38:12 198

原创 Java设计模式五:深入理解观察者模式

前言当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。认识观察者模式观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对...

2020-04-12 14:35:22 174

原创 Java并发基础九:并发协作(生产者消费者模型)

对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。3、当消费者发现仓储没...

2020-04-11 23:38:13 182

原创 Java设计模式四:深入理解模板模式(Template Pattern)

前言在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。模板设计模式在书中定义: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。  通俗点的理解就是 :完成一件事情,有固...

2020-04-11 14:27:55 242

原创 Java设计模式三:深入理解工厂模式

前言工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。工厂模式屏蔽产品实现细节,需要什么产品,直接在工厂获取。工厂模式涉及类:创建产品的接口、产品接口实现类、工厂类工厂模式使用场景:1.工厂模式的目的是为了实现解耦,将对象的创建和使用分开,即...

2020-04-11 11:18:49 158

原创 Java设计模式二:深入理解单例模式

前言单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。定义单例模式: 一个类有且只有一个实例,且提供一个全局访问方法来...

2020-04-10 22:45:57 155

原创 Java设计模式一:一文看懂设计模式

前言在学习Spring框架时候,Spring源码内部使用了很多设计模式。Spring架构使用了哪些设计模式呢?带着这些疑问,了解下Java常见设计模式是有必要的。什么是设计模式设计模式(Design Pattern)是一套被反复实践使用、多数人知晓的、经过分类的、代码设计可重用的软件设计方式。为什么要用设计模式设计模式是经过大量实践检验的安全高效可复用的解决方案。不要重复发明轮...

2020-04-10 21:40:50 635

原创 Spring基础框架四:常见高频Spring面试题

10道Spring核心面试题Spring IoC、AOP 原理 Spring Bean 生命周期 Spring Bean 注入是如何解决循环依赖问题的 怎样用注解的方式配置 Spring? Spring 事务为何失效了 SpringMVC 的流程? Springmvc 的优点: Spring 通知类型使用场景分别有哪些? IoC 控制反转设计原理? Spring 如何处理线程...

2020-04-09 23:48:42 325

原创 Spring基础框架三:深入理解SpringMVC

Spring MVC框架简介Spring MVC属于SpringFrameWork的后续产品,Spring MVC框架提供了构建web应用程序的全功能MVC模块,是一种轻量级Web框架。使用了MVC架构模式的思想,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发。Spring MVC的主要组件1、Dispat...

2020-04-08 23:49:50 327

原创 Spring 基础框架二:深入理解Spring AOP

什么是SpringAopAOP:面向切面编程技术,被定义为促使软件系统实现关注点分离的技术,分为:核心关注点和横切关注点,业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。所谓“切面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少...

2020-04-07 17:44:11 256

原创 Spring 基础框架一:深入理解Spring IOC

什么是String框架Spring是一种轻量级开发框架,旨在简化开发以及系统的可维护性。Spring框架的优点:1、非侵入式设计,可以使应用程序代码对框架的依赖最小化。2、方便解耦、简化开发,将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理。3、支持AOP,提高了程序的复用性。4、支持声明式事务处理,只需要通过配置就可以完成对事物的管理。5、方便程序的测试,Spring提供...

2020-04-06 23:51:12 433

原创 网络编程基础二:深入理解HTTP与HTTPS

前言在面试过程中,HTTP 被提问的概率还是比较高的。我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的。URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。URL基本格式:scheme://h...

2020-04-01 23:56:41 621

原创 面试算法:1.无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-jie-suan-fa-3-wu-zhong-fu-zi-fu-de-zui-chang-z/示例1:...

2020-03-31 11:16:26 159

原创 网络编程基础一:TCP/IP 协议详解

前言我们知道两个进程如果需要进行通讯最基本的一个前提【能够唯一的标示一个进程】,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进...

2020-03-29 22:52:14 2483

原创 Java虚拟机三:JVM的类加载机制

1.什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。需要注意的点:类加载器并不需要等到某...

2020-03-29 09:20:45 271

原创 Java虚拟机二:JVM性能调优

堆空间的划分Java中的堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实列对象。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象。堆的内存划分如图:Java堆的内存划分如图所示,分别为年轻代、Old Memory(老年代)、Perm(永久代)。其中在Jdk1.8中,永久代被移除,使用MetaSpace代替。其中新生代被细分为Eden和两个Survivor区域...

2020-03-27 18:29:05 525

原创 Java虚拟机一:深入理解JVM内存模型

什么是JVMJVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是平台无关性。而使用Java虚拟机是实现这一特点的关键。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,Java虚拟机与操作系统进行交互,操作系统与硬件...

2020-03-26 18:43:46 262

原创 Java并发基础八:深入理解Synchronized

前言synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对象加锁。在JDK1.6之前,synchronized的实现直接调用ObjectMonitor的enter和exit,这种锁被称之为重量级锁(用户态和内核态切换)。JDK 1.6之后进...

2020-03-25 11:54:21 235

原创 Java并发基础七:深入理解ThreadLocal

ThreadLocal是什么?ThreadLocal是线程本地变量,可以为多线程的并发问题提供一种解决方式,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal使用场景①多个线程去获取一个共享变量时,要求获取的是这个变量的初始值的副本。②每...

2020-03-24 17:50:23 327 1

原创 Java并发基础六:并发工具类(3)Semaphore

Semaphore是什么?Semaphore中文意思是信号量,也是一个线程并发的辅助类,Semaphore实现了线程同步框架AQS,它的本质是一个"共享锁",使用Semaphore可以控制同时访问资源的线程个数,但是不保证线程执行顺序。Semaphore原理Semaphore维护了有限数量的许可证,只有得到了许可证的线程才能进行共享资源的访问,如果得不到许可证,说明当前共享资源的访问已...

2020-03-23 09:15:49 204

原创 Java并发基础六:并发工具类(2)CyclicBarrier

CyclicBarrier是什么CyclicBarrier是JDK1.5开始提供的并发编程,辅助工具类。用于并发编程的。在源码中使用ReentrantLock 和 Condition 的组合来使用,CyclicBarrier字面意思是“可重复使用的栅栏”。通过它可以实现让一组线程等待至某个状态之后再全部同时执行。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏...

2020-03-22 00:49:05 304

原创 Java并发基础六:并发工具类(1)CountDownLatch

前言CountDownLatch 是基于AQS共享模式特定场景开发的一种同步器,也是在JUC并发包里面的内容。功能:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 countdown英文是倒数的意思,"latch"在英文中也是锁的意思。组合在一起可以理解为倒计时锁,当你调用了这个类型对象中的await方法后,必须要等待这个锁倒数到0,才能继续运行。下面就一...

2020-03-20 23:25:31 201

原创 Java并发基础五:深入理解AQS

前言JDK1.5 后,Java 引入了 juc 包,队列、重入锁、读写锁、信号量、屏障、Future 等等,为线程调度提供了一系列骚操作,而 AQS 为这些骚操作提供了底层支持。无论怎样的多线程调度,无非就是让线程去竞争同一个资源,竞争成功就运行,竞争失败就挂起,并用一个数据结构维护这些失败者。所以,任何多线程的调度,都是围绕两个问题在讨论: 一如何竞争和释放资源,二怎样维护竞争资源失败的线程...

2020-03-19 13:03:32 581

原创 Java并发基础四:CAS详解

前言大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理。本篇就带大家读懂 CAS 是如何保证操作的原子性的。背景:在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁,锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度...

2020-03-15 10:38:26 226

原创 Java并发基础三:Java内存模型(JMM)

前言在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步。通信 是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存 和 消息传递。同步: 是指程序用于控制不同线程之间操作发生相对顺序的机制。前篇文章介绍了物理机为了提高效率,引入三级缓存和相关解决缓存一致性的方案,本篇将介绍Java内存模型是什么,为什么需要Java内存模型,以及Java内存...

2020-03-14 14:10:24 252

原创 Java并发基础二:CPU内存结构与MESI缓存一致性详解

前言在单核电脑中,处理问题要简单的多。对内存和硬件的要求,各种方面的考虑没有在多核的情况下复杂。电脑中,CPU的运行计算速度是非常快的,而其他硬件比如IO,网络、内存读取等等,跟cpu的速度比起来是差几个数量级的。而不管任何操作,几乎是不可能都在cpu中完成而不借助于任何其他硬件操作。所以协调cpu和各个硬件之间的速度差异是非常重要的,要不然cpu就一直在等待,浪费资源。而在多核中,不仅面临如上...

2020-03-12 00:18:14 250

原创 Java并发基础一:线程池详解

前言假如没有线程池,当存在较多的并发任务的时候,每执行一次任务,系统就要创建一个线程,任务完成后进行销毁,一旦并发任务过多,频繁的创建和销毁线程将会大大降低系统的效率。线程池能够对线程进行统一的分配,通过固定数量的线程来负责处理任务,避免了频繁的创建和销毁对象,使线程能够重复的利用,执行多个任务。线程池的优势1、降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。2、...

2020-03-10 23:56:07 350

原创 Java数据结构篇七:HashSet详解

HashSet介绍HashSet继承自AbstractSet,HashSet基于HashMap实现的,HashSet 底层使用HashMap 来保存所有元素。将HashSet的数据作为HashMap的Key值保存,利用HashMap的key不可重复从而实现HashSet不含重复元素。所以 ①HashSet中元素不可重复 ②元素存储无序,而且HashSet允许使用 null 元素(仅一个)③线程不...

2020-03-06 15:49:39 874

原创 Java数据结构篇六:List集合详解

前言Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。Collection主要有三个子接口,分别为...

2020-03-05 23:19:50 495

空空如也

空空如也

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

TA关注的人

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