自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 springboot actuator配置

【代码】springboot actuator配置。

2023-08-28 17:33:31 417

转载 设计模式--04--结构型--04--外观模式及与代理的区别

外观模式及与代理的区别

2023-01-04 15:41:03 164

原创 多线程--04--线程状态--01--线程状态变化举例

java多线程状态变化举例

2022-11-02 17:40:41 178

原创 git常用操作记录

git常用操作

2022-07-01 11:05:06 223

原创 JVM-05-02--系统性能排查

一、什么是load averagetop命令中显示的load average,表示最近1分钟、5分钟和15分钟的系统平均负载:1.1 load average如何计算而来1、在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。2、进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程

2022-04-05 01:58:55 1325

原创 设计模式--03--创建型--03--建造者模式

建造者模式为:过程相同、表示不同。以盖房子为例:1、盖房子的过程都为:打地基--》砌墙--》封顶;2、但是改的房子有:平房、楼房等建造者模式用于创建复杂对象,将复杂对象分解为一步一步实现...

2022-03-29 01:11:32 125

原创 多线程--06--多线程安全问题解决--05--lock方式--02--原理

一、AQS数据结构AQS(AbstractQueuedSynchronizer 抽象队列同步器)数据结构如下:1、state 属性用来表示资源的状态(分独占模式和共享模式)。子类通过定义如何维护这个状态,从而控制如何获取锁和释放锁;2、提供了基于 FIFO 的等待队列,类似于 Monitor 的 EntryList3、条件变量来实现等待、唤醒机制,支持多个条件变量,类似于 Monitor 的 WaitSet图2 带condition的AQS图二、AQS的公平锁与非公平锁区别.

2022-03-28 23:02:30 861

原创 多线程--06--多线程安全问题解决--05--lock方式

一、lock接口规范void lock(); //加锁,同synchronizedvoid lockInterruptibly() //加锁,等待锁期间可被打断boolean tryLock(); //尝试获取锁,仅尝试一次boolean tryLock(long time, TimeUnit unit) //尝试获取锁,tim

2022-03-28 22:37:15 467

原创 多线程--02--01--线程池常见面试题

一、线程池参数(7-4-4)1、corePoolSize:线程池的基本大小,当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。说白了就是,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。2、maximumPoolSize:最大线程数,不管你提交多少任务,线程池里最多工作线程数就是maximumPoolSize。3、keepAliveTime:线程的存活时间。

2022-03-27 23:37:38 3406

原创 JVM-01-JVM基础-03-运行时常量池

一、常量池中都包含啥1、常量池是一张表,其中包含多种常量-->从编译时已知的数字、文字;到必运行时解析的方法和字段引用。2、JVM指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息。举例:(1)类package com.fupng3.jvm;public class Hello { private String name; final int AGE=30; public static void main(String[] arg

2022-03-21 21:57:53 783

原创 JVM-01-JVM基础-02-方法区(元空间)

1、方法区可以理解为-->编译后的代码,被加载到内存后的存储区。它存储每个类的结构,例如字段和方法等数据。2、方法区在jdk1.8之前称为永久代,jdk1.8及之后变为元空间;3、常量池在jdk1.8及之后放在堆中,jdk1.8之前是放在方法区的。一、方法区使用物理内存参考:数据拷贝过程--内存映射--mmap二、方法区内存的申请与释放方法区的内存是通过unsafe类进行申请、回收的,jvm垃圾回收与方法区内存无关。...

2022-03-21 20:39:25 663

原创 JVM-05-诊断cpu占用过高与线程死锁

一、诊断线程cpu占用过高步骤1、用top命令定位哪个进程对cpu的占用过高;2、查看进程的那个线程占用cpu高ps H -eo pid,tid,%cpu | grep 进程id//pid:显示进程//tid:显示线程//%cpu: 显示占用cpu占用3、jstack 进程id可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号32665为十进制,需要转为十六进制为7f99(jstack命令显示的线程id用16进制表示)二、定位线程死.

2022-03-21 18:03:23 419

原创 Maven学习总结--继承

一、Maven继承方式总述maven继承有2种方式(1)使用parentmaven的多项目结构中,可以使用parent定义父项目,从而从父项目中继承依赖等属性。但是美中不足,maven只能单继承,即一个项目只能使用一个parent标签。(2)使用dependencyManagementmaven2.9之后的版本引入了一个新的功能dependencyManagement,可以实现依赖上的多继承。这个功能,可以将依赖配置复杂的pom文件拆分成多个独立的pom文件,一是可以使maven的pom

2021-10-04 21:43:05 646

原创 多线程-07-算法面试题--02--手写交替输出

题目描述:有三个线程,交替输出A、B、C,各输出5次一、Synchronized实现(wait/notifyAll)package com.fuping3.printAsOrder;public class PrintCharWithSyn { private int stat=0; public void printChar(String str,int waitFlag,int nextFlag){ synchronized (this){

2021-09-22 16:19:40 217

原创 多线程-07-算法面试题--02--手写生产者消费者

设计一个有界阻塞队列:(1)多线程写入队列,当队列满时不能再写入数据;(2)单线程读取数据,当队列为空时不能读取数据;(3)读取超过一定时长则运行结束。一、Synchronized锁实现package com.fuping3.proandcon;import java.util.LinkedList;public class ListQueue{ private LinkedList<String> list=new LinkedList<String

2021-09-22 14:45:46 180

原创 多线程-07-算法面试题--01--手写单例

参考:设计模式--03--创建型--01--单例_na_tion的专栏-CSDN博客

2021-09-22 14:38:13 152

原创 java基础--06--Unsafe类

Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用开发者不会用到这个类。一、unsafe的主要功能二、Unsafe常用功能(1)CAS(2)线程通信park/unpark(3)内存屏障详细参考:Java中的Uns

2021-09-13 14:27:36 132

原创 2、IO模型

一、阻塞IO(blocking io)A拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其他的事情,十分专心。只有鱼上钩的时,才结束掉等的动作,把鱼钓上来。在内核将数据准备好之前,系统调用会一直等待所有的套接字。二、非阻塞IO--NIO(noblocking io)B也在河边钓鱼,但是B不想将自己的所有时间都花费在钓鱼上,在等鱼上钩这个时间段中,B也在做其他的事情(一会看看书,一会读读报纸,一会又去看其他人的钓鱼等),但B在做这些事情的时候,每隔一个固定的时间检查鱼是否上钩。一

2021-08-28 00:35:28 131

原创 2、数据拷贝过程

一、用户空间与内核空间二、标准IO/缓存IO缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。标准IO中,用户进程中的一个完整IO分为两个阶段:(1)用户空间<------------->内核空间(2)内核空间<------------->设备空间三、直接IO...

2021-08-27 23:37:25 1684

原创 JVM-04-垃圾回收-03-常见垃圾收集器-02-分区模型-G1初探

常见垃圾回收期一、分区模型介绍(1)Serial 、Serial Old 、 Parallel 、 Parallel Old 、 ParNew 、CMS这些垃圾收集器都是基于分代收集理论,即将内存区域按照存储对象的不同分为年轻带、老年代和元空间。(2)G1 和 ZGC 逐渐淡化了这种分代的概念,堆被划分为一组大小相等的堆区域,每个堆区域都有一个连续的虚拟内存范围。 这在内存使用方面提供了更大的灵活性。G1的堆内存分配如下:(3)G1在淡化分代理论上还不是很彻底, G1保留了年轻代..

2021-08-27 01:14:25 329

原创 JVM-04-垃圾回收-03-常见垃圾收集器-01-分代模型

一、常见的垃圾收集器二、Serial单线程串行收集垃圾,新生代采用复制算法,老年代采用标记压缩算法,STW三、Parallel(1)多线程并行收集垃圾,新生代采用复制算法,老年代采用标记压缩算法,STW(2)java8默认,关注高吞吐量、高效利用CPU四、CMS(重点)(1)为了使垃圾收集期间,用户线程还能运行,出现了CMS收集器。CMS是一种以获取最短回收停顿时间为目标的收集器。(2)在注重吞吐量以及CPU资源的场合,都可以优先考虑 Parallel Scave..

2021-08-27 00:56:03 113

原创 JVM-04-垃圾回收-02-垃圾收集算法

一、标记-清除算法两个阶段“标记” + “清除”,存在两个问题:(1)如果需要标记的对象太多,效率不高 【效率问题】(2)标记清除后会产生大量不连续的碎片 【内存碎片】--基于这个缺点,进化产生了标记整理算法。二、标记整理/标记压缩算法两个阶段 “标记” + “清除”+“整理内存碎片”:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收三、标记-复制算法它将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将...

2021-08-26 23:29:06 75

原创 JVM-04-垃圾回收-01-如何判断为垃圾

垃圾回收,就是要把那些不再使用的对象找出来然后清理掉,释放其占用的内存空间。在java中判断对象死亡有两种方式:(1)引用计数法(2)可达性分析法一、引用计数法引用计数法简单、高效,它的做法是给对象添加一个引用计数器,每当有一个地方引用该对象,这个计数器就加1;当引用失效时,计数器就减1。如果计数器为0了,说明该对象不再被引用,成为死亡对象。不过这种算法有一个致命缺点,就是无法处理对象相互引用的情况,所以主流的虚拟机不再使用该方法。二、可达性分析它的做法是,通过一系列被称为“GC R

2021-08-26 22:52:17 432

原创 多线程--06--多线程安全问题解决--03--无锁方式--原子类

一、乐观锁的定义乐观锁是无锁的实现。 乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。 乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。 乐观是相对于悲观锁而言。悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界修改持保守态度,为了避免同时被其他人修改,采取的是“先取锁再访问”的策略。synchronized、ReentrantLock都是悲观锁的典型例子。

2021-05-08 17:24:19 236 1

原创 多线程--06--多线程安全问题解决--02--不可变类方式

一、不可变类的设计不可变类是线程安全的,不可变类设计有3个特征:属性是final修饰的:保证了该属性在初始化后是只读的,不能修改。(happen-before-->final) 类是final修饰的:保证了类中的方法不会被重写,防止子类破坏不可变性。 保护性拷贝:保护性拷贝是指-->修改时新建一个对象,不使用原来的对象,保证了不共享变量。二、常见的不可变类String 包裹类,如Integer StringBuffer三、String的类的保护性拷贝举例(1)字符串截

2021-05-07 17:13:55 136

原创 多线程--06--多线程安全问题解决--01--总述--03--java如何保证原子性、有序性、可见性--02--原理--JMM(happen-before)、volatile和内存屏障

一、as-if-serial 原则(看似串行原则) 对开发者而言,当然希望不要有任何的重排序,这样理解起来最简单,指令执行顺序和代码顺序严格一致,写内存的顺序也严格地和代码顺序一致。但是,从编译器和CPU的角度来看,希望尽最大可能进行重排序,提升运行效率。于是,问题就来了,重排序的原则是什么?什么场景下可以重排序,什么场景下不能重排序呢?1.1 单线程程序的重排序规则 无论什么语言,站在编译器和CPU的角度来说,不管怎么重排序,单线程程序的执行结果不能改变...

2021-05-07 16:33:23 132 1

原创 多线程--06--多线程安全问题解决--01--总述--03--java如何保证原子性、有序性、可见性

一、JAVA如何保证原子性JMM只保证了基本读取和赋值是原子性操作(而且必须是将数字赋值给某个变量),变量之间的相互赋值不是原子操作 如果要实现更大范围操作的原子性,需要通过synchronized和Lock接口来实现。由于synchronized和Lock能够保证任一时刻只有一个线程执行该代码块,那么自然就不存在原子性问题了,从而保证了原子性。//举例:JMM只保证基本赋值的原子性x = 10; //原子操作y = x; //非原子操作x++;

2021-05-07 00:22:33 471

原创 多线程--06--多线程安全问题解决--01--总述--02--java中为什么会存在有序性、可见性问题

一、物理机的内存架构介绍(1)现代计算机的硬件内存架构如下图所示:多CPU:计算机在执行程序时,每条指令都是在CPU中执行的,一个现代计算机通常由两个或者多个CPU,其中一些CPU还有多核,这意味着,java多线程可以并行或并发的执行。 CPU寄存器:每个CPU都包含一系列的寄存器,它们是CPU内存的基础。CPU在寄存器上执行操作的速度远大于在主存上执行的速度。 高速缓存cache:主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快得多。每个CPU可

2021-05-06 23:55:41 228 2

原创 多线程--06--多线程安全问题解决--01--总述--01--如何解决、在解决什么?

一、多线程安全问题的解决为了避免多线程安全问题发生,有多种手段可以达到目的:(1)只读变量类变量、成员变量或局部变量只读不写(2)不共享变量局部变量--作用范围都放在方法内 (举例详见:多线程--04--变量线程安全分析--举例1); 类变量或成员变量--每次new (举例详见:多线程--04--变量线程安全分析--举例7)。(3)不可变类(4)阻塞式的解决方案(悲观锁):synchronized,Lock(5)非阻塞式的解决方案(乐观...

2021-05-04 15:21:11 176 2

原创 设计模式--04--结构型--03--装饰模式

一、装饰模式引入例子一个快餐店计算价格问题举例:快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,加配菜需要额外加钱,并且每个配菜的价钱不一样,计算快餐价格如何实现?1.1 一般设计1.2 使用继承方式的一般设计存在的问题:横向扩展性不好:如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子,会出现类爆炸的问题。继承适合于纵向扩展二、装饰模式

2021-04-28 19:53:53 96

原创 多线程--06--多线程安全问题解决--04--synchronized方式

一、多线程安全问题解决为了避免多线程安全问题发生,有多种手段可以达到目的:阻塞式的解决方案:synchronized,Lock 非阻塞式的解决方案:原子变量二、synchronized语法2.1 基本语法synchronized(对象) { ...}synchronized(俗称对象锁),它采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。这样就能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心线程上下

2021-04-25 18:03:10 136

原创 多线程--05--变量线程安全分析(重点)

一、先说结论1.1 成员变量和静态变量是否线程安全?1、如果它们没有共享,则线程安全。2、如果它们被共享了,根据它们的状态是否能够改变,又分两种情况: (1)如果只有读操作,则线程安全 (2) 如果有读写操作,需要考虑线程安全问题(读时可能会读到中间结果,所以有读写时,读也要考虑线程安全)1.2 局部变量是否线程安全?1、基本数据类型的局部变量是线程安全的。2、引用类型的局部变量,要看该对象有没有逃离方法的作用范围, ...

2021-04-25 16:23:48 961

原创 多线程--04--线程状态(生命周期)

一、从操作系统层面看线程状态--5种状态【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行【运行状态】指获取了 CPU 时间片运行中的状态 当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换【阻塞状态】------(阻塞状态不会用到CPU) 1、如果调用了阻塞 API,如 BIO...

2021-04-24 21:44:47 350

原创 多线程--03--线程常用API

一、常用API方法名 功能说明 注意 start() 启动一个新线程,在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次,会出现IllegalThreadStateException run() 新线程启动后会调用的方法   yield() 提示线程调度器让出当前线程对CPU的使用,让出后可能该线程又继续被调...

2021-04-24 21:10:19 660

原创 设计模式--05--行为型--模板模式、策略模式、观察者模式

一、模板模式模板模式定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。举例1:去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。举例2:抽象类中进行一个方法实现(模板),相同的代码就在该方法中实现,而对该方法的不同细节

2021-04-24 19:17:59 120

原创 多线程--02--线程四种创建方式

package com.fuping3.basic;/** * 实现多线程方式一 * 优点:编写简单,可直接用this.getname()获取当前线程,不必使用Thread.currentThread()方法。 * 缺点: * 1、使用继承方式,MyThread不能再继承其他类 * 2、无返回值 */public class MyThread extends Thread{ @Override public void run() { whi.

2021-04-23 19:45:37 121

原创 多线程--01--基本概念

一、基本概念介绍1.1 多线程作用 为了更好的利用cpu的资源,以期望提高程序执行效率。IO 操作不占用 cpu,只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化1.2 并行与并发并发:一个核快速切换多个线程,让它们依次执行,看起来像并行,实际上是并发。并行:同一时间多个线程同时执行。【系统要有多个CPU才会出现并行】并行在多处理器系统中存在,而并...

2021-04-23 19:39:45 82

原创 spring--事务--02--事务参数设置

一、事务传播事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为 传播属性是描述:同一线程中,事务嵌套时,事务如何管理spring的事务传播级别有七种,分为三类:1.1 必须要在事务里运行的事务级别 解释 REQUIRED 如果当前存在事务,加入当前事务,否则创建新的。(spring默认) REQUIRES_NEW 如果当前存在事务,则挂起他,开启新的事物执行,新事务提交后再执行挂起的事务 MANDATORY 如果当前

2021-04-22 20:46:32 241

原创 spring--事务--01--介绍与事务环境搭建

一、事务介绍(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败(2)为什么要使用事务--银行转账举例说明(1) lucy 转账100元给mary(2)lucy少100,mary多100假如(1)已执行且出现异常,(2)还未执行,如果不使用事务,则会出现lucy的100元不见的问题(3)事务四个特性(ACID)原子性:要么都成功,要么都失败一致性:事务是要求强一致性的隔离性:多事务之间操作,相互之间的影响。如果不考虑隔离性,会产

2021-04-22 19:56:36 81

原创 spring--JdbcTemplate--03--批量增删改操作

一、JdbcTemplate批量增删改apiint[] batchUpdate(String sql, List<Object[]> batchArgs)batchUpdate增删改多个或0个时,不会有queryForObject抛异常问题二、举例(1)dao层代码package com.fuping3.dao;import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;p

2021-04-22 14:49:37 324

MySQL+Apache+phpserver安装教程

详细介绍了MySQL+Apache+phpserver安装的步骤

2012-10-29

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

TA关注的人

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