- 博客(462)
- 收藏
- 关注
原创 Java 基础 - 面向对象
下面的代码中,乐器类(Instrument)有两个子类: Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。比如公司和部门,公司没了部门就不存在了。
2025-07-18 21:14:30
457
原创 异常机制详解
super(msg);// ...try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。finally语句块中的代码一定会被执行,常用于回收资源。throws:声明一个异常,告知方法调用者。throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。Java编程思想一书中,对异常的总结。
2025-07-18 11:12:37
675
原创 反射机制详解
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。本文综合多篇文章后,总结了Java 反射的相关知识,希望可以提升你对Java中反射的认知效率。
2025-07-17 08:29:43
953
原创 第七章 OB 备份与恢复
OceanBase 数据库支持租户级别的恢复,恢复是基于已有数据的备份重建新租户的过程。备份恢复是 OceanBase 数据库高可用特性的核心组件,主要用于保障数据的安全,包括预防存储介质损坏和用户的错误操作等。OceanBase支持全量备份和增量备份,全量备份是对存储层的基线数据进行备份,增量备份是通过redo-log备份,OceanBase支持在线实时的全量和增量备份,对业务无感知。OB未来新版本将不需要“备份恢复组件”,管理员通过OCP创建备份恢复任务后,OB集群将发起备份恢复到存储介质中。
2025-07-17 08:13:55
680
原创 第六章 OBProxy 路由与使用运维
OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)是 OceanBase 专用的代理服务器,OceanBase 用户的数据会以多副本的形式存放在各个 OBServer 上,ODP 则负责接收用户发过来的 SQL 请求,转发用户 SQL 请求到最佳目标 OBServer 上,并将执行结果返回给客户。
2025-07-16 23:33:48
693
原创 第五章 OB 分布式事务高级技术
这种方式的好处,是软件的实现比较简单,并且避免了采用集中式的服务可能会导致的性能瓶颈。“快照隔离级别(Snapshot Isolation)”和“多版本并发控制(Multi-VersionConcurrency Control,简称MVCC)”: 两种技术的大致含义是:为数据库中的数据维护多个版本号(即多个快照),当数据被修改的时候,可以利用不同的版本号区分出正在被修改的内容和修改之前的内容,以此实现对同一份数据的多个版本做并发访问,避免了经典实现中“锁”机制引发的读写冲突问题。
2025-07-16 23:15:53
704
原创 第四章 OB SQL调优
OceanBase 数据库在几年前的 1.0 版本中就提供了分布式事务功能,利用 Paxos 协议和经过改良的“两阶段提交( Two phase Commit )”方法,能在跨机器的分布式事务内保证ACID ,即使事务的参与者发生异常(如机器宕机),也能确保分布式事务的完整性,避免了传统两阶段提交方法会导致的“事务部分未决( In doubtTransaction )”问题,因此 OceanBase 完全可以保证跨机器事务中主表数据和索引数据的同步。操作排序或聚合往往都是比较耗时的操作。
2025-07-16 22:53:23
1026
原创 第三章 OB SQL 引擎高级技术
上面的查询优化部分生成的是串行执行计划,为了充分利用 OceanBase 的分布式架构和多核计算资源的优势,OceanBase 的查询优化器随即会进入并行优化阶段:根据计划树上各个节点的数据分布,对串行执行计划进行自底向上的分析,把串行的逻辑执行计划改造成一个可以并行执行的逻辑计划。在数据库中,一个改写规则通常需要满足特定的条件才能够进行改写,而且很多规则的改写可以互相作用(一个规则的改写会触发另外一个规则的改写),所以在 OceanBase 数据库中,把能够互相作用的改写规则组织成一个规则集合。
2025-07-15 22:53:59
617
原创 Java 类加载机制
在Java虚拟机规范中,把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java.lang.Class对象,这个过程被称作类加载过程。一个类在整个虚拟机周期内会经历如下图的阶段,从加载到初始化就是类加载过程。
2025-07-15 00:03:26
699
原创 Redis作缓存时存在的问题及其解决方案
Redis最常用的一个场景就是作为缓存,本文主要探讨Redis作为缓存,在实践中可能会有哪些问题?比如一致性, 穿击, 穿透, 雪崩, 污染等。
2025-07-14 22:40:55
671
2
原创 Redis分片技术(Redis Cluster)详解
Redis主从复制详解-CSDN博客和Redis哨兵机制(Redis Sentinel)详解-CSDN博客保障了高可用,就读写分离而言虽然slave节点扩展了主从的读并发能力,但是写能力和存储能力是无法进行扩展,就只能是master节点能够承载的上限。如果面对海量数据那么必然需要构建master(主节点分片)之间的集群,同时必然需要吸收高可用(主从复制和哨兵机制)能力,即每个master分片节点还需要有slave节点,这是分布式系统中典型的水平扩展(集群的分片技术)的体现;
2025-07-13 19:29:55
960
原创 Redis哨兵机制(Redis Sentinel)详解
在上文主从复制的基础上,如果注节点出现故障该怎么办呢?在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的问题。
2025-07-13 15:23:24
632
原创 Redis主从复制详解
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用数据冗余:主节点(Master)的数据会被自动复制到一个或多个从节点(Slave),主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余(服务的冗余是指在分布式系统中,通过部署多个相同的服务实例。
2025-07-13 15:10:44
356
原创 idea调试断点时,选择 All 和 Thread 的区别
在 IntelliJ IDEA 中设置断点时,选择和的区别主要影响。All若线程A命中断点,线程B、线程C也会被冻结,直到你恢复执行。Thread若线程A命中断点,线程B、线程C仍会继续执行。特性All(全局暂停)Thread(线程级暂停)暂停所有线程仅暂停当前线程可能掩盖竞态条件更贴近真实并发行为较大(所有线程阻塞)较小(其他线程继续运行)单线程逻辑、全局状态检查多线程交互、异步任务调试。
2025-07-13 01:39:38
325
原创 Redis事务详解
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
2025-07-12 22:39:26
298
原创 Redis事件机制
Redis 采用事件驱动机制来处理大量的网络IO。它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event。
2025-07-12 19:55:38
581
原创 Redis的发布订阅模式详解
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。
2025-07-12 19:47:40
897
原创 Redis持久化机制:RDB和AOF
从两个点,我们来了解下Redis持久化为什么需要持久化?Redis是个基于内存的数据库。那服务一旦宕机,内存中的数据将全部丢失。通常的解决方案是从后端数据库恢复这些数据,但后端数据库有性能瓶颈,如果是大数据量的恢复,1、会对数据库带来巨大的压力,2、数据库的性能不如Redis。导致程序响应慢。所以对Redis来说,实现数据的持久化,避免从后端数据库中恢复数据,是至关重要的。Redis持久化有哪些方式呢?为什么我们需要重点学RDB和AOF?RDBAOF虚拟内存(VM)和DISKSTORE。
2025-07-12 19:35:50
404
原创 Redis中的Stream详解
Redis5.0 中还增加了一个数据类型Stream,它借鉴了Kafka的设计,是一个新的强大的支持多播的可持久化的消息队列。
2025-07-12 15:39:50
405
原创 Redis3种特殊类型详解
举个例子,A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9};那么基数(不重复的元素)= 1, 2, 4, 6, 7, 9;(允许容错,即可以接受一定误差)
2025-07-12 15:30:36
238
原创 Redis5种基础数据类型详解
Redis基础文章非常多,关于基础数据结构类型,我推荐你先看下官方网站内容,然后再看下面的小结首先对redis来说,所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。结构类型结构存储的值结构的读写能力String字符串可以是字符串、整数或浮点数对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;List列表一个链表,链表上的每个节点都包含一个字符串。
2025-07-11 23:11:01
497
原创 Redis概念和基础
Redis是一款内存高速缓存数据库。(远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,如:String、list、set、zset、hash。Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
2025-07-11 22:21:43
506
1
原创 JVM 内存结构
本文主要对JVM 内存结构进行讲解,注意不要和Java内存模型混淆了。通过下面两个问题,理解下PC计数器使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢?因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。PC寄存器为什么会被设定为线程私有的?
2025-07-10 23:42:04
988
原创 Java 内存模型引入
现代硬件内存架构与内部Java内存模型略有不同。了解硬件内存架构也很重要,以了解Java内存模型如何与其一起工作。本节介绍了常见的硬件内存架构,后面的部分将介绍Java内存模型如何与其配合使用。这是现代计算机硬件架构的简化图:现代计算机通常有2个或更多CPU。其中一些CPU也可能有多个内核。关键是,在具有2个或更多CPU的现代计算机上,可以同时运行多个线程。每个CPU都能够在任何给定时间运行一个线程。这意味着如果您的Java应用程序是多线程的,线程真的在可能同时运行.
2025-07-10 23:18:18
899
原创 SpringBoot集成文件 - 大文件的上传(异步,分片,断点续传和秒传)
上文SpringBoot集成文件 - 基础的文件上传和下载-CSDN博客中介绍的是常规文件的上传和下载,而超大文件的上传技术手段和普通文件上传是有差异的,主要通过基于分片的断点续传和秒传和异步上传等技术手段解决。本文主要介绍SpringBoot集成大文件上传的案例。当我们上传的文件很大时,对大文件的处理通常通过分片上传、断点续传和秒传技术手段实现。分片上传就是将一个大文件分成若干份大小相等的小块文件,等所有小块文件上传成功后,再将文件进行合并成完整的原始文件。断点续传就是重新上传文件时先判断哪些文件块已经上
2025-07-09 22:32:04
418
原创 SpringBoot集成文件 - 基础的文件上传和下载
项目中常见的功能是需要将数据文件(比如Excel,csv)上传到服务器端进行处理,亦或是将服务器端的数据以某种文件形式(比如excel,pdf,csv,word)下载到客户端。本文主要介绍基于SpringBoot的对常规文件的上传和下载,以及常见的问题等。SpringBoot对上传的文件大小有限制,默认的最大每个文件配置最大为1MB,默认多个文件上传(上传目标文件夹)总大小是10MB。Spring支持接收多个文件的,只需要用MultipartFile接收即可。本例子主要展示文件的上传和文件的下载。
2025-07-09 22:27:43
297
原创 jenv 管理多个 jdk版本
添加新版本时,每个版本都会一次性自动加入多个不同版本,有些就是简称而已,其实都指向同一个版本,这里便于区分,可以将简略版本删除。/Users/aizer/.jenv/versions 目录,所有的 jdk 版本都在这里,这里只是引用地址。ps: global 不会覆盖已经使用了 jenv local 指定了 JDK 版本的命令行窗口。注意:慎用此命令,此命令会在当前目录下生成名为 .java-version 的隐藏文件。安装目录统一在 /Library/Java/JavaVirtualMachines/
2025-07-07 23:46:47
391
原创 ThreadLocal详解
ThreadLocal是通过线程隔离的方式防止任务在共享资源上产生冲突, 线程本地存储是一种自动化机制,可以为使用相同变量的每个不同线程都创建不同的存储。总结而言:ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类;当使用ThreadLocal来维护变量时, ThreadLocal会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一致的情况。这个章节将详细的讲讲 本地存储(Thread Local)。
2025-07-07 22:32:44
1011
原创 Linux - Linux基础知识
目录存储文件列表,一个目录的权限也就是对其文件列表的权限。下图中,第一扇区的主要开机记录(MBR)中的开机管理程序提供了两个选单: M1、M2,M1 指向了 Windows 操作系统,而 M2 指向其它分区的启动扇区,里面包含了另外一个开机管理程序,提供了一个指向 Linux 的选单。BIOS 是开机的时候计算机执行的第一个程序,这个程序知道可以开机的磁盘,并读取磁盘第一个扇区的主要开机记录(MBR),由主要开机记录(MBR)执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件。
2025-07-06 23:50:43
777
原创 Linux - 零拷贝技术
磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。早期 I/O 操作,内存与磁盘的数据传输的工作都是由 CPU 完成的,而此时 CPU 不能执行其他任务,会特别浪费 CPU 资源。
2025-07-06 23:06:15
841
原创 Java N(A)IO - 框架: Netty
Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。
2025-07-06 17:24:33
186
原创 Java NIO - 零拷贝实现
本文从源码着手分析了 Java NIO 对零拷贝的实现,主要包括基于内存映射(mmap)方式的 MappedByteBuffer 以及基于 sendfile 方式的 FileChannel。最后在篇末简单的阐述了一下 Netty 中的零拷贝机制,以及 RocketMQ 和 Kafka 两种消息队列在零拷贝实现方式上的区别。
2025-07-06 17:17:14
934
原创 Java NIO(Non-blocking I/O) - 基础详解
新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。Standard IO是对字节流的读写,在进行IO之前,首先创建一个流对象,流对象进行读写操作都是按字节 ,一个字节一个字节的来读或写。而NIO把IO抽象成块,类似磁盘的读写,每次IO操作的单位都是一个块,块被读入内存之后就是一个byte[],NIO一次可以读或写多个字节。
2025-07-05 22:39:13
919
原创 Java IO - BIO 详解
BIO就是: blocking IO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态。客户端向服务器端发出请求后,客户端会一直等待(不会再做其他事情),直到服务器端返回结果或者网络出现问题。
2025-07-05 22:37:51
710
原创 IO 模型 - Unix IO 模型
等待数据准备好从内核向进程复制数据对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。阻塞式 I/O非阻塞式 I/OI/O 复用(select 和 poll)信号驱动式 I/O(SIGIO)异步 I/O(AIO)
2025-07-04 23:42:18
710
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人