自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库 | MYSQL这个复杂系统如何上手?

小时候,你可能也玩过**玩具四驱车**。有的四驱车设计得比较封闭,集成度高,除了换电池外几乎不允许拆卸。而另一种则是可组装的,允许在有限的零件中自由更换,为你提供了丰富的选择空间。我个人偏爱后者,它不仅展示了玩具车的整体构造,还让每一个零件都呈现在我的眼前。对我来说,这不仅仅是一辆车,而是一个由众多零件组成的系统,我能够向我的伙伴详细介绍**每个零件**独特之处和它们如何共同作用。

2024-03-16 08:00:00 924

原创 MYSQL | 学好MYSQL到底需要怎样的数学功底?

我们都知道计算机科学是一门交叉学科,对计算机历程有里程碑意义贡献的那些人可能只是一名数学家或者物理学家。也只有可能是这些人,因为他们拥有探索未知、解决复杂问题所需的独特视角和深厚的理论基础。在历史的转折点上,正是这些领域的专家,通过将抽象的数学概念和物理原理应用到计算机技术中,推动了技术的飞跃和创新。现在,我尝试通过Codd在设计关系型数据库时的数学洞察,探讨他如何利用数学原理——从集合论到逻辑学,再到规范化理论和关系代数——不仅解决了当时数据管理面临的问题,更为数据存储和查询方法设定了新的标准。

2024-03-10 08:15:00 802

原创 MYSQL | 数据库到底是怎么来的?

要想知道一件东西是怎么发生的, 我们不妨把时间拨回关系型数据库被提出前后来探索。在信息技术飞速发展的今天,回望数据库管理系统的,我们可以深刻理解到技术进步如何极大地提升了我们处理数据的能力。从早期的手工记录,到纸带打孔的机械化记录,再到今天高效的,每一步的变革都是数据处理能力飞跃的见证。

2024-03-09 08:46:34 977 1

原创 数据库 | 看这一篇就够了!最全MySQL数据库知识框架!

如果可以,可以把自己的话录下来,然后复盘自己的对话。一般情况下表结构的设计会有多人参与,毕竟对数据库的频繁改动是很要命的!本篇已毕,受限于知识广度。我只按照本人的学习路径和理解来写这篇文章。如果各位有什么建议或者补充,欢迎评论区留言!我会持续更新完善这篇文章。

2023-11-02 21:36:19 322

原创 数据库 | 面试官:一次到底插入多少条数据合适啊?.....面试连环炮

数据库中的插入操作是一项既微妙又关键的任务,特别是当我们需要处理大量数据时。这篇文章深入探讨了影响插入性能的各种因素,并为你提供了一些实际的策略和建议。以下是我们讨论的一些要点:🎯磁盘I/O与性能的关系:直接的大量写入可能会导致磁盘I/O饱和,降低整体性能。通过理解磁盘的工作方式,我们可以更好地调整我们的插入策略。📌如何决定插入数据量:考虑硬件、系统资源和数据库的内部机制是关键。每个环境都有其独特性,所以监控和调整是必不可少的。🛠实际应用中的策略与建议。

2023-10-30 13:53:34 1053

原创 Java游戏修炼手册:2023 最新学习线路图

亲爱的读者,恭喜你走完了这条Java进阶之路。从编程的初心者到架构的大师,你已经涉猎了广阔的技术领域,探索了Java及其周边的深奥领域。你已经装备了打开技术大门的钥匙,但真正的旅程才刚刚开始。每一个阶段都是你技能树的一个关键节点,你在这条路上投入的每一分努力,都为你在技术世界中打下了坚实的基石。希望你继续保持好奇心,继续追求卓越,继续为梦想努力。当你回头看这条路时,你会发现自己已经走得很远,但技术的世界永远都是新奇和有趣的。祝愿你在接下来的技术之路上走得更远,达到更高的峰巅!

2023-10-24 18:53:33 643

原创 场景面试 | 秒杀背后的技术:如何处理高并发并确保公平购买

秒杀,顾名思义,即“一秒之内被杀完”。在商业场景中,指的是特定商品在限定时间内以大幅度优惠的价格出售,而这些商品的数量往往有限。

2023-10-09 22:57:05 117 1

原创 Spring | 基于SpringBoot的多数据源实战 - 使用seata实现多数据源的全局事务管理

至此,本章结束。本文深入探讨了多数据源的实用性与实现,展示了在Spring Boot环境中创建实体类,配置数据源,实施数据源配置类,配置Repository类并进行运行与验证的详细步骤。同时,我们也探讨了事务管理和如何使用Seata保持数据的一致性。通过本文,读者可以更加深入地理解多数据源的必要性,学会如何在实际开发中实现多数据源,并能够更好地管理事务和维护数据一致性。

2023-09-29 22:11:20 488

原创 工具篇 | WSL使用入门教程以及基于WSL和natApp内网穿透实践 - 对比VMWare

内网穿透是一种网络技术,能够让你在任何地方都可以访问到局域网中的设备,就像直接连接到局域网一样。NatApp则是一款优秀的内网穿透工具,以其稳定性和高效性受到了开发者的喜爱。NatApp的主要优势在于其简单易用,能快速实现远程访问,而无需复杂的网络配置和设置。下面,我们将指导你如何配置和使用NatApp来实现远程访问虚拟机。在本文中,我们详细探讨了**WSL(Windows Subsystem for Linux)**的安装、配置和使用,指导读者如何在Windows系统中轻松设置和运行Linux环境。

2023-09-27 18:56:26 507

原创 工具篇 | 基于SpringBoot的H2数据库入门实战

H2 Console 是H2数据库的网页版管理界面,提供简单、直观的操作界面,允许用户方便地进行数据库管理和SQL执行,极大地提升了开发和测试的效率。H2数据库凭借其便捷性和简洁性在开发、测试和嵌入式应用中表现卓越。虽然在某些方面与其他数据库相比有所不足,但其简单快捷的特性,使得H2在特定场景下成为优秀的选择。@Data@Entity@Id通过Spring Boot和Spring Data JPA,Java开发者可以更加高效且优雅地集成和使用H2数据库。

2023-09-25 21:13:39 968

原创 Spring | 事务原理与实践 - 声明式事务及编程式事务

事务是由数据库管理系统在执行过程中形成的一个逻辑单位,它由一组有限的数据库操作序列组成。通常情况下,事务是由程序单元通过高级语言或数据库的数据操作语言提交的。至此,本篇结束。本文全面深入地探讨了Spring事务的原理、管理类型、深度剖析以及在复杂业务场景中的应用。通过对Spring事务的深度剖析和实际应用案例的探讨,我们可以更加清晰、准确地理解Spring事务在实际开发中的运用,更加灵活地处理各种复杂的业务场景。在实际开发过程中,精确地把握事务边界、合理配置事务属性以及灵活应用分布式事务是至关重要的。

2023-09-24 16:15:45 489 2

原创 Spring | 如何在项目中优雅的处理异常 - 全局异常处理以及自定义异常处理

本文首先会简要介绍异常处理的基础知识和其在软件开发中的重要性。接着,我们会深入探讨Spring内置的异常处理机制,包括和等,并通过实战演示和代码示例来展示如何在实际项目中运用这些机制。在此基础上,我们还会探讨如何自定义异常处理策略,设计统一的异常响应格式,以及创建和管理业务相关的异常类。此外,文章还会详细讨论状态码与异常的关联,异常日志记录的最佳实践,全局与局部的异常处理策略,以及异常处理的测试策略。以下所有示例均已上传至Github上,大家可以将项目拉取到本地进行运行。

2023-09-23 12:15:02 411

原创 Spring | 事件监听器应用与最佳实践

Spring事件监听器是Spring应用中用于处理事件的一种机制。事件通常代表应用状态的变化,而监听器则负责响应这些变化。通过Spring的事件监听器,开发者可以在解耦的前提下,实现不同组件间的信息交流,提高代码的可维护性和可扩展性。在Spring的事件监听器模型中,主要涉及三个核心组件:事件(Event)、监听器(Listener)和事件发布器(Event Publisher)。在Spring中,我们可以通过继承类来定义自己的事件。这个类需要包含所有与事件相关的信息。

2023-09-22 00:43:26 676

原创 工具篇 | Gradle入门指南 - 附Github仓库地址

Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。更多信息和详细文档可以在上找到。

2023-09-21 21:16:00 440 1

原创 JVM | 内存调优实战 - MAT工具问题排查与分析

内存管理在JVM性能优化中占有举足轻重的地位。不合理的内存使用不仅会导致应用的不稳定,还会严重影响用户体验。因此,对内存溢出问题的及时发现和解决尤为关键。本文通过详细的案例分析,让我们了解到了如何定位和解决JVM内存溢出的问题。通过对JVM参数的调整、代码的优化和合理的垃圾收集策略,我们可以确保应用的稳定运行并最大化性能。在今后的开发中,希望大家能够将这些经验和策略运用得当,持续优化和提高应用的性能。

2023-09-06 21:34:54 1083

原创 JVM | 垃圾回收器(GC)- Java内存管理的守护者

为了满足不同应用场景的需求,JVM提供了多种垃圾回收器。每种回收器都有其特点和使用场景。接下来,我们将深入了解几种主流的垃圾回收器。Java的垃圾回收器在确保应用性能和稳定性方面发挥了至关重要的作用。从手动管理到自动化管理,内存处理在计算机科学的发展过程中已经走过了漫长的道路。今天,通过JVM的自动垃圾回收机制,开发者可以集中精力编写更高效的代码,而不是手动管理内存。通过我们的讨论,我们了解到了垃圾回收的工作原理、常见的垃圾回收算法、以及如何选择和配置合适的垃圾回收器。

2023-09-03 09:45:57 625 1

原创 JVM | Java执行引擎结构及工作原理

分层编译是Java HotSpot VM为了在启动性能和长时间运行性能之间取得平衡而采用的策略。通过使用两个不同的JIT编译器,它确保了应用程序在启动时能够快速响应,并且在长时间运行时能够获得最大的性能。垃圾收集是Java虚拟机的核心组成部分,它确保了内存的有效利用并防止了内存泄漏。尽管它与执行引擎是独立的,但两者之间的交互确保了Java程序的平稳运行。正确地理解和配置垃圾收集器可以大大提高应用的性能和响应时间。执行引擎的优化技术是Java性能良好的关键。

2023-09-01 13:05:53 635

原创 JVM | 基于openJDK源码深度拆解Java虚拟机

本篇完毕,我们来回顾下:在Java中,一切皆为对象。所以我们从对象出发,探索对象的内存结构。通过其设计的结构关联到JVM虚拟机的其它组件。一步步的解构这个JVM系统,最终掌握完整的JVM虚拟机。

2023-08-03 23:43:46 810

原创 JVM | 从类加载到JVM内存结构

至此,本篇完结。我们来回顾一下:本篇文章是类加载过渡到JVM内存结构的衔接文章。为了让你把之前的知识串起来,我结合了内存结构重新为你讲解类的生命周期。希望看完这篇文章,你会有不一样的收获。

2023-08-01 17:16:42 606

原创 JVM | 基于类加载的一次完全实践

至此,本篇完结。我们来回顾下:首先,我带你创建并使用了类加载器完成从本地文件夹下加载自己的类。这些工作我们可以通过Java自带的类加载器来简化,我也为你演示其用法。当然,我们在使用自定义类加载器要格外注意,因为涉及到类初始化往往你会碰到一些不可预见的诡异BUG。然后,我为你介绍自定义类加载器场景的使用场景。顺便看一下Tomcat和Java是怎么用自定义类加载器的特性实现高级功能的。

2023-07-29 16:57:40 1112

原创 JVM | 类加载是怎么工作的

好,我们来做个总结。作为JVM的开篇,还是老样子,我为你构建一个建筑工地的世界。基于这个世界,我为你讲解了类加载器的工作原理。并且为你解答了一些类加载器过程中遇到的问题,带你重新回顾了一下,本篇文章的三位主人公,它们分别是:引导类加载器,扩展类加载器,应用类加载器。最后我留了几道面试题,不知道你是否都能答上来呢。

2023-07-28 01:00:00 690

原创 并发编程 | CompletionService - 如何优雅地处理批量异步任务

让我们一起回顾今天所学。首先,我引导你使用了CompletionService和ExecutorService来实现了先前复杂的需求。相较于CompletableFuture,它们可能显得更为传统,但也更易理解。然后,我们一起探索了CompletionService的存在意义。我们试图解答,既然ExecutorService已经足够应对需求,为什么还要有CompletionService这样的设计。

2023-07-25 15:17:15 843

原创 并发编程 | 并发工具类 - 并发控制工具

并发控制工具是并发编程的重要组成部分,它们提供了丰富的功能,帮助我们更好地进行并发编程。在使用并发控制工具时,我们需要根据需求和场景选择合适的工具,并注意线程安全和死锁等并发问题。重申并发编程的核心要点:明确并发编程的目标(正确性、性能),理解并正确使用并发工具,避免并发的常见问题(线程安全、死锁)。

2023-07-24 15:37:32 93

原创 并发编程 | 并发工具类 - 并发容器

Java并发包(java.util.concurrent)是从Java 5开始引入的,它包含了一系列用于并发编程的工具类,例如线程池、计数器、并发集合等。其中,用于并发编程的集合类被称为并发容器。并发集合:如等并发队列:如等并发Set:如等并发List:如等接下来,我们将逐一介绍这些并发容器的内部实现原理,并且通过一些示例来展示如何在实际编程中使用它们。

2023-07-24 14:38:01 86 1

原创 并发编程 | 并发工具类 - 原子类

并发编程是现代软件开发的一个重要部分,特别是在多核处理器的环境中,为了充分利用系统资源,我们常常需要写出高效并发的代码。在Java中,Java.util.concurrent(JUC)提供了一系列的工具类来帮助我们进行高效的并发编程,而原子类就是其中的一类重要工具。原子类,是java.util.concurrent.atomic包下提供的一组工具类,这些工具类用于进行原子性操作。

2023-07-24 12:43:41 87

原创 并发编程 | 理论基础 - Java内存模型

Java内存模型并不是真实的物理内存模型,而是一个抽象的概念,主要解决两个问题:一是定义了内存和线程的交互关系;二是解决了由于多线程通过共享内存进行通信时,存在的内存一致性问题。通过对Java内存模型的深入探讨,我们可以看到,JMM是Java并发编程的基石,它定义了共享变量的可见性、原子性和有序性,为构建正确、高效的并发程序提供了重要保障。同时,JMM也是Java并发编程的一个重要考察点,深入理解和掌握JMM对于Java程序员来说,尤为重要。

2023-07-24 07:57:13 85

原创 并发编程 | 关键字

synchronized是Java中的一个关键字,它可以用于方法和代码块,主要用于实现对资源的互斥访问。当一个线程进入了由synchronized保护的代码块或方法,其他试图访问该保护代码的线程会被阻塞,直到前一个线程退出。// 方法体 }// 代码块 } }volatile是Java中的一个关键字,它用于标记一个变量,使其具有可见性和防止指令重排序的特性。

2023-07-24 00:02:55 61

原创 并发编程 | 并发编程框架 - Disruptor - 深入理解高性能异步处理框架

好,我们来回顾一下。首先,我向你揭示了Disruptor框架高性能的秘密。然后,我们一起深入探讨了Disruptor框架本身。在此基础上,我们深入剖析了Disruptor的工作原理,这让我们对源码的理解更加深入。最后,我们分析了Disruptor和ArrayBlockingQueue在性能上的差异,并对在这个过程中需要注意的问题进行了详细的说明。如果你计划在生产环境中使用Disruptor,我希望你能充分考虑这些问题。至此,本篇结束。

2023-07-23 14:47:34 504

原创 并发编程 | 并发工具类 - 序章

并发工具类是一组在Java并发编程中使用的类,它们为多线程操作提供了支持和辅助。这些工具类主要可以分为并发容器原子类并发控制工具和并发执行框架四大框架,它们分别提供了线程安全的数据结构、原子操作支持、同步控制机制以及线程管理和执行的框架。并发工具类主要位于Java的java.util.concurrent包及其子包中。看完上面的描述,是不是对别人经常提起的并发工具类相关的概念加深了不少?我们在沟通技术的时候常常一会说并发工具类,一会又说并发容器,其实所描述都是一类东西。

2023-07-21 15:39:22 38

原创 并发编程 | ThreadLocal - 线程的私有存储

ThreadLocal是Java中的一个类,用于创建线程本地变量。每个线程都会创建一个独立的变量副本,每个副本对其他线程都是隔离的。这样,数据在每个线程间都不会互相影响,从而实现了线程安全的数据共享。尽量在不使用ThreadLocal变量时调用其remove()方法,将其清除,避免可能的内存泄露。在使用ThreadLocal变量前,确保已经进行了初始化,以避免空指针异常。适当的设计和使用ThreadLocal变量,避免在不必要的情况下长期存储大对象,以降低内存压力。

2023-07-20 23:41:41 504

原创 并发编程 | Fork/Join 并行计算框架 - 利用‘分而治之’提升多核CPU效率

我们来回顾一下,我们首先深入探讨了Fork/Join框架的本质,然后详细阐述了其核心概念并进行了源码分析。接着,我们通过实际操作深化了对Fork/Join框架的理解。最后,我们对该框架的优点与局限进行了全面评估,并探索了其他可选的并发模型。在这个过程中,我们还解答了一些常见的关于Fork/Join框架使用中的问题,希望对你有所帮助。

2023-07-19 20:56:47 444

原创 并发编程 | 序章 - 欢迎来到并发编程世界

(正确的学习路径) 他像一道明灯,为我指引了前行的方向,教我如何在并发编程的世界中稳步行走,如何处理复杂的问题,如何避免错误的决策。但是,如果他们需要共享数据,就需要用到"volatile"这把神奇的剑,它可以保证数据的可见性,让每个线程看到的数据都是最新的。在这个世界中,每个线程都是一位勇敢的冒险者,他们在执行任务的过程中,会遇到各种各样的挑战,但是只要他们学会了如何正确使用这些工具,就能够胜任任何任务,完成各种各样的冒险。欢迎来到并发编程的世界,这是一个充满活力,异彩纷呈的大陆,被称为Java世界。

2023-07-19 16:28:13 154

原创 并发编程 | 同步控制器AQS - 从复杂到简单的并发管理

AQS,即AbstractQueuedSynchronizer,是Java并发编程框架中的一个核心组件,用于构建锁或者其他同步组件。它通过内部的FIFO队列管理那些尝试获取但未成功的线程,以及提供了一种条件变量机制,实现了高效稳定的多线程并发控制。:这是Java并发编程框架中的一个抽象类,它提供了一种基础机制,用于创建自定义的同步控制工具。构建锁或其他同步组件。

2023-07-18 22:56:02 149

原创 并发编程 | 锁 - 并发世界的兜底方案

本文从一个案例分析的角度进行切入,为你提供三套策略。其中锁是最后的兜底策略,因此我为了突出其重点以syncronized关键字为中心分析其原理,并且为你讲解JDK1.5后出现的其它同步原语,提供示例。

2023-07-17 16:30:12 114

原创 并发编程 | 线程池-资源管理利器

本文我们以一个例子告诉你如何设计一个简单的线程池,这个线程池需要哪些基本的代码逻辑。然后通过源码为你解析了从execute入口的线程池工作原理。最后我们还总结了几个常见误区,以及关于线程池更高级的使用案例。

2023-07-17 01:19:37 112

原创 并发编程 | 线程-并发世界的主角

作为线程(主角),我真心希望程序员朋友们能注意防范死锁问题。请务必谨慎处理并发编程中的资源分配和锁管理,避免编写引发死锁的代码。保持清醒的头脑,提升编程技艺,让我们一起在多线程世界里航行更加顺利。

2023-07-16 11:54:02 139

原创 并发编程 | 线程安全-编写零错误代码

现在,让我们回顾一下重要知识点。首先,我为你揭示了线程安全问题的根源,主要包括可见性、原子性以及有序性这三大原则。然后,我从语言层面向你展示了Java如何应对这些问题,提出了有效的解决策略。其中,Java内存模型(Java Memory Model,简称JMM)无疑是其中最重要的一环,它为我们处理多线程带来的问题提供了基础的理论架构。针对JMM内存模型,我对其进行了详尽的解读,并通过实际的代码示例,帮助你更深入地理解其运行原理和使用方法。

2023-07-15 22:43:59 149 1

原创 并发编程 | 理论基础 - 掌握并发编程的钥匙

首先,我为你展示了一个并发世界观。把你置身于其中,以一位初学者的角度学习这个世界的运行规律。并且带你理解两个非常重要的概念:“并发与并行”,“进程与线程”。然后用21实际的知识储备来理解这个异世界存在的难题,并且带你吧这些问题都解决掉。

2023-07-15 09:51:31 150 1

原创 并发编程 | 从Future到CompletableFuture - 简化 Java 中的异步编程

好了,到这里就结束了,我们来回顾一下。首先,我带你回顾了一下Java并发世界的编年史。紧接着,我带你体验了一下古人经常使用的Future。感到它的不妙之后,我带你回到CompletableFuture。紧接着有深入了解了它的全貌以及使用方法。最后,希望阅读到这里的你,不要忘记回答问题哦。

2023-07-13 13:54:18 866 3

原创 深入Netty-小菜的进阶之路 #5

这是一篇关于小菜-一名大四学生在刚入职后获得同事帮助以及在自身努力下成为一名架构师的故事掌握任何知识都不是浅尝辄止的,需要不断的进行深入实践并思考, 在思考的过程中加深印象。假如你能在工作中碰到,无疑你是幸运的,趁着这个热度深入研究吧!

2023-05-25 23:39:47 80

空空如也

空空如也

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

TA关注的人

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