自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 锁的升级过程

当有一个线程第一次访问处于无锁状态的对象时,JVM会将该对象的锁设置为偏向锁,并将该线程的ID记录在锁的对象头中。当其他线程尝试访问该对象时,它们会检查偏向锁的标识,如果与自己的线程标识匹配,则无需竞争锁,直接进入临界区。当其他线程访问锁时,它们会检查偏向锁的标识,如果与自己的线程标识匹配,则无需竞争锁,直接进入临界区。轻量级锁膨胀为重量级锁时,JVM会将对象的锁状态从轻量级锁转换为重量级锁。在无锁状态下,没有线程持有锁。首先我们要了解到锁的四种状态:无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态。

2024-07-19 15:16:24 326

原创 强引用,软引用,弱引用,虚引用

与强引用、软引用和弱引用不同,虚引用并不能通过引用来获取对象的实例。如果一个对象只有弱引用,并且没有任何强引用指向它,那么在下一次垃圾回收时,垃圾回收器会将其标记为可回收,并在适当的时候进行回收。如果一个对象只有软引用,并且没有任何强引用指向它,那么在内存不足时,垃圾回收器可能会回收这个对象,以腾出更多的内存空间。如果只有弱引用指向一个对象,并且没有其他强引用指向它,那么在垃圾回收时,即使内存充足,垃圾回收器也可能回收该对象。当一个对象只有弱引用时,垃圾回收器在下一次进行垃圾回收时就可能会回收这个对象。

2024-07-17 11:23:30 825

原创 一篇读懂128陷阱

在Java中,对于范围在-128到127之间的整数值,自动装箱后的包装器类对象会被缓存起来以提高性能。这意味着对于这个范围内的整数值,每次装箱得到的包装器类对象都是同一个对象。然而,当我们超过这个范围时,就会遇到所谓的"128陷阱"。这是因为超过范围的整数值会导致自动装箱时创建新的包装器类对象,而不是使用缓存中的对象。

2024-07-08 22:03:58 862

原创 微服务(rpc)

微服务是一种架构风格,将一个应用程序拆分为一组小型、独立的服务,每个服务都可以独立开发、部署和扩展。每个服务都有自己的业务逻辑和数据存储,并通过轻量级的通信机制来进行互相通信。

2023-08-24 17:53:37 2330 1

原创 注解和反射04--类加载

类加载器的作用:将class文件字节码内容加载到内存中,并将这些静态数据小欢欢成方法区的运行时数据节后,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口。(类构造器的构造类信息的,不是构造该类对象的构造器)。类缓存:标准的JavaSE类加载器可以按照要求查找类,但一旦某个类被加载到类加载器中,它将维持加载缓存一段时间。(3)子同类加载器:负责java-classpath或-D java.class.path所指的目录下的类与jar包装入工作,是最常用的加载器。

2023-07-28 17:12:26 744

原创 注解和反射03--Class对象

以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。(3)已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException。(7)Class类是Reflection的根源,针对任何你想动态加载,运行的类,唯有现货的相应的Class对象。(1)class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。

2023-07-28 11:07:25 290

原创 注解和反射01--什么是注解

1、注解是从JDK5.0开始引入的新技术2、注解的作用(1)不是程序本身,可以对程序做出解释(和注释相同)(2)可以被其他程序读取,比如编译器3、注解的格式注解是以“@注释名”在代码中存在的,还可以添加一些参数值,如:@GetMapping(“page-info”)4、注解在哪里使用可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

2023-07-27 17:20:16 205

原创 注解和反射02--Java反射

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。:是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或者是其他结构上的变化。:与动态语言相对应的,运行时结构不可变的语言就是静态语言。

2023-07-27 16:39:31 228

原创 Java死锁

死锁是指在并发系统中,两个或多个进程或线程因为互相等待对方释放资源而无法继续执行的状态。在死锁状态下,进程或线程将永远无法完成其任务,系统也无法继续运行。死锁通常发生在多个进程或线程同时竞争有限的资源时,每个进程或线程都持有一些资源,并且等待其他进程或线程释放它们需要的资源。当所有进程或线程都无法继续执行,因为它们都在等待其他进程或线程释放资源时,就会发生死锁。} } } });} }(1)t1先进入就绪态,所以t1有很大概率比t2先执行。

2023-07-23 17:12:31 309

原创 泛型栈详解

泛型是一种在编程语言中使用的概念,它允许在定义类、接口或方法时使用一个或多个类型参数。通过使用泛型,可以编写通用的代码,可以在不同类型的数据上工作,提高了代码的可重用性和类型安全性。泛型栈是一种利用泛型概念实现的数据结构,它可以存储不同类型的元素。在泛型栈中,可以通过指定类型参数来定义要存储的元素类型,并在栈上执行常见的操作,如压栈(Push)和弹栈(Pop)。泛型栈的定义通常会使用类或接口,并使用角括号()来指定类型参数。

2023-07-21 10:43:58 198

原创 Java虚拟机栈

局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。这句话怎么理解呢,我们来举一个例子,当我们执行一个方法的时候,里面有多少基本类型都是固定的,所以分配的变量槽也是固定的,那么分配的变量空间也是确定的。这是因为当调用这个方法时,在方法a的栈帧里面,会创建一个a,此时a=1,然后再栈帧里面,a=2,。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

2023-07-20 20:41:50 217

原创 重写equals为什么要重写hashcode

运行结果我们可以发现是true,这是因为我么重写了equals(),如果我们不重写equals的话,queryBO1和queryBO2两个对象中的属性需要全部完全相等才会返回true。如果hashcode不相等,那么就认为他们不相等。判断两个对象是否相等,我们需要先判断hashcode,在hashcode相等的条件下,再用equals进行比较,equals返回true,两个对象才相等。虽然equals比较的q2相等,但是他们的hashcode不相等,所以两个对象是不相等的,set集合才没有进行去重。

2023-07-20 11:28:59 62

原创 JDK JRE JVM

JDK是用于开发、编译、调试和运行Java应用程序的软件包,包含了Java编程语言的开发工具和Java运行时环境。JDK包括Java编译器(javac)、Java虚拟机(JVM)和Java类库,提供了一套完整的工具和环境来进行Java应用程序的开发。JDK提供了完整的开发工具和环境,JRE提供了仅运行Java应用程序所需的组件,JVM则负责解释和执行Java字节码以实现程序的运行。JDK用于开发Java程序,JRE用于运行Java程序,JVM负责解释和执行Java程序。下面用一张图片来解释一下。

2023-07-19 20:09:58 1205

原创 nginx路由

​一般我们经常在访问网站时,通常会遇到输入某个页面的网址时,出现路由的转发,重定向等。可能访问的是一个网址,出来的时候就显示的是另外的地址。这是由于使用了nginx的缘故,保护了网址的安全性​

2023-07-14 23:55:41 35525 2

原创 java魔法值

魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值,尽管其表示含义比数值较为清晰,但是仍然会产生不规范问题。a = 2;它在运行的时候不会报错,但在代码阅读时很难判断他所代表的含义。

2023-07-11 19:43:04 5159

原创 下拉若依项目时遇到Proxy error: Could not proxy request /captchaImage from localhost:81 to http://localhost:80

经过查询发现是因为vue.config.js 里面 ,proxy下 target 那个路径配置和自己设置的路径不同,将他们改成相同的路径就可以了。下拉若依项目时,遇到问题。

2023-06-30 23:09:06 5330 10

原创 线程池详解

线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。

2023-06-29 16:39:06 392

原创 数据库设计规范

我们在对一个项目进行数据库设计时,初学者一般遵循自己怎么喜欢怎么设计的原则,但是往往这种设计在以后的项目上会出现许多错误或者麻烦,因此,我们需要对数据库进行规范设计。数据宝库的规范设计不仅可以使我们的代码变得工整优雅,也可以让我们的编码过程变得舒适简便,提高工作效率,提升工作质量加强团队配合。MySQL的bigint类型,本来应该映射到Java的Long类型。在进行数据库设计时,可根据项目需求设计公共字段,例如删除标识,创建时间以及更新时间等,这些公共标识极大提升了我们的操作效率。

2023-03-01 20:06:27 478

原创 Java内存区域与内存溢出异常

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是 依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存 将会包括以下几个运行时数据区域,如图2-1所示。

2022-10-08 22:26:24 214

原创 mybaits如何书写以及作用

创建数据库和表结构。

2022-08-22 15:06:36 108

原创 项目中注解的使用

注解

2022-08-22 14:16:16 596

原创 mysql的基本查询操作

mysql的查询操作

2022-07-28 19:23:09 596

原创 消息队列.

什么是消息:A要通知,发送的东西叫做消息什么是队列:先进先出,顺序消息队列:存放消息的队列传统串行化服务的缺点:(1)耦合性强(系统各个模块之间耦合性太强)(2)系统吞吐量不大,耗时多优点:(1)系统架构简单,排查错误比较方便信息队列的优点:解耦,提升性能缺点:分布式事务解决方案事务只要是涉及到消息队列,坑定要处理事务矛盾事务:原子性。我所有的动作,要么都不执行,要么全部执行成功(张三给我转账100元,可以拆非为两个动作:张三账户减100元,我的账户加100元

2022-04-08 18:47:35 532

原创 Spring

Spring框架的介绍1. Spring框架的概述(1)Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。(2)Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE(3)Development and Design中阐述的部分理念和原型衍生而来。(4)它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层

2022-02-19 23:26:51 97

原创 HTTP协议

urlurl被称为统一资源定位符,用来表示从互联网上得到的资源位置和访问这些资源的方法。他的表示方法一般为:<协议>://<主机>:<端口>/<路径>如下我们启动一个servlet程序,来看一下我们的url表示http://localhost:8080/BuyechengServlet/login.html我们采用的就是http协议:localhost:代表的是我们本机的IP地址8080:代表我们的端口号Buyechen

2022-02-09 23:03:52 321

原创 Servlet

什么是ServletServlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类创建一个servlet编写Servlet(1)在servlet()方法中编写输出语句(2)部署配置访问servlet,将.class

2022-02-09 22:42:48 299

原创 Tomcat

网站架构和Servlet技术体系架构网站架构电脑中又一些软件,也可以安装,访问这些网站,但这是两种不同的架构我们称为B/S(网页)架构和C/sS架构(软件),无论是哪种架构,为确保数据的实时性和安全性,需要强大的云服务。基数体系tomcat创建以及启动(1)在webapps中创建问价夹,比如myweb(这个文件夹就是我们的项目)(2)创建WEB-INF文件夹,用于存放项目的核心内容(3)创建classes文件夹,用于存放.class文件(4)创建lib,存放jar包(

2022-02-09 22:34:14 301

原创 递归算法.

定义函数调用其本身 /** * 定义一个方法 来代表 f(n) * @param n * @return 递归的方式必须要有返回值 */ public static int recursion(int n){ // 首先定义出方法的出口 if(n==1){ return 1; } return recursion(n-1) +1;}斐波那契数列public static int Fibonacci(

2022-02-07 21:45:28 176

原创 java队列

特点先进先出实现public class Queue { private int[] arr; // 该数据用于存放数据, 模拟队列 private int front; // 队列头 private int rear; // 队列尾 //构造方法 public Queue(int size){ arr = new int[size]; front = 0; rear = 0; }

2022-02-07 21:12:13 164

原创 哈希算法.

有一种方法,可以将时间复杂度降低到O(1)一个数组长度为十,查询一个数值只需要数值%arr.length,这样的时间复杂度很低如果有两个想同的数值,或存储的数据超出的数组的长度。我们叫他哈希碰撞,而链表可以有效解决哈希碰撞问题。可链表达到一定长度时,又会产生新的问题,这是我们用到了红黑树。当数据达到一定规模时,数组扩容这样就形成了哈希表...

2022-02-07 21:06:09 283

原创 Java栈

特点先进后出实现public class Stack { //声明一个数组 private int[] arr; //声明头结点 private int flage = 0; public Stack(int size) { arr = new int[size]; } //添加数据 public void add(int x) { //判断栈是否已满 if (flage == arr.length) { //如果满了,实现扩容 in

2022-02-07 21:01:12 185

原创 Java集合

java集合可分为Set、List、Queue和Map四种体系。Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。...

2022-02-07 20:56:24 199

原创 map集合

HashMap集合特点常用方法(1)put(Kkey,V value) 将键(key)/值(value)映射存放到Map集合中public class Test { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("Tom", 100);//..

2022-02-07 20:54:04 418

原创 LinkedList集合

特点常用方法(1)添加boolean add(Object element) 它将元素附加到列表的末尾。boolean add(int index,Object element) 指定位置插入。void addFirst(E element) 元素附加到列表的头部void addLast(E element) 元素附加到列表的尾部LinkedList<Integer> linkedList = new LinkedList<>();linkedLi

2022-02-07 20:46:05 208

原创 ArrayList集合

特点常用方法(1)add(Object element) 向列表的尾部添加指定的元素。(2)size() 返回列表中的元素个数。(3)get(int index) 返回列表中指定位置的元素,index从0开始。public class Test { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); /..

2022-02-07 20:40:18 261

原创 set集合

HashSet集合特点常用方法(1)add(Object o):向Set集合中添加元素,不允许添加重复数据。(2)size():返回Set集合中的元素个数public class Test { public static void main(String[] args) { HashSet<String> set = new HashSet<String>(); //调用HashSet无参构造方法——>创建HashMap对象并给

2022-02-07 20:13:08 448

原创 Java运算符

在java当中,使用运算符+、-、*、/ 表示加减乘除,当参与 / 运算的两个操作数都是整数的时候,表示整数除法;否则表示浮点数。整数的求余操作用 % 表示。强制类型转换在必要的时候,int类型的值将会自动的转化为double类型。但另一方面,有时候也需要将double转化为int.。在java当中允许这种数值之间的类型转化。当然也会有以一些数据丢失。在这样情况之下,需要通过强制类型转换实现这个操作,强制类型的语法格式是通过()当中给出的想要转化的目标类型。public static vo

2022-02-06 22:12:00 65

原创 Object类

Object类是所有类的超类一、为什么重写equals()方法一定要重写hashCode()方法想要接受这个问题我们必须了解一下三个对象==在引用数据类型当中进行的是地址的比较,equals()方法在Object类当中其底层也是用==比较地址,但是不同的类可能会重写equals()方法,比如String类中的equals()方法就是先比较地址是否相同,如果相同直接返回true,地址不同在比较值,如果值相等那么同样返回true();Object类当中的equals()方法本质是比较地址是否相等

2022-02-06 22:01:42 54

原创 计算机网络

计算机的发展史原始部落中,食物的增加是人类面临数据的存储与计算。石头等物品成为了当时的计算器(存储数据)。计算机的发展史原始部落中,食物的增加是人类面临数据的存储与计算。石头等物品成为了当时的计算器(存储数据)。随着部落的壮大,原始的数据计算方法已经不能满足庞大的信息量,出现了以一替多的方式。用某种物品代替数字并发明了进制。计算器的出现代替了部分人脑的计算过程。第三次工业革命,电子计算机应运而生。...

2022-02-06 21:53:29 971

原创 Java泛型

我们知道,Java本身是一个强类型的语言,若我们int a = 10;实际上就是定义了一个32bit的储存单元。若我们定义float f = 10.0;实际上是定义了一位为数值位,八位为接位,剩下的23位为数值位。即在Java中定义什么样的类型就开辟什么样的空间。而对于一个队列,用什么类型,就要创建什么类型的数组。若我们每次使用都要创建队列,那么成本是非常高的,所以我们就用到了泛型。我们在类后面加一个花括号,就是指泛型public class Queue <ca.

2022-02-06 21:25:47 68

空空如也

空空如也

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

TA关注的人

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