java技术圈 为您找到相关结果 249

SpringBoot 3.x + Netty + MQTT 实战物联网智能充电桩

SpringBoot 3.x + Netty + MQTT 实战物联网智能充电桩获课♥》789it.top/14335/获取ZY↑↑方打开链接↑↑1. Spring Boot 3.x角色:作为核心框架,Spring Boot 3.x 提供了快速开发 RESTful 服务和微服务的能力。它简化了 Spring 应用的配置和部署,内置了 Tomcat、Jetty 等 Web 服务器,支持自动配置和依赖注入。适用场景:构建 RESTful API 服务。微服务架构中的服务模块。需要快速迭代和部署的应用。优势:丰富的生态系统和社区支持。内置的监控和管理功能(如 Actuator)。支持响应式编程(Spring WebFlux)和传统的阻塞式编程(Spring MVC)。2. Netty角色:Nett...阅读全文

C/C++从0到1系统精讲 项目开发综合基础课-完结分享

获课:789it.top/2180/C/C++项目开发是一个复杂且细致的过程,它涵盖了从需求分析、设计、编码、测试到部署和维护的多个阶段。以下是对C/C++项目开发综合方面的详细阐述:一、项目启动与需求分析项目背景与目标:明确项目的背景信息、业务需求以及期望达到的目标。需求收集与整理:通过与客户或业务团队沟通,收集详细的需求信息,并进行整理和分析。需求规格说明书:编写详细的需求规格说明书,包括功能需求、非功能需求、性能需求等。二、系统设计系统架构设计:确定系统的整体架构,包括模块划分、接口设计、数据流设计等。详细设计:对各个模块进行详细的设计,包括数据结构、算法选择、类图、时序图等。技术选型:根据项目的需求和技术特点,选择合适的C/C++编译器、开发环境、第三方库等。三、编码实现编码规范:制...阅读全文

博文 2025-03-18 14:58:07 qwerty

Kotlin完整开发互联网App项目实战视频教程

https://97it.top/13532/ 摘要 随着现代软件架构的不断发展,解耦成为设计高效、可扩展和易维护系统的重要目标。EventBus作为一种事件驱动的通信机制,在多个组件之间提供了一种高效、松耦合的消息传递方式,已广泛应用于Android开发和Java应用中。通过EventBus,组件之间可以通过发布和订阅事件的方式进行通信,而不需要直接依赖于彼此的实现。本文将深入探讨EventBus在组件通讯中的应用,包括其基本原理、优势、实现细节以及在实际开发中的使用场景和注意事项。 1. 引言 随着软件系统的规模不断扩大,传统的组件间通信方式逐渐暴露出许多问题。尤其是在组件之间需要频繁交互的情况下,耦合度较高的通信方式容易导致系统变得复杂,且不易于扩展和维护。为了解决这些问题,事件驱动架...阅读全文

博文 2025-03-04 22:26:14 92834L

理论+实战 构建完整JVM知识体系(完结)

获课:jzit.top/1751/JVM知识体系:理论详解Java虚拟机(JVM, Java Virtual Machine)是Java平台的核心组件,负责执行Java字节码并提供跨平台的能力。理解JVM的理论知识对于深入掌握Java编程和性能优化至关重要。本文将从JVM的架构、内存模型、类加载机制、垃圾回收等方面详细讲解JVM的理论知识。1.JVM概述JVM是Java程序的运行环境,其主要功能包括:加载字节码:将Java源代码编译后的字节码加载到内存中。执行字节码:通过解释器或即时编译器(JIT)执行字节码。内存管理:管理Java程序的内存分配和回收。提供运行时环境:支持多线程、异常处理等特性。2.JVM架构JVM的架构主要包括以下几个部分:类加载器子系统(Class Loader Sub...阅读全文

博文 2025-03-09 10:24:06 lkjhgf

C++大厂面试真题宝典 精选100道(完结)

​获课:weiranit.fun/6100/获取ZY↑↑方打开链接↑↑以下是一些C++ 大厂面试真题12:基础语法C++ 与 C 的区别C 是面向过程的语言,C++ 是面向对象的语言,C++ 还支持泛型编程和函数式编程等特性。C++ 支持动态内存管理new/delete,C 使用malloc/free。C++ 支持函数重载、引用等特性,C 不支持。指针与引用的区别指针是一个变量,存储的是另一个变量的地址,可以通过*操作符来访问指针所指向的变量,指针可以为空,也可以重新赋值指向其他变量。引用是一个变量的别名,在定义时必须初始化,并且一旦初始化后就不能再引用其他变量,对引用的操作实际上就是对被引用变量的操作。const关键字的作用定义常量,使变量的值不可修改。修饰函数参数,表明函数不会修改传入的...阅读全文

博文 2025-03-06 11:20:54 qwas125

三色标记垃圾回收

--- ### **一、三色标记法的必要性** 三色标记法通过颜色状态管理对象可达性,解决了并发标记中的**对象消失**(漏标)和**浮动垃圾**(多标)问题。其核心机制包括: 1. **颜色边界控制**:通过黑色(已扫描完成)、灰色(部分扫描)、白色(未扫描)的状态划分,确保标记过程的原子性。 2. **屏障技术**:结合**写屏障**(如增量更新或原始快照)记录对象引用变化,避免并发操作破坏标记的正确性。 **关键作用**:三色标记法简化了并发标记的协调逻辑,是当前主流垃圾回收器(如G1、CMS、Go GC)实现并发的技术基础。 --- ### **二、替代方案的可行性分析** #### **1. 传统标记-清除算法** • **问题**:传统标记-清除算法需全程STW(Stop-The...阅读全文

博文 2025-03-20 23:11:49 dalang

C++百万并发网络通信引擎架构与实现

C++百万并发网络通信引擎架构与实现获课♥》jzit.top/14254/获取ZY↑↑方打开链接↑↑在探讨C++百万并发网络通信引擎架构与实现中的分布式与集群结合时,我们首先需要明确两者的概念和特点,进而分析它们在网络通信引擎中的结合方式及其优势。分布式与集群的基本概念分布式系统:分布式系统是由多个独立的计算机节点通过网络连接在一起,共同协作完成一个或多个任务的系统。这些节点可以分布在不同的地理位置,每个节点都拥有独立的处理能力,可以执行不同的任务。分布式系统具有高度的可扩展性、可靠性和容错性。集群:集群是指将多个物理或虚拟的计算资源(如服务器)组合在一起,形成一个统一的计算资源池。这些资源在集群内部进行共享和分配,以提供更高的计算能力和更好的资源利用率。集群通常用于提高系统的可扩展性、可用...阅读全文

OpenCV三大经典项目实战 掌握计算机视觉核心技能 2

提高OpenCV项目实战的效率和准确性,可以从以下几个方面入手:一、优化图像处理流程图像预处理:在进行图像分析或目标检测之前,对图像进行适当的预处理,如灰度化、噪声去除、光照归一化等,可以显著提高后续处理的效率和准确性。算法选择:根据具体应用场景选择合适的图像处理算法。例如,对于边缘检测,Canny算法在多数情况下表现良好;对于特征提取,SIFT或SURF算法在关键点检测方面具有较高的准确性。获课:keyouit.xyz/1101/获取ZY↑↑方打开链接↑↑二、利用并行计算和多线程CPU多线程:OpenCV支持多线程处理,可以利用多线程技术并行处理图像数据,提高处理速度。例如,在图像滤波、特征提取等计算密集型任务中,可以将图像划分为多个区域,每个线程处理一个区域。GPU加速:对于大规模图像处...阅读全文

CLH队列与普通队列的核心区别

CLH队列(Craig, Landin, and Hagersten Locks)是Java中AQS(AbstractQueuedSynchronizer)框架用于管理线程同步的双向队列,而普通队列(如FIFO队列)是基础数据结构。两者的核心差异体现在以下方面: --- #### **1. 设计目标与适用场景** | **维度** | **CLH队列** | **普通队列** | |------------------|-----------------------------------------------------------------------------|------------------------------------------------------------...阅读全文

博文 2025-03-19 20:50:09 dalang

虚拟线程与协程池化影响分析

虚拟线程或协程的设计核心在于其轻量级特性,允许高并发场景下高效调度资源。当它们被放入池中重用时,这种优势会被削弱 ### **1. 资源调度的灵活性受限** - **虚拟线程(如Java)**:其设计目标是按需创建,遇到阻塞时立即挂起并释放底层线程。池化会限制虚拟线程的数量(如固定大小的线程池),导致任务必须等待可用线程,无法充分利用其“无限”扩展的能力。 - **Goroutine(Golang)**:Go运行时默认动态管理协程,无需池化即可高效调度。若强行池化,固定数量的协程池会限制并发任务数,违背了协程“按需创建”的设计初衷,导致任务排队等待,降低吞吐量。 ### **2. 阻塞操作的负面影响被放大** - 池化后,若所有池中的虚拟线程或协程均被阻塞(如等待I/O),新的任务将无法立即...阅读全文

博文 2025-03-19 21:09:34 dalang

彭涛Python爬虫训练营

彭涛Python爬虫训练营获课♥》789it.top/14083/获取ZY↑↑方打开链接↑↑Python爬虫是一种利用Python编程语言编写的网络爬虫程序,旨在自动化地收集、处理网络上的数据。这些爬虫程序能够遍历万维网,从网页中抓取所需的内容,并将其保存到本地或数据库中,以供后续分析和利用。以下是Python爬虫的一些关键特性和用途:关键特性自动化:Python爬虫能够自动化地访问网页、提取数据,并处理各种网络请求,从而大大节省了人力和时间。灵活性:Python语言以其简洁的语法和丰富的库支持,使得爬虫程序的编写变得灵活而高效。开发者可以轻松地定制爬虫的行为,以满足特定的数据抓取需求。高效性:借助Python中的多线程、多进程以及异步I/O等技术,爬虫程序能够高效地处理大量的网络请求和数据...阅读全文

博文 2025-03-23 21:47:58 afsdf

CUDA与TensorRT部署实战课程

https://97it.top/13843/ 摘要 矩阵乘法是高性能计算和深度学习中的关键操作之一。随着GPU技术的发展,CUDA Core已成为加速矩阵计算的重要工具。本文通过实现和优化基于CUDA Core的矩阵乘法,探讨了不同优化策略对性能的影响,并对比了CUDA Core与Tensor Core的性能差异。实验结果表明,通过合理利用CUDA Core的并行能力和优化内存访问模式,可以显著提升矩阵乘法的计算效率。 1. 引言 矩阵乘法是科学计算和人工智能中的基础操作,其计算效率直接影响到系统的整体性能。CUDA(Compute Unified Device Architecture)是NVIDIA推出的并行计算平台,通过CUDA Core可以充分利用GPU的并行计算能力来加速矩阵乘法...阅读全文

博文 2025-03-06 19:30:05 92834L

RocketMQ 5.0 的 POP(Pop Orderly Pull)模式

RocketMQ 5.0 的 **POP(Pop Orderly Pull)模式** 允许一个 MessageQueue 被多个消费者并发消费,其设计目标是通过提高并发性来增强吞吐量,同时保证消息的顺序性。 --- ### **1. POP 模式下的并发消费机制** - **基本逻辑**: - 在传统模式下,一个 MessageQueue 通常由单个消费者独占消费(通过消费者组负载均衡)。 - **POP 模式** 允许同一消费者组内的多个消费者**并发拉取同一 MessageQueue 的消息**,但需通过 Broker 协调保证顺序性。 - **Broker 的角色**: - Broker 维护每个 MessageQueue 的消费进度(Offset),并负责分配消息给消费者。 - 多个...阅读全文

博文 2025-03-26 14:39:49 dalang

Netty无锁串行化设计和其Reactor模型

Netty 的**无锁串行化设计**和其**Reactor模型与非阻塞I/O的关系**是理解其高性能架构的核心。以下从设计原理、技术实现及概念区别三方面展开分析: --- ### 一、Netty 的无锁串行化设计 #### 1. **核心思想** Netty 的无锁串行化设计旨在通过**单线程内串行处理同一连接的所有I/O事件和业务逻辑**,避免多线程竞争锁导致的性能损耗。其核心逻辑包括: • **事件绑定到固定线程**:每个 `Channel` 从建立到销毁的整个生命周期都绑定到同一个 `EventLoop`(即一个线程),所有操作(如连接建立、数据读写)均在此线程内完成。 • **避免线程切换**:例如,当 `NioEventLoop` 读取到数据后,直接调用 `ChannelPipel...阅读全文

博文 2025-03-25 16:40:09 dalang

使用 TransmittableThreadLocal 的步骤及核心原理

### 使用 `TransmittableThreadLocal` 的步骤及核心原理 #### **一、TransmittableThreadLocal 的作用** `TransmittableThreadLocal` 是阿里巴巴开源的工具类,用于在多线程环境(尤其是线程池)中**跨线程传递线程本地变量(ThreadLocal)**。它解决了传统 `ThreadLocal` 和 `InheritableThreadLocal` 在线程池中无法正确传递上下文的问题。 --- #### **二、核心使用场景** 1. **线程池任务提交**:确保线程池中的任务能访问提交线程的上下文(如 TraceID、用户信息)。 2. **异步编程**:在异步回调或 CompletableFuture 中传递...阅读全文

博文 2025-03-17 20:38:44 zhidiantech

JVM七大核心系统精讲 从基础理论到高级应用(完结)

获课:789it.top/3362/获取ZY↑↑方打开链接↑↑Java虚拟机(JVM)是Java语言的运行基础,它负责加载字节码文件,并将字节码解释或编译成机器码在不同的操作系统上运行,实现了Java“一次编写,到处运行”的特性。JVM主要包含七大核心系统,以下是对这些核心系统的精讲,从基础理论到高级应用进行阐述:一、类加载子系统基础理论类加载器:负责将.class文件加载到JVM中。JVM中有三种内置的类加载器,分别是启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。此外,还可以自定义类加载器来满足特殊的加载需求。类加载过程:包括加载、验证、准备、解析、...阅读全文

博文 2025-03-17 22:20:05 qwerty

SPI JDNI与双亲委派模型

--- ### **一、双亲委派模型的核心逻辑** 双亲委派模型是 Java 类加载器(ClassLoader)的默认工作流程,其核心规则为: 1. **加载优先级**:子类加载器(如 `AppClassLoader`)在加载类时,优先委派父类加载器(如 `ExtClassLoader`)处理。 2. **避免重复加载**:父类加载器无法加载的类,才由子类加载器自行加载。 3. **安全隔离**:核心类(如 `java.lang` 包)由启动类加载器(`BootstrapClassLoader`)加载,防止恶意代码篡改。 #### **类加载器层级**: | **类加载器** | **加载路径** | **责任** | |--------------------------|--------...阅读全文

博文 2025-03-21 00:48:04 dalang

C++百万并发网络通信引擎架构与实现

C++百万并发网络通信引擎架构与实现​获课♥》789it.top/14126/获取ZY↑↑方打开链接↑↑构建高性能C++网络通信引擎涉及多个关键领域,包括网络协议设计、并发模型、I/O处理、跨平台兼容性等。以下是一个从服务端、客户端到跨平台实现的完整构建指南,涵盖各方面的考虑因素和最佳实践。1. 网络通信引擎设计概述目标:构建一个高效、可扩展、跨平台的网络通信引擎,支持TCP/UDP协议,并能够在不同操作系统间(如Windows、Linux、macOS)无缝工作。关键需求:高性能(低延迟、低资源消耗),易于扩展,支持多并发,处理高并发连接(例如,数万并发连接),支持事件驱动模型。2. 架构设计高性能网络通信引擎的设计应该关注以下几个方面:异步I/O模型:为了处理高并发,通常采用非阻塞I/O配...阅读全文

博文 2025-03-22 16:32:09 ghfjhk

马士兵「Java多线程与高并发」从入门到精髓

马士兵「Java多线程与高并发」从入门到精髓​获课♥》789it.top/4193/获取ZY↑↑方打开链接↑↑ Java开发者的进阶之旅:多线程与高并发技术点全面解析在Java开发中,掌握多线程与高并发是成为一名高级开发者的重要步骤。随着应用程序的复杂性和并发需求的增加,开发者需要深入理解Java中的多线程与高并发技术。以下是一些关键技术点的全面解析,帮助开发者在这方面不断进阶。1. Java中的多线程基础多线程是指一个程序在同一时间内可以执行多个任务。Java提供了对多线程编程的支持,使得开发者能够有效地利用多核处理器进行并行计算,提升系统性能。创建线程的方式在Java中,可以通过以下几种方式来创建线程:继承Thread类:通过继承Thread类,并重写run()方法来实现多线程。实现Ru...阅读全文

博文 2025-03-26 12:39:17 ghfjhk

Netty 的 ​Boss-Worker EventLoop 模型

Netty 的 **Boss-Worker EventLoop** 模型是其高性能网络通信框架的核心设计,结合了 Reactor 线程模型和异步非阻塞 I/O 机制。 --- ### **一、Boss EventLoopGroup 与 Worker EventLoopGroup** 1. **Boss EventLoopGroup** • **职责**:负责监听客户端的连接请求(Accept 事件),并将新建立的连接(`Channel`)分配给 Worker EventLoopGroup 中的某个 EventLoop。 • **线程模型**:通常由 1 个或多个 `NioEventLoop` 组成,每个 `NioEventLoop` 绑定一个线程,通过 `Selector` 监听连接事件。 ...阅读全文

博文 2025-03-25 17:59:36 dalang

Java 8 ConcurrentHashMap 多线程并发扩容实现详解

### Java 8 `ConcurrentHashMap` 多线程并发扩容实现详解 --- #### **一、扩容触发条件** 1. **元素数量阈值** 当哈希表元素数量超过 `容量 × 负载因子`(默认负载因子为 0.75)时触发扩容。 2. **链表长度限制** 若链表长度超过 8 且数组容量 ≥64,链表会转换为红黑树;若扩容后哈希冲突减少,可能触发树退化为链表。 --- #### **二、扩容核心流程** 1. **初始化新数组** • 创建新数组,容量为旧数组的 2 倍。 • 通过 `sizeCtl` 标记扩容状态(负数表示正在扩容)。 2. **任务分配与多线程协作** • **步长划分**:将旧数组划分为多个连续区间(每个线程默认处理 16 个桶)。 • **线程协助机制*...阅读全文

博文 2025-03-19 11:13:48 zhidiantech

比Guava Cache更好的缓存库Caffeine

--- ### 一、功能全面性:Caffeine兼容并超越Guava 1. **功能覆盖与扩展** Caffeine完全兼容Guava Cache的API设计(如缓存过期策略、监听器、加载器等),同时新增了以下核心功能: • **异步缓存(Async Cache)**:支持通过线程池异步处理缓存加载和清理操作,避免阻塞主线程,提升并发性能 • **写入外部资源(Write-Through)**:允许将缓存数据同步写入数据库或其他持久化存储,实现数据一致性保障 • **自动刷新(Auto-Refresh)**:在缓存过期前自动触发数据更新,减少用户感知的延迟 2. **框架生态支持** Caffeine已被Spring 5及更高版本作为**默认本地缓存框架**集成,其API与Spring Ca...阅读全文

博文 2025-03-27 01:16:15 dalang

QT6实战-QML与C++联合编程

QT6实战-QML与C++联合编程​获课♥》789it.top/14086/获取ZY↑↑方打开链接↑↑QML(Qt Meta - Object Language)是一种用于创建用户界面的声明式语言,而 C++ 是一种强大的面向对象编程语言。将 QML 与 C++ 联合使用可以充分发挥两者的优势,既利用 QML 的简洁性和灵活性来设计界面,又利用 C++ 的高性能和丰富的库来处理复杂的业务逻辑。下面为你介绍 QML 与 C++ 联合开发的相关知识和示例代码。1. 基础原理对象暴露:可以将 C++ 对象暴露给 QML 环境,使得 QML 可以访问 C++ 对象的属性、方法和信号。信号与槽机制:C++ 对象的信号可以连接到 QML 的函数,QML 的信号也可以连接到 C++ 对象的槽函数,实现双向...阅读全文

博文 2025-03-23 19:51:08 afsdf

轻量级锁与指向线程栈中锁记录的指针

--- ### **1. 锁记录(Lock Record)的本质** • **定义**: 锁记录是线程私有的内存结构,由 JVM 在 **线程栈帧** 中动态创建。当线程尝试通过轻量级锁进入同步代码块时,JVM 会在该线程的栈帧中分配一个 `Lock Record` 空间。 • **存储内容**: • **Displaced Mark Word**:保存对象头中原始的 Mark Word 数据(如哈希码、分代年龄等),用于解锁时恢复对象头状态。 • **Owner 指针**:指向当前持有锁的对象(即 `synchronized(a)` 中的对象 `a`)。 --- ### **2. Mark Word 指针的作用** • **轻量级锁状态下的结构**: 对象头中的 Mark Word 会被修...阅读全文

博文 2025-03-19 15:53:11 dalang

迈向高级的Java面试突围课(完结)

获课:weiranit.fun/1827/获取ZY↑↑方打开链接↑↑以下是一份 “迈向高级的 Java 面试突围课” 的详细内容,涵盖了从基础到高级的多个知识领域,帮助你在 Java 面试中脱颖而出。课程大纲一、Java 基础面向对象编程封装、继承、多态:深入理解这三大特性的概念、作用及实现方式。例如,通过抽象类和接口实现多态。类与对象:掌握类的定义、对象的创建和使用,以及构造函数、析构函数的原理。访问修饰符:public、private、protected 和默认访问修饰符的区别和使用场景。数据类型与变量基本数据类型:byte、short、int、long、float、double、char、boolean 的特点和取值范围。引用数据类型:数组、类、接口等引用类型的使用和内存管理。自动装箱...阅读全文

博文 2025-03-04 10:34:07 sreser

Java AsyncHttpClient 实现原理

AsyncHttpClient 是基于回调的异步 HTTP 客户端,底层依赖 Netty 或 Java NIO 实现非阻塞 I/O。 --- #### **一、基础使用示例(基于 AsyncHttpClient 3.x)** 1. **添加依赖**: ```xml org.asynchttpclient async-http-client 3.0.1 ``` 2. **发送异步 GET 请求**: ```java import static org.asynchttpclient.Dsl.*; try (Async...阅读全文

博文 2025-03-26 15:21:01 dalang

公平锁与非公平锁性能分析

### 一、默认使用非公平锁 ReentrantLock 默认情况下确实使用**非公平锁**。 • 当通过无参构造函数 `new ReentrantLock()` 创建锁时,底层会初始化 `NonfairSync`(非公平锁实现类)。 • 公平锁需要通过显式参数设置,例如 `new ReentrantLock(true)`。 ### 二、非公平锁的效率和吞吐量优势 非公平锁的性能和吞吐量显著优于公平锁,主要原因如下: #### 1. **减少线程切换开销** • 非公平锁允许新请求的线程直接尝试抢占锁,无需严格遵循队列顺序。例如,当一个线程释放锁时,新线程可能立即抢占成功,而无需唤醒队列中的等待线程,减少了上下文切换次数。 • 公平锁每次必须按队列顺序唤醒线程,频繁的线程切换会降低吞吐量。 ...阅读全文

博文 2025-03-19 19:51:20 dalang

Netty Boss EventLoopGroup 的多线程设置

--- ### **一、Boss EventLoopGroup 的多线程设置** 1. **默认配置与适用场景** • **单线程模式**:在大多数情况下,BossGroup 只需 **1 个线程**(即单个 `NioEventLoop`),即可高效处理连接请求。原因在于: ◦ 连接建立(Accept)是轻量级操作,单线程足以应对高并发连接。 ◦ 多线程会导致资源浪费,且无法提升连接处理效率(底层 `ServerSocketChannel` 仅绑定到一个线程的 Selector)。 • **多线程模式**:仅在以下场景需要设置多线程: ◦ **同时监听多个端口**(如 HTTP + HTTPS 双协议)。此时每个端口由不同的 Boss 线程处理。 ◦ **共享线程组**:当多个服务端实例共享...阅读全文

博文 2025-03-25 18:17:59 dalang

Tomcat+Memcached/Redis集群 构建高可用解决方案(完结)

https://97it.top/2738/ 摘要 Tomcat作为一款广泛使用的开源Web应用服务器和Servlet容器,其在Java Web开发中扮演着重要角色。本文深入探讨了Tomcat的进阶知识,包括其系统架构、核心组件、配置优化以及在高并发场景下的性能调优策略,旨在为Java开发人员提供深入理解和高效使用Tomcat的参考。 1. 引言 Tomcat是Apache基金会开发的开源Web应用服务器,同时也是Servlet和JSP规范的实现容器。它不仅支持标准的HTTP协议,还提供了对Servlet和JSP的全面支持,广泛应用于Java Web开发中。随着互联网应用的复杂度不断增加,对Tomcat的性能和功能提出了更高的要求。因此,深入了解Tomcat的进阶知识对于开发人员来说至关重要...阅读全文

博文 2025-03-04 22:06:42 92834L

为什么jdk1.7的HashMap会产生死循环? - 夏威夷8080

前言 JDK1.7中的HashMap在多线程情况下扩容可能会导致死循环。本文就这个问题进行讲解。 扩容死循环 这里回顾一下HashMap1.7扩容的过程,在扩容过程中,单链表的表现,相关的代码如下: Jdk1.7:void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; //如果旧容量已经达到了最大,将阈值设置为最大值,与1.8相同 if (oldCapacity == MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return; } //创建新哈希表 Entry[] newTable = new Entry[n...阅读全文

博文 2025-03-19 11:54:46 博客园

tomcat的nio1和nio2

Tomcat 的 NIO(即传统 NIO,通常称为 NIO1)和 NIO2(即异步 NIO)在底层对操作系统的依赖有所不同 --- ### **1. NIO1 的底层依赖** • **Linux 系统**: Tomcat 的 NIO1(使用 `Http11NioProtocol`)底层依赖 Java NIO 库,而 Java NIO 在 Linux 上默认通过 **epoll** 实现多路复用。这是因为 JDK 在 Linux 平台会自动选择 `epoll` 作为 `Selector` 的实现(JDK 1.5+ 开始支持),以替代早期的 `select`/`poll` 模型。 • **其他操作系统**: • **Windows**:依赖 `select` 或 `wepoll`(JDK 内部实...阅读全文

博文 2025-03-25 16:04:30 dalang

Redisson 延迟队列的并发安全机制

基于 Redisson 实现延迟队列时,**并不需要显式使用分布式锁**,但其底层通过 **Redis 原子操作和 Lua 脚本** 确保了并发安全。 --- ### 一、Redisson 延迟队列的并发安全机制 1. **原子性操作替代锁** Redisson 在操作 Redis 数据结构(如 zset、list)时,**通过 Lua 脚本封装多步操作**,确保原子性。例如: • **任务转移**:从 `redisson_delay_queue_timeout:SANYOU`(zset)到目标队列的转移操作; • **任务消费**:通过 `BLPOP` 或 `take()` 方法从目标队列获取任务。 **Lua 脚本的原子性**避免了多客户端重复获取同一任务的问题。 2. **有序集合(z...阅读全文

博文 2025-03-28 17:58:35 dalang

Redisson 延迟队列的并发安全机制

基于 Redisson 实现延迟队列时,**并不需要显式使用分布式锁**,但其底层通过 **Redis 原子操作和 Lua 脚本** 确保了并发安全。 --- ### 一、Redisson 延迟队列的并发安全机制 1. **原子性操作替代锁** Redisson 在操作 Redis 数据结构(如 zset、list)时,**通过 Lua 脚本封装多步操作**,确保原子性。例如: • **任务转移**:从 `redisson_delay_queue_timeout:SANYOU`(zset)到目标队列的转移操作; • **任务消费**:通过 `BLPOP` 或 `take()` 方法从目标队列获取任务。 **Lua 脚本的原子性**避免了多客户端重复获取同一任务的问题。 2. **有序集合(z...阅读全文

博文 2025-03-28 15:52:52 dalang

上下文切换消耗的cpu,是在用户空间的消耗还是内核空间的消耗

在 Linux 中,使用 `top` 命令分析进程 CPU 消耗时,若 CPU 资源被上下文切换占用,这种消耗主要体现在**内核空间**。 --- ### 一、上下文切换的 CPU 消耗归属 1. **内核空间的核心角色** • 上下文切换(包括进程切换、线程切换、中断处理)由内核调度器管理,必须在内核态(Kernel Space)完成。 • 切换过程中,内核需要保存和恢复进程的寄存器、程序计数器等硬件上下文,并更新内存映射表,这些操作均属于内核空间行为。 • 因此,上下文切换的 CPU 消耗体现在 `top` 命令输出的 **sy(System Time)** 列,表示内核空间 CPU 使用率。 2. **用户空间与内核空间的区分** • **用户空间(us)**:进程正常执行用户代码(如...阅读全文

博文 2025-03-30 22:42:03 dalang

Remembered Set(记忆集)与卡表(Card Table)的关系解析

--- **Remembered Set(记忆集)与卡表(Card Table)的关系解析** ### **1. 核心概念** • **Remembered Set(记忆集)**: 一个**抽象概念**,指垃圾收集器(GC)中用于**记录跨区域(或跨代)引用**的数据结构。例如,在分代GC中,记忆集记录老年代对象对年轻代的引用,避免全堆扫描。 • **Card Table(卡表)**: 记忆集的**一种具体实现方式**,通常通过**位图(bitmap)** 标记内存块(卡页)是否包含跨区域引用。卡表是记忆集在技术实现上的具体表现。 --- ### **2. 两者的关系** • **记忆集是接口,卡表是实现**: • **记忆集**定义功能:记录外部区域到本区域的引用。 • **卡表**是其中...阅读全文

博文 2025-04-01 17:58:43 dalang

Java Hotspot G1 GC的一些关键技术

前言G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信熟悉JVM的同学们都不会对它感到陌生。在JDK 9中,G1被提议设置为默认垃圾收集器(JEP 248)。在官网中,是这样描述G1的: > The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets garbage collection (GC) pause time goals...阅读全文

博文 2025-04-01 20:07:58 美团技术团队

零声教育 嵌入式Linux+C进阶教程从入门到精通(无秘分享)

零声教育 嵌入式Linux+C进阶教程从入门到精通(无秘分享)掌握嵌入式Linux系统优化与C语言进阶开发,从Bootloader定制到实时进程调度,通过U-Boot移植、内核裁剪、内存管理及性能分析工具,实现工业控制器的高效稳定运行,平衡性能、功耗与成本。​获课♥》jzit.top/14514/获取ZY↑↑方打开链接↑↑嵌入式Linux + C语言进阶开发深度指南一、嵌入式Linux系统核心机制1. 系统启动流程优化Bootloader定制U-Boot移植:修改board///目录下的板级支持包(BSP),配置DDR初始化时序、环境变量存储位置(eMMC/NOR Flash)快速启动策略:跳过冗余外设检测,预加载内核到内存(bootm命令优化)内核裁剪与配置m...阅读全文

博文 2025-03-31 16:49:39 zxcv

官方文档竟然有坑!关于G1参数InitiatingHeapOccupancyPercent的正确认知 #我在性能调优路上的打怪日记#

问题 前两天,一个群友在群中提出一个疑问: G1里的XX:InitiatingHeapOccupancyPercent,默认是45。他看网上有两种说法,一种是整个堆占用率超过45%时开始并发标记周期;另一种说是old region占用超过45%时开始并发标记周期; 正好我也疑惑这个问题,可以去做一个探究。 参数简介 InitiatingHeapOccupancyPercent,简称IHOP。我们都知道在G1中,主要的收集方式是Minor GC(回收整个年轻代Young Region)和Mixed GC(回收整个年轻代Young Region & 部分老年代Old Region)。 什么?你跟我说还有Full GC。其实在G1设计之初,Oracle认为G1依托Minor GC和Mixed GC...阅读全文

博文 2025-04-01 19:59:42 HeapDump性能社区

LockSupport.parkNanos() 和 Thread.sleep() 的底层实现

--- ### **一、底层系统调用与实现机制** #### **1. `LockSupport.parkNanos()`** - **底层实现**: `LockSupport.parkNanos()` 最终通过 **`futex` 系统调用**(Fast Userspace Mutex)实现。 **`futex` 工作原理**: - **用户态自旋**:在极短等待时间(如纳秒级)内,优先在用户态自旋(无需进入内核)。 - **内核态挂起**:若等待时间较长或竞争激烈,通过 `futex(FUTEX_WAIT)` 将线程挂起,进入内核态休眠。 - **唤醒机制**:其他线程调用 `unpark()` 时,通过 `futex(FUTEX_WAKE)` 唤醒目标线程。 - **系统调用路径**:...阅读全文

博文 2025-04-03 21:07:23 zhidiantech

零声 C/C++Linux服务器开发/高级架构

​​​​​​​获课:weiranit.fun/14443/获取ZY↑↑方打开链接↑↑在数字化转型浪潮中,C/C++ 凭借高效的性能、强大的系统控制能力,在 Linux 服务器开发领域占据核心地位。零声教育推出的 “C/C++ Linux 服务器开发 / 高级架构师” 课程,旨在为学员搭建从基础开发者向高级架构师跨越的学习桥梁,助力学员系统掌握前沿技术,积累丰富的实战经验,成为行业内炙手可热的技术专家。一、课程目标技术能力提升:帮助学员深入理解 C/C++ 编程语言在 Linux 服务器开发中的应用,全面掌握网络编程、多线程、数据库开发、性能优化等核心技术。同时,学习云原生、微服务等前沿技术,紧跟行业发展趋势。项目经验积累:通过多个企业级实战项目,让学员全程参与项目从需求分析、设计到开发、部署...阅读全文

博文 2025-04-01 16:35:17 efgk_258

Linux内核源码分析内存调优文件系统进程管理设备驱动网络协议栈

获课:weiranit.fun/14434/获取ZY↑↑方打开链接↑↑Linux 内核是一个庞大而复杂的系统,涵盖多个核心模块。针对你提到的关键词(内存调优、文件系统、进程管理、设备驱动、网络协议栈),以下是一些关键分析方向和学习建议,结合理论与实践帮助你深入理解:1. 内存管理 & 调优核心机制:物理内存管理:伙伴系统(Buddy System)解决外部碎片,slab/slub 分配器解决内部碎片。虚拟内存:MMU、页表机制(多级页表)、缺页中断处理。内存回收:LRU 算法、kswapd 机制、OOM Killer 触发逻辑。透明大页(THP):通过 mmap 或 shm 使用大页减少 TLB 未命中。调优技巧:调整 vm.swappiness 控制交换倾向。使用 cgroups v2 限...阅读全文

博文 2025-04-02 17:22:55 efgk_258

「零声教育」C/C++Linux服务器开发/高级架构师

​获课♥》jzit.top/14542/获取ZY↑↑方打开链接↑↑掌握C++20新特性与Epoll反应堆模式,构建微秒级响应服务器;从Muduo源码到K8s实战,让流媒体与游戏服务器开发拥有工业级战斗力——这是云原生时代Linux服务端开发者打通高并发、低延迟、分布式架构的黄金路径。内容由DeepSeek-R1模型生成关于 C/C++ Linux 服务器开发,以下是一些核心知识点和学习建议,结合你的技术背景(音视频、逆向、云原生等),可重点关注以下方向:一、核心技术栈C/C++ 语言进阶内存管理(智能指针、内存池)多线程 / 多进程编程(POSIX 线程、信号量、共享内存)模板元编程、STL 深度优化C++20/23 新特性(concepts、coroutine)Linux 系统编程文件 I...阅读全文

博文 2025-04-02 14:27:13 dfdgg

C++游戏后端开发(魔兽世界MMOTrinityCore源码拆解)「零声教育」

​获课♥》789it.top/14386/获取ZY↑↑方打开链接↑↑Linux的稳定性与C++的高效控制,打造零崩溃、毫秒响应的游戏服务器。开源系统与编译型语言的结合,支撑高并发实时交互,确保玩家流畅体验与数据安全,为MMORPG和竞技游戏提供高吞吐量计算与精准资源调度能力。打造实时多人在线游戏:Linux C++ 在游戏服务器中的核心应用一、引言实时多人在线游戏以其丰富的互动性和竞技性吸引着大量玩家。在构建这类游戏的过程中,游戏服务器起着至关重要的作用,它需要处理大量的并发请求、保证低延迟的数据传输以及维持游戏的稳定性和公平性。Linux 操作系统凭借其开源、稳定、高效的特点,成为游戏服务器的首选操作系统。而 C++ 语言则以其高性能、对系统资源的精细控制能力,成为实现游戏服务器核心逻辑的...阅读全文

零声-FFMPEG命令入门到提高课程2022|完结无秘

​获课♥》jzit.top/14548/获取ZY↑↑方打开链接↑↑FFmpeg 2022核心技术精讲:从跨平台编解码到流媒体处理,解锁音视频处理全链路实战。掌握硬件加速、CRF恒定质量编码及HLS/DASH自适应流,用多线程优化和滤镜组合实现高效剪辑、去抖与水印叠加,让开发者轻松应对复杂场景,成为真正的多媒体处理高手。内容由DeepSeek-R1模型生成FFmpeg高手之路:2022年音视频处理核心技术精讲FFmpeg是一个强大的开源多媒体处理工具,广泛应用于音视频格式转换、剪辑、滤镜处理、流媒体传输等领域。随着技术的不断发展,FFmpeg也在持续更新,引入了新的特性和优化。本文将深入探讨2022年FFmpeg在音视频处理方面的核心技术,助力您成为FFmpeg高手。一、FFmpeg基础与架构...阅读全文

零声-C++游戏后端开发(魔兽世界MMOTrinityCore源码拆解)

​获课♥》jzit.top/14526/获取ZY↑↑方打开链接↑↑Linux与C++强强联手,打造毫秒级响应的游戏心脏,从分布式架构到无锁编程,从内存池优化到SSL加密,每个字节都承载着千万玩家的战场胜负。这里藏着让实时对战丝滑如电的底层密码,开发者不可错过的服务器性能终极解决方案。内容由DeepSeek-R1模型生成打造实时多人在线游戏:Linux C++在游戏服务器中的核心应用在构建实时多人在线游戏(MMOG)时,游戏服务器的性能、稳定性和可扩展性至关重要。Linux和C++因其高效、稳定和强大的底层控制能力,成为游戏服务器开发的首选平台和技术栈。本文将探讨Linux C++在游戏服务器中的核心应用,包括架构设计、性能优化、网络编程、并发处理以及安全性等方面。一、游戏服务器架构设计1. ...阅读全文

博文 2025-04-02 14:05:47 dfdgg

零声教育 嵌入式Linux+C进阶教程从入门到精通

​获课♥》jzit.top/14514/获取ZY↑↑方打开链接↑↑深入Linux存储栈,C++赋予开发者手术刀级的优化能力:通过缓存预取策略突破I/O瓶颈,利用多线程并行调度释放硬件性能,结合RAID冗余校验构建数据安全屏障。当异步I/O遇见零拷贝技术,存储系统在吞吐量与可靠性间实现完美平衡。内容由DeepSeek-R1模型生成深入Linux存储栈:用C++优化存储性能与可靠性在构建高性能、高可靠性的Linux存储系统时,深入理解Linux存储栈的工作机制,并利用C++进行针对性优化,是提升系统整体表现的关键。本文将探讨Linux存储栈的核心组件、性能优化策略以及可靠性保障措施,同时强调C++在其中的应用优势。一、Linux存储栈概览1. 存储栈层次结构文件系统层:负责文件和目录的组织、访问...阅读全文

博文 2025-04-02 14:06:29 dfdgg

零声教育 嵌入式Linux+C进阶教程从入门到精通(无秘分享)

​获课♥》jzit.top/14514/获取ZY↑↑方打开链接↑↑掌握嵌入式Linux系统优化与C语言进阶开发,从Bootloader定制到实时进程调度,通过U-Boot移植、内核裁剪、内存管理及性能分析工具,实现工业控制器的高效稳定运行,平衡性能、功耗与成本。内容由DeepSeek-R1模型生成嵌入式Linux + C语言进阶开发深度指南一、嵌入式Linux系统核心机制1. 系统启动流程优化Bootloader定制U-Boot移植:修改board///目录下的板级支持包(BSP),配置DDR初始化时序、环境变量存储位置(eMMC/NOR Flash)快速启动策略:跳过冗余外设检测,预加载内核到内存(bootm命令优化)内核裁剪与配置menuconfig选项:禁...阅读全文

博文 2025-04-02 14:28:13 dfdgg

马哥Go语言开发第12期

​获课♥》jzit.top/4327/获取ZY↑↑方打开链接↑↑数据库标准库与ORM简化数据持久化操作,进程线程模型是并发编程核心,理解其特性和适用场景,对设计高效可靠系统至关重要。从连接管理到对象映射,从进程隔离到线程共享,掌握这些基石技术能大幅提升开发效率与系统稳定性。内容由DeepSeek-R1模型生成数据库标准库、ORM模型与进程线程概念解析一、数据库标准库1. 基本概念数据库标准库是编程语言提供的与数据库交互的官方接口集合,它定义了:统一的数据库连接方式标准化的SQL执行方法结果集处理机制事务管理接口2. 主要功能连接管理:建立/关闭数据库连接,支持连接池SQL执行:执行查询(select)和更新(insert/update/delete)语句结果处理:获取查询结果并以数据结构形式...阅读全文

点击关注“有赞coder”获取更多技术干货哦~作者:张云翔团队:安全技术最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥!以前碰到类似问题,可能会考虑使用top -Hp 加 jstack命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是Alibaba开源的Java诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档:https://alibaba.github.io/arthas 这次我们利用它来排查CPU负载高的问题。CPU负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个...阅读全文

博文 2024-03-13 11:14:54 mp.weixin.qq.com