java
文章平均质量分 77
卿乌
这个作者很懒,什么都没留下…
展开
-
JVM内存模型与调优参数
JVM内存模型本地方法栈本地方法栈为虚拟机使用到的 Native 方法服务Native 方法是 Java 通过 JNI 直接调用本地 C/C++ 库,可以认为是 Native 方法相当于 C/C++ 暴露给 Java 的一个接口如notify,hashcode,wait等都是native方法堆通过new关键字创建的对象都会使用堆内存堆是线程共享的堆中有垃圾回收机制堆内存溢出(OutOfMemoryError)死循环创建对象堆内存诊断1.命令行方式‘jps’获取运行进程号‘jmap原创 2022-01-15 00:26:35 · 441 阅读 · 0 评论 -
JAVA的原子性,可见性,有序性与内存屏障
JAVA的原子性,可见性,有序性原子性原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。只有简单的读取、赋值(而且必须是将数字赋值给某个变量,变量之间的相互赋值不是原子操作)才是原子操作。java内存模型只保证了基本读取和赋值是原子性操作,如果要实现更大范围操作的原子性,可以通过synchronized和Lock来实现。由于synchroniz原创 2022-01-11 23:46:54 · 528 阅读 · 0 评论 -
JVM之Classfile文件解析
JVM之Classfile文件解析文章目录JVM之Classfile文件解析1.魔数2.class文件版本号3. constant_pool_count(常量池个数)4. constant_pool(常量池)5.access_flag6.Method属性7.Fields属性8.双亲委派9.如何打破双亲委派1.魔数我们在学习JVM时通常会从class文件入手。那么魔数就是我们认识的第一个东西。每个Class文件的头4个字节称为魔数(Magic Number)唯一作用是用于确定这个文件是否为一个能被原创 2022-01-10 01:40:01 · 804 阅读 · 0 评论 -
缓存的雪崩,击穿,穿透
缓存的雪崩,击穿,穿透前言在将今天的内容之前,我们先来了解一下什么是缓存,缓存是用来干什么的,常用的缓存有哪些?什么是缓存我们要知道缓存其实就是一个临时的存储器,那么缓存里的数据就不是持久化的数据,只是在我们查询的过程中,来提高我们的效率的东西,那么我们对数据库的添加和删除,修改其实和缓存的关系不大,主要是查询。缓存的作用缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高原创 2021-10-17 13:35:11 · 738 阅读 · 1 评论 -
springmvc 国际化实例
springmvc 国际化实例springMVC.xml配置文件设置<bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="i18n"/> </bean> <bean class="org.springframework.web.servlet.i18原创 2021-09-27 22:19:02 · 173 阅读 · 0 评论 -
JVM之 永久代与元空间
JVM之 永久代与元空间在介绍永久代之前我们要先来回顾一下我们的JVM内存模型在JVM中场被提到的有栈,堆,方法区。除了这些其中还包括有我们不常提到的本地方法栈,以及程序计数器。程序计数器这是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器。如果当前线程正在执行的是:Java方法计数器记录的就是当前线程正在执行的字节码指令的地址本地方法那么程序计数器值为undefinedJava虚拟机栈(JVM Stack)相对于基于寄存器的运行环境,JVM是基于栈结构的运行环境。栈结构原创 2021-09-20 23:52:21 · 1567 阅读 · 1 评论 -
Java之 SpringMVC 运行流程
Java之 SpringMVC 运行流程什么是SpringMVCspringMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度百科上有一个很好的解释:意思是说,springMVC是spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个原创 2021-09-20 16:14:43 · 349 阅读 · 0 评论 -
Java之spring(二)Aop与JdbcTemplate
Java之spring(二)Aop与JdbcTemplate在说Aop之前我们一定要先了解动态代理模式,在有动态代理的基础了,Aop就手到擒来了。1、动态代理动态代理分为两类 : 一类是基于接口动态代理 , 一类是基于类的动态代理基于接口的动态代理----JDK动态代理基于类的动态代理–cglib现在用的比较多的是 javasist 来生成动态代理JDK的动态代理需要了解两个类核心 : InvocationHandler 和 ProxyInvocationHandler原创 2021-09-15 21:44:40 · 258 阅读 · 0 评论 -
Java之spring新手教程(包教包会)
Java-Spring(一)之IoC以及bean的生命周期文章目录Java-Spring(一)之IoC以及bean的生命周期一、什么是Spring二、Spring的核心三、什么是耦合四、spring项目的搭建五、配置文件六、IoC(控制反转)七、属性注入的方式1、设值注入2、构造方法注入八、DI(依赖注入)九、集合属性的注入1、内部注入2、外部注入十、Spring管理Bean的作用域1、singleton(单实例)2、prototype3、request4、session5、global session十原创 2021-09-13 17:23:54 · 11912 阅读 · 2 评论 -
Java之Lambda表达式
1、什么是Lambda表达式Lambda表达式,也可称为闭包也称匿名函数。闭包函数:声明在一个函数中的函数,叫做闭包函数。可以理解成一个方法中的方法,没有方法名,但是有参数与方法体。Lambda表达式是java1.8的一个新特性,早于1.8版本无法使用。它是推动Java8发布的最重要的新特性。2、为什么使用Lambda表达式我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递)。Lambda允许把函数作为一个方法的参数,使用Lambda表达式可以写出更简洁、更灵原创 2021-08-28 20:12:53 · 320 阅读 · 1 评论 -
Java之线程池的原理及实现
Java之线程池的原理及实现什么是线程池?Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁所造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可以进行统一分配,调优和监控。但是,要合理利用线程原创 2021-08-17 23:10:04 · 653 阅读 · 4 评论 -
Java之强引用,软引用,弱引用与虚引用
Java之强引用,软引用,弱引用与虚引用前言我们都知道在Java中,垃圾处理是有专门的垃圾回收机制的,有一个专门处理这种事件的东西叫做垃圾处理器也被称为GC,也就是垃圾的处理是不用我们自己去手动回收的,那么哪些东西会被GC回收呢?1、强引用,软引用,弱引用与虚引用的出现在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁原创 2021-08-10 23:10:01 · 289 阅读 · 2 评论 -
Java之深拷贝与浅拷贝的理解
Java之深拷贝与浅拷贝的理解文章目录Java之深拷贝与浅拷贝的理解前言1、引用拷贝2、对象拷贝浅拷贝与深拷贝浅拷贝深拷贝前言拷贝一词大家都不陌生,在我们日常使用计算机的时候,Ctrl+C就是一种拷贝,但是在java中拷贝有不同的方式,在拷贝的类型上也会有不一样的地方。提示:以下是本篇文章正文内容,下面案例可供参考1、引用拷贝拷贝一个对象的引用,例如public class Clone { public static void main(String[] args) {原创 2021-08-08 22:06:09 · 260 阅读 · 0 评论 -
Java中的值传递和引用传递
Java中的值传递和引用传递在Java中有很多的传递方式,就比如我们今天要说的值传递和引用传递。其实在日常的学习中我们在敲代码的过程中会遇到这样一种情况1、我们传递参数到对应方法里,然后通过方法里的一系列运算,最后的原本对象的值也改变了。2、但是我们有时候对一个变量进行计算时,返回结果之后却又变成了原本的值,这并不是我们的方法不对而是没有搞清楚变量的传递规则。什么是值传递和引用传递值传递实参传递给形参的值,实参和形参再内存上是两个独立的变量,对形参的修改不会影响实参的值例如:public原创 2021-08-07 16:12:15 · 228 阅读 · 1 评论 -
HashMap的底层原理
HashMap的的底层原理文章目录HashMap的的底层原理前言一、数组和链表的优缺点二、什么是HashMap三、HashMap的特点四、JDK1.7与JDK1.8的HashMap区别五、HashMap的容量与扩容机制六、HashMap存储原理与存储流程七、hash冲突前言HashMap是Java语言中用的最频繁的一种数据结构。同样也是面试的时候必问 的问题之一,在学习Java语言的过程中只有搞懂这一系列的数据结构的底层原理才能去灵活的运用,最终提高自己的工作效率。在讲解HashMap原创 2021-08-02 21:11:46 · 514 阅读 · 0 评论 -
数据结构之二分搜索树BinarySearchTree
数据结构之二分搜索树提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录数据结构之二分搜索树前言一、节点、属性的设置二、二分搜索树的添加二、遍历三、删除总结前言什么是二分搜索树?二分搜索树是一种特殊的二叉树,当一个二叉树满足所有左儿子的值小于自己,所有右儿子的值大于自己,这样一个树就被称为二分搜索树。注意!!二分搜索树的节点一定要具备可比性!!一、节点、属性的设置节点的定义,首先有值,还有左右孩子private class Node{ pri原创 2021-07-30 21:39:37 · 191 阅读 · 0 评论 -
全排列的基本思想以及实现
什么是全排列从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。通俗来讲:全排列,顾名思义全部排列,就是给出一个字符串,我们要把他的所有的排列方式全部写出来,如:ABC ,他的排列方式有,ABC,ACB,BAC,BCA,CAB,CBA。一共6种。如果字符越多排列方式也越多。但是要注意的是,ABB,这种的字符串只有三种排列方式。如何实现全排列暴力列举这种方法虽然简单,但是不建议使用。基本思想就是用n(n代表原创 2021-07-24 20:47:19 · 1141 阅读 · 0 评论 -
剑指offer第52题
剑指offer第52题两个链表的第一个公共节点如题:第一思路,哈希集合由于我们是要求出两个链表的第一个公告节点,我们首先应该判断是否一个链表A的子两边是否被链表B包含,我们可以用一个新的链表去接到链表A,然后不停的从前往后遍历,看是否包含当前的节点,(注意是看节点而不是值是否包含)public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { Set原创 2021-07-23 15:35:19 · 140 阅读 · 0 评论 -
HashMap的简单介绍与底层数据结构
文章目录前言一、Hash结构1.简单的数据的结构以及查询时间复杂度2.哈希冲突二、HashMap的基础属性三、HashMap的继承关系四、HashMap实现原理总结前言在讨论HashMap的底层原理之前我们需要一定的基础,HashMap在Java的学习过程中是一个重点,同样也是一个难点。看过我前两期博客的朋友应该对简单的数据结构有一定的了解,没有也没关系,下面我来统一讲解一下几个简单的帮助理解的知识点一、Hash结构1.简单的数据的结构以及查询时间复杂度数组:采用一段连续的存储单元来存储数原创 2021-07-11 23:19:59 · 332 阅读 · 2 评论 -
数据结构之二叉树
文章目录前言一、什么是二叉树?二、二叉树的代码实现三、树的基本性质四、特殊的二叉树1.斜树2.满二叉树3.完全二叉树五、二叉树的性质六、二叉树的遍历1.前序遍历2.中序遍历3.后序遍历总结前言在计算机的编程过程中,我们会用到很多的不同种类的数据类型,数、队列、链表等等,每一种不同的的数据类型都有不同的数据结构,在我们接触更多的数据结构时我们要有一定的基础,今天就来认识二叉树。一、什么是二叉树?在学习二叉树之前我们先来搞清楚什么是树。定义:树是具有n个结点的有限集合。当n=0时,有且仅存在.原创 2021-07-11 18:32:29 · 854 阅读 · 1 评论 -
数据结构之双端队列
文章目录前言一、双端队列模型二、双端队列的实现三、在前面插入元素四、在后面插入元素五、检查队列是否为空六、检查队列是否已满总结前言双端队列有两个端部,首部和尾部,并且项在集合中保持不变。双端队不同的地方是添加和删除项是非限制性的。可以在前面或后面添加新项;同样,可以从任一端移除现有项。一、双端队列模型双头队列是队列数据结构的一种更通用的形式,它允许从两端(即正面和背面)插入和删除元素。二、双端队列的实现在这里,我们将使用循环数组实现双端队列。 它将具有以下方法:push_back:在.原创 2021-07-11 14:34:26 · 4344 阅读 · 0 评论 -
Java之七种单例模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、懒汉模式(线程安全)二、双重检查模式 (DCL)三、静态内部类单例模式四、枚举单例五、使用容器实现单例模式总结前言在之前的博客中我们简单的介绍了单例模式,并且举例说明了其中的懒汉(不安全),饿汉(安全)的两种 不同的单例模式,现在我们来学习另外的5种单例模式。一、懒汉模式(线程安全)我们之前介绍的懒汉模式是线程不安全的,因为在单例模式中只存在一个实例,但是之前的懒汉模式在多线程中,唯一的一个实例容易被覆盖,导致信原创 2021-07-04 13:06:58 · 238 阅读 · 3 评论 -
Java设计模式之工厂模式
Java设计模式之工厂模式一、简单工厂模式简单工厂模式(Simple Factory Patterm):又称为静态工厂方法(Static Factory Method)模式,它属于类的创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。例如:DateFormart 类在获取实例的时候可以看到,在获取的参数不同时(在判断timeStyle datestyle)返回不同DateFormart的子类。这就是简单原创 2021-05-27 01:28:58 · 133 阅读 · 1 评论 -
java设计模式之单例模式
单例模式在Java的编程设计中,单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象...原创 2021-05-25 00:23:46 · 185 阅读 · 0 评论 -
类的加载顺序
类的加载顺序前言在学习计算机语言的过程中,在编辑好代码语言之后,代码的执行过程中,执行的优先级是有一定先后顺序的public class TestClass { public static TestClass t = new TestClass(); { System.out.println("代码块"); } public TestClass(){ System.out.println("构造函数"); } pub原创 2021-05-22 17:09:19 · 281 阅读 · 4 评论