波波鱼的博客

让技术付诸于梦想
私信 关注
喵的波波鱼
码龄5年

爱生活,也爱技术!

  • 62,064
    被访问量
  • 243
    原创文章
  • 30,413
    作者排名
  • 129
    粉丝数量
  • 于 2016-04-27 加入CSDN
获得成就
  • 获得82次点赞
  • 内容获得25次评论
  • 获得311次收藏
荣誉勋章
兴趣领域
  • #后端
    #分布式#Python#Redis#Spring#Spring Boot#Java#MySQL#架构#C/C++#Linux
TA的专栏
  • Java
    3篇
  • Java基础
    10篇
  • Java容器及源码剖析
    21篇
  • JDK8-11新特性
    1篇
  • Java多线程
    32篇
  • 深入理解JVM
    13篇
  • JavaWeb
    3篇
  • Spring家族及相关框架使用及源码学习
  • Spring使用及源码剖析
    3篇
  • SpringMVC使用及源码剖析
    2篇
  • Mybatis使用及源码剖析
    3篇
  • SpringBoot使用及源码剖析
    2篇
  • SpringCloud
  • Spring家族项目练习
  • Java设计模式
    24篇
  • 数据结构与算法
    21篇
  • 数组
  • 字符串
  • 链表
  • 栈
  • 队列
  • 堆
  • 树
  • 查找
  • 排序
  • 图论
  • 滑动窗口
  • 双指针
  • 深度和广度优先搜索
  • 位运算
  • 回溯算法
  • 分治算法
  • 动态规划
  • 贪心算法
  • 后端必备计算机网络知识
    6篇
  • Linux
    13篇
  • 自己动手用Java写一个编译器
    1篇
  • 自己实现操作系统
  • 操作系统基础知识
  • 自己实现一个小型操作系统
  • 自己动手跟着写一个64位操作系统
    1篇
  • Python学习之路
    7篇
  • 算法练习
    6篇
  • C/C++重点总结
    8篇
  • C++对象模型
    24篇
  • C++的STL使用和源码学习
    11篇
  • C++设计模式实战
    2篇
  • Python
    7篇
  • Linux高级编程
    1篇
  • MySQL
    17篇
  • Redis
    3篇
  • Nginx
  • Git和GitHub
    5篇
  • Shell编程
    4篇
  • 消息中间件MQ
    4篇
  • Zookeeper
  • Dubbo
  • Tomcat使用及优化
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Java多线程(12)——ThreadLocalRandom源码剖析

目录1.为什么JUC下要新增ThreadLocalRandom?2.ThreadLocalRandom2.1 ThreadLocalRandom使用示例2.2 ThreadLocalRandom的源码分析1.为什么JUC下要新增ThreadLocalRandom?在jdk1.7之前,java.util.Random是使用比较广泛的随机数生成工具类,我们先来看个Random的...
原创
194阅读
0评论
0点赞
发布博客于 2 年前

Java基础——Object类和Objects工具类

目录1.Object类1.1 常用方法1.2 Object类中方法常见的问题(1)为什么重写equals时必须重写hashCode方法?(2)wait和notify为什么定义在Object类当中?wait和notify或notifyAll为什么必须在synchronized中去使用?(3)wait和sleep的区别?(4)==和equals的区别?(5)finali...
原创
362阅读
0评论
1点赞
发布博客于 2 年前

Java多线程(13)——Thread类的源码剖析

待更新补充1.Thread与RunnableThread类中继承了接口Runnable的同时组合了Runnbale 所以我们可以将一个Thread的子类的任务交给另一个Thread去执行package Thread;public class ThreadDemo { public static void main(String[] args) { ...
原创
157阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(11)——ThreadLocal源码剖析

目录1.概述2.图解+源码分析ThreadLocal原理2.1 Thread类的两个ThreadLocalMap类型的参数2.2 ThreadLocalMap详解(1)成员变量与内部类(2)构造方法(3)获取前一个/后一个索引的方法和设置扩容阈值的方法(4)getEntry方法(5)ThreadLocal的内存泄露(6)set(7)remove2.3...
原创
103阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(14)——JUC——locks系列(1)——LockSupport使用以及源码分析

目录1.概述2.LockSupport的park-unpark与Object的wait-notitfy的对比3.LockSupport的源码分析3.1 成员变量3.2 park方法3.3 unpark方法1.概述当我要分析AQS,Condition的时候,发现它们当中都使用到了LockSupport,所以先在这里对LockSupport进行学习 LockSuppo...
原创
87阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(9)——Unsafe(1)——Unsafe类的源码分析

目录1.概述2.源码分析2.1 Class相关2.2 Object相关2.3 数组相关2.4 并发相关(1)CAS相关(2)线程调度相关(3)volatile相关读写(4)内存屏障相关2.5 直接内存访问(非堆内存)2.6 系统相关3.带英文原注释的源码文章前半部分暂时大多数从此链接粘贴过来,仅学习使用,但在后续学习过程中再对每一部分再做详细...
原创
78阅读
1评论
0点赞
发布博客于 2 年前

Mybatis基础(3)——Mybatis的CRUD、Mybatis的参数深入

目录1.mybatis的CRUD案例1.1 保存用户(插入)1.2 更新用户1.3 删除用户1.4根据id查询1.5用户模糊查询1.6查询使用聚合函数2.parameterType 配置参数2.1 传递基本类型2.2 传递实体类型(POJO)2.3 传递POJO包装对象3.Mybatis 的输出结果封装3.1 resultType...
原创
73阅读
0评论
0点赞
发布博客于 2 年前

Mybatis基础(2)——自定义Mybatis

目录1.自定义mybatis的预先分析2.代码实现2.1 使用类加载器读取配置文件返回流2.2 封装从主配置文件中读取的信息的配置类2.3 封装从Mapper配置文件中读取出来的信息的类2.4 解析配置文件或注解的类2.4 定义建造SqlSessionFactory的建造者类2.5 定义SqlSession工厂接口和实现类2.6定义SqlSession接口和实...
原创
129阅读
0评论
1点赞
发布博客于 2 年前

Java多线程(28)——JUC——线程池excutors系列(3)——ThreadPoolExcutor(2)——从源码去剖析线程池的原理

1.线程池的运行状态2.execute和submit方法有什么区别?1.execute是Executor制定的规范,submit是ExecutorService制定的规范 2.execute只有接收Runnable参数的一种实现,submit重载的方法,既有接收Runnable参数的实现,也有接收Callable参数的实现 3.execute()...
原创
166阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(27)——JUC——线程池excutors系列(2)——ThreadPoolExcutor(1)——创建线程池的底层原理

目录1.概述2.Excutors创建线程池的6种方式2.1 Excutors.newFixedThreadPool(int)(1)使用案例(2)源码及特点2.2Excutors.newSingleThreadExecutor(int)(1)使用案例(2)源码及特点2.3Excutors.newCachedThreadPool(int)(1)使用案例(...
原创
371阅读
0评论
1点赞
发布博客于 2 年前

Java集合(26)——并发集合(14)——阻塞队列(7)——LinkedBlockingDeque源码分析——国庆完成

1
原创
50阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(25)——JUC——tools系列(5)——Phaser——国庆完成

1.
原创
47阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(24)——JUC——tools系列(4)——Exchanger

1.
原创
45阅读
0评论
0点赞
发布博客于 2 年前

Java集合(19)——并发集合(7)——阻塞队列(0)——阻塞队列的架构和方法剖析

目录1.什么是阻塞队列2.为什么要使用阻塞队列,有哪些好处?3.阻塞队列的架构和种类4.BlockingQueue的核心方法(1)抛出异常(2)特殊值(3)阻塞(4)超时1.什么是阻塞队列阻塞队列,顾名思义,首先它是一个队列 ,而一个阻塞队列在数据结构中所起的作用大致如图:线程1往阻塞队列中添加元素,而线程2从阻塞队列中移除元素 当阻塞队列为空时,...
原创
88阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(22)——JUC——tools系列(2)——CyclicBarrier——待完成

1.概述CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier),它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法2.使用案例案例1:集齐7颗龙珠,就能召唤神龙import ja...
原创
69阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(23)——JUC——tools系列(3)——Semaphore

1.概述信号量主要用于两个目的:一个用于多个共享资源的互斥使用 当有多个共享资源(如停车位只有3个),多个线程(6辆车)都要进行抢夺,同一时间,只有3个线程能抢到锁,其他线程阻塞等待,当有线程执行完释放锁,阻塞等待的线程再次抢夺锁 另一个用于并发线程数的控制2.使用案例使用案例:import java.util.concurrent.Semaphore;...
原创
75阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(21)——JUC——tools系列(1)——CountDownLatch——待完成

1.概述CountDownLatch有两种典型用法: 1.让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒 将 CountDownLatch 的计数器初始化为n :new CountDownLatch(n),每当一个任务线程执行完毕,就将计数器减1 CountDownLatch主要有两个方法, 当一个或多个线程调用await方法时,调用线程会被阻塞 其他线程调...
原创
83阅读
0评论
0点赞
发布博客于 2 年前

Java8的新特性(1)——函数式接口

目录1.函数式接口1.1 概念1.2 格式1.3@FunctionalInterface注解1.4 自定义函数式接口的使用2.函数式编程2.1 Lambda的延迟执行(1)性能浪费的日志案例(2)使用Lambda表达式来改进上述案例2.2使用Lambda作为参数和返回值(1)使用Lambda作为参数(2)使用Lambda作为返回值3.常用函...
原创
70阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(26)——JUC——线程池excutors系列(1)——线程池概述、自己实现一个线程池、jdk中实现的线程池的架构

目录1.线程池概述1.1 线程池产生的背景1.2什么是线程池?1.3使用线程池的好处1.4线程池的主要特点2.自己实现一个线程池2.1 实现线程池的通用规则2.2 实现代码3.线程池的架构1.线程池概述1.1 线程池产生的背景当我们去创建每个线程的时候,都需要为它去分配内存,如虚拟机栈,程序计数器,本地方法栈等,所以创建的过程时间消耗是比较...
原创
172阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(16)——JUC——locks系列(3)——AQS

目录0.locks包简介1.AQS简介1.1 AQS是什么1.2AQS框架实现的一些点1.3 AQS的层次结构2.AQS原理及源码详解2.1状态(1)state实现独占锁的图解(2)state实现可重入锁的图解2.2节点Node2.3同步队列2.4 加锁函数acquire(1)tryAcquire(int)(2)addWaiter(N...
原创
103阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——LongAdder(jdk1.8新增)源码分析

目录1.类的定义以及重要字段解析1.1 成员变量cells1.2 成员变量cellsBusy1.3 成员变量base2.方法详解2.1 add方法详解2.2longAccumulate方法详解3.hash的生成详解4.总结1.类的定义以及重要字段解析上面的LongAdder的定义结构看该类实现了Striped64抽象类。Striped64类...
原创
57阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(20)——悲观锁和乐观锁、公平锁和非公平锁、可重入锁、自旋锁、读锁(共享锁)和写锁(独占锁)

目录1.悲观锁和乐观锁1.1 什么是悲观锁和乐观锁?(1)悲观锁(2)乐观锁1.2 两种锁的使用场景1.3 乐观锁的两种实现方式(1)版本号机制(2)CAS1.4 乐观锁的优缺点(1)优点(2)缺点2.公平锁和非公平锁2.1 是什么?2.2 两者区别3.可重入锁(递归锁)3.1 是什么?3.2 代码演示理解3.3 自己手写一个...
原创
504阅读
0评论
4点赞
发布博客于 2 年前

Java多线程(5)——synchronized——synchronized的实现原理(1)

目录1.实现synchronized的基础1.1 HotSpot虚拟机对象在内存中的布局(1)对象头(2)实例数据(3)对齐填充1.2 Monitor2.synchronized在字节码层面的语义实现3.锁的内存语义3.1 synchronized与可见性3.2synchronized与原子性3.3synchronized与有序性1.实现sync...
原创
103阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(4)——synchronized——线程安全、synchronized的基本使用

目录1.线程安全2.synchronized的基本使用2.1 同步代码块2.2 同步方法1.线程安全什么叫线程安全?如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 用模拟卖票案例引入线程安全问题:代码:public class TicketR...
原创
64阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(6)——synchronized——synchronized的实现原理(2)

1.锁的四种状态无锁、 偏向锁、 轻量级锁、 重量级锁 锁降级2.锁优化技术1.自旋锁与自适应自旋锁 2.锁消除 3.锁粗化
原创
69阅读
0评论
0点赞
发布博客于 2 年前

消息中间件(4)——MQ之ActiveMQ(4)——Broker、Spring、SpringBoot整合ActiveMQ

目录1.ActiveMQ的Broker2.Spring整合ActiveMQ3.SpringBoot整合ActiveMQ3.1 队列(1)队列生产者(2)队列消费者3.2 主题(1)主题生产者(2)主题消费者1.ActiveMQ的Broker相当于一个ActiveMQ服务器实例 Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Jav...
原创
199阅读
0评论
0点赞
发布博客于 2 年前

消息中间件(3)——MQ之ActiveMQ(3)——JMS

目录1.什么是JMS2.四种MQ的落地产品的对比3.JMS的四大组成元素及特点4.消息可靠性4.1 持久性4.2 事务4.3 签收4.4 多结点集群5.点对点和发布订阅的总结5.1 点对点总结5.2 发布订阅总结1.什么是JMS在解释JMS之前,我们先来看什么是JavaaSE和JavaEEJavaSE是Java这门编程语言的基础语法部分J...
原创
130阅读
0评论
0点赞
发布博客于 2 年前

消息中间件(2)——MQ之ActiveMQ(2)——Java编码实现ActiveMQ通讯

目录1.基本介绍2.队列代码示例2.1 生产者实现2.2 消费者的两种方式(1)同步阻塞方式(2)异步非阻塞方式2.3 消费者和生产者启动顺序对结果的消费的影响2.4 总结3.主题代码示例3.1 生产者3.2 消费者3.3 发布订阅消息传递的特点4.Topic和Queue的比较1.基本介绍JMS编码总体架构:通过Connectio...
原创
97阅读
0评论
0点赞
发布博客于 2 年前

Java基础——++运算中的坑

1.++运算符底层原理的分析(1)对于局部变量示例代码1:package Demo01;public class Test { public static void main(String[] args) { int a = 0; a = a++; System.out.println(a); //0 }}...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

编译原理基础(1)——文法

目录1.字母表和符号串1.1 字母表(1)什么是字母表(2)字母表运算1.2 符号串(1)什么是符号串(2)符号串的运算2.文法2.1 文法的定义2.2 符号约定2.3 示例和注意事项3.推导和规约4.语言4.1 句型和句子4.2 语言的定义4.3 语言上的运算5.文法分类5.1 0型文法5.2 1型文法5.3 2型文...
原创
581阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(12)——类加载(2)——类的主动使用和被动使用

目录1.Java对类的主动使用和被动使用1.1 主动使用(七种)(1)上述主动使用规则的典型举例(2)主动使用与final(3)初始化时类与接口的区别1.2 被动使用2.Java虚拟机与程序的生命周期3.数组创建本质分析4.类加载的准备阶段和初始化阶段的重要意义1.Java对类的主动使用和被动使用所有Java虚拟机实现必须在每个类或接口被Java程序“首...
原创
198阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(11)——类加载(1)——类加载的5个阶段

目录0.概述1.类型的加载1.1 加载阶段完成三件事1.2 加载.class文件的方式1.3 数组类和非数组类的加载阶段的不同1.4 类的加载的最终结果2.类型的连接2.1 验证(1)文件格式验证(2)元数据的验证(3)字节码验证(4)符号引用验证2.2 准备2.3 解析(1)类和接口的解析(2)字段解析(3)类方法解析(4)...
原创
421阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(17)——运行时栈帧结构

目录1.概览2.栈帧结构详解2.1 局部变量表(1)变量槽Slot(2)虚拟机使用局部变量表的方式(3)实例方法的参数和局部变量的Slot分配顺序(4)局部变量表Slot复用(5)局部变量必须被初始化2.2 操作数栈2.3 方法返回值2.4 动态连接1.概览栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构 每一个方法从调用开始到执行完成的过...
原创
110阅读
0评论
1点赞
发布博客于 2 年前

Java集合(20)——并发集合(8)——阻塞队列(1)——ArrayBlockingQueue源码分析

目录1.概述2.使用案例3.源码分析3.1 重要属性3.2 构造方法3.3 私有方法入队与出队(1)入队(2)出队3.4 put和take方法(1)put(2)take3.5 offer和poll(1)offer(2)poll3.6 peek3.7 remainingCapacity3.8 remove4.总结1.概述...
原创
71阅读
0评论
0点赞
发布博客于 2 年前

Java集合(25)——并发集合(13)——阻塞队列(6)——DelayQueue源码分析

1
原创
38阅读
0评论
0点赞
发布博客于 2 年前

Java集合(21)——并发集合(9)——阻塞队列(2)——LinkedBlockingQueue源码分析——待完成

1.概述LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按照FIFO(先进先出)排序元素,吞吐量通常要高于ArrayBlockingQueue2.使用案例3.源码分析...
原创
60阅读
0评论
0点赞
发布博客于 2 年前

Java集合(22)——并发集合(10)——阻塞队列(3)——SynchronousQueue源码分析——待完成

1.SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于...
原创
55阅读
1评论
0点赞
发布博客于 2 年前

Java集合(24)——并发集合(12)——阻塞队列(5)——PriorityBlockingQueue源码分析——待完成

1.
原创
39阅读
0评论
0点赞
发布博客于 2 年前

Java集合(23)——并发集合(11)——阻塞队列(4)——LinkedTransferQueue源码分析——待完成

1.概述
原创
44阅读
0评论
0点赞
发布博客于 2 年前

Java集合(18)——并发集合(6)——ConcurrentLinkedQueue源码分析

1.概述2.使用3.源码剖析
原创
48阅读
0评论
0点赞
发布博客于 2 年前

Java集合(17)——并发集合(5)——ConcurrentSkipListMap和ConcurrentSkipListSet源码剖析

1.
原创
44阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法——动态规划(2)——动态规划题目(1)——一维动态规划(1)

声明:以下练习题目均来自于https://leetcode-cn.com/目录0.一维动态规划1.爬楼梯1.1 问题描述1.2 分析1.3 列表1.4 公式1.5 代码实现2.打家劫舍2.1 问题描述2.2 分析2.3 列表2.4 公式2.5 代码实现2.6 优化3.打家劫舍||3.1 问题描述3.2 分析3.3 列表...
原创
104阅读
0评论
1点赞
发布博客于 2 年前

数据结构与算法——动态规划(1)——动态规划详解

目录1.基本介绍1.1 基本思想1.2 与分治法做比较1.3 动态规划求解问题2.经典案例2.10-1背包问题2.1.12.1.2 分析2.1.3 列表2.1.4 公式2.1.5边界值考虑2.1.6 代码实现3.我自己总结的解决动态规划题目的步骤1.基本介绍1.1 基本思想动态规划(Dynamic Programming),又叫表...
原创
90阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法——排序算法(4)——归并排序

目录1.基本思想2.图解原理3.代码实现3.1 递归实现(自定向下的实现)3.2 迭代实现4.性能分析1.基本思想归并排序是利用分治策略实现的 分阶段:将问题分成一些小的问题递归求解 治阶段:将分阶段得到的子问题的解合并在一起 使用分治策略的三个步骤分析归并排序: 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列(只是分解,并未做任何处理...
原创
110阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法——排序算法(5)——快速排序

目录1.基本思想1.1 基本思想1.2 使用分治策略的三个步骤分析快速排序1.3归并排序与快速排序比较2.图解原理3.代码实现3.1 实现方式1:选取中间值作为基准值3.2 实现方式2:选取最右边的值作为基准值4.性能分析1.基本思想1.1 基本思想快速排序是基于分治策略的一种排序 基本思想 1.基准:先从数列中取出一个数作为基准数。 2....
原创
57阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法——排序算法(3)——希尔排序

目录1.基本思想1.1 插入排序的问题分析1.2 希尔排序基本思想2.图解原理3.代码实现4.性能分析5.希尔排序的稳定性分析1.基本思想1.1 插入排序的问题分析比如数组arr={2,3,4,5,6,1},这时需要插入的数为1(最小),这样的过程是:{2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,...
原创
46阅读
0评论
0点赞
发布博客于 2 年前

数据结构和算法——排序算法(2)——基于比较的O(n^2)的排序算法(2)——选择排序、插入排序

目录1.选择排序1.1 基本思想1.2 图解原理:1.3 Java代码实现1.4 性能分析2.插入排序2.1 基本思想2.2 图解原理2.3 代码实现2.4 优化——折半插入排序2.5性能测试(1)直接插入排序和选择排序性能测试代码:(输入数据为随机数据)(2)直接插入排序和折半插入排序性能测试代码:(输入数据为随机数据)3.三种基于比较的...
原创
64阅读
0评论
0点赞
发布博客于 2 年前

数据结构和算法——排序算法(1)——Java比较器、基于比较的O(n^2)的排序算法(1)——冒泡排序

目录1.Java比较器(1)Comparable(2)Comparator(3)Comparable和Comparator使用对比2.后面所有排序算法类继承的父类3.冒泡排序3.1 基本思想3.2 图解原理:3.3 Java代码实现3.4冒泡排序的优化(1)优化切入点发现(2)优化实现3.5性能分析1.Java比较器Java中的对象只...
原创
132阅读
0评论
1点赞
发布博客于 2 年前

Java集合(16)——并发集合(4)——CopyOnWriteArraySet源码剖析

1.CopyOnWriteArraySet
原创
44阅读
0评论
0点赞
发布博客于 2 年前

Java集合(15)——并发集合(3)——ConcurrentHashMap源码剖析

1.ConcurrentHashMap
原创
44阅读
0评论
0点赞
发布博客于 2 年前

SpringBoot基础使用(2)——SpringBoot与配置

1.SpringBoot配置文件类型和作用通过上一篇可以知道 SpringBoot是基于约定的,所以很多配置都有默认值, 配置文件的作用: 但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。 SpringBoot默认会从Resource...
原创
66阅读
0评论
0点赞
发布博客于 2 年前

Spring基础(2)——Spring中基于注解的IOC

目录1. Spring中的常用注解1.1用于创建对象的注解1.2 用于注入数据的注解1.3用于改变作用范围的注解1.4和生命周期相关的注解1.5关于 Spring 注解和 XML 的选择问题2.Spring的IOC案例3.Spring的新注解4.Spring整合junit5.SpringIOC总结1. Spring中的常用注解注解配置和xml...
原创
1224阅读
1评论
3点赞
发布博客于 2 年前

Java集合(7)——源码剖析(4)——HashMap源码分析

目录1.概述2.JDK1.7源码分析2.1 底层存储的对象2.2 成员变量2.3 构造函数2.4 添加键值对put2.5 从key到数组索引值的计算2.6 获取键值对get2.7扩容resize2.8 jdk1.7中HashMap多线程下扩容死锁演示与分析3.jdk1.8源码分析3.1 底层存储的对象3.2 成员变量3.3构造函数3....
原创
124阅读
0评论
0点赞
发布博客于 2 年前

Java集合(6)——源码剖析(3)——LinkedList源码剖析

目录1.概述2.源码剖析2.1 节点类(LinkedList内部类)‘2.2 成员变量2.3 构造函数2.4 添加元素(1)从链表尾部添加元素(2)从链表头部添加元素(3)在指定节点的前后添加元素(4)将集合插入链表2.5 删除元素(1)从头部删除节点(2)从尾部删除元素(3)删除指定节点2.6节点查询2.7实现Queue接口和D...
原创
61阅读
0评论
0点赞
发布博客于 2 年前

Java集合(14)——并发集合(2)——CopyOnWriteArrayList源码剖析

1.概述CopyOnWrite容器即写时复制的容器,往一个容器中添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements,然后新的容器Object[] newElements里添加元素,添加完元素之后,再将原容器的引用指向新的容器setArray(newElements); 这样做的好处是可...
原创
67阅读
0评论
0点赞
发布博客于 2 年前

Java集合(13)——并发集合(1)——ArrayList、HashSet、HashMap线程不安全分析

目录1.ArrayList线程不安全分析1.1 故障现象1.2 导致原因分析1.3 解决方案(1)使用Vector(2)使用Collections.synchronizedList(List)(3)使用CopyOnWriteArrayList1.4 优化建议2.HashSet线程不安全分析2.1 故障分析2.2 解决方案(1)使用Collection...
原创
109阅读
0评论
0点赞
发布博客于 2 年前

Java集合(5)——源码剖析(2)——Vector源码剖析、Vector与ArrayList的对比——待完成

1.概述Vector是一个支持集合元素读写、且大小可变、且线程安全、最后还支持“随机访问”特性的List性质的集合。 它与ArrayList一样底层都是基于数组的,能进行动态扩容,是早期的线程安全的动态数组版本可以看它与ArrayLlist一样也继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable...
原创
72阅读
0评论
0点赞
发布博客于 2 年前

Java集合(4)——源码剖析(1)——ArrayList源码剖析

目录1.概述2.JDK1.7和JDK1.8的变化对比总结:3.源码详细剖析3.1 成员变量3.2初始化3.3添加元素与扩容机制(1)范围检查函数特别说明(2)System.arraycopy和Arrays.copyOf函数特别说明(3)扩容机制3.4 修改和获取元素3.5移除元素3.6序列化和反序列化3.7拷贝3.8迭代器的实...
原创
264阅读
0评论
0点赞
发布博客于 2 年前

Java基础——IO流(3)——转换流、序列化流、随机存取文件流

1.转换流待补充2.序列化流2.1 概述(1)什么是序列化和反序列化?序列化:把对象转化为字节序列的过程 Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据 、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反序列化:把字节序列恢复为对象的过程 反之,该字节序列...
原创
98阅读
0评论
0点赞
发布博客于 2 年前

Java基础——IO流(2)——Properties集合、缓冲流、

1.Properties集合(1)Properties的基本介绍1.java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v> 2.Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。 3.Properties集合是一个唯一和IO流相结合的集合 ...
原创
45阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法(3)——数组(2)——动态数组、稀疏数组

目录1.动态数组——可变长数组1.1 动态数组介绍1.2 自己实现一个可变长数组(Java版)1.3 Java中的动态数组2.稀疏数组(1)案例引入(2)稀疏数组的基本介绍(3)稀疏数组的应用实例(4)代码实现1.动态数组——可变长数组1.1 动态数组介绍动态数组和数组的区别:动态数组的长度会随着元素的增加,数组的长度会动态改变,而数组的长度是固...
原创
52阅读
0评论
0点赞
发布博客于 2 年前

数据结构与算法(2)——数组(1)——Java的内置数组、内置数组的几个应用案例

目录1.Java的内置数组1.1 概念和特点1.2 初始化(1)动态初始化(指定长度)(2)静态初始化(指定内容)1.3 访问数组中的元素1.4 内存图分析(1)只有一个数组的内存图(2)两个数组的内存图(3)两个引用指向同一个数组的内存图(4)创建引用类型数组的内存图1.5 数组中容易发生的两大异常(1)数组索引越界异常(2)空指针异常...
原创
66阅读
0评论
1点赞
发布博客于 2 年前

数据结构和算法(1)——算法分析的基本必备理论

目录1.数据结构和算法概述(1)线性结构(2)非线性结构2.简单示例介绍分析面试考察点3.算法分析之时间复杂度(1)基本概念(2)近似记法(3)P与NP(4)主项定理1.数据结构和算法概述什么是数据结构? 数据结构是一种特定的计算机存储、组织数据的方式,其宗旨是使计算机能够高效的使用数据 什么是算法? 算法:有限时间内解决问题的一系列清晰指令...
原创
277阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(8)——Active Object模式——待完成

Active Object模式
原创
52阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(7)——Two Phase Termination模式、Worker Thread模式——待完成

1.Two Phase Termination模式2.Worker Thread模式
原创
58阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(6)——Count Down模式、Thread-Per-Message模式——待完成

1.Count Down模式2.Thread-Per-Message模式
原创
58阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(5)——生产者与消费者模式——待完成

生产者与消费者模式
原创
110阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(4)——ThreadLocal、Thread-Specific Storage模式

1.ThreadLocal2.Thread-Specific Storage模式
原创
95阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(3)——Guarded Suspension模式、Balking模式——待完成

1.Guarded Suspension模式2.Balking模式
原创
53阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(2)——Immutable设计模式——待完成

1.不可变对象模式(Immutable)(1)描述不可变对象一定是线程安全的,可变对象不一定是线程安全的 servlet不是线程安全的,所有的请求对应的都是一个servlet实例,所以写servlet不能有一些全局的变量 strusts 1.x Action不是线程安全的, strusts 2.x Action是线程安全的, JDK官方对定义一个不可变对象描述...
原创
41阅读
0评论
0点赞
发布博客于 2 年前

Java多线程——Java多线程设计模式(1)——Single Threaded Excution模式、ReadWriteLock模式

1.单线程执行模式(Single Threaded Excution)案例/** * 共享资源 */public class Gate { //门记录的通过门的人的数量 private int counter = 0; // private String name = "Nobody"; private String address = "...
原创
77阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(10)——字节码指令

目录1.未归类系列A2.const系列3.push系列4.ldc系列5.load系列5.1 load系列A5.2 load系列B6.store系列6.1 store系列A6.2 store系列B7.pop系列8.栈顶元素数学操作及移位操作系列9.自增减指令10.类型转化系列11.比较指令系列A12.有条件跳转指令系列A13.无条件...
原创
150阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(9)——字节码文件结构(2)

接上一篇目录3.4 访问标志3.5 类索引3.6 父类索引3.7 接口索引集合3.8 字段表集合3.9 方法表集合3.10 属性表集合(1)Code(字节码指令)(2)Exceptions(异常表)(3)LineNumberTable(4)LocalVariableTable(5)SourceFile(6)ConstantValue(7)...
原创
67阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(8)——字节码文件结构(1)

目录1.Java的跨平台与多语言2.示例程序3.字节码文件结构剖析3.1 魔数3.2 版本号3.3 常量池(1)常量池内容(2)常量池结构(3)容量计数器中数量与常量的个数的关系(4)常量池数组中元素的14种数据类型(5)分析示例中的常量池1.Java的跨平台与多语言Java一个最重要的特性就是跨平台——一次编写,到处运行 而支撑上述特性的...
原创
142阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(7)——线程的状态转换、线程间的通信——等待唤醒机制

目录1.线程的状态转换2.线程间的通信——等待唤醒机制2.1 线程间的通信概念2.2 等待唤醒机制(1)什么是等待唤醒机制(2)等待与唤醒机制涉及的三个方法 1)等待:wait 2)唤醒:notify和notifyAll(3)锁池(EntryList)和等待池(WaitSet) 1)锁池(EntryList...
原创
254阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(8)——CAS原理及其问题和解决

目录1.CAS1.1 CAS是什么1.2 CAS底层原理(1)Unsafe类(2)自旋锁1.3 CAS的缺点2.ABA问题3.解决ABA问题——原子引用(1)原子引用(2)时间戳原子引用(3)ABA问题的解决4.CAS与Synchronized的使用场景5.拓展:处理器底层如何实现原子操作6.优化 CAS 乐观锁——LongAdder...
原创
189阅读
0评论
1点赞
发布博客于 2 年前

Java多线程(3)——JMM、volatile

目录1.JMM1.1 可见性1.2 原子性1.3 有序性2.volatile2.1 volatile是什么2.2 三大特性(1)保证可见性(2)不保证原子性(3)禁止指令重排序2.3 总结1.JMMJMM(Java Memory Model):Java内存模型 JMM本身是 一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义...
原创
101阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(6)——虚拟机性能监控和故障处理工具

1.命令行工具2.可视化工具
原创
64阅读
0评论
0点赞
发布博客于 2 年前

消息中间件(1)——MQ之ActiveMQ(1)——入门概述、下载与安装

目录1.介绍与种类(1)消息与中间件(2)MQ种类2.为什么要引入消息中间件?(1)生活场景案例:学生请教老师问题(2)软件开发中上述问题的产生背景(3)针对问题的设计系统的目标3.消息中间件的定义、特点、作用(1)定义(2)特点(3)作用(4)电商业务示例4.ActiveMQ的下载与安装(1)下载(2)Linux下的安装(3)安装后...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(2)——JVM常用参数配置、OOM

目录1.JVM常用参数配置1.1 JVM参数的类型1.2 XX参数详解1.2.1 Boolean类型1.2.2KV设值类型1.3 查看JVM默认值1.3.1第一种方式:jinfo查看当前运行程序的配置1.3.2 第二种方式:参数命令2.JVM中常用配置参数2.1 -Xms和-Xmx2.2 -Xss2.3 -XX:MetaspaceSize2....
原创
141阅读
0评论
0点赞
发布博客于 2 年前

设计模式(23)——领域规则模式——解释器模式

0.领域规则模式在特定领域中,某些变化虽然频繁,但可以抽象1.基本介绍2.动机在软件构建过程中,如果某一特定领域的问题比较复杂,类似结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化 在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的3.类图1) Context: 是环境角色,...
原创
40阅读
0评论
0点赞
发布博客于 2 年前

Java多线程(2)——ThreadAPI详细介绍

目录1.Thread的构造方法2.start方法3.setDaemon4.获取线程的名称、id、优先级(1)获取线程的名称(2)获取id(3)获取线程优先级5.join6.Interrupt6.1 interrupt()和isInterrupted6.2 interrupted()6.3 如何采用优雅的方式结束线程?(1)方式1:通过开关的方式即...
原创
2737阅读
8评论
14点赞
发布博客于 2 年前

深入理解JVM(5)——GC垃圾回收(3)——8大垃圾收集器

目录1 概述2八大垃圾收集器2.1 新生代垃圾收集器(1)Serial收集器(新生代串行GC/Servial Copying)(2)ParNew(新生代并行GC)(3)Parallel(并行回收GC/Parallel Scavenge)2.2 老年代垃圾收集器(1)Parallel Old收集器(2)CMS收集器(并发标记清除GC)(3)Serial Ol...
原创
255阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(4)——GC垃圾回收(2)——内存分配和回收策略、4大垃圾回收算法

目录1.内存分配和回收策略(1)优先分配到Eden(2)大对象直接分配到老年代(3)长期存活的对象分配到老年代(4)空间分配担保(5)动态对象的年龄判定(6)逃逸分析和栈上分配2.垃圾回收算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法2.4 分代收集算法1.内存分配和回收策略堆空间的基本结构:Java 堆还可以细分为...
原创
264阅读
0评论
1点赞
发布博客于 2 年前

深入理解JVM(3)——GC垃圾回收(1)——JVM确定垃圾的方法、四大引用

目录1.为什么我们需要去了解GC和内存分配?2.GC的作用域3.JVM垃圾回收的时候如何确定垃圾?(1)引用计数(2)可达性分析算法4.四大引用4.1 强引用4.2 软引用​4.3 弱引用(1)介绍(2)WeakHashMap4.4 虚引用1.为什么我们需要去了解GC和内存分配?当需要排查各种内存溢出、内存泄漏问题时 当垃圾收集成为系统...
原创
201阅读
0评论
0点赞
发布博客于 2 年前

深入理解JVM(1)——JVM内存模型——JVM运行时数据区

目录1.JVM的组成部分2.JVM运行时数据区2.1线程私有部分2.1.1 程序计数器(Program Counter Register)2.1.2 Java虚拟机栈(Java Virtual Machine Stack)2.1.3 本地方法栈2.2 线程共享部分2.2.1 堆2.2.2 方法区 (1)作用 (2)方法区与永久代的关系 ...
原创
210阅读
0评论
0点赞
发布博客于 2 年前

设计模式(22)——行为变化模式(2)——访问者模式

目录1.基本介绍2.动机3.类图4.案例:测评系统5.总结1.基本介绍定义:封装一些作用于某些数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 访问者模式主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口 访问者模式主要应用场景是:需要一个对象结构...
原创
39阅读
0评论
0点赞
发布博客于 2 年前

设计模式(21)——行为变化模式(1)——命令模式

目录0.行为变化模式1.基本介绍2.动机3.类图4.案例:遥控器5.命令模式在Spring框架的JDBCTemplate中应用的源码分析6.总结0.行为变化模式在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化,“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合命令模式(Command) 访问者模式(Vi...
原创
54阅读
0评论
0点赞
发布博客于 2 年前

设计模式(20)——数据结构模式(3)——职责链模式

目录1.基本介绍2.动机3.类图4.案例:采购审批项目5.职责链模式在SpringMVC中应用的源码分析6.总结1.基本介绍定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条来链(其实是一个链表),并沿着这条链传递请求,直到有一个对象处理它为止 职责链模式通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该...
原创
73阅读
0评论
0点赞
发布博客于 2 年前

设计模式(19)——数据结构模式(2)——迭代器模式

目录1.基本介绍2.动机3.类图4.案例5.迭代器模式在ArrayList中应用的源码分析6.总结1.基本介绍定义:提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构 ·两层含义: 迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示 迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样...
原创
76阅读
0评论
0点赞
发布博客于 2 年前

设计模式(18)——数据结构模式(1)——组合模式

目录0.数据结构模式1.基本介绍2.动机3.类图4.案例:学校、学院、系展示5.组合模式在JDK集合中的应用的源码分析6.总结0.数据结构模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用,这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。...
原创
186阅读
0评论
0点赞
发布博客于 2 年前

设计模式(15)——接口隔离模式(4)——中介者模式

目录1.基本介绍2.动机3.类图4.案例5.总结1.基本介绍定义:用一个中介对象来封装(封装变化)一系列的对象交互,中介者使各对象不需要显式的相互引用(编译时依赖->运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互2.动机在软件构建过程中,经常会出现多个对象相互关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求...
原创
149阅读
0评论
0点赞
发布博客于 2 年前

设计模式(17)——状态变化模式(2)——备忘录模式

目录1.基本介绍2.动机3.类图4.案例:游戏角色状态恢复问题5.总结1.基本介绍定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了,而在软件层面,备忘录模式有着相同的含义,备忘录...
原创
36阅读
0评论
0点赞
发布博客于 2 年前

设计模式(16)——状态变化模式(1)——状态模式

目录0.状态变化模式1.基本介绍2.动机3.类图4.案例:App抽奖活动5.总结0.状态变化模式在组件的构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案 典型模式: 状态模式(State) 备忘录模式(Memento) 1.基本介绍定义:允许一个对象在其内部状...
原创
79阅读
0评论
0点赞
发布博客于 2 年前

设计模式(14)——接口隔离模式(3)——适配器模式

目录1.基本介绍2.动机3.三种适配器模式3.1 类适配器3.2 对象适配器3.3 接口适配器模式(1)基本介绍(2)案例4.SpringMVC中HandlerAdapter应用适配器模式的源码5.总结1.基本介绍定义:将一个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作 也叫包装器(...
原创
57阅读
0评论
0点赞
发布博客于 2 年前

设计模式(13)——接口隔离模式(2)——代理模式

目录1.基本介绍2.动机3.三种代理3.1 静态代理(1)介绍(2)案例3.2 基于接口的动态代理(1)基本介绍(2)案例3.3 Cglib代理(基于子类的动态代理)(1)基本介绍(2)案例4.代理模式几种变体1.基本介绍定义:为一个对象提供一个替身,以控制(隔离,使用接口)对这个对象的访问,即通过代理对象访问目标对象, 好处:可以在目...
原创
89阅读
0评论
0点赞
发布博客于 2 年前

SpringBoot基础使用(1)——SpringBoot入门、SpringBoot原理分析

目录1.SpringBoot简介1.1 Spring优缺点分析1.2 SpringBoot的概述1.2.1 SpringBoot解决上述Spring的缺点1.2.2 SpringBoot的特点1.2.3 SpringBoot的核心功能2.SpringBoot快速入门2.1 代码实现2.1.1 创建Maven工程2.1.2 添加SpringBoot的起步依赖...
原创
115阅读
0评论
0点赞
发布博客于 2 年前

设计模式(12)——接口隔离模式(1)——外观模式

目录0.接口隔离模式1.基本介绍2.动机3.类图4.案例:影院管理项目5.外观模式在Mybatis源码中的应用6.总结0.接口隔离模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案典型模式:外观模式(Facade) 代理模式(Proxy) 中...
原创
63阅读
0评论
0点赞
发布博客于 2 年前

设计模式(11)——对象性能模式(2)——享元模式

目录1.基本介绍2.动机3.类图4.案例:展示网站5.Integer中应用享元模式的源码分析6.总结1.基本介绍也叫蝇量模式享元模式:享:共享 ,元:对象定义:运用共享技术有效地支持大量细粒度的对象 常用于系统底层开发,解决系统性能问题,像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则...
原创
94阅读
0评论
0点赞
发布博客于 2 年前

设计模式(9)——对象创建模式(3)——建造者模式

目录1.基本介绍2.动机3.类图4.案例:盖房项目5.总结1.基本介绍定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化) 建造者模式,又叫生成器模式,是一种对象构建模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象 建造者模式是一步一步创建一个复杂的对象,...
原创
39阅读
0评论
0点赞
发布博客于 2 年前