自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

微若尘埃璨若星辰的博客

记录学习成长之路的点点滴滴

  • 博客(48)
  • 收藏
  • 关注

原创 正则表达式

目录正则表达式基本介绍正则表达式底层实现正则表达式语法基本介绍元字符功能详解转义字符匹配符选择匹配符限定符定位符分组正则表达式的三个常用类Pattern类Matcher类PatternSyntaxException类分组、捕获、反向引用介绍案例经典的结巴去重程序String类中使用正则表达式替换功能判断功能分割功能巩固练习案例匹配汉字匹配URL验证电子邮箱是否合法验证是不是整数或者小数对一个URL进行解析正则表达式基本介绍一个正则表达式,就是使用某种模式去匹配字符串的一个公式。很多人因为它们看上去比

2021-05-28 17:57:20 192

原创 分析GC日志

目录GC日志参数GC日志参数参数作用-verbose:gc输出gc日志信息,默认输出到标准输出-XX:+PrintGC输出GC日志。类似:-verbose:gc-XX:+PrintGCDetails在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况-XX:+PrintGCTimeStamps输出GC发生时的时间戳-XX:+PrintGCDateStamps输出GC发生时的时间戳(以日期的形式,如2013-05-04T21

2021-03-25 21:06:18 211

原创 JVM运行时参数

目录

2021-03-25 16:28:01 224

原创 JVM监控及诊断工具之GUI篇

目录工具概述图形化综合诊断工具jConsole基本概述启动三种连接方式Visual VM基本概述插件的安装连接方式基本使用工具概述使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限:无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。要求用户登录到目标Java 应用所在的宿主机上,使用起来不是很方便。分析数据通过终端输出,结果展示不够直观。为此,JDK提供了一些内存泄漏的分析工具,如jconso

2021-03-23 16:00:21 282

原创 JVM监控及诊断工具之命令行篇

JVM监控及诊断工具之命令行篇概述jps:查看正在运行的JAVA进程概览基本用法jstat:查看JVM统计信息基本情况interval参数count参数-t参数-h参数options参数概述性能诊断是软件工程师在日常生活中需要经常面对的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java作为最流行的编程语言之一,其应用的性能诊断能力一直受到业界的广泛关注。可能造成Java应用出现性能问题的因素非常多,例如线程控制,磁盘读写,数据库访问,网络I/O,垃圾收集等。想要定位这些问题,

2021-03-16 11:30:58 166

原创 垃圾回收器

目录垃圾回收器GC分类与性能指标垃圾收集器分类按线程数分按工作模式分按碎片处理方式分评估GC的性能指标性能指标:吞吐量性能指标:暂停时间吞吐量vs暂停时间不同的垃圾回收器概述垃圾回收器发展史7种经典的垃圾收集器7款经典收集器与垃圾分代之间的关系垃圾收集器的组合关系如何查看默认垃圾收集器Serial回收器:串行回收总结ParNew回收器:并行回收Parallel回收器:吞吐量优先参数配置CMS回收器:低延迟CMS为什么不使用标记整理算法?优点缺点设置的参数小结JDK后续版本中CMS的变化G1回收器:区域化分代

2021-03-01 21:27:46 69

原创 垃圾回收相关概念

目录垃圾回收相关概念System.gc()的理解手动GC来理解不可达对象的回收内存溢出内存泄漏举例Stop The World垃圾回收的并行与并发并发并行并发和并行对比垃圾回收的并行与并发安全点与安全区域安全点安全区域再谈引用再谈引用:强引用举例总结再谈引用: 软引用再谈引用:弱引用再谈引用:虚引用案例终结器引用垃圾回收相关概念System.gc()的理解在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进

2021-02-23 15:44:28 90

原创 垃圾回收相关算法

目录垃圾回收相关算法标记阶段:引用计数算法循环引用举例小结标记阶段:可达性分析算法概念思路GC Roots可以是哪些?总结小技巧注意对象的finalization机制注意生存还是死亡?具体过程代码演示MAT与JProfiler的GC Roots溯源MAT是什么?命令行使用 jmap使用JVIsualVM使用MAT打开Dump文件JProfiler的GC Roots溯源如何判断什么原因造成OOM清除阶段:标记-清除算法执行过程什么是清除?缺点清除阶段:复制算法背景核心思想优点缺点注意清除阶段:标记-整理算法背

2021-02-23 15:37:39 89

原创 垃圾回收概述

垃圾回收概述概念这次我们主要关注的是黄色部分,内存的分配与回收什么是垃圾在提到什么是垃圾之前,我们先看下面一张图从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了

2021-02-23 15:23:22 105

原创 StringTable

目录StringTableString的基本特性为什么JDK9改变了结构String的不可变性面试题注意String的内存分配为什么StringTable从永久代调整到堆中String的基本操作字符串拼接操作底层原理拼接操作和append性能对比intern()的使用intern的空间效率测试面试题new String("ab")会创建几个对象new String("a") + new String("b") 会创建几个对象intern的使用:JDK6和JDK7JDK6中JDK7中扩展总结StringTab

2021-02-20 21:23:53 91

原创 执行引擎

目录执行引擎执行引擎概述执行引擎的工作流程Java代码编译和执行过程什么是解释器(Interpreter)什么是IT编译器为什么Java是半编译半解释型语言机器码、指令、汇编语言机器码指令指令集汇编语言高级语言C、C++源程序执行过程字节码解释器解释器分类现状JIT编译器Java代码的执行分类问题来了HotSpot JVM执行方式案例概念解释热点探测技术方法调用计数器热点衰减回边计数器HotSpotVM 可以设置程序执行方法HotSpotVM中 JIT 分类C1 和 C2编译器不同的优化策略分层编译策略总结

2021-02-19 17:59:36 75

原创 直接内存 Direct Memory

目录直接内存 Direct Memory非直接缓存区和缓存区存在的问题直接内存 Direct Memory不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区

2021-02-19 17:49:16 131

原创 对象实例化内存布局与访问定位

目录对象实例化内存布局与访问定位对象实例化面试题对象创建方式创建对象的步骤判断对象对应的类是否加载、链接、初始化为对象分配内存处理并发问题初始化分配到的内存设置对象的对象头执行init方法进行初始化对象实例化的过程对象内存布局对象头运行时元数据类型指针实例数据(Instance Data)说明小结对象的访问定位图示对象访问的两种方式句柄访问优点直接指针(HotSpot采用)对象实例化内存布局与访问定位对象实例化面试题对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?

2021-02-19 17:45:53 65

原创 方法区

目录方法区前言栈、堆、方法区的交互关系方法区的理解HotSpot中方法区的演进设置方法区大小与OOMjdk7及以前JDK8以后如何解决这些OOM方法区的内部结构类型信息域信息方法(Method)信息non-final的类变量全局常量运行时常量池 VS 常量池常量池为什么需要常量池常量池中有什么小结运行时常量池方法区使用举例方法区的演进细节为什么永久代要被元空间替代?StringTable为什么要调整位置静态变量存放在那里?方法区的垃圾回收总结常见面试题方法区前言这次所讲述的是运行时数据区的最后一个部分

2021-02-16 22:45:04 93

原创 本地方法栈

目录本地方法栈本地方法栈Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMem

2021-02-16 17:12:27 148

原创 本地方法接口

目录本地方法接口什么是本地方法为什么使用Native Method?与Java环境的交互与操作系统的交互Sun's Java现状本地方法接口什么是本地方法简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。“A native metho

2021-02-16 17:11:24 107

原创

堆堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81bo7PM1-1613223244461)(images/image-20200706195127740.png)]一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可

2021-02-16 17:08:25 108

原创 虚拟机栈

目录虚拟机栈虚拟机栈概述Java虚拟机栈是什么生命周期作用栈的特点开发中遇到哪些异常?设置栈内存大小栈的存储单位栈中存储什么?栈运行原理栈帧的内部结构局部变量表关于Slot的理解Slot的重复利用静态变量与局部变量的对比操作数栈概念代码追踪栈顶缓存技术动态链接方法调用:解析与分配链接静态链接动态链接绑定机制早期绑定晚期绑定早晚期绑定的发展历史虚方法和非虚方法普通调用指令:动态调用指令:invokednamic指令动态类型语言和静态类型语言方法重写的本质Java 语言中方法重写的本质:IllegalAcces

2021-02-08 22:29:49 271

原创 程序计数器

目录程序计数器介绍作用代码演示使用PC寄存器存储字节码指令地址有什么用呢?PC寄存器为什么被设定为私有的?CPU时间片结语程序计数器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器

2021-02-08 10:50:22 750

原创 类加载子系统之内存、运行时数据区与线程概述

目录内存图类加载器子系统概述类加载器子系统作用类加载器ClassLoader角色类的加载过程加载链接初始化类加载器的分类启动类加载器(引导类加载器,Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器(系统类加载器,AppClassLoader)用户自定义类加载器获取ClassLoader的途径双亲委派机制原理优势细节补充在JVM中表示两个class对象是否为同一个类存在两个必要条件对类加载器的引用类的主动使用和被动使用运行时数据区线程结语

2021-02-07 19:29:11 187 2

原创 JVM的发展历程

目录Sun Classic VMExact VMHotSpot VMHotSpot历史HotSpot介绍BEA 的 JRockitIBM 的J9KVM和CDC/CLDC HotSpotAzul VMLiquid VMApache HarmonyMicrosoft JVMTaobaoJVMDalvik VM其他JVMGraal VMENDSun Classic VM早在1996年Java1.0版本时,Sun公司发布了一款名为Sun Classic VM的虚拟机,它是世界上第一款商用Java虚拟机,JDK1

2021-02-06 17:40:07 102

原创 JVM概述

JVM概述java和jvmjava和jvmjava语言是一个跨平台的语言。如下图:

2021-02-05 21:27:19 160

原创 Spring5学习笔记之新特性

目录前言Spring5整合日志@Nullable注解Spring5核心容器支持函数式风格GenericApplicationContextSpring5支持整合JUnit5整合JUnit4整合JUnit5前言整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。Spring5整合日志Spring 5.0框架自带了通用的日志封装(1)Spring5已经移除Log4jConfigListener,官方建议使用Log4j2(2)Spring5框架整合L

2021-01-29 16:18:00 199

原创 Spring5学习笔记之事务管理

目录事务概念什么是事务事务四个特性(ACID)Spring事务管理介绍准备工作注解声明式事务管理声明式事务管理参数配置XML声明式事务管理完全注解声明式事务管理结语事务概念什么是事务(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败(2)典型场景:银行转账事务四个特性(ACID)原子性一致性隔离性持久性Spring事务管理介绍准备工作事务添加到JavaEE三层结构里面Service层(业务逻辑层)在Spring进行事务管理操作有两种方式

2021-01-29 12:10:05 81

原创 Spring5学习笔记之jdbcTemplate实现增删改查

目录JdbcTemplate入门简介准备工作JdbcTemplate操作数据库添加删除修改查询查询单个值查询一个对象查询一个集合批量操作批量插入批量修改批量删除结语JdbcTemplate入门简介Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作准备工作(1)引入相关jar包(2)在spring配置文件配置数据库连接池 <context:property-placeholder location="classpath:jdbc.propertie

2021-01-27 22:49:49 165

原创 数据库连接错误

目录Public Key Retrieval is not allowed错误Access denied for user 'lenovo'@'localhost' (using password: YES)错误Public Key Retrieval is not allowed错误我在使用mysql8.0时出现的这个错误,解决方法为在配置文件中的url后面添加上一句 &allowPublicKeyRetrieval=true。错误即可解决。Access denied for

2021-01-27 21:59:06 153

原创 Spring5学习笔记之AOP

目录AOP概念AOP底层原理有接口情况,使用JDK动态代理没有接口情况,使用CGLIB动态代理AOP术语AOP准备工作AspectJ注解AOP概念什么是AOP?(1)面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。AOP底层原理有接口情况,使用JDK动态代理代码实现:1.创建接口:public interface Poem { v

2021-01-27 11:15:12 90

原创 Spring5学习笔记之IOC操作基于注解方式实现

目录注解回忆基于注解方式实现对象创建Spring针对Bean管理中创建对象提供注解实现对象创建开启组件扫描细节配置基于注解方式实现属性注入@Autowired@Qualifier@Resource@Value完全注解开发结语注解回忆什么是注解?(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)(2) 注解使用范围,注解作用在类上面,方法上面,属性上面(3)使用注解目的:简化xml配置基于注解方式实现对象创建Spring针对Bean管理中创建对象提供注解

2021-01-25 12:28:39 73

原创 Spring5学习笔记之Spring简介

目录Spring5框架概述Spring5入门下载Spring5IOC概念和原理概念原理BeanFactory接口Bean管理Spring5框架概述1、Spring是轻量级的开源的JavaEE框架2、Spring可以解决企业应用开发的复杂性3、Spring有两个核心部分:IOC和AOPIOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面,不修改源代码进行功能增强4、Spring特点(1)方便解耦,简化开发(2)Aop编程支持(3)方便程序测试(4)方便和其他

2021-01-25 10:51:45 120 1

原创 Spring5学习笔记之IOC操作基于XML方式实现

IOC操作基于XML方式实现基于XML方式创建对象基于XML方式注入属性一、 使用set方法注入二、使用有参构造器注入属性三、P名称空间注入属性(了解)基于XML注入其他类型属性一、字面量二、注入属性——外部bean三、注入属性——内部bean四、级联赋值基于XML注入集合类型属性注入集合类型属性在集合里面设置对象类型值把集合注入部分公共化FactoryBeanbean作用域默认情况如何设置单实例还是多实例singleton和prototype区别bean生命周期bean生命周期简要概述演示bean生命周期

2021-01-24 23:33:09 76

原创 稀疏数组(Java)

稀疏数组稀疏数组基本介绍代码实现结语稀疏数组基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模图解:代码实现package com.atschool.sparsearr;import java.io.*;/** * Description: * Author:江洋大盗 * Date:2020/11/28 22:01 */p

2021-01-23 16:50:40 40

原创 队列(Java)

队列的快速入门队列介绍数组模拟队列思路分析代码实现数组模拟环形队列代码实现结语队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出;后存入的要后取出。使用数组模拟队列示意图:数组模拟队列思路分析队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随

2021-01-23 16:39:09 63

原创 链表(Java)

链表介绍链表是有序链表,在内存中存储方式如下:链表是以节点的方式来存储,是链式存储每个节点包含data域,next域:指向下一个节点。如图发现链表的各个节点不一定是连续存储。链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。单链表(带头结点)逻辑结构示意图如下:单链表应用实例,使用单链表实现增删改查操作:首先创建一个节点类,(注:因为待会的双向链表使用的也是这个节点类,所以此类中写了两个指针,但是单向链表只需要使用一个即可)package com.athome.lin

2021-01-23 15:27:19 81

原创 栈(Java)

栈的总结栈的基本知识栈的介绍栈的应用场景栈的快速入门使用数组模拟栈使用链表模拟栈栈的实际应用前缀,中缀和后缀表达式的基本知识前缀表达式中缀表达式后缀表达式中缀表达式的计算逆波兰计算器的实现中缀转后缀的算法实现步骤结语栈的基本知识栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-FirstInLastOut)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈

2021-01-22 23:41:19 177

原创 递归解决迷宫问题和八皇后问题(Java)

递归递归的基本概念简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归调用机制图解递归需要遵守的重要原则执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。方法的局部变量是独立的,不会相互影响,比如n变量。如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据。递归必须向退出递归的条件逼近,否则就是无限递归,出现(StackOverflowError,栈溢出错误)当一个方法执行完毕,或者遇到ret

2021-01-22 20:13:25 185 3

原创 常见排序算法的实现与总结(Java)

排序算法基本介绍排序算法(Sort Algorithm),是将一组数据,依指定的顺序进行排列的过程。排序算法的分类内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。图解:冒泡排序基本介绍:冒泡排序(BubbleSorting)的基本思想是通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒

2021-01-22 14:06:10 62

原创 斐波那契查找算法实现(Java)

斐波那契查找算法斐波那契查找算法思想介绍斐波那契搜索就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为F[n](如果要补充元素,则补充重复最后一个元素,直到满足F[n]个元素),完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。斐波那契查找算法原理分析斐波那契查找算法与二分法查找基本类似。不同的是二分法查找是折半查找,而

2021-01-21 21:35:58 157

原创 插值查找的实现与总结(Java)

插值查找算法插值查找原理介绍:插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。公式推导:代码实现:package com.athome.search;/** * Description: * Author:江洋大盗 * Date:2021/1/21 18:48 */public class InsertValueSearch { public static void main(String[] args) { int[] arr

2021-01-21 19:45:07 84

原创 哈希表(Java)

哈希表基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。代码实现首先编写一个存放节点的类package com.athome.hashtab;/** * Description: * Author:江洋大盗 * Date:2021/1/21 16:12 */public class Hero {

2021-01-21 18:43:12 73 2

原创 使用动态规划解决01背包问题(Java)

动态规划的基本介绍在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态

2021-01-17 18:25:09 616

空空如也

空空如也

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

TA关注的人

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