自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发编程-JUC原子类、CAS和 Unsafe类

互斥同步:synchronized 和 lock等非阻塞同步:CAS,原子类de等无同步方案:栈封闭,ThreadLocal等于JVM的synchronized重量级锁涉及操作系统(如Linux)内核态下的互斥锁的使用,其线程阻塞和唤醒都涉及进程在用户态和到内核态的频繁切换,导致重量级锁开销大、性能低。而JVM的synchronized轻量级锁使用CAS(Compare And Swap,比较并交换)进行自旋抢锁,CAS是CPU指令级的原子操作并处于用户态下,所以JVM轻量级锁开销较小。

2024-09-11 18:34:07 1088

原创 并发编程-synchronized解决原子性问题

当多个线程并发访问某个Java对象(Object)时,无论系统如何调度这些线程,也不论这些线程如何交替操作,这个对象都能表现出一致的、正确的行为,那么对这个对象的操作是线程安全的。如果这个对象表现出不一致的、错误的行为,那么对这个对象的操作不是线程安全的,发生了线程的安全问题。//示例1@Override// 同步代码块形式——锁为this,两个线程使用的锁是一样的,线程1必须要等到线程0释放了该锁后,才能执行。

2024-09-11 11:31:31 921

原创 并发编程-多线程基础点总结

本文对多线程编程的部分知识点进行总结,从理论知识开始,到为什么要使用多线程,进程和线程的区别,Java中如何创建线程等,以及线程的一些基础操作,本文涵盖多线程的部分基础,建议收藏,多次温习,夯实基础。

2024-09-05 16:18:32 1254

原创 还不知道如何使用CHAT GPT?您 OUT 了!

人工智能席卷而来,还不会方便快捷的使用AI?本文推荐一款AI集大成者,助你畅享国内外AI大模型成果,在日常工作中效率一飞冲天

2024-09-05 10:06:23 293

原创 并发编程-线程池原理与实战

AbstractExecutorService是一个抽象类,它实现了ExecutorService接口。AbstractExecutorService存在的目的是为ExecutorService中的接口提供默认实现。//......

2024-09-02 08:58:40 939

原创 JVM实战-JVM之类加载时机

关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java程序对类的使用分为主动引用和被动引用,针对上述六种情况,对于这六种会触发类型进行初始化的场景,《Java虚拟机规范》中使用了一个非常强烈的限定语——“有且只有”。

2023-11-14 23:37:56 602

原创 十一、MySQL主从复制

目录十二、主从复制1、概述2、原理3、搭建3.1 准备3.2 主库配置3.3 从库配置3.4 测试十二、主从复制1、概述主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。MySQL 复制的优点主要包含以下三个方面:主库出现问题,可以快速切换到从库提供服务。实现读写分离,降低主库的访问

2022-04-14 23:43:08 2254 1

原创 十、MySQl日志

目录十、MySQL日志1、错误日志2、二进制日志2.1 介绍2.2 格式2.3 查看2.4 删除3、查询日志1.4 慢查询日志1.5 事务日志 redo log1.刷盘时机2.日志文件组3.小结1.6 回滚日志 undo log1.7 总结十、MySQL日志在MySQL中,有4种不同的日志:错误日志二进制日志(BINLOG日志)查询日志慢查询日志1、错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信

2022-04-14 22:54:19 459

原创 九、InnoDB引擎

目录九、InnoDB引擎1、逻辑存储结构2、架构2.1 概述2.2 内存结构1.Buffer Pool2. Change Buffer3. Adaptive Hash Index4.Log Buffer2.3 磁盘结构1.system tablespace2.File-Per-Table Tablespaces3. General Tablespaces4.Undo Tablespaces5. Temporary Tablespaces6. Doublewrite Buffer Files7.Redo Lo

2022-04-13 23:06:02 498

原创 八、SQL优化

目录八、SQL优化1、插入数据1.1 insert1.2 大批量数据插入2、主键优化1). 数据组织方式2). 页分裂3). 页合并4). 索引设计原则3、order by优化4、group by优化5、limit优化6、count优化6.1 概述6.2 count用法7、update优化八、SQL优化1、插入数据1.1 insert如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。insert into tb_test values(1,'tom');insert int

2022-04-13 11:00:49 323

原创 七、MySQL索引

目录七、索引1、索引概述1.1 介绍1.2 演示1.3 特点2、索引结构2.1 概述2.2 二叉树2.3 B-Tree2.4 B+Tree2.5 Hash3、索引分类3.1 索引分类3.2 聚集索引&二级索引4、索引语法5、SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile详情5.4 explain6、索引使用6.1 验证索引效率6.2 最左前缀法则6.3 范围查询6.4 索引失效的情况1.索引列运算2.字符串不加引号3.模糊查询4.or连接条件5. 数据分布影响6.总结6

2022-04-11 23:53:52 4794 10

原创 五、MySQL查询缓存

这里写目录标题五、查询缓存五、查询缓存执行查询语句的时候,会先查询缓存。不过,MySQL 8.0 版本后移除,因为这个功能不太实用my.cnf 加入以下配置,重启 MySQL 开启查询缓存query_cache_type=1query_cache_size=600000MySQL 执行以下命令也可以开启查询缓存set global query_cache_type=1;set global query_cache_size=600000;如上,开启查询缓存后在同样的查询条件以及数据

2022-04-11 10:01:05 998

原创 四、mysql锁机制

这里写目录标题四、锁机制与InnoDB锁算法1、概述2、全局锁2.1 介绍2.2 语法2.3 特点3、表级锁3.1 介绍3.2 表锁3.3 元数据锁3.4 意向锁4、行级锁4.1 介绍4.2 行锁4.3 间隙锁&邻键锁5、MyISAM 和 InnoDB 存储引擎使用的锁6、表级锁和行级锁对比7、InnoDB 存储引擎的锁的算法有三种四、锁机制与InnoDB锁算法1、概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是

2022-04-11 09:47:45 617

原创 三、MySQL存储引擎简介

这里写目录标题三、存储引擎1、简介1.1 建表时指定存储引擎1.2 查看 MySQL 提供的所有存储引擎1.3 查看 MySQL 当前默认的存储引擎1.4 查看表的存储引擎2、InnoDB2.1 介绍2.2 特点2.3 文件2.4 逻辑存储结构3、MyISAM3.1 介绍3.2 特点3.3 文件4、Memory4.1 介绍4.2 特点4.3 文件5、InnoDB和MyISAM选择问题三、存储引擎1、简介存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的

2022-04-11 09:12:57 797

原创 二、MySQL体系结构简介

这里写目录标题二、MySQL体系结构1、体系结构图1.1 连接层1.2 服务层1.3 引擎层1.4 存储层二、MySQL体系结构1、体系结构图1.1 连接层最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。1.2

2022-04-11 08:53:22 379

原创 一、MySQL基础

这里写目录标题一、MySQL基础1、数据库、数据库管理系统、数据库系统、数据库管理员介绍2、元组、码、候选码、主码、外码、主属性、非主属性介绍3、主键和外键的区别?4、为什么不推荐使用外键与级联?5、ER图6、数据库范式7、数据库存储过程8、drop、delete和truncate有什么区别?9、数据库设计?10、字符集介绍1.何为字符集?2.有哪些常见的字符集?3.MySQL字符集11、关系型数据库介绍12、MySQL介绍一、MySQL基础1、数据库、数据库管理系统、数据库系统、数据库管理员介绍数据

2022-04-10 18:37:30 4526

原创 JVM面试题

这里写目录标题一、Java内存区域1、元空间会产生内存溢出吗?在什么情况下会产生内存溢出?2、解释Java堆空间及GC?3、说一下JVM的主要组成部分及其作用?4、说一下JVM运行时数据区?或者说下JVM内存模型?5、深拷贝和浅拷贝?6、说一下堆栈的区别?7、Java中堆和栈有什么区别?8、队列和栈是什么?有什么区别?9、虚拟机栈(线程私有)10、程序计数器(线程私有)11、什么是直接内存?二、HotSpot虚拟机对象探秘12、对象的创建过程13、为对象分配内存14、处理并发安全问题15、对象的访问定位16

2022-02-08 17:08:51 3891

原创 JVM性能调优监控工具总结

这里写目录标题JVM性能调优监控工具总结一、JDK命令行工具jps: 查看所有的Java进程jstat: 监视虚拟机各种运行状态jinfo: 实时的查看和调整虚拟机各项参数jmap: 生成堆转储快照jhat: 分析heapdump文件jstack:生成虚拟机当前时刻的线程快照二、JDK可视化分析工具2.1 JConsole:Java 监视与管理控制台2.2 Visual VM:多合一故障处理工具JVM性能调优监控工具总结现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMe

2022-02-07 22:13:27 1364 1

原创 大白话快速总结Java虚拟机

这里写目录标题一、JVM的基本介绍1.1 Java 文件是如何被运行的1.2 简单的代码例子二、类加载器的介绍2.1 类加载器的流程2.2 类加载器的加载顺序2.3 双亲委派机制三、运行时数据区3.1 本地方法栈和程序计数器3.2 方法区3.3 虚拟机栈和虚拟机堆虚拟机栈的概念如何判断一个对象需要被干掉3.4 垃圾回收算法3.5 各种各样的垃圾回收器3.6 JVM常用参数四、JVM调优4.1 调整最大堆内存和最小堆内存4.2 调整新生代和老年代的比值4.3 调整Survivor 区和Eden区的比值4.4

2022-02-07 20:54:36 1161

原创 12.Spring事务管理概述

这里写目录标题1 事务管理的核心接口1.1 PlatformTransactionManager1.2 TransactionDefinition1.3 TransactionStatus2 事务管理的方式1 事务管理的核心接口在spring-tx-5.3.12.jar包中,Spring提供了用于事务管理的依赖包,在包org.springframework.transaction中有三个接口文件:PlatformTransactionManager、TransactionDefinition、Trans

2021-12-13 11:22:17 417

原创 11.基于注解的AOP开发介绍

目录1 入门例子1.1 创建目标接口和目标类1.2 创建切面类1.3 配置切面类和目标类1.5 在配置文件中开启主键扫描和AOP的自动代理1.6 测试2 注解配置AOP详解2.1 注解类型1 入门例子基于XML的声明式AspectJ实现AOP需要在配置文件中配置大量的代码信息,现在用注解取代配置文件了解一下。1.1 创建目标接口和目标类目标接口package com.lxg.aspectj;public interface UserDao { public void addUser()

2021-12-11 23:29:37 521

原创 10.基于XML的AOP开发

Spring AOP基于XML配置的介绍

2021-12-11 22:49:45 587

原创 9.Spring AOP简介

目录1、Spring AOP简介1.1 什么是 AOP1.2 AOP的作用及其优势1.3 AOP的底层实现1.4 AOP动态代理技术1.5 JDK的动态代理1.6 CGLIB的动态代理1.7 AOP相关概念1.8 AOP开发明确事项1.9 知识要点1、Spring AOP简介1.1 什么是 AOP1.2 AOP的作用及其优势1.3 AOP的底层实现1.4 AOP动态代理技术1.5 JDK的动态代理1.6 CGLIB的动态代理1.7 AOP相关概念1.8 AOP开发明确事项1.9 知识要点

2021-12-08 23:18:56 497

原创 阅读深入理解Java虚拟机整理笔记2—HotSpot对象探秘

目录三、HotSpot对象探秘3.1 对象的创建3.2 对象的内存布局3.3 对象的访问定位三、HotSpot对象探秘3.1 对象的创建Java创建对象的过程如下图所示第一步:类加载检查当JVM遇到new指令的时候,首先是去检查这个指令的参数是否能够在常量池中定位到一个类的符号引用(找到要为哪个类创建对象),并且检查这个符号引用代表的类是否已经被加载、解析、和初始化过。如果没有,那必须先执行相应的类加载过程。第二部:分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需

2021-11-27 20:30:06 243

原创 Java运行时内存区域—阅读深入理解Java虚拟机整理笔记

目录一、走进Java (快速浏览,先略过)1.1 概述1.2 Java优点1.3 Java技术体系1.4 Java发展史1.5 Java虚拟机家族1.6 展望Java技术的未来二、Java运行时内存区域2.1 程序计数器2.2 Java虚拟机栈2.3 本地方法栈2.4 Java堆2.5 方法区2.6 运行时常量池2.7直接内存一、走进Java (快速浏览,先略过)1.1 概述Java不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范组成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部

2021-11-26 17:14:12 776

原创 设计模式—解释器模式

目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。//用于两个整数相加public static int add(int a,int b){ return a + b;}//用于两个整数相加public static int add(int a,int b,int c){ return a + b + c;}//用于n个整数相加public static i

2021-11-15 00:05:41 153

原创 设计模式—备忘录模式

目录1.概述2.结构3.案例实现3.1 "白箱"备忘录模式3.2 "黑箱"备忘录模式4.优缺点5.使用场景1.概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结

2021-11-15 00:05:21 345

原创 设计模式—32种设计模式目录

创建模式这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。序号内容地址1工厂模式(Factory Pattern)https://blog.csdn.net/qq_40493944/article/details/1210694542单例模式(Singleton Pattern)https://blog.csdn.net/qq_40493944/artic

2021-11-15 00:04:44 277

原创 设计模式—访问者模式

目录1.概述2.结构3.案例4.优缺点5.使用场景6.扩展1.概述定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。2.结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模式要求元素类的个数不能改变。具体访问者(ConcreteV

2021-11-14 23:12:51 1133

原创 设计模式—迭代器模式

目录1.概述2.结构3.案例4.优缺点5.使用场景JDK源码解析1.概述定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2.结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、ne

2021-11-14 22:58:11 217

原创 设计模式—中介者模式

目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,

2021-11-14 22:47:21 403

原创 设计模式—观察者模式

目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2.结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。Conc

2021-11-14 16:47:50 274

原创 设计模式—状态模式

目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下实现代码public interface ILift { //电梯的4个状态 //开门状态 public final static int OPENING_STATE =

2021-11-14 16:40:44 291

原创 设计模式—责任链模式

目录1.概述2.结构3.案例4.优缺点5.源码解析1.概述在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。定义:又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,

2021-11-14 16:22:08 346

原创 设计模式—命令模式

目录1.概述2.结构3.案例4.优缺点5.使用场景6.JDK源码解析1.概述日常生活中,我们出去吃饭都会遇到下面的场景。定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。2.结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,

2021-11-14 14:48:07 210

原创 设计模式—策略模式

目录1.概述2.结构3.案例4.优缺点5.使用场景6.JDK源码解析1.概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进

2021-11-14 13:29:01 471

原创 设计模式—模板方法模式

目录1.概述2.结构3.案例实现4.优缺点5.适用场景6.JDK源码解析1.概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账

2021-11-14 13:02:40 242

原创 设计模式—享元设计模式

目录1.概述2.结构3.案例实现4.优缺点和使用场景5.JDK源码解析1.概述定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。通过共享的方式高效的支持大量细粒度的对象。主要解决在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。2.结构3.案例实现4.优缺点和使用场景5.JDK源码解析...

2021-11-14 12:33:34 457

原创 设计模式—组合模式

目录1.概述2.结构3.案例实现4.组合模式的分类5.优点6.使用场景1.概述对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要

2021-11-06 23:51:19 719

原创 设计模式—外观模式

目录1.概述2.结构3.案例4.使用场景5.源码解析1.概述举例有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易

2021-11-06 23:19:43 275

空空如也

空空如也

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

TA关注的人

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