自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python推导式

Python 列表推导式(List Comprehension)是一种用简洁的方式创建列表的方法。通过列表推导式,你可以在一行内生成新的列表,通常用于从一个现有的列表中筛选元素或进行某种变换。

2025-02-12 09:31:13 151

原创 什么时候用post什么时候用get

在 HTTP 请求中,GET和POST。

2024-12-26 10:56:28 302

原创 tail 的用法

tail是一个强大的工具,尤其适用于实时监控日志文件和查看文件末尾内容。通过结合不同的选项和命令,你可以灵活地查看文件内容,监控系统日志,甚至处理大文件的最后几行。tail -f和grep的结合使得它在日志分析和实时数据流处理中非常有用。

2024-12-03 14:54:06 961

原创 grep的用法

grep是一个非常强大的工具,特别适合在大量数据中快速查找并过滤出你关心的部分。通过与正则表达式、选项和管道结合,grep使得文本查找和处理变得更加灵活和高效。

2024-12-03 14:39:15 556

原创 less用法

less是一个功能丰富、灵活的分页查看工具,它使得在终端中查看长文件和大输出变得更加高效。通过与搜索、跳转和滚动操作结合使用,你可以方便地浏览文件内容,特别是当文件很大时,它的优势更加明显。如果你经常需要查看大量输出,less是一个不可或缺的工具。

2024-12-03 13:57:16 546

原创 在 Java 程序中怎么保证多线程的运行安全?

在 Java 程序中,要保证多线程的运行安全(即线程安全),通常需要确保多个线程对共享资源的访问不会产生竞态条件(Race Condition)、数据不一致或其他并发问题。是一种用于控制并发访问的机制,它能够确保同一时刻只有一个线程能够执行被同步的方法或代码块,避免多个线程同时操作共享资源时导致的数据不一致。为每个线程提供独立的变量副本,每个线程都只能访问自己的副本,从而避免了共享数据的同步问题。时,锁住的范围越大,程序的并发性能越差,因此可以通过细化锁粒度来提高性能。更灵活,并且提供了更多功能。

2024-11-30 11:49:09 1116

原创 线程池的大小怎么确定

确定线程池的大小(即线程池中的线程数量)是一个需要综合考虑的任务,取决于以下因素:系统资源、任务的特性(CPU 密集型还是 IO 密集型)、并发任务数量等。过大的线程池会导致资源争抢(如 CPU 和内存压力过高),而过小的线程池则可能造成资源浪费或任务执行效率低下。

2024-11-30 11:31:21 935

原创 哪些集合类是线程安全的?

Java 早期线程安全集合(如VectorHashtable)因性能较低,通常不推荐使用。推荐使用 java.util.concurrent包中的集合类(如)来替代传统同步集合,性能更优。如果没有现成的线程安全实现,可以使用方法对非线程安全集合进行包装。

2024-11-30 10:34:19 922

原创 创建线程池有哪几种方式

相比。

2024-11-30 10:33:44 639

原创 如何实现数组和 List 之间的转换?

在 Java 中,数组和List之间的转换是常见的操作。以下是详细的实现方式,包括从数组转换为List,以及从List转换为数组的具体方法。

2024-11-29 15:27:38 395

原创 HashMap 的实现原理

理解的实现原理,最关键的就是理解(Hash Table)的工作方式。哈希表是一种通过哈希函数将键(Key)映射到数组中的一种数据结构,而就是基于哈希表来实现的。

2024-11-29 14:47:27 675

原创 什么是时间复杂度?

时间复杂度就是用来表示一个算法执行时间随输入数据量增加的变化情况。它帮助我们了解,当数据越来越多时,算法需要花多长时间来处理这些数据。时间复杂度就是表示算法运行时间和数据量之间关系的一个数字。这个数字越小,算法的性能就越好,能处理的数据量就越大。

2024-11-29 13:32:39 65

原创 Collection 和 Collections 有什么区别?

Collection和都是 Java 集合框架中的重要部分,但它们有着不同的含义和作用。它们的区别主要体现在和的概念上。

2024-11-29 13:17:41 500

原创 公平锁和非公平锁

在并发编程中,(Fair Lock)和(Non-Fair Lock)是两种不同的锁策略,它们控制多个线程争用同一个锁时的行为方式。它们的主要区别在于线程获取锁的顺序和优先级。

2024-11-29 13:13:08 910

原创 什么是 ReentrantLock?

是 Java 中提供的一个可重入锁,它是包中的一个类。与关键字相比,提供了更多的功能,允许更加灵活的控制线程同步行为。

2024-11-29 13:11:07 924

原创 CopyOnWriteArrayList 底层实现

底层实现使用一个Object[]数组存储元素,每次写操作时都会创建一个新数组进行修改。适用场景:非常适合读多写少的场景,能提供高效的并发读操作。劣势:每次写操作都涉及到数组复制,因此写操作的性能较差,且会增加内存消耗。

2024-11-29 12:57:26 533

原创 ConcurrentHashMap实现

是 Java 中一种专门为多线程设计的Map,它可以保证在多个线程同时访问时,数据的一致性和正确性。它通过分段锁和CAS 操作来确保多个线程可以高效且安全地访问数据。它适用于高并发的环境,特别是当多个线程需要同时修改和读取数据时。

2024-11-29 12:54:25 264

原创 什么是原子操作(CAS)?

是一种比较并交换的原子操作,确保线程对数据的修改是安全的。CAS 会检查内存中的值,只有当它和我们预期的值相等时,才会更新这个值。它是原子性的,要么完全成功,要么完全失败,不会中断。使用 CAS 的好处是能够避免锁,提供更高效的并发控制。CAS 是并发编程中非常重要的一个概念,它让我们能够在不使用传统锁的情况下,确保多线程操作数据时的安全性和一致性。

2024-11-29 12:50:47 1896

原创 JAVA中的集合

在 Java 中,(Collection)是一个容器对象,用来存储和操作数据。Java 提供了几种集合类型,每种集合类型都有不同的特点和用途。Java 集合框架主要分为和,它们各自有不同的实现类。Collection是集合框架的根接口,它代表了一个对象的集合,可以用来存储一组数据。

2024-11-29 10:42:10 523

原创 BIO、NIO、AIO 有什么区别?

好的,让我用更加通俗易懂的比喻来解释和在工作原理上的差别。

2024-11-29 10:28:42 316

原创 接口和抽象类有什么区别?

它们有很多相似之处,但也有本质区别。如果你需要解耦代码、实现多继承、定义行为,优先选择。都是用来定义一组功能的规范,用于面向对象编程中的。如果需要定义一组类的共同特性,优先选择。

2024-11-29 09:50:58 960

原创 匿名内部类

顾名思义,就是没有名字的内部类。它是在代码中直接定义并用来创建对象的一种特殊类,用于简化代码书写。如果匿名内部类的代码较复杂,建议写成独立的类以提高代码的可读性和可维护性。:如果这个类只用一次,写一个完整的类是不是有点浪费?,适合在需要临时实现某些功能的时候使用。直接定义和使用,干完活就不用管它了。

2024-11-29 09:39:08 327

原创 String str = new String(“i“) 的作用机制详解

的作用是:如果常量池中已经存在该字符串,则返回常量池中的引用;否则,将堆中的对象加入常量池并返回它的引用。这样只会在字符串常量池中创建对象,效率更高。创建的对象转入常量池,可以调用。下面的代码可以帮助理解。

2024-11-29 09:26:45 707

原创 Java的数据类型

基本数据类型是 Java 中最基础的数据单位,用来直接存储值。(Primitive Types) 和。引用数据类型用于引用对象或数组。有任何具体的内容需要更详细解释吗?

2024-11-29 09:14:43 236

原创 重载和重写的区别

重载(Overloading):是指在同一个类中,方法名相同,但参数列表(参数的数量、类型或顺序)不同的情况。重载的方法可以有不同的返回类型,但返回类型不是区分重载方法的依据。重写(Overriding):是指子类重新定义继承自父类的方法,使得子类的方法可以替换掉父类的实现。重写的方法必须具有与父类方法相同的方法签名(方法名、参数列表)。重载是同一个类中,方法名相同但参数不同的方法,目的是提供多个版本的同一方法。重写是子类对父类方法的实现,目的是改变或扩展父类的行为。

2024-11-28 18:58:58 383

原创 抽象类和接口有什么区别

【代码】抽象类和接口有什么区别。

2024-11-28 18:50:29 240

原创 方法引用的操作符 ::

是 Java 8 引入的方法引用语法,用于引用已存在的方法或构造器。它简化了 Lambda 表达式的写法,尤其在你已经有一个方法或构造器并想在代码中重用时,方法引用提供了一种简洁和优雅的方式。

2024-11-28 15:21:40 320

原创 Arrays.asList转换

/ 基本数据类型数组 -> 使用包装类数组// 输出: [1, 2, 3, 4, 5]

2024-11-28 15:15:39 710

原创 Copy-on-Write是什么

是一种优化技术,主要用于减少不必要的对象复制和内存占用。在这种技术中,当多个线程访问一个共享对象时,只有在写操作发生时才会进行实际的复制,而在读取时,所有线程都共享同一份数据。这种方式通常用于优化性能,特别是在处理大量的读取操作而写操作较少的场景中。

2024-11-28 14:58:24 977

原创 检查字符串是否包含有效文本(非 null 和非空白)

(推荐):可以判断字符串是否为null或仅包含空格、换行等空白字符,使用简单。isEmpty():无需依赖外部库,只使用 Java 标准库,但需要自己去除空白字符。:只检查是否为null或空字符串,但不检查空白字符。Objects类:适合 Java 8+,结合trim()和isEmpty()检查非空且非空白字符串。在大多数情况下,是一个非常强大且简洁的工具,适用于大部分需要判定字符串有效性的场景。

2024-11-28 14:43:54 438

原创 工具类和库空值(null)检查

Objects类:提供了多种静态方法来处理空值检查,适合 Java 7 及以上版本。类提供了等方法,适合快速处理null值。:提供了等方法,适合用于严格的空值检查。SpringAssert类:适用于使用 Spring 框架的项目,提供了很多断言方法。这些现成的工具类和库可以显著简化null检查,并使代码更简洁、可读性更强,避免了重复编写null判断逻辑。

2024-11-28 14:40:44 432

原创 Optional解决多层级嵌套

使用Optional用于包装每个可能为null的对象。map()用于在值存在时执行映射操作,避免了显式的null检查。flatMap()用于处理返回Optional类型的方法,避免嵌套的Optional。和 orElse()用于处理最终值,分别支持执行操作或提供默认值。通过使用Optional,你可以有效地处理多层级嵌套中的null检查,使代码更简洁、可读性更强,并避免了空指针异常。

2024-11-28 14:09:22 521

原创 为什么要用微服务

模块化设计,易于维护每个服务都独立开发、测试、部署,降低维护难度。故障隔离,系统更稳定一个服务出问题,不会影响其他服务。灵活扩展,按需分配资源不同的服务可以独立扩展,不浪费资源。技术灵活,选择更自由每个服务可以用最合适的语言或工具开发,提升效率。独立部署,快速迭代只更新需要改动的服务,其他部分可以继续运行。微服务让系统更加灵活和高效,非常适合处理复杂的、不断变化的业务需求,比如电商网站、视频平台、物流系统等复杂场景。

2024-11-27 15:41:00 1004 1

原创 Tomcat 自定义类加载器的原因和机制

所有 Web 应用的类通过一个统一的类加载器加载。这样会导致什么问题呢?

2024-11-27 15:25:27 781

原创 synchronized 锁升级

锁升级是 Java 用来优化锁的机制。在无竞争的情况下,使用偏向锁和轻量级锁,以减少不必要的开销。一旦有线程竞争,锁会升级为重量级锁,保证线程安全,但会带来性能上的代价。这就是锁升级的基本概念,目的是在不同的竞争情况下,动态调整锁的类型,从而提供最佳的性能和线程安全性。

2024-11-27 15:08:39 992

原创 公平锁和非公平锁

即先请求锁的线程会先获得锁。公平锁通常通过队列(如 FIFO 队列)来维护线程获取锁的顺序,确保没有线程被“饿死”。线程在尝试获取锁时,可以直接尝试抢占锁,而不管其他线程是否已经在等待。是指线程获取锁的策略。两者的区别在于是否按照线程请求锁的顺序来分配锁。/ˌriːˈɛntrənt lɒk/ 是一个典型的可重入锁,可以设置为。

2024-11-27 14:57:01 271

原创 idea中配置的jdk如何修改启动参数

为项目配置 JDK 启动参数:通过中的VM options设置。为 IDEA 配置启动参数:修改文件。为 Gradle/Maven 项目设置参数:分别在或pom.xml中配置。修改启动参数可以帮助你优化程序的性能、调试问题或调整 JVM 设置,例如堆内存大小、垃圾回收策略等。

2024-11-27 12:07:10 2546

空空如也

空空如也

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

TA关注的人

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