自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis架构

整体思路是先到先得,例如A、B、C三个哨兵节点,A向B、C发送成为领导者的申请,如果B、C没有同意过其他节点的申请,就同意A的申请,当A被同意的次数超过设定的阈值,那么它就成为领导者了。新的领导者会从当前的从节点中选举出一个作为新的主节点。

2024-02-05 15:54:58 387 1

原创 环形队列原理

环形队列是一种特殊类型的队列,其底层数据结构是一个固定大小的数组,队列的头尾相连,形成一个环。当队尾到达数组的末尾时,下一个元素会从数组的起始位置开始,形成循环。

2023-12-19 09:08:46 385

原创 为什么重写equals方法时必须重写hashcode方法

如果你在 equals() 方法中使用对象的字段进行比较,而在 hashCode() 方法中没有使用相同的字段,那么两个相等的对象可能会产生不同的哈希码,导致在集合等数据结构中无法正确找到对象。一致性: 如果两个对象通过 equals() 方法比较是相等的,那么它们的 hashCode() 方法应该返回相同的值。不一致性: 如果两个对象通过 equals() 方法比较是不相等的,它们的 hashCode() 方法返回相同的值是允许的,但这可能导致哈希表中的冲突增加。

2023-11-13 09:46:07 47

原创 Spring常用注解

应用在 MVC 层(控制层),以前在编写Controller方法的时候,需要开发者自定义一个Controller类实现Controller接口,实现handleRequest方法返回ModelAndView。并且需要在Spring配置文件中配置Handle,将某个接口与自定义Controller类做映射。在采用@Contoller注解的方式,可以使接口的定义更加简单,将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。

2023-11-02 20:40:55 45

原创 通过反射创建对象并赋值的方式

public static void main(String[] args) { //通过反射创建对象Class beanClass = Class.forName("app.test.Student"); Student student= (Student) beanClass.newInstance(); //利用反射将获取字段 Field declaredField = student.getClass()....

2021-06-02 16:53:38 631

原创 计算机网络学习

物理层1.物理层要解决什么问题、主要特点是什么?物理层的主要任务是确定与传输媒体的接口有关的一些特性,包括:机械特性、电气特性、功能特性和过程特性。2.一些术语:消息如语音、文字、图像、视频。数据运送消息的实体,通常是有意义的符号序列。信号数据的电气或者电磁的表现。信号分为两类:模拟信号(或称连续信号,取值是连续的),数字信号(或称连续信号,如0和1)3.信道信道用来表示向某一个方向传送信息的媒体。信道分为三种基本方式:单向通信(单工通信)–类比单向车道双向交替通信(半双工通

2021-05-06 09:25:13 1298

原创 Maven学习

一句话介绍maven是Apache公司的开源项目,它是项目构建工具,用来管理依赖(jar包管理)。Maven优点减少项目的大小(没有jar包)maven项目需要jar包时,只需要在项目中配置jar包的位置信息,maven项目根据位置信息到jar包仓库中查找。不要把jar包拷贝到项目中。...

2021-04-15 06:28:04 77

原创 单例模式的几种方式整理

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要重复实例化该类的对象。保证一个类仅有一个实例,并提供一个访问它的全局访问点。优点是在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。避免对资源的多重占用(比如写文件操作)。单例模式的实现有多种方式例

2021-03-27 17:04:52 139

原创 Java深复制与浅复制

浅复制被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对对象中的基本数据类型及String类型进行拷贝,但不会复制主对象里面的引用对象。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。深复制除了浅复制要复制的值外,还负责复制引用类型的数据。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深度复制把要复制的对象所引用的对象都复制了一遍,而这种对被引用到的对象的复制叫做间接复制。 深度复制要

2021-03-25 14:17:41 56

原创 设计模式笔记

1.简单工厂模式简单工厂模式又 叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。例如以简单工厂模式实现一个运算器:UML图:代码: //父类 public abstract class Operate { double numberA; double numberB; public abstract double getResult(); }

2021-01-06 10:17:40 167

原创 编译器优化技术

1.方法内联定义:从代码层面看就是把目标方法的代码原封不动地“复制”到发起调用的方法之中,避免发生真实的方法调用而已。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。在方法退出之后,都必须返回到最初方法被调用时的位置,程序才能继续执行。这种转移操作要求保护

2020-12-14 10:26:17 141

原创 JDK8方法区及常量池的变化

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,所管理的内存将会包括以下几个运行时数据区域:(图片来源于《深入理解Java虚拟机》)方法区的定义:jdk8虚拟机规范中对方法区的定义:方法区是各个线程共享的内存区域,它存储每个类的结构信息,例如运行时常量池,字段(通过引用常量池中的常量来描述)和方法等数据,以及方法和构造函数的代码,包括用于类和实例初始化以及接口初始化的特殊方法。其中灰色部分:方法区域是在虚拟机启动时创建的。尽管方法区域在逻辑上是堆的一部分,

2020-11-26 14:22:43 2173

原创 Java变量

java中的变量按类型可以分为基本数据类型变量和引用类型变量。按作用域可以分为局部变量、实例变量和类变量(static)。局部变量:局部变量在方法中定义,引用类型变量:例如Cat tom=new Cat();其中引用类型变量tom存在与虚拟机栈中,对象new Cat()存在与堆中;基本数据类型变量:int a=1;a和1都存在于虚拟机栈中;实例变量:实例变量不会独立于对象而存在,其中:引用类型变量:private Cat tom=new Cat();存在与堆中。基本数据类型变量:priva

2020-11-24 19:01:24 92

原创 虚拟机字节码执行引擎

1.栈帧Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息,从Class文件格式的方法表中找到以上大多数概念的静态对照物。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译Java程序源码的时候,栈帧中需要多大的局部变量表,需

2020-11-02 15:57:07 87

原创 类加载过程

Java类加载机制:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。类加载过程:为支持运行时绑定,解析过程在某些情况下可在初始化之后再开始,除解析过程外的其他加载过程必须按照如图顺序开始。1.加载通过全限定类名(符号引用?)来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的 java.lang.Class 对

2020-10-28 17:08:26 75

原创 JVM垃圾收集器

HotSpot垃圾收集器

2020-10-20 21:02:14 60

原创 HashMap的底层原理

发生场景:1.多线程2.扩容3.JDK1.7及之前版本扩容源码:void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; ... Entry[] newTable = new Entry[newCapacity]; ... transfer(newTable, rehash); table = newTable;

2020-08-26 11:52:17 210

原创 红黑树的插入和删除

红黑树的性质:每个节点或者是红色,或者是黑色;根节点是黑色的;每个叶子节点(NIL)是黑色的。注意:这里的叶子节点,是指为空的叶子节 点;如果一个节点是红色的,则它的子节点必须是黑色的;从任意一个节点到其叶子的所有路径中,所包含的黑节点数量是相同的(可知,没有一条路径会比其它路径长出两倍,因而红黑树是接近平衡的二叉树);红黑树插入插入情景1:红黑树为空树最简单的一种情景,...

2020-08-24 16:07:31 2060

原创 深入理解volatile关键字

在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile可以理解为synchronized的轻量级实现,能够保证在多处理器开发中保证共享变量的“可见性”。volatile的性能比synchronized好,volatile只能用于修饰变量。可见性:意思是当一个线程修改一个共享变量时,其他线程可以读到这个修改的值。原子性:指该操作不可再分了,同一时刻只能有一个线程来对它进行操作。volatile的定义: java语言允许线程访问共享变量,为了确保共享变量能够准确和

2020-08-04 21:09:24 131

空空如也

空空如也

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

TA关注的人

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