自定义博客皮肤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)
  • 收藏
  • 关注

原创 【架构设计(一)】常见的Java架构模式

在 Java 开发领域,选择合适的架构模式对于构建高效、可维护且能满足业务需求的软件系统至关重要。本文将深入探讨几种常见的 Java架构模式,包括单体架构与微服务架构、分层架构与微服务架构的对比,以及事件驱动架构与CQRS(命令与查询职责分离),通过源码解读、分析实现原理、探讨性能特点以及呈现应用场景等方面,帮助大家更好地理解和应用这些架构模式。

2025-01-04 23:03:20 1292

原创 【架构师基础(三)】架构师如何理解和应用系统的非功能性需求

深入理解并合理应用这些非功能性需求,是构建健壮、高效系统的关键所在。本文将围绕性能要求、可扩展性、可用性、可靠性、安全性、可监控性与容错性等几个重要的非功能性需求方面展开讨论,通过源码解读、原理分析以及实际应用场景和代码示例来详细阐述如何在Java 系统中对它们进行有效的把控与实现。

2025-01-03 22:54:14 1232

原创 【架构师基础(二)】Java 架构设计的基本原则

设计模式是在软件设计中反复出现的问题的通用解决方案,它们是前人经验的总结,有助于解决特定的架构和设计问题。Java 架构设计的基本原则,包括 SOLID原则、设计模式和代码重构,为构建高质量的软件系统提供了重要的指导。通过合理运用这些原则,我们可以创建出更易于维护、可扩展、高性能的软件系统。在实际开发中,需要根据具体的项目需求和场景灵活运用这些原则和方法,不断优化代码结构和性能,以满足不断变化的业务需求。同时,持续学习和实践这些原则,将有助于提高开发团队的技术水平和软件的整体质量。

2025-01-03 22:34:38 367

原创 【架构师基础(一)】Java 架构师的角色和职责

在 Java 开发领域,Java架构师扮演着至关重要的角色,他们如同项目的领航员,把控着整个软件系统的架构方向,确保系统的高质量、高性能以及可扩展性。今天,我们就来深入探讨一下Java 架构师的定位、与开发人员的区别以及其所需要掌握的核心技能。

2025-01-02 21:14:06 1009

原创 【2025最新 爆肝JAVA面试题-----------持续更新】

最近收到不少粉丝私信,大部分都是想在年前或者年后跳槽,找份好工作的,都问有没有最新的面试题集,索性最近有点时间,整理了大量面试题;初、中、高级都涉及;包括进阶视频资料打包整理;非常全面,且持续更新。关注公众号:搜 架构研究站,回复:资料领取,即可获取全部面试题以及1000+份学习资料。

2025-01-02 00:02:50 955

原创 【Java 面试题总结(续)】

多重继承问题:在一些编程语言中允许多重继承,即一个类可以继承多个父类,这可能会导致诸如方法名冲突、菱形继承(多个父类继承同一个更上层的类,导致子类中对上层类的成员存在二义性)等复杂问题。Java 的处理方式:Java 不支持类的多重继承,一个类只能有一个直接父类(单继承),但支持接口的多重实现,一个类可以实现多个接口。

2025-01-01 23:01:14 949

原创 【JAVA 面试题总结】

ArrayList:基于数组实现,随机访问效率高(通过索引快速定位元素),增删元素尤其是中间元素时效率相对较低,线程不安全,适合查询操作多的场景。LinkedList:基于链表实现,增删元素(特别是在首尾位置操作)效率高,随机访问效率低,同样线程不安全,适合频繁增删操作的场景。Vector:和 ArrayList 类似,基于数组,但它是线程安全的(方法都加了 synchronized 关键字),不过性能相对较低,现在较少使用。

2025-01-01 22:27:36 779

原创 【持续集成与持续部署(CI/CD)工具 - Jenkins】详解

Jenkins 是开源的自动化服务器,其源代码完全开放,任何人都可以查看、修改和贡献代码,这使得大量开发者和企业可以免费使用它来构建自己的 CI/CD 流程,降低了工具使用成本。

2024-12-31 18:04:05 1377

原创 【容器化技术 Docker 与微服务部署】详解

容器化技术特别是 Docker 以及与之配合的容器编排工具如Kubernetes,为微服务的部署和管理带来了极大的便利和优势,从镜像构建、容器运行到集群化的资源调配和服务管理,形成了一套完整的解决方案,助力企业应对复杂多变的业务场景和不断增长的系统规模需求。

2024-12-31 16:59:38 2295

原创 【分布式缓存中间件Memcached原理与应用】

分布式缓存中间件是一种用于存储频繁访问的数据副本的软件系统,它位于应用程序和数据源(通常是数据库)之间。通过在内存中缓存常用的数据,减少了应用程序对后端数据源的直接访问次数,从而提高系统的整体性能。

2024-12-31 15:57:16 985

原创 【RabbitMQ消息队列原理与应用】

RabbitMQ消息队列原理与应用一、消息队列概述(一)概念消息队列(Message Queue,简称MQ)是一种应用程序间的通信方式,它允许应用程序通过将消息放入队列中,而不是直接调用其他应用程序的接口,实现应用程序间的解耦。发送消息的应用程序称为生产者(Producer),接收消息的应用程序称为消费者(Consumer),消息在队列(Queue)中暂存,直到被消费者消费。(二)作用1. 解耦在分布式系统中,不同服务之间可能存在复杂的依赖关系,使用消息队列可以将这些服务解耦。例如,在一个

2024-12-31 15:02:17 917

原创 【Kafka 消息队列深度解析与应用】

在现代大数据环境下,企业需要处理海量的数据流入和流出,包括用户的行为数据、系统日志、业务数据等,传统的消息队列系统在处理这些大数据量、高并发的数据时,面临着诸多挑战,如性能瓶颈、扩展性差、数据一致性难以保证等。Kafka 应运而生,它为大规模数据处理和实时数据传输提供了一个高性能、高可靠的分布式消息队列解决方案。

2024-12-31 12:08:39 1195

原创 【分布式数据库与数据存储方案】详解

分布式数据库是一种将数据分散存储在多个物理节点上的数据库系统,这些节点通过网络进行连接和通信,对外呈现出一个统一的逻辑数据库,用户或应用程序可以像操作传统的单一数据库一样与之交互,但其内部通过一系列复杂的机制来协调各节点间的数据管理、存储以及读写操作,旨在突破单机数据库在存储容量、处理能力以及可用性等方面的限制,更好地应对大数据量、高并发访问等业务场景。

2024-12-31 11:10:44 1514

原创 【数据库连接池原理与应用】详解

数据库连接池在 Java项目中的重要性和有效性,合理使用和优化连接池可以显著提高数据库访问效率和系统的整体性能,避免传统连接方式的诸多问题。在实际应用中,需要根据不同的业务需求和系统性能,选择合适的连接池并进行合理的优化,以达到最佳的性能和资源利用效果。

2024-12-31 10:47:23 714

原创 【非关系型数据库Redis 】 入门

非关系型数据库(NoSQL,Not Only SQL)是相对于传统的关系型数据库而言的一种数据存储管理系统。它摒弃了关系型数据库中严格的表结构、SQL 语言操作以及复杂的事务等特性,采用更加灵活的数据模型来存储和管理数据,旨在应对一些关系型数据库在特定场景下处理效率不高、扩展性受限等问题,能够更好地适应大数据量、高并发、灵活多变的数据存储需求。

2024-12-31 00:39:58 1399

原创 【MySQL 高级特性与性能优化】

通过对 MySQL 的存储引擎深入了解、合理运用索引、正确处理事务以及全面优化数据库的查询、表结构和服务器参数等多个方面,可以有效地提升 MySQL 数据库在实际应用中的性能,使其能够更好地应对不同业务场景下的复杂需求,保障系统的高效、稳定运行。同时,数据库性能优化是一个持续的过程,需要根据业务的发展、数据量的变化以及服务器硬件的更新等情况不断地进行监控、评估和调整,以始终保持数据库处于最佳的性能状态。

2024-12-30 15:05:58 1094

原创 【MyBatis】详解

MyBatis 整体框架结构设计精巧,主要分为三层:接口层、核心处理层以及基础支持层。接口层面向开发者,提供了如 SqlSession等接口,方便开发者与框架进行交互,执行数据库操作。核心处理层处于中间,负责对配置信息进行解析、构建 SQL语句以及管理数据库连接等关键操作,像 SqlSessionFactory 在此层起着核心的作用,用于创建SqlSession。基础支持层则涵盖了如数据源管理、事务管理、缓存管理等基础功能,为上层操作提供坚实的底层支撑。

2024-12-30 11:46:36 973

原创 【Spring Boot 】详解

随着 Java 应用的日益复杂,传统 Spring 框架在项目搭建与配置方面愈发繁琐,大量的 XML 配置、依赖管理等工作耗费开发者诸多精力。为解决这些痛点,Spring Boot 应运而生,旨在简化 Spring应用的初始搭建以及开发过程,让开发者能更聚焦于业务逻辑实现。

2024-12-29 20:36:13 940

原创 【Spring】详解(下)

本文聚焦 Spring 框架核心原理与应用,涵盖 Spring AOP 实现原理及应用场景,详解 Spring 对数据库访问(如 Spring JDBC、Spring Data)的支持,还介绍了其与 MyBatis、Hibernate 整合方式及优势,通过源码解读等深入剖析,助力开发者更好掌握 Spring 在实际项目中的运用。

2024-12-29 19:37:35 893

原创 【Spring】详解(上)

随着 Java 应用程序规模的不断扩大以及复杂度的日益提升,传统的 Java开发方式在对象管理、代码耦合度等方面面临诸多挑战。例如,对象之间的依赖关系往往硬编码在程序中,使得代码的可维护性、可扩展性变差,测试也变得困难。为了解决这些问题,Spring框架应运而生,它提供了一套轻量级的、面向切面编程以及依赖注入等先进特性的解决方案,帮助开发者更高效、灵活地构建 Java 应用程序。

2024-12-29 18:10:29 671

原创 【Java 反射机制】详解

Java反射机制尽管在性能方面存在一定的局限性,但凭借其强大的动态获取和操作类及成员信息的能力,在众多高级编程场景和框架开发中都发挥着不可或缺的作用,是Java 程序员深入理解和掌握高级编程技巧、开发复杂应用的重要工具之一。

2024-12-29 14:16:17 1009

原创 【Java I/O 流与文件】详解

Java I/O 流与文件操作在众多实际应用场景中都发挥着不可或缺的作用,熟练掌握它们的原理、使用方法以及性能特点,能够帮助我们更好地开发各种功能丰富、高效稳定的软件系统。无论是单机应用中的文件处理,还是网络环境下的数据交互,都可以灵活运用这些知识来解决实际问题,满足业务需求。

2024-12-29 00:06:18 738

原创 【Java 线程池】详解

线程池在不同类型的项目中都有着广泛且关键的应用,通过合理地运用线程池机制,根据具体业务场景和需求精细配置其各项参数,能够充分发挥多核处理器的优势,高效管理线程资源,提升系统的并发处理能力、响应速度以及稳定性,为各类软件应用的高质量运行提供坚实的保障,满足不同用户群体的使用需求,助力项目在复杂的业务环境和高并发需求下顺利开展。

2024-12-28 18:54:08 2869

原创 【Java 并发编程】详解

在并发编程中,使用普通的集合类(如 ArrayList、HashMap 等)往往会出现线程安全问题,因为它们在设计时并没有考虑多线程并发访问的情况。Java 提供了一系列并发容器来解决这个问题,这些并发容器在保证高效性能的同时,能够支持多线程安全地进行读写等操作。

2024-12-27 17:58:56 886

原创 【泛型】——详解

在上述代码中,T 就是类型参数,它可以在类的成员变量、方法参数以及返回值类型等地方使用。");@Override泛型方法可以独立于泛型类存在,它允许在方法级别上使用类型参数,使方法更加通用。return t;在这个示例中, 声明了这是一个泛型方法,T 是类型参数,方法接受一个 T 类型的参数并返回同样类型的结果。通配符(Wildcard)是泛型中用于表示未知类型的一种特殊符号,主要有?来表示。

2024-12-26 21:30:26 984

原创 【集合】——HashMap

HashMap 在 Java 编程中是一个功能强大且极为常用的集合类,它凭借其高效的哈希表底层结构、灵活的键值对存储方式以及丰富的操作方法,为各种数据处理任务提供了有力的支持。深入理解它的原理、特性、使用方法以及注意事项,对于我们编写高效、稳定的 Java 程序有着至关重要的意义。希望通过这篇详细的解析,大家能对 HashMap 有一个更为透彻的掌握,在实际编程中运用自如。

2024-12-26 21:00:19 759

原创 【集合】——TreeSet

TreeSet 位于 java.util 包下,是一个实现了 Set 接口的集合类。与其他实现 Set 接口的类(如 HashSet)一样,TreeSet 严格遵循集合元素的唯一性原则,即在同一个 TreeSet 集合中,不会存在两个相等的元素。然而,TreeSet 与众不同之处在于它能够对集合中的元素进行排序,使得元素呈现出一种有序的状态,这一特性在很多需要按照特定顺序处理数据的场景中极具价值。

2024-12-26 20:34:12 962

原创 【集合】——HashSet

HashSet 在 Java 编程中是一个功能强大且应用广泛的集合类,它的元素唯一性和无序性等特点使其在很多特定的业务场景中展现出独特的优势。深入理解它的原理、特性、方法以及相关注意事项,对于我们编写高效、准确的 Java 程序有着重要的意义,希望通过这篇详细的解析,能让大家对 HashSet 有一个更为透彻的掌握,在实际编程中能够运用自如。

2024-12-26 19:11:50 695

原创 【集合】——LinkedList

LinkedList 位于 java.util 包下,实现了 List 接口与 Deque 接口,它是一种双向链表结构的数据集合,能灵活存储多个元素,可用于模拟栈、队列等数据结构。

2024-12-26 17:18:09 449

原创 【集合】——ArrayList

ArrayList 是 Java 集合框架中位于 java.util 包下的一个类,它实现了 List接口,是一种动态大小的数组,可以灵活地存储和操作多个元素。与普通数组相比,它无需预先指定固定的大小,会根据元素的增减自动调整容量。

2024-12-26 17:02:43 868

原创 【JAVA基础知识点汇总】

Java 作为一门广泛应用于企业级开发、安卓应用开发等众多领域的编程语言,有着扎实且丰富的核心基础知识。在这篇博客中,我们将对 Java的基本数据类型、运算符、控制语句等基础语法元素,面向对象编程的核心概念以及常用的集合框架进行详细回顾,希望能帮助大家巩固和加深对 Java核心基础的理解。

2024-12-26 11:19:25 1074

原创 【排序】归并排序

归并排序也是一种分治算法。它将数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并成一个有序数组。例如,对于数组[5, 4, 3, 2, 1],首先将它分成[5, 4]和[3, 2, 1],然后对[5, 4]进一步分成[5]和[4],对[3, 2, 1]进一步分成[3]、[2]和[1]。接着对这些子数组进行排序并合并,先合并[4]和[5]得到[4, 5],合并[1]、[2]和[3]得到[1, 2, 3],最后合并[4, 5]和[1, 2, 3]得到[1, 2, 3, 4, 5]。

2024-12-20 14:50:13 272

原创 【排序】快速排序

它选择一个基准元素(pivot),通常是数组的第一个元素,然后将数组分为两部分,左边部分的元素都小于等于基准元素,右边部分的元素都大于等于基准元素。例如,对于数组[5, 4, 3, 2, 1],选择5作为基准元素,经过一次划分后可能得到[1, 4, 3, 2]和[](右边部分为空,因为所有元素都小于5),然后对[1, 4, 3, 2]继续进行快速排序。),这是因为每次划分可以将问题规模大致减半,总共需要进行大约次划分,每次划分需要进行O(n)次比较操作。最坏情况是数组已经有序或者逆序,时间复杂度为O(

2024-12-20 14:47:19 232

原创 【排序】插入排序

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。例如,对于数组[5, 4, 3, 2, 1],首先将5视为已排序序列,然后将4插入到合适的位置,比较4和5,因为4 < 5,所以将4插入到5的前面,得到[4, 5, 3, 2, 1]。在最坏情况下,数组是逆序排列的,每次插入一个元素都需要移动已排序部分的所有元素。最好情况是数组已经有序,时间复杂度为O(n),此时只需要进行n - 1次比较操作,不需要移动元素。最坏情况和平均情况的时间复杂度为O (

2024-12-20 14:39:24 138

原创 【排序】选择排序

选择排序首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。4, 3, 2, 1],首先找到最小元素1,将它与第一个元素5交换位置,得到[1, 4, 3, 2, 5]。然后在剩余的[4, 3, 2,因为它需要进行n - 1轮选择操作,每一轮都需要在剩余的n -i个元素中找到最小(大)元素,总共大约需要。5]中找到最小元素2,与第二个元素4交换位置,以此类推。无论数组初始状态如何,选择排序的时间复杂度都是O (

2020-08-01 14:30:00 264

原创 【排序】冒泡排序

数组的理解数组就是一种容器,用于储存同一种类型元素数组的定义数据类型[] 数组名称 例:int[] arr 定义了一个int类型的数组变量arr数据类型 数组名称[] 例:int arr[] 定义了一个int类型的变量arr数组数组的初始化动态初始化定义数组时,指定数组的长度,系统默认给出数组中的元素赋值数据类型[] 数组名称 = new 数据类型[数组长度] ; 例:int[] arr = new int[3] ;数据类型 数组名称[] = new 数据类型[数组长度] ;

2020-07-25 10:40:55 204

原创 有符号位的数据表示法以及位运算

**在java学习过程中,遇到曾经学习过但未完全掌握的知识点;在此记录,方便查看有符号位的数据表示法计算机底层对数据的运算是通过"补码"进行计算的!一个数据拥有原码,反码,补码正数:原码,反码,补码都相同如:数字7原码:00000111反码:00000111补码00000111负数:原码:先求出该数字的二进制,最高位为1,表示该数为负数反码:原码的最高符号位不变,其他数值按位取反(0变1,1变0)补码:反码末尾+1如:数字-7原码:10000111反码:11111000

2020-07-18 10:44:49 4690

空空如也

空空如也

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

TA关注的人

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