自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL 与 Redis 数据库区别

事务特性:BASE { Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)}键值类型 (Redis) 文档类型(MongoDB) 列类型(HBase) Graph类型(Neo4j)支持主从集群,分片集群 (从节点 可也 备份 主节点,主节点万一出现宕机,数据也可以从节点找到,读写分离。低延迟,速度快(基于内存(核心),IO多路复用,良好的编码)事务特性:ACID (原子性,持久性,隔离性,一致性)

2024-03-18 18:50:06 206

原创 拦截器和过滤器的区别

除了可以实现类似于过滤器的安全控制、日志记录等功能外,还可以访问到Spring容器内的Bean,参与到业务逻辑层面,比如权限验证、事务管理、数据预处理和后处理等。通常只能拦截经过框架处理的请求,例如Spring MVC中的HandlerMapping映射后的请求,不适用于对非框架处理的请求或静态资源请求。总之,过滤器关注的是更底层的、通用的请求和响应处理,而拦截器则更加聚焦于特定框架内的请求处理,更便于进行业务逻辑的干预和扩展。:应用范围广泛,可以对几乎所有类型的HTTP请求进行拦截,包括静态资源请求等。

2024-03-14 09:45:53 233

原创 Exist 和 In 的区别,哪个效率高?

两个查询的目的都是找出参加了课程的学生。然而,从效率角度来讲,如果没有合适索引,两个查询在大规模数据下可能表现会有差异。但实际上,对于这么简单的关联查询,现代数据库的优化器通常都能很好地优化这两种查询方式的执行计划,难以直观看出效率上的明显差距。

2024-03-14 07:45:00 153

原创 SQL查询中实现分组后的Top

中选择了那些排名(Rank)小于等于2的行,即每个销售人员销售额最高的前2个产品。的表,并插入了一些示例数据。然后,我们创建了一个名为。窗口函数对每个销售人员的销售额进行排序。这段代码首先创建了一个名为。的公共表表达式(CTE),在其中使用了。

2024-03-14 07:44:50 198

原创 MySQL数据库多种存储引擎

MySQL数据库曾经支持过多种存储引擎,但随着时间的推移和技术的发展,一些存储引擎已经不再被广泛使用或官方不再维护。专门用于存储大量、不常访问的历史归档数据,只支持INSERT和SELECT操作,不支持UPDATE和DELETE,数据自动压缩,不支持索引。早期MySQL默认的非事务型存储引擎,不支持事务和行级锁定,支持全文索引,但不支持外键约束,数据文件和索引文件分离。默认的事务型存储引擎,支持行级锁定,完全符合ACID特性,支持外键约束,提供崩溃恢复能力。:用于图形数据存储和查询的引擎,现已停止开发。

2024-03-14 07:44:42 102

原创 mysql索引类型

在数据库系统中,常见的索引类型包括以下几种。

2024-03-14 07:44:32 184

原创 为何数据库系统普遍选择B+树作为索引结构而非B树

B+树的所有数据都存储在叶子节点,这样可以最大化地利用操作系统层面的缓存机制,因为一个节点可以存储更多的键值对,使得在同样的内存中可以存储更多索引,减少磁盘I/O。:B+树的所有叶子节点形成了一个有序链表,非常适合范围查询和遍历,而B树由于非叶子节点也存储数据,范围查询需要同时在内部节点和叶子节点间进行,效率较低。:由于B+树的数据都在叶子节点,且叶子节点紧凑排列,故对磁盘I/O更加友好。B树的非叶子节点和叶子节点都存储数据,而B+树仅叶子节点存储数据,非叶子节点只存储键值。

2024-03-14 07:44:15 196

原创 ACID原则

脏读(Dirty Read):一个事务读取到了另一个事务已经修改但尚未提交的数据,如果那个事务最终回滚,那么读到的数据就是临时且无效的。不可重复读(Non-repeatable Read):在一个事务内,同一查询在不同时刻返回不同的结果,因为其他事务提交了新的数据。不可重复读:虽然避免了脏读,但在一个事务中,同一查询在不同时刻仍可能返回不同的结果,因为其他事务提交了新的数据。这种级别确保在同一事务内多次读取相同数据时,即使有其他事务提交了数据,结果也是相同的。读未提交(Read Uncommitted)

2024-03-14 07:44:04 286

原创 面向对象的特征

封装是面向对象的核心概念之一,它将数据(属性)和对数据的操作(方法)捆绑在一起,形成一个单独的单元——对象。抽象类可以包含抽象方法(没有具体实现的方法),迫使子类必须提供这些方法的具体实现。方法重载(Overloading):在同一个类中,可以定义多个同名方法,但这些方法的参数列表不同(参数个数、类型或顺序不同)。方法覆盖(Overriding):在子类中重新定义父类的方法,方法名称、返回类型和参数列表必须与父类中的方法完全相同。多态性体现在同一消息发送给不同的对象时,会触发不同的行为。

2024-03-14 07:43:45 89

原创 java装箱和拆箱

装箱是指将基本数据类型转换为它们对应的引用类型(包装器类)对象的过程。在Java中,装箱(Boxing)和拆箱(Unboxing)是用来描述基本数据类型(如int、double、char等)与其对应的包装器类(如Integer、Double、Character等)之间相互转换的过程。Java从JDK 1.5版本开始引入了自动装箱和拆箱的特性,极大地简化了程序员的工作,但是在频繁进行装箱和拆箱操作时需要注意性能问题,因为每次装箱和拆箱都会创建和销毁对象,增加内存和CPU的负担。装箱(Boxing)

2024-03-14 07:43:29 188

原创 JDK、JRE,JVM 区别

JDK是Java开发工具包,它是为Java开发人员提供的完整开发工具集,不仅包含了JRE,还包括了编译器(javac)、调试器(jdb)、打包工具(jar)、文档生成器(javadoc)以及其他辅助开发、测试、诊断的工具。换言之,JDK是用于开发Java应用程序的完整套件,如果你需要编写和编译Java代码,就需要安装JDK。JRE是Java运行时环境,它是运行Java应用程序所必需的软件环境。JVM是Java平台的核心组成部分,它是一个虚构的计算机,它有自己的指令集和运行时环境,用于执行Java字节码(

2024-03-14 07:43:18 232

原创 java创建线程

其中,使用线程池能够更有效地管理和控制线程资源,提高性能和资源利用率,尤其是对于大量短生命周期的线程任务特别适用。方法,它可以有返回值并且可以抛出受检异常。使用线程池(ExecutorService)接口允许开发者获取线程执行的返回值,相比。接口,因此可以作为线程的目标。创建一个新的类,让它继承自。方法,定义线程执行体。创建该类的实例,并调用。方法,定义线程执行体。创建一个新的类,实现。

2024-03-14 07:43:05 122

原创 线程池的七个核心参数和四个拒绝策略

线程池的基本大小,即线程池中的核心线程数。CallerRunsPolicy:调用者所在的线程自己来执行任务,这种方式提供了一种简单的反馈控制机制,将任务回退到调用者,从而降低新任务的流量。如果当前线程数超过核心线程数,那么在超过指定时间后,闲置线程会被终止,直到线程池大小回到corePoolSize。线程池所能容纳的最大线程数。当核心线程数已满且工作队列也已满时,线程池会创建新的线程来处理任务,直至达到最大线程数。拒绝策略,当线程池和工作队列均满,无法接受新任务时,定义如何处理新提交的任务。

2024-03-14 07:42:57 153

原创 Mybatis原理

当应用程序通过 SqlSession 调用一个 Mapper 接口中的方法时,MyBatis 根据方法签名找到对应的 MappedStatement,并使用预处理语句(PreparedStatement)执行 SQL,同时将结果自动映射到 Java 对象上,这得益于之前配置好的结果映射。MyBatis 提供了一级缓存(本地缓存,存在于 SqlSession 级别)和二级缓存(全局缓存,跨 SqlSession 的共享缓存),用于提高查询性能。,它是会话工厂,负责创建 SqlSession 对象。

2024-03-14 07:42:47 175

原创 线程池执行任务的时候出现异常的时候怎么处理

在Java中,当线程池执行任务时出现异常,如果不做特殊处理,线程池本身会根据其配置的异常处理策略来应对。默认情况下,如果线程执行过程中抛出未捕获的异常,线程池会终止该线程,并根据线程池的拒绝策略来决定如何处理后续的任务。当任务无法被线程池执行时(可能是由于线程池饱和且工作队列已满,这时任务被拒绝),这些策略会决定如何处理被拒绝的任务。总之,针对线程池中任务抛出的异常,你需要根据应用的具体需求选择合适的处理方式,包括在任务内部处理、全局配置异常处理器、调整拒绝策略或组合使用以上方法。来统一处理未捕获的异常。

2024-03-14 07:42:24 257

原创 java动态代理

无论是Java内置的动态代理还是CGLIB,其本质都是在运行时生成一个新的类,这个类能够代理原始对象的方法调用,从而在不修改原有业务代码的基础上,实现对业务方法的增强或控制。代理对象可以实现代理模式,为一个或一组接口提供代理实现,这个代理对象可以在方法调用前后添加额外的处理逻辑,比如权限验证、日志记录、事务管理等。InvocationHandler接口包含一个invoke方法,当通过代理对象调用方法时,这个方法会被调用,从而在方法调用前后添加额外的处理逻辑。Java内置的动态代理(Java Proxy)

2024-03-14 07:42:14 169

原创 在SQL LEFT JOIN语句中,将条件置于ON子句与WHERE子句有何区别?

【代码】在SQL LEFT JOIN语句中,将条件置于ON子句与WHERE子句有何区别?

2024-03-13 11:57:38 109

原创 COUNT(*),COUNT(0) ,COUNT(1),COUNT(col1)

COUNT(*),COUNT(0) ,COUNT(1),COUNT(col1) 有什么区别. 哪个效率高?会忽略列的实际内容,只是用一个常量值(这里是1或0)来进行计数,MySQL优化器会将它们优化为。的效率最高,因为它们直接计算表的行数,而不需要考虑列值。则包含了额外的NULL值检查,如果列中有很多NULL值,其效率可能低于前三种计数方式。这是最常用的计数方式,它会计算表中的所有行,不管这些行中的列值是否为NULL。通常是最高效的,因为它只需要计算行数,无需关心列的具体内容。列中非NULL值的数量。

2024-03-13 11:50:17 255

原创 MySql 中所有的聚合函数

这三个窗口函数(Window Function)虽然不属于传统意义上的聚合函数,但在SQL查询中常用于根据特定字段对行进行排名或编号。返回参数列表中第一个非NULL的值,虽然不是严格意义上的聚合函数,但在聚合查询中经常用于处理NULL值。RANK()、DENSE_RANK() 和 ROW_NUMBER()VARiance() 和 VARIANCE_POP()计算中位数,MySQL 8.0.2+ 版本引入。STDDEV() 和 STDDEV_POP()BIT_OR() 和 BIT_AND()

2024-03-13 11:44:42 234

原创 AtomicInteger作用 ,原理

在这里的作用就像是一个具备高级功能的银行系统,它确保了无论多少家庭成员同时操作,账户余额的更新总是原子性的,也就是说,每一次存款或取款操作都是独立完成且不会被其他操作打断,这样一来,家庭成员在任何时刻查看账户余额,都能得到正确的数值。的实现主要依赖于CAS(Compare and Swap)操作,这是一种CPU级别的原子指令,可以保证在没有其他线程干扰的情况下更新共享变量的值。等,这些操作在多线程环境下是线程安全的,即在执行这些操作的过程中,不会被其他线程打断,确保了数据的完整性。

2024-03-13 11:36:00 329

原创 Volatile的作用,原理

不过要注意的是,在实际编程中,复杂的多线程同步问题可能涉及更深层次的并发控制机制,volatile并不足以处理所有情况,特别是涉及到多个步骤组成原子操作时,依然需要使用锁或者其他并发控制手段。这是因为对volatile变量的写操作会强制刷入主内存,同时使其他线程缓存中的相应变量值失效,因此其他线程在读取volatile变量时,会从主内存重新读取最新的值。当一位负责人更新日程表时,所有正在查看日程表的人都会收到即时的通知,不得不停下手中参照旧日程的工作,转而去查看最新的公告板。

2024-03-13 11:30:13 292

原创 java修饰实例方法、静态方法、代码块有什么不同?

位于类的成员变量和方法之外的大括号包裹的代码块,它在创建类的实例时执行,并且在构造方法调用之前执行,可以用来初始化实例变量。静态方法不能访问非静态成员变量,因为非静态成员变量是在对象实例化时才分配内存的,而静态方法在类加载时就已经存在。关键字修饰的代码块,它在类加载时执行,且只会执行一次,用于初始化静态变量或执行需要在类初始化阶段完成的操作。)是属于类本身的,而不是属于类的某个对象,因此在不创建类的实例的情况下就可以直接通过类名调用。实例方法是属于类的一个对象的方法,只有在类的对象实例化后才能调用。

2024-03-13 11:24:23 237

原创 java重入锁

在Java的重入锁机制中,这个“万能钥匙”就好比是线程的锁计数器,当线程首次获取锁时,计数器加1,再次获取时继续加1。这样设计的好处在于,当一个线程在持有锁的情况下需要再次访问同一把锁保护的其他资源时,不会因为自己已经持有锁而被阻塞,从而避免了死锁的发生。重入锁允许同一个线程在获取锁后,可以再次获取该锁,而不会被自己持有的锁阻塞。公平锁:按照线程获取锁的先后顺序来分配锁,先请求锁的线程在锁释放时将优先获得锁。非公平锁:在锁释放时,任何等待锁的线程都有可能获得锁,不保证锁获取的绝对顺序。

2024-03-13 11:17:14 304

原创 java偏向锁

但当有其他线程也需要争夺这把“锁”时,偏向锁就会解除,恢复到正常锁竞争机制,确保公平性。实际的偏向锁逻辑发生在JVM层面,上述Java代码并未直接体现偏向锁的实现细节,而是通过注释说明了在JVM内部处理线程同步时,偏向锁如何简化同步过程,提高执行效率。当一个线程首次访问一个对象并获取锁时,对象头部的Mark Word会记录下当前线程的ID,将锁转变为偏向锁状态,并将其绑定到这个线程上。撤销过程包括挂起持有偏向锁的线程,然后将偏向锁升级为轻量级锁甚至重量级锁,以公平地满足其他线程的竞争要求。

2024-03-13 11:06:29 283

原创 synchronized的工作原理

当客户A正在取现金时,客户B可以过来插卡查询余额(这两个操作分别对应同步方法和同步代码块,使用不同的锁),因为他们使用的是保险箱的不同部分。的关键字就像银行服务中的排队系统和锁机制,确保了在多用户(多线程)环境下,对公共资源(如ATM机、保险箱或抽屉)的访问是有序且互斥的,从而避免了并发操作导致的数据不一致等问题。确保了在同一时间只有一个线程可以访问被保护的代码区域,从而实现了线程间的互斥性,保证了操作的原子性。代码块或方法后,会自动释放监视器锁,使得其他等待的线程有机会获取锁并执行相应的代码。

2024-03-13 10:58:05 236

原创 java当中的四种引用类型

在Java中,有四种类型的引用,它们允许程序员以不同级别的强度来引用对象,从而影响对象的生命周期和垃圾回收的决策。这四种引用类型按照其强度从高到低排序如下: 强引用(Strong Reference) 强引用是最常见的引用类型,当一个对象被强引用持有时,只要强引用存在,垃圾回收器绝不会回收该对象。即使系统内存不足,也不会回收具有强引用的对象。除非显示地将强引用赋值为null,否则对象永远不会被当作垃圾回收。 1Object strongRef = new Object(); 软引用(

2024-03-13 10:52:27 378

原创 java 垃圾回收算法

这样既能高效利用资源,又能保证餐厅的持续运转。当这一侧区域的餐桌使用殆尽时,服务员暂停入场,将还在使用的餐具(存活对象)全部搬到另一侧未使用的区域,同时清理掉原来区域的所有东西(包括废弃餐具和垃圾)。同样考虑餐厅地面,服务员在标记完所有空桌子后,不是简单地移除垃圾,而是将还在使用的餐桌集中到餐厅的一边,把另一边的空间完全腾空,从而使得剩下的可用空间连续整齐。类似于标记-清除算法,也是先标记出所有需要回收的对象,但在清除阶段不是立即回收,而是将所有存活对象移动到内存的一端,然后直接清理边界外的内存空间。

2024-03-13 10:40:48 1354

原创 ArrayList与LinkedList的区别

ArrayList和LinkedList是Java集合框架中两种不同的List实现类,它们之间最显著的区别在于底层数据结构和由此带来的性能差异:底层数据结构:性能比较:空间占用:扩容策略:

2024-03-13 10:27:32 299

原创 HashSet的底层原理

HashSet是Java集合框架中的一个无序且不允许包含重复元素的集合类,它是基于HashMap实现的。

2024-03-13 10:25:58 351

原创 IntelliJ IDEA 2023.1.2 上传gitee仓库

第五步: 排除不必要上传的文件夹/文件 (可做可不做)第四步:打开IDEA,初始git仓库。第一步: 新建gitee仓库。第七步:提交到本地git仓库。第八步:上传到gitee仓库。第六步:添加 到git。

2024-03-13 09:01:08 129

原创 java类加载机制

当一个类加载器收到加载类的请求时,它首先委托给其父类加载器尝试加载,直至顶层的启动类加载器(Bootstrap ClassLoader)。当读者需要一本书(类)时,图书管理员首先会去查询书库(父类加载器),如果父级书库没有这本书,管理员才会去新书库或者特定分类书架(自定义类加载器)寻找并获取这本书。当首次主动使用类(如创建类实例、调用类的静态方法、访问类的静态字段等)时,会触发类的加载和初始化。图书管理员找到书籍的具体实体,将其从书架上拿下来,对应于类加载器找到类的字节码文件并读入到内存中。

2024-03-13 08:19:21 739

原创 hashMap底层原理

在HashMap中,这就是扩容操作,当元素数量超过负载因子设定的阈值时,HashMap会创建一个更大的数组,并将旧数组中的数据迁移到新数组中。扩容时会创建一个新的更大的数组,然后将原有的键值对重新哈希并放入新数组中,一般扩容为原来数组的两倍。或者更先进的仓库,当某一格子的货物堆积过多时,会升级为货架(红黑树),通过二叉搜索树的方式来高效查找和存储货物。当需要取出货物时,工作人员再次根据货物的标签计算出哈希码,找到对应编号的格子,然后在格子内按照一定规则(链表遍历或红黑树查找)迅速定位到货物。

2024-03-12 21:55:40 333 1

原创 JVM内存模型

JMM不仅定义了Java程序在JVM中运行时内存布局,还规定了各部分之间的关系以及线程间如何交互和同步,确保了并发环境下的正确性,特别是在多线程环境下数据的一致性、可见性和有序性。也称为线程栈,每个Java线程拥有自己的栈,用于存放方法调用时产生的栈帧。并不属于JVM内存模型的标准组成部分,但在NIO中,可以分配和释放直接内存,它是在Java堆外的、直接向操作系统申请的内存区域。类似于图书馆的目录索引和参考书架,存放的是各类书籍的基础信息(类结构信息,静态变量,常量池等),供所有读者查阅,但并不经常更改。

2024-03-12 21:47:11 229 1

原创 java反射原理

这里的检索系统就相当于Java反射机制,它允许在运行时获取类的信息、动态创建对象以及调用其内部的方法或访问属性,就像图书馆管理员根据需要动态地获取和操作书籍信息一样。当图书馆管理员需要获取一本书的具体信息时,他并不需要预先知道这本书的所有内容,而是可以通过查阅目录系统(类似Java的Class对象)来获取这本书的相关信息。设想一个图书管理系统,每本书可以看作是一个Java类,每本书的标题、作者、出版年份等信息就如同类的属性(fields),书中的章节标题则是类的方法(methods)。方法调用对象的方法。

2024-03-12 21:41:34 340 1

原创 反射机制是什么?

动态加载类的信息:即使在编译期间不知道具体的类或类的全部细节,也能在运行时根据需要获取类的完整信息,包括类名、包名、属性(字段)、方法、构造器等。访问私有成员:通常情况下,类的私有成员(如私有字段和方法)是对外部不可见的,但通过反射机制,即使这些成员是private修饰的,也可以访问和操作。改变类的行为:通过反射,能够在运行时动态地修改类的行为,比如修改方法的可见性,或者动态添加方法等(尽管这不是常规用途)。程序可以根据需要,动态地创建对象(即生成新的实例),就像你在镜子前模仿他人的动作一样。

2024-03-12 21:34:04 214 1

原创 什么是面向对象

例如,Girlfriend类可能包含如下的属性:姓名(name)、年龄(age)、身高(height)、体重(weight)等属性,以及诸如打招呼(greet)、聊天(chat)、送礼物(giveGift)等方法。不同类型的女朋友(不同的类或者类的子类实例)可以响应同样的消息(方法调用),但产生不同的效果。):封装是指将数据和操作数据的方法封装在一个单独的实体中(即类),外部无法直接访问和修改对象的内部状态,只能通过对象提供的公共接口来访问和操作数据。子类可以扩展父类的功能,并且可以重写或添加新的方法。

2024-03-12 21:25:17 117 1

原创 activiti 工作流练习,牛逼就上

【代码】activiti 工作流练习,牛逼就上。

2024-03-12 21:13:36 461 1

原创 双亲委派模型:

/** * Hello world! * 什么是双亲委派模型? * 答: 双亲委派模型是 Java 类加载器的一种工作模式,通过这种工作模式,Java 虚拟机将类文件加载到内存中,这样就保证了 Java 程序能够正常的运行起来 * * 1 启动类加载器(Bootstrap ClassLoader) * 2 扩展类加载器(Extension ClassLoader) * 3 应用程序类加载器(Application ClassLoader) * * 执行流程 : *

2024-03-12 20:53:53 80 1

原创 事务注解 白话

两句话概况,要么都行,要么都不行,需要改变原有数据,才加事务注解。

2024-03-11 21:24:36 166 1

原创 java 百万数据快速导入Excel,

【代码】java 百万数据快速导入Excel,

2024-03-11 21:06:28 186 1

空空如也

空空如也

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

TA关注的人

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