- 博客(40)
- 收藏
- 关注
原创 lock和synchronized区别
特性Lock锁类型隐式锁(JVM管理)显式锁(手动控制)公平性仅非公平锁支持公平和非公平锁中断响应不支持支持超时获取锁不支持支持条件变量单一wait()notify()队列支持多个Condition异常释放锁自动释放需在finally中手动释放代码复杂度简单较高(需显式控制)
2025-02-08 08:19:54
234
原创 MySQL 存储引擎
此外,MySQL还有一些其他存储引擎,如BLACKHOLE(丢弃写入的数据,对于读取操作会返回一个空结果,适用于数据复制和数据传输等场景)、MERGE(可以将多个MyISAM表合并成一个逻辑表,适用于将分散的数据合并成一个逻辑表进行查询)、FEDERATED(允许MySQL服务器上的表访问其他服务器上的数据,实现数据分布式存储和访问)、PERFORMANCE_SCHEMA(用于收集MySQL服务器性能相关的统计信息,适用于监控和优化MySQL服务器性能)等。
2025-01-07 20:58:12
754
原创 HashMap 的底层实现
每个键都会通过哈希函数计算出一个哈希值,然后通过哈希值决定数据应该存储在哪个桶中。哈希函数的主要目的是将数据均匀地分布在不同的桶中,从而减少哈希碰撞(即两个不同的键映射到同一个桶中的情况)。数组用于存储桶(bucket),每个桶可以包含一个链表或红黑树(在JDK 1.8及之后版本中),用于解决哈希冲突。当HashMap中的元素数量超过阈值(默认为数组容量的75%)时,会自动触发扩容操作。在扩容过程中,会根据哈希码的高位来确定键值对是保留在原来的位置还是移动到新的位置。get方法用于根据键来获取值。
2025-01-03 20:54:05
508
原创 什么是 ER 图?
定义:ER图提供了一种直观的方式来表示和理解数据元素及其关系,是数据库设计过程中的关键工具。背景:ER图由Peter Chen在1976年提出,用于概念建模,特别是在数据库设计和系统分析中。
2024-12-24 21:00:28
604
原创 SQL 标准定义了哪些事务隔离级别?
SQL标准定义了四个事务隔离级别,它们分别是:READ UNCOMMITTED(读取未提交):READ COMMITTED(读取已提交):REPEATABLE READ(可重复读):SERIALIZABLE(可串行化):
2024-12-12 17:10:37
542
原创 MySQL 基础架构
存储引擎层负责数据的存储和提取,是MySQL架构中的底层部分。MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,不同的存储引擎具有不同的特点和功能。用户可以根据自己的需求选择合适的存储引擎。同时,不同的存储引擎之间可以相互替换和扩展,为MySQL提供了灵活的数据存储方案。此外,核心服务层还实现了所有的内置函数(如日期、时间、数学和加密函数等)以及所有跨存储引擎的功能(如存储过程、触发器、视图等)。核心服务层涵盖了MySQL的众多核心功能,是MySQL架构中的核心部分。
2024-12-10 20:57:39
357
原创 SQL 和 NoSQL 有什么区别?
SQL(Structured Query Language,结构化查询语言)和NoSQL数据库是两种不同类型的数据库管理系统,它们在多个方面存在显著的区别。
2024-12-06 20:50:56
658
原创 I/O 流为什么要分为字节流和字符流呢?
一、数据类型字节流:以字节(8位二进制数)为单位进行数据传输。它适用于处理所有类型的数据,包括文本、图像、音频、视频等二进制文件。因为计算机存储和传输数据的基本单位是字节,所以字节流具有通用性。 字符流:以字符为单位进行数据传输。字符是文本数据的基本单位,一个字符通常由一个或多个字节表示,具体取决于字符编码(如UTF-8、UTF-16等)。字符流适用于处理文本数据,因为它可以自动处理不同的字符编码问题,从而避免乱码现象。二、处理方式字节流:在处理二进制数据时,字节流能够直接对字节进行操作,无需进
2024-11-25 23:10:00
366
原创 Java 中有哪些常见的语法糖?
这些语法糖使得Java代码更加简洁和易读,提高了开发效率。但需要注意的是,它们并不会增加语言本身的功能,只是对已有功能的一种简化和封装。
2024-11-21 12:01:19
270
原创 什么是序列化和反序列化?
序列化是指将对象或数据结构转换成一种格式(通常是字节流),这种格式可以存储到文件、发送到网络或保存在内存中,以便以后能够重新构建或恢复成原始的对象或数据结构。反序列化是指将已经序列化(通常是字节流)的对象或数据结构重新恢复成原始的对象或数据结构。
2024-11-20 20:57:07
343
原创 HashMap 和 Hashtable 的区别
一、继承的父类不同HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类。尽管它们实现的接口都是Map接口,但由于继承的父类不同,导致它们在一些行为和方法上存在差异。二、线程安全性不同HashMap是非同步的,这意味着它不是线程安全的。在多个线程同时访问HashMap时,如果没有适当的同步机制,可能会导致数据不一致的问题。 Hashtable是线程安全的,它的方法被synchronized修饰,因此在多线程环境下可以直接使用Hashtable而无需额外的同
2024-11-18 20:55:43
741
原创 java 容器都有哪些?
TreeSet:基于红黑树实现的集合,不允许重复元素,且元素是有序的。Java中的容器是一种用来存放和组织对象的数据结构,提供了多种类型以满足不同的需求。LinkedHashSet:具有HashSet的所有特性,同时它还维护了一个双向链表来记录元素的插入顺序,因此是有序的。LinkedList:基于双向链表实现的列表,具有高效的插入和删除操作(在列表头部和尾部除外),但随机访问效率较低。Queue:队列,用于存储一组元素,并支持在两端插入和删除元素(但通常只在一端进行添加操作,另一端进行删除操作)。
2024-11-16 18:05:16
399
原创 异常使用有哪些需要注意的地方?
避免设计成可检查异常:自定义异常不推荐设计成可检查异常(Checked Exception,即编码时必须显示捕获的异常)。这有助于简化异常处理流程,提高代码的可读性和可维护性。保护敏感信息:在保证诊断信息足够的同时,也要考虑避免包含敏感信息,如机器名、IP、端口等,以保证信息的安全。
2024-11-15 21:05:12
449
原创 Checked Exception 和 Unchecked Exception 有什么区别?
是在编译时由编译器强制检查的异常。程序员必须显式地处理或声明它们,否则代码将无法通过编译。这类异常主要继承自Exception类(但不包括及其子类),例如等。这类异常都是的子类。由于这些异常在编译阶段无法预见,因此编译器不要求对其进行处理。典型的运行时异常有空指针异常()、数组访问越界异常()等,这些异常通常是程序的逻辑错误引起的。Checked Exception和Unchecked Exception在Java异常处理机制中扮演着不同的角色。
2024-11-14 12:03:05
336
原创 为什么要有 hashCode?
hashCode的存在主要归因于其在数据结构中的关键作用,特别是在哈希表(如HashSet、HashMap等)中的应用。
2024-11-13 21:50:49
448
原创 为什么浮点数运算的时候会有精度丢失的风险?
综上所述,浮点数运算时会有精度丢失的风险主要是由于计算机字长限制、二进制与十进制转换的不精确性以及浮点数的表示和运算特性所决定的。在实际应用中,需要采取相应的措施来减少这种风险并确保计算结果的准确性。
2024-11-12 20:40:02
439
原创 Oracle JDK vs OpenJDK
Oracle JDK和OpenJDK都是Java开发工具包(JDK)的重要版本,它们各自具有独特的特点和优势。
2024-11-11 17:51:07
1027
原创 HashMap
的核心数据结构是一个数组(称为“桶”或“槽”),每个桶可以存储一个链表(在 Java 8 及以后版本中,当链表长度超过一定阈值时,会转换为红黑树以提高性能)。如果在多线程环境中使用,需要额外的同步机制(例如使用。方法来计算哈希值,然后将哈希值通过一定的算法(通常是。是桶的数量)映射到数组的索引上。
2024-11-09 12:01:44
318
原创 成员变量与局部变量的区别?
成员变量定义:在类体内部、方法外部定义的变量,也称为属性。位置:通常位于类的顶部,方法声明之前。局部变量定义:在方法内部、代码块内部或循环内部定义的变量。位置:位于方法体内部,可以是方法的参数,或在方法的代码块中声明。
2024-11-06 20:53:36
363
原创 java中的反射
在Java编程语言中,反射(Reflection)是一种强大的机制,它允许程序在运行时(而非编译时)检查、修改和访问其内部结构和行为。通过反射,程序可以获取类的信息(如类名、父类、接口、属性、方法等),并能够在运行时动态地调用这些方法或访问这些属性,即使这些方法和属性在编译时并不明确。包,它包含了一系列用于反射操作的类。在这个示例中,我们首先通过。Java反射的核心是。
2024-11-05 20:56:09
253
原创 接口和抽象类有什么共同点和区别?
接口(Interface)和抽象类(Abstract Class)在面向对象编程中都有重要作用,但它们在设计意图和使用场景上存在一些共同点和区别。
2024-11-04 20:58:16
394
原创 String 为什么是不可变的?
安全性: 不可变性使得字符串可以安全地被多个线程共享,而不需要担心数据竞争或同步问题。这是因为在多线程环境中,一个线程对字符串的修改不会影响到其他线程中的相同字符串。 字符串通常被用作参数传递,如果字符串是可变的,那么一个方法内部对字符串的修改可能会影响到调用者,这会导致难以追踪的错误。 哈希表性能: 字符串经常用作哈希表的键。如果字符串是可变的,那么键的哈希值可能会在插入后发生变化,这将破坏哈希表的内部数据结构,导致性能下降甚至错误。 不可变性保证了字符串的哈希值在创建后不会改变,从而保
2024-11-03 21:34:49
121
原创 基本类型和包装类型的区别?
基本类型:Java语言内置的简单数据类型,直接存储数据的值。它们包括boolean(表示真或假)、char(表示单个字符,使用16位Unicode编码)、byte(8位有符号整数)、short(16位有符号整数)、int(32位有符号整数)、long(64位有符号整数)、float(32位单精度浮点数)和double(64位双精度浮点数)。包装类型:为每种基本数据类型提供的类,用于将基本类型封装成对象。
2024-11-01 20:51:44
213
原创 Java 中的几种基本数据类型?
这些基本数据类型在 Java 中是预定义的,并且它们都有固定的内存大小和取值范围。使用这些基本数据类型可以优化内存使用和程序性能,因为它们不需要额外的内存开销来存储类型信息或对象引用。在 Java 中,有几种基本数据类型(也称为原始数据类型),它们是编程语言中最简单的数据类型。此外,Java 还提供了包装类(Wrapper Classes),用于将这些基本数据类型封装成对象,例如。这些包装类提供了很多实用的方法和功能,可以在需要对象的地方使用这些类型。
2024-10-29 19:56:08
303
原创 何谓SPI
举个通俗易懂的例子:公司 H 是一家科技公司,新设计了一款芯片,然后现在需要量产了,而市面上有好几家芯片制造业公司,这个时候,只要 H 公司指定好了这芯片生产的标准(定义好了接口标准),那么这些合作的芯片公司(服务提供者)就按照标准交付自家特色的芯片(提供不同方案的实现,但是给出来的结果是一样的)。SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。
2024-10-25 21:00:51
214
原创 Java为什么要有 hashCode?
当 Java 程序使用哈希集合(如 HashSet、HashMap 等)来存储和检索对象时,hashCode 方法起着关键作用。Java 语言规范中对 hashCode 方法有明确的要求和约定,遵循这些约定可以确保 Java 程序的正确性和可维护性。在一些自定义的算法和数据结构中,可能需要使用哈希码来实现特定的功能。
2024-10-24 22:35:28
329
原创 创建一个对象用什么运算符?对象实体与对象引用有何不同?
在编程中,创建对象通常使用new运算符(在面向对象的编程语言如 Java、C# 等中)。这个运算符会分配内存并返回指向新创建对象的引用。
2024-10-23 22:31:26
264
原创 面向对象和面向过程的区别
面向过程编程(Procedural-Oriented Programming,POP)和面向对象编程(Object-Oriented Programming,OOP)是两种常见的编程范式,两者的主要区别在于解决问题的方式不同:一、核心思想面向对象:面向过程:面向对象:面向过程:
2024-10-22 20:51:31
930
原创 Java注解
定义:注解是一种用于类、方法、变量、参数、包等元素的修饰符,它可以为这些元素提供额外的信息或元数据。用途编写文档:通过代码里标识的元数据生成文档,如JavaDoc文档。代码分析:通过代码里标识的元数据对代码进行分析。编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。除了使用Java内置的注解外,用户还可以根据自己的需求自定义注解。使用@interface关键字定义注解。定义注解的参数和默认值。
2024-10-21 22:26:27
364
原创 AOT 有什么优点?为什么不全部使用 AOT 呢?
AOT(Ahead of Time,提前编译)是一种在程序运行之前就将源代码或中间代码编译成目标平台的机器代码或可执行代码的编译技术。
2024-10-17 21:46:35
473
原创 Java中的泛型
在程序编码中,泛型通常指的是包含类型参数的类型。这些参数在真正使用泛型时都必须作出指明。泛型的参数不仅可以代表类,还可以代表接口等其他类型(具体取决于语言的支持情况)。使用泛型的主要目的是加强类型安全及减少类转换的次数。
2024-10-15 16:54:46
439
原创 Java面向对象的三大特征
Java 面向对象的三大特征分别是:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这三大特征共同构成了 Java 面向对象编程的核心思想,使得 Java 程序更加模块化、灵活和易于维护。
2024-10-14 22:32:04
308
原创 Java中深拷贝和浅拷贝区别?什么是引用拷贝?
深拷贝:创建一个新对象,并递归地复制原始对象及其所有引用的对象。原始对象和拷贝对象是完全独立的。浅拷贝:创建一个新对象,并复制原始对象的基本数据类型字段值和引用类型字段的内存地址。原始对象和拷贝对象可能共享对同一个引用类型对象的引用。引用拷贝:直接复制对象的引用,使得多个引用指向同一个对象。对其中一个引用的修改会影响到所有指向该对象的引用。
2024-10-12 09:52:19
349
原创 为什么说 Java 语言是“编译与解释并存”?
因此,Java 语言被称为“编译与解释并存”的语言,是因为它首先通过编译器将源代码编译成字节码,然后在运行时通过解释器(以及 JIT 编译器)将字节码转换成机器码执行。这种机制既保证了 Java 程序的跨平台性,又通过 JIT 编译提高了程序的运行效率。
2024-10-11 22:24:34
301
原创 什么是字节码?采用字节码的好处是什么?
组成:字节码由一系列的操作码(opcode)和操作数(operand)对组成,这些指令描述了程序的操作,如变量赋值、方法调用、条件判断等。特性:字节码是一种中间码,它比机器码更抽象,但比源代码更接近于可执行的形式。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个opcode是一字节长,但是指令码的长度是变化的。执行方式:字节码不是直接由计算机硬件执行的,而是由虚拟机解释或编译后执行。例如,Java字节码由Java虚拟机(JVM)解释或编译为机器码后执行。
2024-10-10 22:45:38
430
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人