自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python 中常用的格式符号

Python 中的格式化操作主要有以下几种方式:1. 百分号 `%` 格式化2. `str.format()` 方法3. f-string 格式化(Python 3.6+)

2024-11-15 19:56:55 688

原创 Java 8 中引入的 Comparator 工具方法

Java 8 中引入的Comparatorreversed()null。

2024-11-04 19:15:02 735

原创 【Java 8】方法引用

是 Java 8 中引入的一种简洁语法,可以用来代替某些特定的 Lambda 表达式。简单来说,,而不必显式地写出方法的具体实现过程。

2024-11-04 18:41:58 725

原创 Java 8 中引入的 Lambda 表达式

Java 8 中引入的 Lambda 表达式极大地改善了 Java 的简洁性和可读性,特别是用于处理集合、流操作等场景。Lambda 表达式可以看作是用来简化匿名内部类的一种简写方式。它可以直接作为接口实现被传递。Java 中,很多接口有且只有一个抽象方法,这些接口被称为。例如和包中的接口,如PredicateConsumer等。

2024-11-02 23:05:26 943

原创 设计模式 - 代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,广泛应用于远程调用、访问控制、缓存优化等场景。它通过为对象提供一个代理来控制对这个对象的访问。代理对象在客户端与目标对象之间起到一个中介的作用,客户端不直接与实际对象交互,而是通过代理对象来进行调用。代理对象可以在目标对象被调用之前或之后,添加额外的功能。代理模式通过这种方式来增强对象的灵活性,同时又不会对原有对象进行修改。这种设计思想非常符合开闭原则(Open/Closed Principle),有助于代码的扩展和维护。

2024-11-02 20:43:45 1909

原创 HashSet 和 TreeSet 分别是如何实现去重的

是基于哈希表的数据结构,因此它使用对象的哈希值来判断元素的唯一性。如果需要保持有序性(例如按字母顺序或数值大小),则使用。如果不关心元素的顺序且更关注性能,使用。来确保元素不重复,并保持元素的有序性。是基于红黑树的数据结构,它依赖。

2024-11-01 12:12:06 1085

原创 什么是“fail-fast”

“Fail-fast” 指的是在迭代集合时,如果发现集合的结构被意外地修改(例如添加、删除或更新了元素),那么迭代器会立即抛出一个异常,以避免出现不一致的行为。这是一种用于检测并报告并发修改问题的机制,它能够在问题发生的早期阶段立即失败(即抛出异常),从而防止代码执行错误逻辑或产生难以察觉的问题。

2024-10-29 16:25:53 769

原创 比较 ArrayList 和 Vector

特性ArrayListVector引入版本JDK 1.2 (属于 Collection Framework)JDK 1.0 (属于早期类)线程安全性非线程安全线程安全扩容机制扩展为原来的 1.5 倍扩展为原来的 2 倍性能高性能低于 ArrayList同步操作无同步内部同步适用场景单线程环境多线程环境(但不推荐)迭代器。

2024-10-29 16:24:39 760

原创 Java 中的日期类

Java 中日期类的演变从最初的,到稍后的,再到现代化的 java.timeAPI,是对日期处理方式的不断优化和提升。新日期 API(即 Java 8 引入的 java.time 包)克服了旧 API 的设计缺陷,提供了更简洁、安全和强大的日期时间处理工具。在开发中,建议使用 java.time 包,以享受其带来的便利性和安全性。

2024-10-29 11:53:00 964

原创 Java 的反射机制

反射机制允许程序在运行时获取关于类、接口、字段和方法的信息,而不需要在编译时知道这些信息。获取某个类的所有字段、方法和构造方法。访问某个字段的值,调用某个方法,甚至可以修改其访问权限。动态创建对象和调用方法。反射主要通过 Java 提供的包实现,其中包括了 ClassMethodField 等反射类。

2024-10-28 23:48:42 1047

原创 Java 中的序列化和反序列化

Java 中的序列化和反序列化是一种重要的机制,可以使对象在保存和传输过程中保持其状态,广泛应用于持久化、网络传输和分布式计算中。虽然原生的序列化机制使用起来很方便,但由于性能、安全等方面的限制,在现代软件开发中,往往会使用更加高效和安全的替代方案,例如 JSON、Protobuf 等。

2024-10-28 23:38:52 611

原创 什么是 “尾递归”?

尾递归是一种递归调用出现在函数最后一步的递归形式。尾递归可以被优化为迭代,从而减少栈的使用,避免栈溢出。在 Java 中,虽然 JVM 并不保证会进行尾递归优化,但通过设计尾递归函数可以让手动优化变得容易。将尾递归转换为迭代是一种常见的优化方式,以减少递归深度导致的栈溢出风险。

2024-10-25 15:55:17 608

原创 String、StringBuffer 和 StringBuilder的比较

String 适合用于存储不经常修改的字符串内容,如常量、配置项、标签等。 StringBuffer 适合用于在多线程环境中需要频繁修改字符串的场景,因为其线程安全性可以保证多个线程对同一个对象的安全操作。 StringBuilder 适合用于单线程环境中频繁修改字符串的场景,因为它性能更高,不会有同步的开销。

2024-10-25 11:50:50 621

原创 Java中,异常的分类体系

Java 的异常体系为开发者提供了一种捕获和处理运行时错误的机制,用于处理在程序执行期间可能出现的错误和意外情况。主要的异常分类包括Error和Exception,而Exception又可以进一步分为受检异常和非受检异常。

2024-10-23 10:20:44 530

原创 什么是“回调”

“回调”(Callback)是编程中的一种常见技术,用于实现代码之间的松耦合以及异步编程,尤其在处理事件、响应式编程或者延迟执行某些操作时非常有用。简单来说,回调就是将一个函数作为参数传递给另一个函数,这个函数会在某些特定条件下调用你传递的函数。这种机制通常用来应对非同步任务,比如用户点击按钮后的响应、网络请求后的处理等。

2024-10-23 10:17:11 2098

原创 【Java】匿名内部类

虽然匿名内部类可以极大地简化代码,但是当逻辑比较复杂时,应该考虑创建单独的类来实现,以提高代码的可读性和可维护性。同时,在 Java 8 中,Lambda 表达式也成为一种更优雅的替代方式,用于实现单一方法的接口。匿名内部类的定义通常会在表达式或方法调用当中。

2024-10-22 16:10:40 783 1

原创 在java中,内部类的类型

在 Java 中,内部类可以分为四种主要类型,每种类型都有不同的应用场景:成员内部类 适合需要访问外部类成员的情况下,将外部类的部分逻辑封装起来。局部内部类 用于方法内部,用于封装只在该方法中使用的逻辑。匿名内部类 适合那些只需要快速实现某个接口或继承某个类的场景,如事件处理。静态内部类 适用于外部类的静态工具或辅助类,避免与外部类实例绑定。

2024-10-22 08:45:29 841

原创 什么是虚拟继承

虚拟继承(Virtual Inheritance) 是 C++ 中的一种继承方式,主要用于解决多重继承中可能出现的 “钻石继承问题”。通过虚拟继承,可以确保派生类(即子类)只继承一次最顶层基类的成员,避免由于多次继承同一基类而导致的二义性、数据冗余以及状态不一致的问题。

2024-10-22 08:34:48 692

原创 什么是“钻石继承问题”

钻石继承问题(Diamond Inheritance Problem) 主要是指在多重继承中,由于继承关系的复杂性,子类可能通过多个路径继承到相同的基类,从而导致成员的多份副本或者方法调用的二义性。

2024-10-21 17:54:12 1177

原创 接口和继承的区别

在开发中,通常建议优先使用接口来实现解耦,并在必要时使用继承来共享代码。接口的使用可以使代码更加灵活,而继承适合解决较为简单的类层次结构问题。

2024-10-21 09:42:26 1336

原创 接口的继承机制

接口继承允许一个接口继承另一个或多个接口,从而继承其方法声明。继承接口的类必须实现继承接口中所有的方法,确保所有行为都得到了具体的实现。接口可以继承多个父接口,从而实现类可以获得多种能力的组合。

2024-10-21 08:34:16 1347

原创 不同jdk版本中的接口规范

这些静态方法只能在接口级别被调用,不能在实现类中被覆盖或继承。

2024-10-20 10:54:22 792

原创 在MySQL中建索引时需要注意哪些事项?

在 MySQL 中创建索引时,需要权衡查询加速和维护开销之间的关系。合理选择需要索引的列,避免创建过多、冗余或低效的索引,注重组合索引的设计顺序,定期监控索引的使用情况,能够有效地提高数据库的整体性能。

2024-10-20 10:21:03 779

原创 MySQL中的最左前缀匹配原则

最左前缀匹配原则是 MySQL 在使用索引时遵循的一种规则,尤其在涉及到组合索引(联合索引)时。最左前缀匹配原则指的是在使用组合索引时,MySQL 会。这意味着,如果你想使用组合索引来加速查询,你的查询条件必须遵循 “最左前缀” 的要求,即我们为users表创建了一个组合索引idx_userfirst_namelast_name和age。:当你查询条件完全包含最左边的字段,MySQL可以使用这个索引。在这种情况下,查询完全匹配索引中的第一个字段first_name,因此可以使用idx_user索引。

2024-10-20 10:00:11 800

原创 MySQL的索引类型有哪些?

在实际应用中,根据数据规模和查询模式选择合适的索引类型,可以显著提升数据库的查询性能。例如,针对一个电商应用,商品 ID、价格等适合使用 B-Tree 索引,热门评论的关键字搜索适合使用全文索引,基于地理位置的查找则需要使用空间索引。选择适合的索引不仅能够加速查询,还能够减少存储开销、提高整体系统性能。

2024-10-20 09:47:27 1229

原创 【python3】函数注解

函数注解是 Python 的一种特性,用于为函数的参数和返回值添加元数据。注解通常和类型提示(type hinting)相关联,但它们本质上不会影响程序的实际执行,只是作为一种信息记录。从Python 3.0开始,函数注解就成为了语言的一部分。在Python 3.5中,加入了类型提示(PEP 484),使得函数注解的使用变得更加规范化和流行。

2024-10-19 21:07:30 1250

原创 设计模式-模板方法

模板方法(Template Method)是行为型设计模式的一种,它在一个抽象类中定义了一个算法的骨架,而将算法的一些步骤延迟到子类中实现。通过这种方式,模板方法使得子类可以在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

2024-10-19 15:55:37 541

原创 设计模式-单例模式

单例模式(Singleton Pattern)是一种常用的设计模式,确保一个类在整个应用程序中只有一个实例,并且提供一个全局访问点来访问这个实例。它的主要目标是控制实例化,避免创建多个实例,以节省资源并保证全局状态的一致性。

2024-10-19 15:55:05 1108

原创 什么是同步锁?

同步锁(Synchronized Lock)是多线程编程中的一个关键概念,用来解决多个线程同时访问共享资源时可能引发的数据不一致问题。同步锁通过限制多个线程并发执行关键代码的能力,确保在同一时刻只有一个线程能够访问临界区(即共享资源的代码段),从而保证数据的一致性。我们可以通过 Java 的 synchronized 关键字实现同步锁。

2024-10-18 15:48:23 965

原创 在java中,类什么时候被加载

在 Java 中,类的加载是一个动态过程,通常发生在程序运行时,而不是编译时。类加载是由 Java 虚拟机(JVM)负责的,主要由 类加载器(ClassLoader) 完成。通常,当类第一次被使用时,类加载器会负责将类文件加载到 JVM 中,并完成必要的初始化过程。如果没有明确的使用,类可能永远不会被加载。

2024-10-18 08:18:56 632

原创 Java 中的【初始化块】

初始化块是特殊的代码块,用于在类加载时或对象创建时执行特定的初始化操作。分为静态初始化块和实例初始化块。

2024-10-18 08:18:22 951

原创 MySQL 中的数据排序是怎么实现的

MySQL 中的数据排序通过 ORDER BY 子句实现,具体的排序方式取决于是否能利用索引。如果无法利用索引,MySQL 使用 Filesort 算法进行排序。理解 MySQL 的排序机制,有助于我们优化查询性能,减少系统的负载。

2024-10-17 13:15:25 1152

原创 【MySQL】索引排序

在执行 SQL 查询时,如果 ORDER BY 子句中指定的排序列上存在合适的索引,MySQL 可以直接利用该索引的顺序来返回排序后的结果,而不需要额外的排序操作。

2024-10-17 12:42:51 1204

原创 【Java】在方法重写(override)中,子类方法为什么可以扩大父类方法的访问权限?

当子类重写父类的方法时,Java 的访问权限规则要求子类的重写方法的访问权限不能比父类的方法访问权限更严格。可以理解为子类在重写时可以扩大访问权限,但不能缩小。例如,父类的一个 方法可以被重写为 ,但不能重写为包访问权限或 。面向对象编程的核心原则之一是"里氏替换原则":即在程序中,任何地方如果可以使用父类对象,那么也应该可以使用子类对象,并且子类对象应该表现得像父类对象一样。如果子类缩小了访问权限,会打破这种替换性,导致编译时和运行时的潜在问题。比如,如果父类的方法是 ,子类的重写方法却变成了 ,那么在

2024-10-16 16:36:37 817

原创 Java中,方法的调用机制

方法准备与类加载 → 创建栈帧并压入调用栈 → 参数压栈 → 执行方法体 → 返回结果并弹出栈帧 → 方法结束并释放栈帧

2024-10-16 13:04:48 2954

原创 什么是栈帧?

栈帧是与每个方法调用相对应的执行单元,包含局部变量表、操作数栈、动态链接、方法返回地址以及附加信息。

2024-10-15 15:26:50 994

原创 java中变量的默认值与作用域

成员变量(实例变量、类变量)有默认值,未初始化时会被分配默认值。局部变量没有默认值,必须在使用前显式初始化,否则会导致编译错误。变量的作用域决定了它在代码中的可见性和生命周期。局部变量的作用域较小,成员变量的作用域较大。

2024-10-07 12:10:29 734 1

原创 Java 内存的使用流程与机制

基本数据类型和局部变量在栈内存中分配,生命周期随方法的执行结束而结束。对象在堆内存中分配,JVM 通过垃圾回收机制自动管理对象的生命周期。静态变量和字符串常量存储在方法区,生命周期与类的生命周期一致。字符串常量池通过优化重复字符串的内存使用来提升性能。

2024-10-07 09:25:28 940

原创 移位操作有什么用?附具体应用场景举例

移位操作(bit shift operation)是计算机科学中的一种基本位运算,主要用于对二进制数进行左移或右移操作。它可以改变一个数在内存中的二进制表示,并且在许多场景下非常高效,常用于加速某些计算过程。移位操作通常分为和,并且根据使用的编程语言和处理器架构,可以有几种不同的移位类型,如逻辑移位、算术移位和循环移位。

2024-10-06 20:57:16 1334

原创 java中,8个字节的long为什么可以自动转换为4个字节的float

Java 对类型转换的设计理念:在不损失数值量级的情况下,允许从较窄的类型转换到较宽的类型,即使可能会有一些精度的损失。

2024-10-06 08:58:24 1272

空空如也

空空如也

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

TA关注的人

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