自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 经典题:“合并区间”

通过对这道区间合并问题的详细分析和实现,我们学习了如何运用排序和遍历的技巧来解决区间操作问题。在实际编程中,类似的思路可以应用于许多场景,如任务调度、资源分配等。同时,我们也注意到了在实现过程中的一些细节问题,如排序时的整数溢出问题和输入验证。希望通过本文的讲解,读者能够更好地理解和掌握这类问题的解决方法,提升自己的编程能力。

2025-03-23 16:55:04 728

原创 java面试点——面向对象与面向过程

在编程的领域中,面向对象编程(Object - Oriented Programming,OOP)与面向过程编程(Procedure - Oriented Programming,POP)是两种极为重要的编程范式,它们有着各自独特的理念与应用场景,就像是编程世界里的两大利器,为开发者们解决各种复杂问题提供了不同的思路与方法。今天,就让我们一同深入探讨这两者的奥秘。

2025-03-23 09:46:20 840

原创 LeetCode 经典题:“除自身以外数组的乘积”

给定一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。:请不要使用除法,且在On时间复杂度内完成此题。

2025-03-22 15:06:24 590

原创 LeetCode 经典题:“最长有效括号”

在编程的世界里,字符串处理问题总是充满挑战与趣味。今天,我们来深入探讨一道经典的字符串问题——寻找字符串中最长有效括号子串的长度。这不仅是对字符串操作技巧的考验,更是对逻辑思维和数据结构运用能力的一次锻炼。

2025-03-22 15:04:07 601

原创 Spark 数据清洗

Apache Spark 是一个快速通用的集群计算系统,它提供了高效的数据处理能力,支持多种编程语言,如 Java、Python、Scala 等。Spark 具有弹性分布式数据集(RDD)、数据集(Dataset)和数据框(DataFrame)等核心抽象,能够在集群环境中并行处理大规模数据。通过以上示例,我们展示了如何使用 Java 结合 Spark 进行常见的数据清洗操作,包括缺失值处理、重复值处理、异常值处理和数据类型转换等。

2025-03-21 14:24:43 253

原创 Selenium 结合 Tasker:模拟突破登录限制

Selenium 是一个强大的自动化浏览器操作工具,它提供了多种编程语言的 API,能够模拟用户在浏览器中的各种行为,如打开网页、填写表单、点击按钮等。我们可以使用 Java 或 JavaScript 编写代码,通过 Selenium WebDriver 控制 Chrome、Firefox 等主流浏览器,实现网页的自动化操作。通过 Java 和 JavaScript 结合 Selenium 与 Tasker 的模拟操作,我们对网页登录限制的突破进行了一定的技术探索。

2025-03-21 14:21:36 924

原创 Selenium 使用与讲解

Selenium 是一个用于自动化浏览器操作的开源工具集,由 Jason Huggins 于 2004 年开发。它最初用于 Web 应用程序的自动化测试,随着发展,也可用于网页数据抓取、网页自动化操作等场景。Selenium 是一款功能强大、应用广泛的自动化测试工具。通过本文介绍,你应全面了解了 Selenium 的原理、特性和使用方法。无论是 Web 应用的自动化测试,还是网页数据抓取,Selenium 都能提供有效解决方案。实际应用中,要注意其局限性和注意事项,结合具体需求合理使用。

2025-03-21 14:18:13 578

原创 Java——JWT详细讲解

JWT 是一种用于在网络应用间安全传递声明的开放标准(RFC 7519)。它通常由三部分构成:头部(Header)、载荷(Payload)和签名(Signature),并以分隔,形成类似的字符串。JWT 是一种简单而强大的身份验证机制,适用于各种前后端分离的项目。通过本文的介绍,你应该对 JWT 的原理、工作流程和使用方法有了更深入的了解。在实际开发中,要注意 JWT 的安全问题,确保系统的安全性。希望本文能帮助你在项目中成功应用 JWT 进行登录认证。

2025-03-21 14:14:30 800

原创 Lombok 注解:简化 Java 代码的利器

Lombok 是一个 Java 库,它可以通过注解的方式自动生成构造函数、getter、setter、toString 等方法,减少了手动编写样板代码的工作量。使用 Lombok 可以使代码更加简洁,同时也能减少因手动编写样板代码而可能引入的错误。Lombok 是一个非常实用的 Java 库,它通过注解的方式自动生成样板代码,使我们的代码更加简洁、高效。然而,在使用 Lombok 时,我们也需要权衡其优缺点,根据项目的实际情况进行选择。

2025-03-21 14:09:15 900

原创 LeetCode 经典题:“字母异位词分组”

字母异位词分组”这道题通过巧妙地利用排序和哈希表,将字母异位词分组的问题高效地解决。这种方法不仅逻辑清晰,而且时间和空间复杂度都在可接受的范围内。在解决类似的字符串分组问题时,我们可以借鉴这种思路,先找到元素的共同特征作为键,再利用哈希表进行分组存储。希望通过这篇博客,你能对该问题有更深入的理解,并掌握相应的解题技巧。

2025-03-21 14:02:10 628

原创 LeetCode 经典题:“盛最多水的容器”

盛最多水的容器”问题是一道非常经典的算法题,通过暴力枚举法我们可以直观地理解问题,但时间复杂度较高。而双指针法通过巧妙地移动指针,在OnO(n)On的时间复杂度内解决了问题,大大提高了效率。在解决类似的优化问题时,我们可以尝试使用双指针法来降低时间复杂度。希望这篇博客能帮助你更好地理解和掌握这个问题的解法。

2025-03-21 14:01:26 725

原创 LeetCode 经典题:“打家劫舍”

打家劫舍问题通过动态规划的方法得到了高效解决。从问题描述到状态转移方程的推导,再到代码实现和复杂度分析,每一步都紧密相连。通过解决这个问题,我们深入理解了动态规划将复杂问题分解为子问题,并通过保存子问题结果来避免重复计算的思想。在实际应用中,许多类似的优化问题都可以借鉴这种思路。希望这篇博客能帮助你更好地掌握打家劫舍算法,在算法学习的道路上迈出坚实的一步。

2025-03-21 13:58:51 443

原创 解决 MySQL 报错:Unknown collation: ‘utf8mb4_0900_ai_ci’

Unknown collation: ‘utf8mb4_0900_ai_ci’” 报错主要是由于 MySQL 版本不兼容或数据迁移问题导致的。你可以根据实际情况选择升级 MySQL 版本、修改排序规则或修改 SQL 脚本等方法来解决该问题。在操作过程中,一定要注意备份数据,以免造成数据丢失。希望本文能帮助你顺利解决该报错。

2025-03-20 15:39:00 555

原创 Java基础:类初始化的顺序详解

Java类初始化的顺序是有明确规则的,从静态成员到实例成员,从父类到子类。掌握好这个顺序,在编写代码尤其是涉及到复杂继承结构和成员初始化逻辑时,能够避免很多潜在的错误,提升代码的质量和可读性。希望通过本文的介绍,你对Java类初始化顺序有了更深入的理解。你觉得这篇博客是否清晰地阐述了Java类初始化顺序的相关内容呢?要是你还有想补充或探讨的点,欢迎随时交流。

2025-03-20 15:10:16 221

原创 Spring Boot项目 实现百度文心一言流式输出及 Java 流式输出常用方法

通过以上内容,我们详细介绍了如何在 Java 的 Spring Boot 项目中实现百度文心一言的流式输出,以及 Java 中实现流式输出的常用方法。流式输出技术在不同场景下都能发挥重要作用,无论是与大语言模型交互还是进行文件操作、Web 数据传输等。希望本文能帮助你更好地理解和运用流式输出技术,让你的 Java 程序更加高效和灵活。如果你在实践过程中遇到任何问题,欢迎留言讨论。

2025-03-20 14:39:22 1153

原创 Redis五大数据类型、持久化机制、内存淘汰机制

Redis的五大数据类型为开发者提供了丰富的数据存储和处理方式,能够满足各种不同的业务需求。持久化机制则保障了数据的安全性和可恢复性,开发者可以根据应用对数据完整性和恢复速度的要求选择合适的持久化方式。而内存淘汰机制则是在内存资源有限的情况下,保证Redis系统稳定运行的关键手段。通过深入理解和合理运用这些特性,开发者能够充分发挥Redis的优势,构建出高性能、高可靠性的应用系统。在实际项目中,还需要根据业务特点和系统架构不断优化和调整相关配置,以达到最佳的性能和用户体验。

2025-03-20 10:20:47 681

原创 Redis——缓存穿透、击穿、雪崩

在当今的互联网应用架构中,Redis作为一款高性能的缓存数据库,被广泛应用于提升系统性能和响应速度。然而,在使用Redis的过程中,我们可能会遇到一些棘手的问题,其中缓存穿透、击穿和雪崩是较为常见且具有较大影响的问题。本文将深入探讨这三个问题的原理、危害,并给出相应的解决方案。

2025-03-20 10:15:04 618

原创 操作系统:任务调度算法

简单来说,任务调度就是操作系统根据一定的规则,在多个等待执行的任务之间分配 CPU 时间的过程。想象一下,操作系统就像一个繁忙的机场,各个任务就像是等待起飞的航班,而调度算法则决定了哪架航班先起飞、飞行多久,以及何时轮到下一架航班。

2025-02-13 14:10:20 694

原创 解决 CentOS 系统中 Google Chrome 安装与运行的 glibc 依赖问题

在CentOS系统上安装和运行Google Chrome时,经常会遇到glibc库版本依赖问题。本文将详细讲解如何解决这类问题,同时介绍如何检查Google Chrome的glibc版本需求。

2025-02-13 00:07:28 1150

原创 JVM :与Java 语言特性的关联

JVM 与 Java 语言特性紧密相连,多线程、反射和动态代理等特性的实现都依赖于 JVM 的底层机制。理解这些关联,有助于开发者在编写 Java 程序时,充分利用 JVM 的优势,优化程序性能,解决复杂的问题。同时,也为深入研究 Java 技术体系和进行高级开发提供了坚实的基础。在不断发展的 Java 技术领域,持续关注 JVM 与语言特性的关系,将有助于开发者更好地适应新技术的发展和应用需求。

2025-02-13 00:01:50 645

原创 JVM:调优策略与实践

JVM 调优是一个复杂但非常重要的过程,通过合理使用性能监控工具、分析调优参数以及采取有效的优化方法,可以显著提升 Java 应用的性能。在实际工作中,需要根据应用的特点和需求,灵活运用这些调优策略,并不断进行实践和验证,以确保应用在生产环境中高效、稳定地运行。同时,随着硬件技术和 JVM 技术的不断发展,JVM 调优也需要不断跟进和优化,以适应新的挑战和需求。

2025-02-12 23:59:50 548

原创 JVM:字节码执行引擎

JVM 的字节码执行引擎是 Java 程序运行的核心,字节码指令集定义了程序的执行逻辑,解释执行和编译执行的协同工作机制则在保证程序快速启动的同时,提高了程序的执行效率。深入理解字节码执行引擎的工作原理,有助于我们优化 Java 程序的性能,编写更加高效的代码。在实际开发中,我们可以通过合理的代码设计和 JVM 参数配置,充分发挥字节码执行引擎的优势,提升 Java 应用的整体性能。

2025-02-12 23:58:20 870

原创 JVM:运行时数据区(下)—— 堆与方法区

堆和方法区是 JVM 运行时数据区的核心组件,它们分别负责对象的存储和类的运行时信息管理。深入理解堆的结构划分、内存分配与回收策略,以及方法区的作用、运行时常量池的特性和实现方式,对于优化 Java 应用程序的性能、解决内存相关问题具有重要意义。通过合理地配置堆和方法区的参数,选择合适的垃圾回收器,可以显著提高 Java 应用程序的运行效率和稳定性。在实际开发中,我们应该根据应用程序的特点和需求,灵活运用这些知识,打造出高性能的 Java 应用。

2025-02-12 23:56:40 919

原创 JVM:运行时数据区(上)——线程私有区域

程序计数器、Java 虚拟机栈和本地方法栈作为 JVM 运行时数据区的线程私有区域,各自承担着独特而重要的职责。程序计数器确保线程执行的连续性,Java 虚拟机栈为 Java 方法的执行提供了完整的运行环境,本地方法栈则架起了 Java 与本地代码交互的桥梁。深入理解这些区域的工作原理,对于编写高效、稳定的 Java 程序,特别是多线程程序,以及排查相关的性能和错误问题具有重要意义。

2025-02-12 23:52:55 704

原创 JVM:类加载子系统

在某些特定场景下,我们需要自定义类加载器。比如,实现类的加密加载,先对字节码文件进行加密,在加载时由自定义类加载器解密后再加载;或者实现类的隔离加载,不同模块使用不同的类加载器,避免类冲突。自定义类加载器需要继承类,并重写关键方法,如findClass方法。在findClass方法中,我们可以自定义加载逻辑,例如从网络、特定文件系统位置加载类的字节码。

2025-02-12 23:48:28 545

原创 WebSocket(三)

了解 WebSocket 的应用场景、局限性及优化策略,能帮助开发者在实际项目中扬长避短,充分发挥 WebSocket 的优势,构建出高性能、稳定的实时通信应用。在不断发展的 Web 技术领域,持续关注和优化 WebSocket 的使用,将为用户带来更优质的体验。

2025-02-12 23:41:50 724

原创 WebSocket(二)

/ 设置 fin 为 1,opcode 为 0x1(文本帧)} else {4 : 10);// 使用示例// 这里假设已有 WebSocket 连接对象 socket深入理解 WebSocket 的数据帧与控制帧结构,能帮助开发者更好地优化 WebSocket 通信,处理复杂场景,提升应用性能与稳定性。通过本文的代码示例,希望你能在实际项目中灵活运用这些知识,构建出更强大的实时通信应用。

2025-02-12 23:40:53 808

原创 LeetCode 经典题:“三数之和”

三数之和”这道中等难度的题目通过排序 + 双指针法和哈希表法展示了不同的解题思路。排序 + 双指针法利用数组排序后的有序性,通过双指针移动和剪枝操作高效地找出所有不重复的三元组,是一种较为优化的解法。哈希表法虽然理论上可行,但在实际应用中,由于去重和排序操作,性能不如排序 + 双指针法。在解决这类问题时,我们需要根据具体情况选择合适的方法,以达到最佳的时间和空间复杂度平衡。希望通过对这两种方法的详细分析,能帮助大家更好地理解和解决类似的数组组合问题,提升算法设计和分析能力。

2025-02-12 23:40:21 1013

原创 WebSocket(一)

WebSocket 是一种基于 TCP 的应用层网络协议,它为浏览器和服务器之间提供了全双工通信通道,使得双方能够在建立一次连接后,实时地双向传输数据。这意味着服务器可以主动向客户端推送信息,无需客户端频繁发起请求。通过本文,我们详细了解了 WebSocket 的基本概念、工作原理以及在 JavaScript 中的应用。WebSocket 为实时通信提供了高效、便捷的解决方案,在现代 Web 应用开发中具有重要地位。

2025-02-12 23:39:37 757

原创 LeetCode 经典题:“组合总和”

组合总和”这道中等难度的题目通过回溯法和动态规划法展示了两种不同的解题思路。回溯法直观且容易理解,通过深度优先搜索尝试所有可能的组合,并利用剪枝操作优化性能。动态规划法则通过求解子问题,以空间换时间的方式,高效地构建出所有符合条件的组合。在实际应用中,如果candidates数组长度较短且target较大,回溯法可能更合适;如果candidates数组长度较长且target相对较小,动态规划法可能在性能上更优。

2025-02-11 23:47:38 835

原创 LeetCode 经典题:“最大子数组和”

最大子数组和”这道题通过多种方法展示了不同的算法思想。暴力枚举法虽然简单直接,但时间复杂度较高;动态规划法通过定义状态和状态转移方程,将问题分解为子问题来解决,时间复杂度较低;优化的动态规划(贪心算法思想)在动态规划的基础上进一步优化了空间复杂度。在实际应用中,我们应该优先选择优化的动态规划方法,因为它在时间和空间上都具有较好的性能。希望通过对这道题的多种解法的学习,大家能更好地理解不同算法的特点和应用场景,提升算法设计和分析能力。

2025-02-11 23:45:54 657

原创 LeetCode 经典题:“斐波那契数”

斐波那契数”这道简单题虽然本身逻辑并不复杂,但通过不同的解法展示了递归、迭代和动态规划等多种算法思想。递归法代码简洁,但存在大量重复计算,效率较低;迭代法通过循环避免了重复计算,时间和空间复杂度都较为优秀;动态规划法(记忆化搜索)结合了递归和记忆化的思想,避免了递归法的重复计算问题,提高了效率。在实际应用中,我们可以根据具体情况选择合适的解法。希望通过对这道题的多种解法的学习,大家能更好地理解不同算法的优缺点,提升算法设计和分析能力。

2025-02-11 23:44:41 607

原创 LeetCode 经典题:“反转字符串”

反转字符串”这道简单题通过多种方法展示了不同的解题思路。双指针法是最符合题目要求的高效解法,利用指针操作在原地完成字符串反转,空间复杂度优秀。递归法以递归的方式实现反转,但空间复杂度相对较高。使用库函数法虽然简单直接,但不符合题目对原地修改和空间复杂度的要求,不过在实际应用中,如果没有这些限制,它是一种便捷的方式。通过学习这些方法,希望大家能更好地理解字符串操作和不同算法的特点,在面对类似问题时能够灵活选择合适的解法。

2025-02-11 23:42:31 489

原创 LeetCode 经典题:“反转字符串”

反转字符串”这道简单题通过多种方法展示了不同的解题思路。双指针法是最符合题目要求的高效解法,利用指针操作在原地完成字符串反转,空间复杂度优秀。递归法以递归的方式实现反转,但空间复杂度相对较高。使用库函数法虽然简单直接,但不符合题目对原地修改和空间复杂度的要求,不过在实际应用中,如果没有这些限制,它是一种便捷的方式。通过学习这些方法,希望大家能更好地理解字符串操作和不同算法的特点,在面对类似问题时能够灵活选择合适的解法。

2025-02-11 23:41:05 941

原创 LeetCode 简单题:“只出现一次的数字”

只出现一次的数字”这道简单题为我们提供了多种解题思路。哈希表法直观易懂,通过记录元素出现次数来查找目标元素;排序法利用排序后元素相邻的特点进行查找;位运算(异或法)则巧妙地利用异或运算的性质,在不使用额外空间的情况下高效地解决了问题。在实际应用中,位运算(异或法)是最优选择,因为它的时间复杂度和空间复杂度都较为优秀。希望通过对这道题的多种解法的学习,大家能加深对不同算法和数据结构的理解,提高解题能力。

2025-02-11 23:40:00 869

原创 LeetCode 经典题:“删除排序数组中的重复项”

删除排序数组中的重复项”这道简单题,通过双指针法和单指针循环覆盖法为我们展示了在不使用额外数组空间的情况下,如何高效地处理排序数组中的重复元素。双指针法逻辑清晰,利用两个指针的移动来区分重复和不重复元素;单指针循环覆盖法更侧重于通过循环覆盖的方式将不重复元素保留在数组前面。两种方法的时间复杂度和空间复杂度相同,在实际应用中可以根据个人的编程习惯进行选择。希望通过对这道题的多种解法的学习,大家能更好地掌握数组操作和指针的使用技巧。

2025-02-11 23:38:43 446

原创 LeetCode 经典题:“回文数”

回文数”这道简单题通过多种方法为我们展示了不同的解题思路。转换为字符串法简单直观,但需要额外的字符串空间;数学方法(反转一半数字)和逐位比较法在空间复杂度上更优,通过数学运算避免了字符串操作。在实际应用中,如果对空间要求不高,转换为字符串法是一种快速实现的方法;如果追求空间效率,数学方法则更为合适。希望通过对这道题的多种解法的学习,大家能在面对类似问题时,灵活选择最优的解决方案。

2025-02-11 23:36:57 723

原创 LeetCode 经典题:“罗马数字转整数”

罗马数字转整数”这道简单题虽然规则上有特殊情况,但通过合理的算法设计可以轻松解决。常规遍历法和逆序遍历法都能有效地将罗马数字转换为整数,它们的时间复杂度和空间复杂度基本相同。常规遍历法是正向处理字符串,需要对特殊情况进行额外的判断和索引移动;逆序遍历法则是逆向处理,通过比较相邻字符的数值来处理特殊情况,代码相对简洁。在实际应用中,可以根据个人的编程习惯选择合适的方法。希望通过这篇博客,大家能对罗马数字的转换有更深入的理解,同时掌握不同的解题思路和技巧。

2025-02-11 23:35:50 430

原创 LeetCode 经典题:“多数元素”

多数元素”这道简单题为我们展示了不同的算法思路和数据结构的应用。哈希表统计法直观易懂,利用哈希表的特性进行元素计数;排序法巧妙地利用了多数元素在排序后数组中的位置特点;摩尔投票法则以其高效的时间和空间复杂度脱颖而出,是解决此类问题的最优解。通过对这道题的多种解法的学习,我们可以在面对不同场景时,根据时间和空间的要求选择最合适的算法。希望大家在今后的算法学习中,能够灵活运用这些方法,提升自己的解题能力。

2025-02-11 23:34:40 808

原创 LeetCode 经典题:“数组中重复的数字”

数组中重复的数字”这道简单题展示了多种解决数组重复元素问题的方法。排序后遍历方法简单直观,但效率相对较低;哈希表法利用了哈希表快速查找的特性,时间复杂度较好,但需要额外的空间;原地交换法巧妙地利用了数组元素的范围特性,在不使用额外空间的情况下解决问题。通过对这道题不同解法的探讨,希望能帮助大家加深对数组操作、排序算法、哈希表等知识的理解,在面对类似问题时能够灵活选择合适的方法。

2025-02-11 23:33:39 860

空空如也

空空如也

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

TA关注的人

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