gougege0514
码龄5年
关注
提问 私信
  • 博客:60,354
    60,354
    总访问量
  • 58
    原创
  • 885,506
    排名
  • 70
    粉丝
  • 0
    铁粉

个人简介:不断努力,共同进步!

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:陕西省
  • 加入CSDN时间: 2019-12-23
博客简介:

Passer-Go

查看详细资料
个人成就
  • 获得90次点赞
  • 内容获得20次评论
  • 获得402次收藏
  • 代码片获得170次分享
创作历程
  • 58篇
    2021年
成就勋章
TA的专栏
  • 笔记
    4篇
创作活动更多

超级创作者激励计划

万元现金补贴,高额收益分成,专属VIP内容创作者流量扶持,等你加入!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

为什么HashMap线程不安全?以及实现HashMap线程安全的解决方案

一、为什么HashMap线程不安全?1、JDK1.7 扩容引发的死循环和数据丢失(1).当前jdk1.7版本的HashMap线程不安全主要是发生在扩容函数中,其中调用了HshMap的transfer()方法//jdk 1.7的transfer方法,HashMap的扩容操作void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry<K,V> e
原创
发布博客 2021.09.03 ·
14252 阅读 ·
49 点赞 ·
5 评论 ·
127 收藏

List、Set和Map接口实现类的底层源码分析

一、List接口存储有序的、可重复的数据。“动态”数组, 替换原有的数组1.ArrayListArraylist:作为ist接口的主要实现类;线程不安全,效率高,底层使用Object[ ]顺序存储private transient Object[ ] elementData;1.1.ArrayList在jdk7源码分析ArrayList list = new ArrayList();底层创建长度是10的Object[]数组elementData(饿汉式)public ArrayLis
原创
发布博客 2021.09.01 ·
758 阅读 ·
1 点赞 ·
2 评论 ·
1 收藏

设计模式-工厂模式

工厂模式-核心本质:◆实例化对象不使用new,用工厂方法代替◆将选择实现类,创建对象统一管理和控制。 从而将调用者跟我们的实现类解耦。◆抽象工厂模式围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。1.简单工厂模式对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象。用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)其UML类图如下:汽车生产案例Car类:汽车标准规范类(AbstractProduct)publ
原创
发布博客 2021.08.27 ·
428 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

多线程进阶-JUC并发编程(下篇)

十五、异步回调1.什么是异步回调?同步回调和异步回调, 主要体现在其是否需要等待.同步调用,:如果C处理一个问题需要花很长时间, 我们需要等待这个问题处理完,再继续执行其他任务。异步调用:如果C处理这个需要等待的问题时不需要等待得到结果, 而是扔给S去处理,C然后接着,去做其他事情。2.CompletableFuture-异步回调CompletableFuture在Java里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程
原创
发布博客 2021.08.26 ·
376 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

多线程进阶-JUC并发编程(中)

九、读写锁要求:实现可以多次读取,但只能一次修改数据1.自定义缓存,没有加锁public class ReadWriteLockDemo { public static void main(String[] args){ MyCache myCache = new MyCache(); //写入 for (int i = 1; i <= 5; i++) { //lambda内部获取不到外部的i需要借助中间变量
原创
发布博客 2021.08.25 ·
243 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

多线程进阶-JUC并发编程(上篇)

一、JUC1.JUC相关知识点汇总2.什么是JUCJUC:java.util.concurrent包名的简写,是关于并发编程的API。与JUC相关的有三个包:java.util.concurrent、java.util.concurrent.atomic、java.util.concurrent.locks。二、进程与线程1、进程与线程进程:程序的一次执行过程,是系统运行的基本单位,因此进程是动态的(很多次执行)。系统运行一个程序是一个进程创建、运行到消亡的过程。在JAVA中,当我们启动M
原创
发布博客 2021.08.24 ·
402 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JavaWeb-Listener监听器、Filter过滤器和JSON

一、Listener监听器1.什么是Listener监听器?(1)、Listener 监听器它是JavaWeb的三大组件之一。JavaWeb 的三大组件分别是: Servlet 程序、Filter 过滤器、Listener 监听器。(2)、Listener 它是JavaEE的规范,就是接口(3)、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。2.ServletContextListener监听器(1)ServletContextListener它可以
原创
发布博客 2021.08.09 ·
266 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

JavaWeb-servlet、cookie和session

一、Servlet技术1.什么是Servlet(1)、Servlet 是JavaEE规范之一。 规范就是接口(2)、Servlet 就JavaWeb三大组件之一。 三大组件分别是: Servlet 程序、Filter 过滤器、Listener 监听器。(3)、Servlet 是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。2.手动实现Servlet程序(1)、编写一个类去实现Servlet接口(2)、实现service方法,处理请求,并响应数据pa
原创
发布博客 2021.08.08 ·
275 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring5-IOC、AOP、事务管理

笔记整理来源于尚硅谷,仅供本人复习使用,无其它目的一、Spring框架概述1、Spring 是轻量级的开源的JavaEE框架。2、Spring可以解决企业应用开发的复杂性。3、Spring 有两个核心部分: IOC 和Aop.(1) IOC: 控制反转,把创建对象过程交给Spring进行管理,(2) Aop:面向切面,不修改源代码进行功能增强。4、Spring 特点(1)方便解耦,简化开发(2) Aop编程支持。(3)方便程序测试。(4)方便和其他框架进行整合。(5)方便进行事务操作
原创
发布博客 2021.08.07 ·
474 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

Java中的常量池(字符串常量池、class常量池和运行时常量池)

笔记整理来源于zhuminChosen,仅供本人复习使用一、字符串常量池(String Constant Pool)1.字符串常量池在Java内存区域的哪个位置?➢JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中;➢JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了。2.字符串常量池是什么?➢在HotSpot VM里实现的string pool功能的是一个StringTable类,它是一个Hash表,默认值大小长度是1
原创
发布博客 2021.07.09 ·
247 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JVM-GC、垃圾回收算法和finalization机制

笔记均来自于尚硅谷官方视频,为了本人复习使用,无其他目的尚硅谷官方视频一、什么是垃圾?垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。通俗讲就是对象使用完,不再继续使用!二、为什么要进行垃圾回收(GC)1.释放没用的对象,如果不进行垃圾回收,内存迟早都会被消耗完,而且这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。2.垃圾回收也可以清除内存里的记录碎片,碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内
原创
发布博客 2021.07.09 ·
361 阅读 ·
2 点赞 ·
1 评论 ·
1 收藏

JVM-直接内存和执行引擎

一、直接内存1.不是虛拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。2.直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存,3.访问直接内存的速度会优于Java堆。即读写性能高,适用于读写频繁以及大文件的场合。Java的NIO库(非阻塞)允许Java程序使用直接内存4.由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和
原创
发布博客 2021.07.08 ·
141 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM-对象的实例化内存布局与访问定位

笔记均来自于尚硅谷官方视频,为了本人复习使用,无其他目的尚硅谷官方视频一、对象的实例化1.创建对象的方式1). 使用new关键字创建对象这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们可以调用任意的构造函数(无参的和有参的)去创建对象。比如:Student stu1 = new Student(123);2). 使用Class类的newInstance方法(反射机制)我们也可以通过Java的反射机制使用Class类的newInstance方法来创建对象,事实上,这个newIns
原创
发布博客 2021.07.07 ·
110 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM内存模型-方法区和垃圾回收

笔记均来自于尚硅谷官方视频,为了复习,无其他目的视频笔记来源一、 堆、栈、方法区的交互关系1.运行时数据区结构图2.堆、栈、方法区的交互关系注意:局部变量表中的对象引用指向堆空间中的实体,堆空间中有对象类型数据指针指向方法区中的对象类型数据,即对象是哪个类new的。只要是对象实例必然会在Java堆中分配。二、方法区的理解1.方法区可以看作是一块独立于Java堆的内存空间。2.方法区(Method Area)与Java堆一样,是各个线程共享的内存区域3.方法区在JVM启动时就会被创建
原创
发布博客 2021.06.16 ·
247 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

JVM-堆空间内存分配和各区垃圾回收

一、堆的简介(1)一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。(2)Java 堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大的一块内存空间。(3)堆内存的大小是可以调节的。堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。(4)所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(ThreadLocal Allocation Buffer, TLAB) 。几乎所有的对象实例以及数组都应当在运行时分配在堆上(5)数组和对象可能永
原创
发布博客 2021.06.10 ·
652 阅读 ·
0 点赞 ·
2 评论 ·
2 收藏

JVM线程私有-程序计数器、虚拟机栈和本地方法栈

一、PC寄存器(程序计数器)1.PC寄存器简介:PC寄存器,也叫程序计数器,是块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者如果是在执行native方法,则是未指定值(undefned)。2.PC寄存器的作用:PC寄存器用来存储指向下一条指令的地址(偏移地址
原创
发布博客 2021.06.08 ·
1031 阅读 ·
0 点赞 ·
0 评论 ·
7 收藏

JVM类加载器子系统-双亲委派机制

一、加载器分类和简介JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader);后面提到的扩展加载器和系统加载器因为都间接继承于ClassLoader,所以都是自定义加载器从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。无论类加载器的类型如何划分,在程序中
原创
发布博客 2021.06.04 ·
172 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

堆排序-heapSort

一、堆排序简介堆排序基本介绍1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为0(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆堆排序的基本思想:1)将待排序序列构造成一个大顶堆2)此时, 整个序列的最大值就是堆顶的根节点。3)将其与末尾元素进行交换
原创
发布博客 2021.06.03 ·
150 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

线索化二叉树-实现中序遍历和查找前驱后继节点

一、线索化二叉树简介1.线索二叉树:对于n个节点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该节点的前驱节点和后继节点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树2.线索二叉树分类:这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。3.前驱结点:一个结点的前一个结点4. 后继结点:一个结点的后一个结点二、中序线索化二叉树逻辑结构示意图说明:当线
原创
发布博客 2021.06.02 ·
1406 阅读 ·
0 点赞 ·
0 评论 ·
8 收藏

二叉树顺序存储-实现前序中序后序遍历

一、顺序存储二叉树简介二叉树的存储结构有两种,分别为顺序存储和链式存储。二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。只有完全二叉树才可以使用顺序表存储。因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树。从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,逻辑示意图如下二、代码实现要求:给定已知数组{1,2,3,4,5,6,7},要求以二叉树前序,中序,后续遍历的方式进行遍历,达到如下结果。前序遍历:1,2,4,5,3
原创
发布博客 2021.06.01 ·
1881 阅读 ·
1 点赞 ·
0 评论 ·
17 收藏
加载更多