自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 聚簇索引和非聚簇索引

但是 innodb 中也存在非聚簇索引,就是除主键索引(一级索引)之外的索引,也叫辅助索引。例如为 name 列添加索引(二级索引),我们通过 name 找到后并不能找到数据,而是需要再找到主键索引,通过主键索引找到数据,这种索引也称为非聚簇索引。索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引。找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以 innodb中的主键就是聚簇索引(一级索引)。

2024-01-25 19:35:47 168

原创 索引的分类

即一个索引包含多个列,在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建索引),当表的行数远大于索引列的数目时可以使用复合索引。select * from table where b=’’and c=’’索引不生效。select * from table where a=’’and b=’’索引生效。select * from table where b=’’and a=’’索引生效。select * from table where a=’’and c=’’索引生效。

2024-01-24 20:47:16 348

原创 索引数据结构

MySQL最终选择B+树作为索引数据结构,因为B树虽是多路平衡树,但叶子节点之间没有联系;B+树是多路平衡树,一个节点可以存储更多的数据,数据记录都存放在叶子节点中,这样非叶子节点就可以存储更多索引,所有叶子节点之间还有一个链指针。MySQL使用自增主键,如果使用二叉树作为索引数据结构,自增时二叉树会像链表一样单边增长;红黑树虽然会旋转平衡,但也是一边的增长,树的高度大。(全表扫描,范围查找)

2024-01-24 20:25:17 380

原创 MySQL引擎

通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。MyISAM 也是 MySQL 的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当 INSERT(插入)或 UPDATE(更新)数据时即写操作需要锁定整个表,也就是只有表锁(并发量小),效率便会低一些;InnoDB 是一个事务型的存储引擎,有行级锁(并发量大)和外键约束,支持全文检索(全文索引),它的设计目标是处理大容量数据库系统,MySQL 运行时 Innodb 会在内存中建立缓冲池,用于缓冲数据和索引;

2024-01-24 19:20:50 374 1

原创 Mysql架构

第二层架构主要完成大多数的核心服务功能,如 SQL 接口,并完成缓存的查询,SQL 的分析和优化及部分内置函数的执行。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化,如确定查询表的顺序,是否利用素引等,最后生成相应的执行操作。存储引擎层,存储引擎真正的负责了 MysQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具有的功能不同,可以根据实际需要进行选取。数据存储层,主要是将数据存储在设备的文件系统之上,并完成与存储引擎的交互。(处理客户端连接请求)

2024-01-24 19:04:44 322 1

原创 Servlet的过滤器与Spring拦截器的区别

拦截器(Interceptor)属于 Spring 框架中定义的,只能拦截到达Spring控制器(Controller)中的请求。过滤器(Filter)属于Java Servlet 规范中定义的,可以拦截所有进入Java后端的请求;

2024-01-24 12:54:13 308 1

原创 Bean循环依赖

3.由于 BeanB 需要 BeanA,此时可以在第三级缓存中找到 BeanA 工对象,注入给BeanB,然后将 BeanB 放入到二级缓存,从三级缓存中删除 BeanB 工厂对象,注入到 BeanB,完成 BeanB 的初始化,放入到一级缓存。1.初始化 BeanA,需要注入 BeanB,去查找,BeanB,没有找到,把 BeanA 交给一个工厂对象,将 BeanA 工厂对象存入到三级缓存中。4.当 BeanB 完成初始化后,将完整的 BeanB 注入到 BeanA 中,完成 BeanA 的初始化。

2024-01-24 12:39:12 358 1

原创 懒汉式单例(双重检索 + volatile关键字)

/ 给方法加锁,虽然能解决线程安全问题,但并发访问效率低,一次只能有一个线程进入。// 在第一次获取单例对象时才创建对象。// 双重检索 + volatile。// 在类加载时不创建单例对象。// 存在线程安全问题。

2024-01-23 20:33:31 333 1

原创 BeanFactory 和 ApplicationContext

2.BeanFactory接口是spring容器中最底层(顶层)的接口,面向spring框架,很多的内部的工厂类都实现该接口。3.ApplicationContext 接口继承了BeanFactory接口,面向应用程序,提供额外的功能。1.BeanFactory和ApplicationContext都是spring框架提供的接口。5.实现了ApplicationContext接口的工厂类,在程序启动时就会创建初始化。4.实现了BeanFactory接口的工厂类,在使用某个对象时才会去创建初始化。

2024-01-23 20:15:46 375 1

原创 Java反射机制

(2)Field类表示Class对象所表示的类的成员变量,通过它可以在运行时动态修改成员变量的属性值(包含private):当一个对象被创建之后,使用反射来获取对象的Class对象,通过这个Class对象可以获取这个类的所有属性和方法。(3)Method类表示Class对象所表示的类的成员方法,通过它可以动态调用对象的方法(包含private):通过反射,可以动态调用一个对象的方法,即使这个对象的私有的,也仍然可以调用。(3)获取任意对象的属性,并且能改变对象的属性。(6)实例化任意一个类的对象。

2024-01-23 19:41:20 364 1

原创 IOC、AOP的基本概念

(Aspect Oriented Programming)叫作面向切面编程,利用面向切面的思想将非业务公共功能[比如:用户认证(判断权限)、事务管理、打印日志、统一异常处理等]抽取出来,与业务代码分离,当业务代码需要它们的时候,再通过代理对象去调用。而在Spring框架中,通过配置的方式,将创建对象的控制权交给Spring框架管理,Spring框架负责管理对象的整个生命周期(对象实例化、初始化,对象的使用、销毁以及外界获得对象),我们需要某个对象时,只需要从Spring框架中获取即可,属于反向控制。

2024-01-22 22:50:17 368

原创 ThreadLocal及其内存泄漏问题

ThreadLocal 本身不存储数据,当调用ThreadLocal 的 set 方法时,ThreadLocal 会将自身的引用 this 作用为 key,将用户传入的值作为 value,存到线程的 ThreadLocalMap 中,这就相当于每个线程的读写操作都基于其本身的私有副本,而线程之间的数据是相互隔离的。:只要强引用关系(指代码中普遍存在的赋值关系)还在,对象就永远不会被回收(男主角,有主角光环,怎么都死不了);:等同于没有引用,回收会收到一个系统通知(路人甲)。

2024-01-21 20:11:48 367

原创 抽象类 VS 接口

接口在java8之前更加纯粹,只能定义抽象方法,不能自己实现方法,也不能定义静态方法;到了java8之后,才可以定义静态方法,以及,可以用default关键字来实现方法(default关键字的推出是为了保证向下兼容性)default修饰后就不再是抽象方法了,也不会强制要求已有的子类去实现方法;3.抽象类更进一步地抽象后,就诞生了接口,接口比抽象类更纯粹,因为它没有了成员属性,只有方法,子类实现接口后,唯一能做的就是重写方法;所以,既可以用抽象类又可以用接口的时候,尽量去选择接口,这样子类的灵活性会更高;

2024-01-20 20:59:24 346

原创 HashMap

由于HashMap是基于哈希表实现的,而哈希表随着数据的增加一定会出现哈希冲突的问题(鸽巢原理),解决哈希冲突的方式主要有两种: 开放地址法:产生哈希冲突时,重新探测一个新的空闲位置将其插入,适用于数据量小的情况。第一次扩容会在元素个数达到 12 时进行,扩容的大小为原来的 2 倍。

2024-01-18 20:09:22 350 1

原创 Linux下安装软件

在浏览器中访问虚拟机中的 tomcat, ip+端口,当访问不到时,记得在云服务。设置密码及加密格式(密码不能过于简单,包含大小写字母数字下划线)让 MYSQL 大小写敏感(1-不敏感,0-敏感)选中 mysql 数据库,设置其他 ip 可以访问。tar –zxvf 解压.tar.gz 文件。执行./startup.sh 命令启动服务器。执行./shutdown.sh 关闭服务器。在[mysqld]下,添加以下内容。在/opt目录下传输进这三个压缩包。Linux 下安装 tomcat。

2023-12-07 03:24:42 366 1

原创 tomcat安装,创建web后端项目,部署项目的整个过程

通过指定依赖的坐标(groupId、artifactId、version),Maven可以自动下载和管理这些依赖,确保项目的编译和运行所需的库文件可用。(5)项目的继承和聚合:通过pom.xml文件可以实现项目之间的继承关系和聚合关系。pom.xml是Maven项目中的一个核心文件,用于定义项目的配置信息和依赖管理。(3)项目的构建配置:可以指定项目的构建方式和构建过程中需要执行的任务。(1)项目的基本信息:包括项目的名称、版本号、描述、开发者等基本信息,用于标识和描述项目。

2023-10-08 16:53:03 138 1

原创 Web服务器的作用以及为什么java后端开发需要服务器

服务器提供了连接数据库的能力,可以借助Java JDBC(Java Database Connectivity)等技术,通过数据库驱动程序进行数据的读取、写入和查询操作。1. 提供网页内容:Web服务器接收到来自客户端的HTTP请求后,根据请求的URL路径或参数,找到对应的网页文件或动态内容。根据请求的内容,服务器执行相应的处理逻辑,可能包括数据库查询、文件操作、业务逻辑处理等。它的主要作用是处理来自客户端(如浏览器)的HTTP请求,并返回相应的网页、图像、视频、数据或其他资源。

2023-10-08 10:23:15 629 1

原创 web-javaScript

JavaScript是一种高级的、解释型的编程语言,用于在网页上实现动态交互效果。3. 响应用户交互:JavaScript可以监听用户的操作,例如点击按钮、鼠标移动等,来触发相应的动作。4. 事件驱动:JavaScript可以通过监听事件来触发相应的动作,实现与用户的交互。2. 弱类型语言:JavaScript不需要声明变量的类型,可以在运行时自动确定类型。1. 客户端脚本语言:JavaScript在用户的浏览器上执行,不需要服务器的参与。

2023-10-04 23:55:37 38 1

原创 web-CSS

类选择器:选择具有指定类名的元素,如`.my-class`选择具有`my-class`类的元素。- 字体样式:`font-family`、`font-size`、`font-weight`等。- ID选择器:选择具有指定ID的元素,如`#my-id`选择具有`my-id` ID的元素。- 文本样式:`color`、`text-align`、`text-decoration`等。- 盒子模型:`width`、`height`、`margin`、`padding`等。- 声明块:包含一条或多条样式声明。

2023-10-04 23:52:35 30 1

原创 web-html

DOCTYPE html>`声明开始,然后是`<html>`标签,内部包含`<head>`和`<body>`标签,分别用于定义文档的头部和主体。2. HTML标签由尖括号包围,例如`<tagname>`,通常成对出现,有开始标签和结束标签。6. 在`<body>`标签中,可以定义网页的内容,例如标题、段落、图像、链接等。5. 在`<head>`标签中,可以设置文档的标题、引入外部样式表和脚本等。Browser(浏览器) + server(服务器) == B/S结构。1.html(超文本标记语言)

2023-10-04 23:49:33 21 1

原创 String、StringBuilder和StringBuffer的区别

因为String是一个不可变的类,所以它是线程安全的,StringBuffer也是线程安全的,因为它的每个操作方法里面都用了一个synchronized同步关键字,而StringBuilder不是线程安全的,所以在多线程环境下对字符串进行操作时应该使用StringBuffer。String内部的value值是被final修饰的,所以它是一个不可变的类,每一次修改String的值都会产生一个新的对象,而StringBuilder和StringBuffer是可变类,字符串的变更不会产生新的对象。

2023-09-18 17:50:42 86

原创 Java 线程

synchronized修饰方法时,要注意方法是静态还是非静态,静态方法的锁对象是该类的Class对象,而非静态方法的锁对象默认是this。线程(thread)是一个进程内部的最小执行单元(具体要做的一件事),是操作系统进行任务调度的最小单元,隶属于进程,进程可进一步细化为线程。(3)调用wait()方法会释放当前线程持有的锁,使得其他等待线程可以获取到该锁,而调用sleep()方法则不会释放锁。因此,在使用多线程编程时,需要仔细评估和权衡其优点和缺点,选择适当的场景和设计方案,确保程序的正确性和性能。

2023-07-02 23:10:14 48 1

原创 Java 集合

当添加一个元素时,首先会调用值的hashCode方法,计算出一个hash值(整数),hash值不安全,有可能内容不一样,hash值一样,equals方法判断效率低;集合是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键,HashMap的键的类型一般锁定的是Sring类型;Map接口是一种双列集合,存储的每个元素都由键和值两部分组成,一个键映射到一个值,键是不可以重复的,值可以重复;数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高;:数组列表,数据采用数组方式存储;

2023-06-18 02:27:44 38 1

空空如也

空空如也

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

TA关注的人

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