自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL的原子性是如何保证的?

这意味着即使在事务执行过程中发生故障,MySQL可以通过回滚日志来撤销事务中的操作,使数据回滚到事务开始前的状态,从而保证原子性。当事务需要回滚时,MySQL可以使用回滚日志中的信息来还原修改操作,将数据恢复到事务开始之前的状态。回滚日志的存在可以确保在事务回滚时的原子性,即将所有操作全部回滚,不会留下部分修改。在事务执行期间,MySQL会根据事务的隔离级别对涉及的数据进行加锁,防止其他事务对数据进行修改。综上所述,MySQL通过事务日志、回滚日志和锁机制的配合使用来保证事务的原子性。

2023-07-18 22:34:24 2540

原创 MySQL 索引失效的几种情况

MySQL 中提升性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并加快查询的速度,因此索引对查询的速度有着至关重要的影响。使用索引可以快速定位表中的某条记录,从而提高数据库的查询的速度,提高数据库的性能如果查询时没有使用索引,查询语句就会扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢其实,用不用索引,最终都是优化器说了算。优化器是基于什么的优化器?

2023-03-27 21:56:00 987 1

原创 Idea 常用快捷键

idea 常用快捷键说明

2022-11-27 16:48:57 1583

原创 stream()流的一些常用方法

extends R>> mapper)返回一个流,其中包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果。super T> predicate:返回由与给定谓词匹配的此流的元素组成的流(根据条件对数据进行过滤),返回值类型为Stream。返回一个Optional描述此流的某些元素,如果流是空的,返回的是空的 Optional。skip(long n)再丢弃流的第一个元素后,返回由该流的剩余元素组成n的流。根据提供的流,返回此流中的最大元素。

2022-09-20 11:02:24 437

原创 事务的特性及隔离级别

逻辑上的一组操作,要么全都执行,要么全都不执行。在事务的并发执行过程中,往往会产生以下几个问题❓:不可重复读和幻读的区别不可重复读在于对数据的修改,表现在某个数据上。而幻读则是对数据的增加或删除,表现在数据行的增加或减少。👀 MySQL的InnoDB存储引擎默认的是可以重复读......

2022-06-30 20:45:00 240

原创 详解Spring中Bean的生命周期

从对象创建到对象销毁的过程。Spring的IOC容器可以管理bean的生命周期,其允许在bean的生命周期的特定时间点执行相应的任务。创建的bean对象配置文件运行注意:单例bean和多实例的bean的创建时间是不同的,那么他们的初始方法和销毁方法的执行时间也稍微不同单例bean的生命周期多例bean的生命周期bean的后置处理器允许在初始化方法执行前后对bean做额外的操作,bean的后置处理器对IOC容器中的所有bean实例逐一处理,而非单一处理。其典型应用是:检查bean属性的正确性或根据特定的

2022-06-28 16:35:49 648

原创 JUC的一些知识点

1、什么是CASCAS的全称是Compare-And-Swap,意为:比较并替换,它是CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的

2022-05-11 22:24:15 260

原创 DNS解析:当我们在浏览器中输入一个URL时发生了什么?

2.1 、什么是DNS?DNS(Domain Name System,域名系统) : 简单来说就是将我们输入的域名映射为相对应的IP地址,这使得我们在想访问某个网站时,直接输入相对应的域名就行了,而不必去记那些难记的IP地址.2.2、图解:当输入一个URL时发生了什么2.3、文字说明:当输入一个URL时发生了什么当用户输入一个地址时,比如:www.baidu.com,此时会先查询浏览器是否缓存了这个域名,如果缓存了,则直接返回此域名相应的IP地址,解析结束。若浏览器中没有缓存这个域名,则查询本

2022-04-19 21:26:42 815

原创 JUC学习笔记

1、关于 wait()方法虚假唤醒的问题wait()方法一个特点就是在哪里沉睡就会在哪里醒来,所以,如果wait()方法没加在循环里,就会出现一个只有第一次判断生效,第二次则不进行判断,直接往下执行造成虚假唤醒的情况,从而导致数据出错。下图中,把 if改为 while解决虚假唤醒问题2、线程的定制化通信// 提供功能class Th { private int flag = 1; ReentrantLock lock = new ReentrantLock();

2022-04-19 11:05:59 329

原创 关于ArrayList()线程不安全问题的解决方法

线程不安全条件下的并发操作 public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>(); for (int i = 0; i < 30; i++) { new Thread(()->{ arrayList.add(UUID.randomUUID().toString(

2022-04-01 21:16:02 904

原创 Elasticsearch怎样实现自定义分词

🔊此次采用在Docker下演示ik分词器和Nginx结合使用实现分词效果首先,如果没有下Docker,可点击此处根据步骤下载Docker下载完成后,我们要使用docker命令下载Elasticsearchmkdir -p /mydata/elasticsearch/config # 用来存放配置文件mkdir -p /mydata/elasticsearch/data # 数据echo "http.host: 0.0.0.0" >/mydata/elasticsearch/conf

2022-03-29 17:27:01 6133

原创 Docker安装Elasticsearch启动报错:expecting token of type [START_OBJECT] but found [VALUE_STRING]]

Docker安装Elasticsearch启动报错Elasticsearch在启动后,几秒内停止运行,查看日志信息命令:docker logs elasticsearch报错:expecting token of type [START_OBJECT] but found [VALUE_STRING]]。这个报错是说 等待类型[START_OBJECT]的token,但发现[VALUE_STRING]]。原因是: 在我们编写elasticsearch.yml 时 ,http.host:0.0.0.0

2022-03-28 22:34:29 5172

原创 拦截器、过滤器、监听器的区别

拦截器: 从字面意思来讲,他的功能就是进行拦截操作,Spring MVC中拦截器主要是通过 HandlerInterceptor来实现的,主要功能是拦截用户的 URL请求并进行相应的处理,比如说用来判断用户是否登录了,进行权限验证等。实现拦截器的方式实现 HandlerInterceptor接口实现 WebRequestInterceptor接口实现 HandlerInterceptor接口public class Interceptor implements HandlerIntercept

2022-03-27 21:58:20 917

原创 数据结构之冒泡排序

文字描述(以升序为例)依次比较数组中相邻两个元素大小,若a[i]>a[+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后重复以上步骤,直到整个数组有序优化方式​ 每轮冒泡时,最后一次交换索引可以作为下一轮冒泡的比较次数,如果这个值为零,表示整个数组有序,直接退出外层循环即可基础冒泡 @Test public void maopao(){ int[] a = {1, 3, 4, 2, 10, 5, 6}; for (in

2022-03-24 22:25:04 864

原创 Spring MVC的工作流程

1、什么是Spring MVC?SpringMVC是基于Java实现的一种MVC设计架构的轻量级框架。MVC即M:Model主要用于完成业务操作V: View 展示数据C:Controller 获取数据,处理数据,将数据交给视图这种分层设计有效的进行了解耦操作,使设计更加灵活。2、Spring MVC的工作流程Web容器启动,通知Spring进行初始化容器,加载Bean的类信息,初始化单例Bean遍历所有Bean,获取每一个Controller中每一个方法的 URL,把 Contro

2022-03-22 22:20:06 2279

原创 RabbitMQ学习笔记

RabbitMQ学习笔记一、MQ简介1.、什么是 MQMQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常 见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不 用依赖其他服务2 、为什么要用 MQ流量消峰​ 举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰

2022-03-21 19:27:06 3295 1

原创 什么是双亲委派机制?

简介Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一.种任务委派模式。(图源:尚硅谷JVM教程)双亲委派机制的优点优势避免类的重复加载保护程序安全,防止核心API被随意篡改自定义类: java. lang. String(有引导类加载器加载,不会加载自定义String)自定义类: java. lang.

2022-03-19 23:37:28 3784

原创 String s=new String(“abc”)一共创建了几个对象?

答案分为两种情况:第一种情况:常量池中没有此对象:2个第二种情况:常量池中有此对象:1个再讲为什么之前,先看一看百度百科对常量池的介绍:​ 常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如Str

2022-03-18 17:06:24 3579 1

原创 RabbitMQ常用命令

添加开机启动 RabbitMQ 服务:chkconfig rabbitmq-server on启动服务:/sbin/service rabbitmq-server start查看服务状态:/sbin/service rabbitmq-server status停止服务(选择执行):/sbin/service rabbitmq-server stop开启 web 管理插件:rabbitmq-plugins enable rabbitmq_management关闭应用的命令为 :rabbitmqctl

2022-03-17 21:28:42 4395

原创 Mybatis中的一级缓存和二级缓存

一级缓存一级缓存是 SqlSession级别的。通过同一个SqlSession下访问同一个sql语句,第一次会从数据库中获取,第二次直接从缓存中获取,不在经过数据库导致一级缓存失效的原因在两次查询同一语句之间执行了任意的增删改操作手动清空一级缓存(.clearCache())不同的SqlSession对应不同的缓存同一SqlSession下的不同语句二级缓存二级缓存是 SqlSessionFactory级别的,通过同一个 SqlSessionFactory创建出来的 SqlSess

2022-03-15 10:29:23 229

原创 volatile关键字介绍及synchronized和volatile的区别

关于synchronized的解释请参考:https://blog.csdn.net/A798194701/article/details/123053501首先volatile 只能用来修饰变量,当一个变量被它修饰后具备如下属性:禁止指令重排什么是指令重排?指编译器或CPU为了优化程序的执行性能而对指令进行重新排序的一种手段,重排序会带来可见性问题,所以在多线程开发中必须要关注并规避重排序。即从源代码到指令序列的重排序。从源代码到最终运行的指令,会经过如下两个阶段的重排序。第一阶段,

2022-03-07 19:05:00 122

原创 Java反射学习笔记

简要说明Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。补充:动态语言和静态语言动态语言是一类在运行时可以改变其结构的语言:

2022-03-02 09:14:16 325

原创 mybatis中实体中的属性和表中的字段不一样时,如何解决

在sql语句处使用别名在mybatis-config.xml(全局配置文件)中开启驼峰命名规则<settings> <setting name="mapUnderscoreToCamelCase" value="true"/></settings>在Mapper映射文件中使用resultMap来自定义映射规则<resultMap type="要映射的类" id="自定义这个resultMap的名字"> </resultMa.

2022-02-28 14:47:42 287

原创 Java之IO流学习笔记

File的构造器public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。绝对路径:是一个固定的路径,从盘符开始。相对路径:是相对于某个位置开始public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。public File(File parent,Stri

2022-02-28 14:46:06 819

原创 面试题: ArrayList、LinkedList. Vector三者的异同?

相同点:三个类都实现了List接口,数据存储特点相同:存储有序,可重复的数据不同点:ArrayList:作为List接口的主要实现类,线程不安全,效率高,底层采用Object[]数组存储LinkedList:对于频繁的插入,删除操作适用,效率比ArrayList高。底层使用双向链表存储Vector:List接口的古老实现类,线程安全,效率略低,底层使用Object[]存储.ArrayList的源码分析jdk7情况下ArrayList list = new ArrayList();//底层创

2022-02-25 20:49:02 723

原创 面试题: String、StringBuffer、StringBuilder三者的异同

String、StringBuffer、StringBuilder三者的异同相同点:底层使用char[]存储不同点String为不可变的字符序列StringBuffer可变的字符序列,线程安全,比StringBuilder效率低。默认开辟大小为16的空间,需要扩容时扩容为原来的2倍加2StringBuilder可变的字符序列,jdk5.0新增,线程不安全,效率高StringBuilder和StringBuffer的容量int newCapacity = (value.leng

2022-02-22 13:53:56 204

原创 字符串(字符串的拼接及一些常用方法)

字符串拼接特性 public static void main(String[] args) { String a = "a"; String b = "b"; String c = "a" + "b"; String d = "ab"; String e = a + "b"; String f = "a" + b; String g = a + b; String h = (a

2022-02-22 13:51:11 1021

原创 Java之同步锁

同步代码块加锁的为需要被同步的代码共享数据,多个线程都需要操作的数据同步监视器,即锁,任何一个对象都可以成为锁。、要求:锁必须是唯一的,多线程之间必须共用一把锁实现Runnable接口时,我们可以考虑使用this充当同步监视器使用Thread继承时我们可以使用类名.class作为同步监视器synchronized(同步监视器){ 需要同步的代码}同步方法如果操作共享数据的代码完整的声明在一个方法中,我们不妨使用此方法声明同步同步方法中仍然涉及到同步监视器,只是

2022-02-21 19:01:08 4650

原创 线程的创建方式、生命周期,及常见知识点

优点提高应用程序的响应,对图形化界面更有意义,可增强用户体验提高计算机系统CPU的利用率改善程序结构,将既长又复杂的进程分为多个线程,独立运行,利于理解和修改何时需要多线程程序同时执行两个或多个任务需要实现一些等待任务时,如用户输入,文件读写操作,网络操作,搜索需要一些后台运行的程序创建方式(4种)继承Thread,重写run方法注意,一定要【对象名】.start()调用,不能直接调用run方法实现Runnable接口创建一个实现了Runnable接口的类在r

2022-02-18 11:54:11 441

原创 #抽象(abstract)与接口(interface)的区别

abstract关键字abstract关键词可以修饰类和方法修饰类时修饰的类为抽象类,里面可以没有抽象方法,但有抽象方法的类一定是抽象类抽象类不能被实例化抽象类中一定有构造器,以便子类调用父类使用修饰方法时修饰的方法没有方法体包含抽象方法的一定是抽象类子类重写父类的所有抽象方法后则子类可以实例化若子类没有重写完父类中的抽象方法,则子类也是抽象类,需要使用absract修饰注意absract不能修饰属性,构造器等结构不能修饰私有方法,final方法,静态方法interf

2022-02-17 20:30:10 106

原创 静态代码块VS非静态代码块

静态代码块 随着类的加载而执行 可以有输出语句 只执行一次 作用:初始化类信息 如果一个类中定义了多个静态代码块,则按照声明先后顺序执行 静态代码块优先于非静态代码块 静态代码块中只能调用静态属性和静态方法 非静态代码块 随着对象的创建而执行 可以有输出语句 每次对象的创建都会执行 作用:在创建对象时,对对象进行初始化 如果一个类中定义了多个非静态代码块,则按照声明先后顺序执行 非静

2022-02-16 18:37:13 151

原创 HashMap源码解析

HashMap源码中的一些重要常量 DEFAULT_INITIAL_CAPACITY: HashMap的默认容量16 MAXIMUM_CAPACITY: HashMap的最大支持容量,2^30 DEFAULT_LOAD_FAC TOR: HashMap的默认加载因子:0.75 TREEIFY_THRESHOLD: Bucket中链表长度大于该默认值,转化为红黑树:8 UNTREEIFY_THRESHOLD: Bucket中红黑树存储的Node小于该默认值,转化为

2022-02-13 21:29:22 427

原创 单例模式之饿汉式和懒汉式

饿汉式代码举例public static void main(String[] args) { Bank instance = Bank.Instance(); Bank instance1 = Bank.Instance(); System.out.println(instance == instance1);// true 证明是一个实例 } class Bank{ // 私有化这个类,保证外部无法调用

2022-02-10 11:38:54 358

原创 java面向对象的三大特性

封装和隐藏(封装性)前言程序设计追求"高内聚,低耦合。高内聚:类的内部数据操作细节自己完成,不允许外部干涉内耦合:仅对外暴露少量的方法用于使用封装性的设计思想隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性,可维护性。通俗的讲,就是把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想封装性的体现 属性进行私有化,同时提供公共的set和get方法进行赋值和调用 不对外暴露的私有方法 单例模式 封装新的体现需要配合

2022-02-06 16:29:54 470

原创 java的值传递机制

前言:参考链接:Java 到底是值传递还是引用传递?什么是形参和实参形参:方法定义时,声明在小括号里面的参数实参:方法调用时,实际传递给形参的数据什么是值传递和引用传递值传递:实参传递给形参的是实参的真实数据值,会创建一个副本引用传递:实参传递给形参的是实参的地址值,不会创建副本针对基本数据类型传递的是真实存储的值的拷贝举例: int m=1; int n = 2;...

2022-02-02 19:19:10 605

原创 属性和局部变量的区别与联系

相同点:1. 定义变量的格式相同 (数据类型 变量名=变量值)2. 先声明,后使用3. 变量都有其作用域不同点:1. 在类中声明的位置不同 * 属性:直接声明在类中({}中) * 局部变量:声明在方法内,方法形参,代码块,构造器形参,构造器内部的变量2. 权限修饰符 * 属性:public default protectrd private * 局部变量:不能声明权限修饰符3. 默认值不同 * 属性:有默认值 * 局部变量:无默认值...

2022-01-30 19:08:41 477

原创 面向过程(POP)与面向对象(OOP)的区别

概述1. 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程的效率一般要高于面向对象。2. 面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。分析出解决问题的步骤,用函数把这些步骤一步一步的实现。3. 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。把构成问题的事物分成一个一个的对象,建立对象的目的不是为了完成某一个步骤,而是描述某个事物在整个解决问题的步骤中的行为。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、

2022-01-28 17:08:43 1294

原创 java基础——数组

前言数组是多个相同类型按一定顺序排列的集合,并使用一个名字来命名,并通过编号的方式对这些数据进行统一管理常见概念:数组名,下标(索引), 元素 , 数组长度概述 数组本身是引用数据类型,而数组中的元素可以是任意数据类型,包括基本数据类型和引用数据类型。 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址 数组的长度一旦确定,便不能修改 可以通过下标(索引)来查找指定位置的元素 数组的分类按照维度:一维数组,二维数组,三维

2022-01-27 14:23:47 346

原创 java数据类型

java基本类型的一些解释说明

2022-01-26 19:17:41 188

原创 java的三种注释区别

java的三种注释区别以及如何使用

2022-01-26 13:53:29 1055

空空如也

空空如也

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

TA关注的人

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