自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于变量的二次创建问题---区分lambda情况

一.业务需求重现上次的开发中,我遇到了这么个问题,因为在业务中会出现重复调用一个变量两次的情况,但需要对其进行不同的数据处理,因为在这种情况下我决定采用初始化对象的方式进行变量的修改,为了保证数据清洗而不影响另外对象的结果集。但此时引发了一个小问题,在开发环境中所需要进行逻辑处理的变量是在lambda表达式中所引用的外部变量,而对于外部变量,lambda中有过明确规定需要对其赋予final的属性,但如果赋予final之后便会产生无法修改指定变量数据的情况发生,这样便形成了自相矛盾的情况(因为我需要既可以进

2021-01-09 15:37:15 142

原创 在HashMap的基础上ConcurrentHashMap

ConcurrentHashMap与HashMap对比之创新其实在本质上ConcurrentHashMap与HashMap都是实现Map接口,而且可以这么说ConcurrentHashMap其实就是HashMap的另一种变换形式,接下来我们也将从两个jdk的版本来分析一下究竟他与HashMap有何不同?版本分析之jdk1.7在jdk1.7中ConcurrnetHashMap采用是分段的数组+链表的形式,因为ConcurrentHashMap属于线程安全的HashMap所以肯定会相对应的采取一些措施来

2020-07-26 10:47:16 157

原创 HashMap的实现原理与面试典型题

1. HashMap概述:HashMap是基于哈希表的Map接口的非同步实现(他与Hashtable类似,但Hashtable是线程安全的,所以是同步的实现),此实现提供可选的映射操作,允许使用null值和null键,但他并非有序。2. HashMap数据结构与实现原理:在jdk1.7和jdk1.8中,HashMap的数据结构是有所差别的,进行一些优化来解决冲突问题,下面我们就分别从两个版本的角度来分析一下他的改动与区别(一)jdk1.7版本在jdk1.7版本的时候采用的是数组+链表的形式,也就是

2020-07-25 11:33:38 273

原创 红黑树的描述与解析

今天我们来了解一下红黑树的结构特性与优势对比,在这之前我们首先应该知道二叉查找树和AVL树:二叉查找树:1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树,如下图:这就是一棵简单的二叉查找树,从上面的图中可以看出他也是一棵简单的排序二叉树,但这种情况会产生一种最坏的情况当重新组合这些数让他们上来就按照一定顺序进行排序再插入,这样就破坏了他的平衡,成了一个所谓的“单一”生物,如图:此时我们便加入了平衡二叉树(

2020-07-22 16:07:45 380

原创 CopyOnWriteArrayList源码解析

Java并发包提供了很多线程安全的集合,有了他们的存在,使得我们在多线程开发下,可以和单线程一样去编写代码,大大简化了多线程开发的难度,但在实际操作过程中,因为我们并不理解其中的一些隐藏陷阱,可能导致我们在开发的时候频频出现问题,今天针对这篇源码解析,我们来聊一聊CopyOnWriteArrayList隐藏的危机。其实看到我们这里我们不难看出,从字面上意思来说就是在写操作的时候进行赋值的列表集合,真的是这样的吗,让我们扒开他其中的一个方法的源码简单的来分析一下他的核心思想: public boolea

2020-07-18 09:29:09 132

原创 Reactor模型与NIO的底层实现流程

一.概述 相信大家在阅读这篇文章之前都对NIO,Netty有过或多或少的了解,今天我们就来聊聊Netty的基石-------Reactor模型,从字面上我们并不能了解Reactor是什么意思,但我们可以通过下面一些图和描述对他进行一些简单的了解,首先我们先了解一下经典的BIO服务设计:这是最为传统的Socket服务设计,有多个客户端连接服务端,服务端会开启很多线程,一个线程为一个客户端服务。在绝大多数场景下,处理一个网络请求有如下几个步骤:1.read:从socket读取数据。2.deco

2020-07-15 14:21:24 301

转载 TCP的三次握手,四次挥手及面试题总结

**一、前言**今天上掘金查看热门文章,发现一篇好文 ★前端 100 问:能搞懂 80% 的请把简历给我 ★ ,此文包含100个前端面试问题,仔细阅读完所有题目后,顿感身中数刀无法呼吸,留下了没有技术的泪水,只好回炉重塑 ~ 文章第16题:谈谈你对TCP三次握手和四次挥手的理解? 这是前端面试频率特别高的一个题目,接下来我们学习一下TCP的三次握手和四次挥手二、为什么会有TCP/IP协议 计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最

2020-07-14 10:38:33 586

原创 JMM(java内存模型)的讲解与缓存不一致问题

一.内存模型的工作流程JMM三大特性:可见性、原子性、有序性JMM(Java内存模型)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。如下图:这个就是JMM内存模型的大致图,从其中可反映出工作内存与主内存之间变量的同步都是通过JMM进行控制的,程序通过4组对数据的原子操作保证了赋值的操作的进行,下面让我们来分析一下JMM通过这4组操作的执行过程:read(读取):把变量值从主内存中读取出来。

2020-07-12 12:04:25 513

原创 Spring中ioc的初始化过程

相信大家都知道Spring这个东西,我们经常来用他一些特性,比如说他的AOP,IOC,那今天就带大家解析下SpringIOC的加载过程。首先我们需要从上节Spring源码的refresh()方法入手去观察:finishBeanFactoryInitialization(beanFactory);beanFactory.preInstantiateSingletons()两个方法是递进的关系,从第一个方法点进去之后便会发现第二个方法,进去之后找到一个getBean(beanName)的方法此时便是

2020-07-11 10:10:39 195

原创 Spring源码分析(二)

本文是继续上一篇讲述的,进一步对Spring源码进行分析与见解分享。下面我们正式进入今天本节的讲述与学习,今天我们要讲述的是3个方法中的第三个方法:refresh();这个方法从单词意义上来解释是刷新的意思,让我们进入到其中进行逐句分析其中作用:public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 进行一些准备工

2020-07-10 12:19:24 152

原创 Spring源码分析(一)

Spring相信每个人在开发的时候都用过,正因为他的灵活性与扩展性而被人们更广泛的使用,只需要一个注解就能搞定一切,下面让我们来一起看看他的源码并分析一下他是如何进行内部底层运作的吧!通过一张图我们来大致了解一下Spring的流程本文采用的是Spring5.0版本进行讲解,并搭配主流加载配置类的方式进行解析: AnnotationConfigApplicationContext annotationConfigApplicationContext= new AnnotationConfigAppli

2020-07-09 11:07:38 239

原创 JVM垃圾回收并发标记阶段的算法------三色标记

概述 在垃圾回收算法中有许多,例如垃圾-清除,复制算法,垃圾-整理,后来在此基础上增加了分代(新生代/老年代)算法,每代都采取不用的回收算法以提高整体效率。 无论进行哪种程度的回收算法,都需要进行标记,用来区分垃圾与存活对象。而在整体区分是否回收的方式上分为两种:引用计数器方法和可达性分析算法。引用计数器:通过为对象添加一个引用计数器,当被引用的时候进行加1操作,当引用失效的时候就进行减1操作,当引用计数器为0的时候便达到了回收条件,可以进行回收。可达性分析算法:这个算法的基本思想就是通过‘GC

2020-07-08 11:14:25 634

原创 JVM内存模型简述与大致分析

JVM内存模型解析----------运行时数据区域 今天为大家讲解一下JVM内存模型(运行时数据区域),主要从运行时数据区域的几个部分进行深入了解,各部分的功能以及联系。一.运行时数据区域的各组成部分程序计数器:这是一块很小的内存区域,可以把它当作当前线程所执行的字节码的行号指示器;每执行一条执行,程序计数器就会使其行号进行替换开始执行下一条指令;从图上可以程序计数器所显示的字节码指令是通过执行引擎进行执行的。栈:它的生命周期与线程相同,如何所示其中每个方法栈中包括局部变量表、操作数栈、动态

2020-07-06 10:25:55 216 1

原创 RabbitMQ安装与过程中遇到的问题总结(亲测实际解决问题)

一.RabbitMQ的常规安装(一):初识RabbitMQ MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。(二):安装RabbitMQ(windows安装为例) 1.通过**[http://...

2019-12-26 20:19:39 1950

原创 mybatis配置与使用

一.概念MyBatis是一款优秀的持久层框架,他支持定制化SQL,存储过程以及高级映射。MyBatis可以使用简单的XML或注解来配置和映射原生类型,接口和java的POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。二.配置与简单调用语法在自己项目中你需要加入建立一个属于自己配置文件的文件夹(config)来专门存放这些配置文件,方便在以后需...

2019-11-28 15:50:11 138

原创 AOP学习笔记

AOP编程定义通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP编程术语与图解...

2019-11-17 20:06:51 164 1

原创 关于IOC与DI的学习心得

@***加粗样式***TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界...

2019-11-14 10:12:31 182

空空如也

空空如也

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

TA关注的人

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