自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (2)
  • 收藏
  • 关注

原创 从0到1构建自己的短链接系统

为了实现上述功能,我们需要对系统的架构进行详细设计,系统各部分的职责与协作模式需要明确。API层:提供生成短链接和解析短链接的接口。服务层:处理短链接的生成与解析逻辑。数据层:负责长链接与短链接的存储及管理,可以使用数据库或者缓存系统。缓存层:提高系统性能,常用缓存系统如Redis可以在短链频繁被访问时减少直接数据库查询的压力。

2024-06-25 10:52:43 445

原创 深入解析MySQL时间函数:日期时间函数实战案例

LAST_DAY() 函数用于获取给定日期所在月份的最后一天。-- 返回 2023-06-30EXTRACT(unit FROM date): 从日期时间数据中提取指定的部分。HOUR(time), MINUTE(time), SECOND(time): 提取时间的小时、分钟和秒部分。YEAR(date), MONTH(date), DAY(date): 提取日期的年、月和日部分。

2024-06-12 16:08:07 320

原创 高并发短视频系统设计:架构、存储与性能优化全解

在本文中,我们详细介绍了如何设计一个支持三千万用户同时在线看视频的短视频系统,重点包括以下几个方面:理解短视频系统的核心模块。精确估算用户需求,面对高并发的挑战。搭建基础架构,实现视频上传、播放、搜索等核心功能。采用消息队列和分布式系统实现高效的并发处理。采用HDFS分布式文件系统存储海量视频文件。设计数据高可用机制,确保数据安全性和一致性。通过缓存、异步处理、CDN和限流机制,提升系统性能和稳定性。使用动态调整视频质量的方法,合理管理系统带宽。生成高质量缩略图,提升用户点击率。

2024-06-05 20:59:35 1221

原创 实现秒传与限速!深度解析万亿GB网盘系统架构

在设计一个面向万亿GB的网盘系统时,我们需要首先明确系统的核心功能需求。

2024-06-04 21:15:24 1158

原创 日志管理:Slf4j、Log4j、LogBack与ELK实战指南

Slf4j作为一个接口层,让应用程序可以通过统一的API进行日志记录,而后端的实现可以在运行时绑定。也就是说,我们可以在开发时仅仅依赖Slf4j,在部署时选择将日志绑定到Log4j、LogBack或者其他日志系统。Log4j基于三个核心概念:Logger、Appender和Layout。Logger是日志操作的发起点,Appender负责发布日志到目的地,如文件、控制台或者远程服务器等,而Layout决定了日志的格式。

2024-06-03 06:45:00 1099

原创 提升你的Netty服务器性能:零拷贝与Reactor模型精讲

内存池技术允许系统重复使用一块预先分配的内存空间,避免了频繁的内存申请和回收,这样可以显著降低因内存分配导致的性能瓶颈。Netty通过PooledByteBufAllocator实现了内存池,可以减少GC压力,增强系统稳定性。Netty支持多种序列化协议,其中包括自定义的编解码器等。选择或者实现一个高效的序列化框架,意味着要在保留数据结构丰富性的同时,最大程度地减少序列化数据的大小以及序列化与反序列化的时间。

2024-06-03 06:30:00 963

原创 架构师指南:服务注册发现工具全解析

Apache Zookeeper是一个开源的服务协调工具,它为分布式系统提供一致性服务,例如配置维护、域名服务、分布式同步和组服务。Consul是由HashiCorp公司推出的一款开源工具,旨在提供服务网格解决方案中的服务发现和配置。它采用分布式、高可用的架构,内置了服务注册、服务发现、健康检查、Key/Value存储等功能。Eureka是Netflix开发的服务发现框架,是Spring Cloud体系中重要的组件之一。Eureka基于REST的服务,用于定位运行在AWS域中的中间层服务。

2024-06-02 15:30:47 952

原创 深入Netty RPC内核:编码、通信与性能优化全指南

远程过程调用(RPC)是一种计算机通信协议,允许一台计算机(客户端)通过网络向另一台计算机(服务器)请求服务,而无需了解底层网络技术的细节。RPC通过隐藏底层的通信细节,使得远程服务调用看起来就像本地方法调用一样。

2024-06-02 15:30:35 786

原创 深入解析Java注解机制:元注解、自定义处理器及其在框架中的妙用

Override:指示编译器一个方法声明打算重写父类中的另一个方法声明。@Deprecated:表示某个程序元素(类、方法、字段等)已经过时。@SuppressWarnings:指示编译器忽略特定警告。每个注解都有其特定的适用场景,我们将在后续部分逐一深入解释。Java提供了强大的注解创建能力,允许我们根据特定的需求创建自定义注解。自定义注解能够帮助我们以声明式的方式处理问题,使代码更加清晰易读。这一节我们详细探讨如何创建自定义注解,以及如何使用它们。

2024-06-01 06:45:00 474

原创 Java反射实战指南:反射机制的终极指南

反射允许程序员在运行时访问Java应用中的类和对象的内部属性。程序可以利用反射发现类的属性、方法以及构造器,甚至可以在运行时修改它们。// 打破封装// 获取属性值// 设置属性值。

2024-06-01 06:30:00 263

原创 并发编程核心技术揭秘:CAS和AQS详解与应用案例

AbstractQueuedSynchronizer(AQS)是实现依赖于先进先出(FIFO)等待队列的同步器的框架。它为多个同步器提供了一个可重用的基础,如ReentrantLock、Semaphores、CountDownLatch等。AQS使用一个int类型的成员变量表示同步状态(state),并通过内置的FIFO队列来管理线程。同步状态(State):表示资源的占用情况。节点(Node):构成等待队列,存储线程信息。内置FIFO队列:管理因获取状态失败而等待的线程。

2024-05-31 06:45:00 278

原创 全面解析API网关:动态路由、协议转换及安全防护策略

在现代应用架构中,API网关承担着重要的安全责任。它作为所有后端服务的前门,需确保恶意请求无法通过。安全机制包括但不限于身份验证、授权、API密钥管理、防止SQL注入和XSS攻击等安全政策。

2024-05-31 06:30:00 707

原创 Java内部类全解析:提升你的编程技巧

静态内部类是一个被 static 修饰符修饰的内部类,也被称作静态嵌套类。在Java中,它是嵌套在外围类中的一个静态成员类。静态内部类与外围类的实例无关,因此它可以像其他静态成员一样,没有外围类对象时被加载和访问。成员内部类也称为非静态内部类,它是最常用的一种内部类。在外部类的成员位置定义,没有使用static关键字修饰。成员内部类需要的外部类的实例支持才能被创建,它能够无限制地访问外部类的所有成员属性和成员方法(包括私有)。局部内部类是定义在方法内部的内部类,它只在该方法的内部可见且可用。

2024-05-30 06:45:00 369

原创 从零开始掌握SpringMVC:核心流程与常用注解实战

创建一个Controller类来处理请求。");return mav;3.4 使用注解处理路径和参数利用各种注解处理请求路径和参数。

2024-05-30 06:30:00 698

原创 Spring AOP原理详解:动态代理与实际应用

在Spring AOP中,可以使用注解或XML配置来定义切面和通知。

2024-05-29 06:45:00 2386

原创 深入解析线程上下文切换:掌握线程上下文切换的核心原理

线程上下文是指线程在执行过程中需要保存和恢复的一组信息,这些信息使得线程可以在被中断后恢复执行。程序计数器(Program Counter, PC):保存线程当前执行到的指令位置。寄存器(Registers):保存线程执行过程中使用的所有寄存器的值。堆栈(Stack):保存线程的调用栈,包括局部变量和方法调用信息。线程控制块(Thread Control Block, TCB):保存线程的各种状态信息,如线程ID、优先级、调度信息等。

2024-05-29 06:30:00 712

原创 深刻解析 volatile 关键字和线程本地存储ThreadLocal

ThreadLocal通过提供线程内部的私有变量副本,来避免其它线程的干扰和冲突。

2024-05-28 06:45:00 1708

原创 一文掌握Java中的CyclicBarrier、CountDownLatch和Semaphore

是一个同步助手类,它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点(Barrier Point)后才继续执行。Semaphore(信号量)是一种基于计数的同步机制,它可以用来控制同时访问特定资源的线程数量,是实现资源池或者限制容量的一个有力工具。

2024-05-28 06:30:00 976

原创 Java线程池机制揭秘:一文掌握核心概念与实战技巧

在现代多核CPU的计算环境下,多线程编程已经成为提升应用性能的重要手段。然而,线程的创建与销毁都是高成本操作,不仅涉及操作系统级别的资源分配,还会引起显著的性能开销。此时,线程池的概念应运而生。

2024-05-27 06:45:00 1182

原创 高效并发编程:Java阻塞队列深度解析与最佳实践

阻塞队列(BlockingQueue)是Java并发包中的一个接口,它支持两个附加操作:当队列为空时,获取元素的线程会等待队列变为非空;当队列满时,存储元素的线程会等待队列可用。这种队列通常用于生产者和消费者的场景,其中生产者不能在意想不到的速度填充队列,以至于消耗所有可用的内存资源。

2024-05-27 06:30:00 837

原创 Java中线程调度与进程调度全解析

进程调度是操作系统中分配CPU时间给各个进程的活动。进程是系统进行资源分配和调度的独立单位,它包含代码、数据以及分配的系统资源。与线程调度不同,进程调度涉及到的上下文切换成本更高,因为进程间共享的资源更少。新建状态(New):线程对象已经创建,但还没有调用start()方法。就绪状态(Runnable):线程已经调用start()方法,等待CPU调度执行。运行状态(Running):线程获得CPU时间片,开始执行run()方法里的代码。

2024-05-26 06:45:00 1617

原创 Spring IOC深度解析:IOC容器的原理与高级特性详解

控制反转是一种设计原理,用于减少计算机代码之间的耦合度。在没有IOC的传统程序设计中,对象的创建以及它们之间的依赖关系通常是由开发者在代码内部显式地定义。而在使用IOC之后,这些工作被反转了:不再由对象自身控制依赖对象的创建和管理,而是交由外部容器来处理,对象只是声明它所需要的资源或依赖。// 传统方式创建对象及其依赖对象// 使用IOC容器后的对象声明方式// 依赖注入。

2024-05-26 06:30:00 2266

原创 Java序列化解密:技巧、陷阱与最佳实践

在Java序列化过程中,我们有时候需要自定义对象的序列化与反序列化行为,以便更精细地控制那些需要序列化的细节。Java提供了一种机制,即在序列化对象时,如果检测到writeObject和readObject这两个私有方法的存在,就会调用它们替代默认的序列化过程。// 自定义序列化逻辑 private void writeObject(ObjectOutputStream oos) throws IOException {

2024-05-25 06:45:00 1355

原创 揭秘JVM:类加载机制深度解析与实战应用

在某些特定的场景下,比如插件化架构或热更新功能时,我们可能需要用到自定义类加载器。@Override// ...在自定义类加载器中,我们会重写findClass方法来指定我们加载类数据的方式。它可以从文件系统、网络或其他源加载类的字节码。

2024-05-25 06:30:00 1058

原创 Java集合框架全景解读:从源码到实践精通指南

在Java中,集合框架是用于存储和处理数据集合的一组类和接口。它提供了一系列的数据结构,比如列表(List)、集(Set)和映射(Map)。这些数据结构为开发者处理数据提供了标准的方法。在本章节中,我们将介绍Java集合框架的基础概念,并深入探讨其设计哲学。

2024-05-24 06:45:00 880

原创 从BIO到NIO到AIO: Java全面IO模型解析

在Java中,IO操作是通过使用java.io包中的类和接口执行的。java.io包提供了非常丰富的流(Stream)类别进行数据读写,这些流类别主要分为两大部分:字节流(例如InputStream和OutputStream)用于处理RAW数据如二进制文件,字符流(例如Reader和Writer)用于处理字符和字符串,更适用于文本数据。在传统的阻塞IO模型中,每个网络连接都需要一个线程去处理,大量的并发连接可能会导致系统过多的线程开销,从而影响性能。

2024-05-24 06:30:00 1090

原创 面试加分项:深入理解缓存机制与性能优化

在软件架构中,缓存是一种通过存储临时数据副本而减少对下游系统访问的技术。无论是在数据库、计算任务还是网络请求方面,缓存的使用几乎普遍存在。缓存的关键优势在于它能显著降低数据检索时间,提高数据处理速度,从而增强整体系统的性能。

2024-05-23 06:45:00 690

原创 Java GC揭秘:各式GC算法深度解析与实战指南

垃圾收集器是Java虚拟机(JVM)自动内存管理的核心组成部分。它的主要作用是自动识别和回收程序运行过程中不再使用的内存对象,以防止内存泄漏和堆内存的无效占用。垃圾收集器的实现原理可以大致分为引用计数、可达性分析、标记-清除、复制算法、标记-整理、分代收集等策略。在Java开发中,理解垃圾收集器的工作原理与性能特点,对于编写高效稳定的Java应用程序至关重要,尤其是在处理内存密集型或者需要高并发处理的应用中。

2024-05-23 06:30:00 842

原创 Java线程终结秘籍:四种安全终止线程的方法

对于简单的线程,线程完成工作后会自动结束,无需干预。当需要外部控制线程结束时,首选使用标志或中断。在使用线程池时,应通过线程池提供的方法来管理线程结束。尽量避免在新的代码中使用stop方法。

2024-05-22 06:45:00 1025

原创 线程状态大揭秘:编写高效Java多线程程序的关键知识

在多线程编程中,了解线程的生命周期是至关重要的。线程生命周期管理可以帮助我们编写出更高效、稳定且易于调试的并发程序。Java中的线程管理是通过一系列状态转换来实现的,每个状态代表了线程在生命周期中的一个具体阶段。

2024-05-22 06:30:00 516

原创 Java线程控制解密:深入理解sleep与wait、start与run的关键差异

sleep方法定义在Thread类中,它是一个静态方法,其作用是使当前正在执行的线程停止执行指定的时间段,毫无疑问,这是等待当前线程。相比之下,wait是Object类的方法,它的使用必须在同步代码块或同步方法中,通过调用某个对象的wait方法来使得当前线程等待,并释放该对象的锁。

2024-05-21 06:45:00 735

原创 并发编程核心技巧:Java线程实施秘籍与线程池性能优化指南

线程应用广泛且多样,在GUI应用程序中用于响应用户操作,在服务器中处理并发请求,在大型计算任务中分割工作以在多处理器系统上运行等。适当的线程使用可以使我们的应用程序更快、更稳定、更高效。在Java中,虽然我们可以使用Executors类快速创建线程池,但通常情况下,我们需要根据应用的工作负载自定义线程池的参数,以达到更优的性能表现。这部分我们将从自定义线程池的参数调整和优化策略两个方面进行详细讨论。使用ThreadPoolExecutor类直接创建线程池给予了我们更大的灵活性。

2024-05-21 06:30:00 2064

原创 掌握Java并发:读写锁与独占锁的运用技巧

在锁的实现上,公平锁和非公平锁是两个常见的概念。所谓公平锁,是指在多个线程竞争锁的情况下,锁的获取按照线程请求的顺序来分配——即先来先得。而非公平锁则不保证这种顺序,允许某些线程插队,可能会导致其他等待时间较长的线程处于饥饿状态较长时间,但一般情况下会有更高的执行效率。重量级锁,也称为互斥锁(Mutex),是一种提供独占访问的锁。在Java中,当一个线程试图进入一个由其他线程持有的synchronized代码块或方法时,就会产生一个重量级锁。重量级锁在JVM内部依赖于操作系统的Mutex。

2024-05-20 06:45:00 1628

原创 Java多线程精髓:同步、通信与Executors框架实用指南

Java的Executor框架是管理线程池的一种高级工具,它简化了线程的创建和管理工作。使用Executors工厂方法可以轻松创建不同类型的线程池。try {} };i < 5;i < 5;i < 5;i < 5;i < 5;i ++) {

2024-05-20 06:30:00 1936

原创 Semaphore与ReentrantLock——Java并发控制的利器

Java提供了多种锁机制,包含内置锁synchronized、显式锁Lock、以及其他的协作对象,如Semaphore、CountDownLatch、CyclicBarrier等。每种锁都有其特定的应用场景。

2024-05-19 07:15:00 858

原创 掌握Java锁策略:乐观锁、悲观锁和自旋锁的实战应用

在 synchronized 工作过程中,每个对象都自带一个监视器锁(monitor)。线程必须获取到这个监视器锁,才能执行 synchronized 块内的代码。

2024-05-19 06:45:00 630

原创 避免超卖!深入解析高并发分布式锁架构

并发控制是一切分布式系统设计的基石,确保数据一致性、系统稳定性和最终的用户体验。要理解为什么需要并发控制,就必须先探讨并发对系统可能造成的问题。

2024-05-18 13:12:17 1049

原创 Java并发编程:synchronized和Lock的深度对比与案例分析

为了解决synchronized的一些局限性,Java 5引入了java.util.concurrent.locks.Lock接口,它提供了比synchronized更丰富的锁操作。它允许更灵活的结构,可以有选择地获取锁,在等待锁的时候可以响应中断,还可以尝试非阻塞地获取锁,或者在尝试获取锁时等待一段时间。lock():如果锁不可用,则当前线程将被阻塞。lockInterruptibly():如果当前线程未被中断,则获取锁。tryLock():仅在调用时锁空闲时才获取锁。

2024-05-18 08:44:53 737

原创 高并发秘籍:从零开始的高并发系统设计

在讨论如何设计高并发系统之前,重要的是要理解并发(Concurrency)和并行(Parallelism)的基本概念,以及它们在实际开发中的应用。并发指的是系统能够处理多个任务的能力,但并不意味着这些任务同时执行。并发关注的是如何合理地在多个任务之间切换,以利用资源实现任务处理的效率最大化。例如,在单核处理器上运行的系统,通过时间片轮转等技术实现任务切换,看似同时处理多个任务,实则是在单位时间内快速轮替的结果。并行则是指多个任务实际上是在同一时刻被执行。这通常需要多个处理核心。

2024-05-17 07:15:00 754

原创 从响应时间到并发量:详解性能测试的每个关键指标

在讨论性能优化时,衡量指标是至关重要的参考因素。性能指标提供了一个客观的方法来测量和评估系统性能。这些指标主要包括响应时间、并发用户数、系统吞吐量、资源利用率等。

2024-05-17 06:45:00 1313

史上最全架构师技术图谱

史上最全架构师技术图谱,涵盖前后端及相关分布式组件,很好的学习指引。

2024-06-01

Java架构师技术图谱

最全Java架构师技术图谱,最佳学习路径指引!

2024-06-01

10个Java经典的String面试题

10个Java经典的String面试题

2023-12-20

10个Java经典的Main方法面试题

10个Java经典的Main方法面试题

2023-12-20

10个Java经典的List面试题

10个Java经典的List面试题

2023-12-20

10道Java面试必备的设计模式面试题

10道Java面试必备的设计模式面试题

2023-12-20

10道Java高级必备的Netty面试题

10道Java高级必备的Netty面试题

2023-12-20

Axure第一书(作者马克,含大量案例)

最全最精的Axure设计大全,大量经典范例,讲解透彻

2013-07-23

Oracle经典教程(入门到精通很详细).pdf

oracle的简介,sql的操作和查询,子查询和常用函数,表空间和数据库对象,PL/SQL设计,数据库的导入导出。绝对详细经典!

2013-06-04

空空如也

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

TA关注的人

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