自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于阿里JAVA技术团队安全生产建设和保障经验分享

本文总结了作者在阿里担任SRE和大促队长三年间的安全生产经验。SRE主要负责核心链路保障、告警治理、故障应急指挥等工作,通过全局视角预防和解决系统故障。重点介绍了核心链路1-5-10保障目标(1分钟发现、5分钟响应、10分钟恢复),以及故障应急SOP流程。同时分享了阿里大促保障的关键环节:促前容量评估、压测和作战手册准备,促中变更管控和值班机制。作者强调安全生产对业务信任机制的重要性,指出频繁故障会带来难以挽回的用户流失。文章为技术团队提供了实用的稳定性保障方法论。

2025-11-01 16:34:43 617

原创 深入解析kafka为什么可以这么快?

Kafka的高性能主要源于多方面的优化设计:通过顺序写入磁盘、零拷贝技术和页缓存机制极大提升了磁盘I/O效率;采用批量处理降低网络开销;分区机制实现并行处理;简洁的二进制协议和批量压缩减少传输负载。这些技术协同作用,使Kafka在保证高可靠性的同时,实现了远超传统消息队列的吞吐性能,成为现代分布式系统的首选消息中间件。

2025-10-07 16:23:50 477

原创 数据库与缓存数据一致性的全部方案

本文分析了五种数据库与缓存一致性保障方案:1.经典旁路缓存模式(先更新DB再删缓存),简单但存在并发风险;2.延迟双删作为临时优化方案,效果有限;3.消息队列异步更新实现可靠最终一致性;4.监听数据库日志(如Canal)实现完全解耦;5.Read/WriteThrough模式封装缓存层。方案对比显示经典模式和消息队列适合中小项目,而大厂推荐Binlog监听。选型建议根据团队规模选择,小团队可用方案1+TTL,中型项目可结合MQ,大厂宜采用Binlog监听方案。

2025-10-06 12:04:02 603

原创 mysql--核心日志文件详解

MySQL日志文件是数据库核心功能实现的基础,主要包括UndoLog(实现事务原子性和MVCC)、RedoLog(保证事务持久性)和Binlog(主从复制与数据恢复)。UndoLog记录修改前的旧值用于回滚,RedoLog采用预写日志机制确保数据安全,Binlog则记录所有数据变更。此外,DoublewriteBuffer防止数据页损坏,ChangeBuffer优化二级索引更新性能。文章详细分析了各日志的工作机制、存储位置和使用场景,并通过SQL执行示例说明日志写入顺序和崩溃恢复原理。最后对比了不同日志的特

2025-10-04 17:16:13 680

原创 MySQL分库分表全解析

分库是指将原本存储在一个数据库实例中的多个表或数据,按照一定的规则拆分到多个独立的数据库(schema)中,这些数据库可以部署在同一个 MySQL 实例上,也可以分布在不同的 MySQL 服务器上。分表是指将一个大表的数据拆分成多个结构相同的表(或不同结构),以减少单表的数据量,提高查询和维护效率。维度分库分表拆分维度数据库存储层面表结构层面主要目的解决连接数、IO、CPU 瓶颈解决单表数据量过大部署位置可跨服务器通常在同一数据库内扩展性更强(可加机器)有限(受限于单机资源)复杂度。

2025-10-01 12:02:43 724

原创 MQTT-物联网轻量级通信

MQTT 全称是(消息队列遥测传输),是一种基于发布/订阅模式的轻量级通信协议。它专为资源受限设备和低带宽、不可靠网络环境设计,非常适合物联网(IoT)应用。📌诞生时间:1999 年由 IBM 和 Arcom 共同开发📌标准化组织:OASIS 标准(v3.1.1 及以上)📌默认端口1883(非加密),8883(TLS 加密)📌传输层依赖:TCP/IP 或 WebSocket💡一句话总结MQTT 是一个“轻、快、稳”的消息中间件协议,让万物互联变得简单高效。二、MQTT 的核心架构。

2025-09-28 09:38:50 1374 1

原创 深入解析Kafka主题、分区、副本三要素

每个 Partition 可以有多个副本(Replica),分布在不同的 Broker 上。副本分为两种角色::负责处理该 Partition 的所有读写请求。:被动地从 Leader 拉取消息,保持数据同步。ISR = In-Sync Replicas,表示当前与 Leader基本同步的副本集合。包括 Leader 自身 + 所有及时拉取数据的 Follower。

2025-09-22 08:47:07 793

原创 mysql深翻页问题

下面这就是一条经典的深翻页sql,查询100万后的10条数据建议:80%场景用游标分页解决,剩余场景考虑覆盖索引或。避免原生处理深翻页。

2025-09-16 08:51:43 420 1

原创 Java集合核心知识全解析

引言在Java开发中,集合(Collections) 是最常用的数据结构之一。无论是平时开发还是在面试过程中都一定会用到本文将系统性地讲解Java集合的核心知识,包括面试常问的集合分类、性能对比、实现机制等一、什么是Java集合?Java集合是用于存储和操作一组对象的类和接口的统称。它位于java.util包中,提供了一套统一的架构来表示和操作数据集合。二、ListArrayList: 基于动态数组。随机访问快(O(1)),尾部插入/删除快(O(1)均摊),中间插入/删除慢(O(n)

2025-09-14 07:35:57 572

原创 redis一条命令到达客户端后执行的全过程解密

客户端发送命令→ TCP 传输 → Redis 服务器→ I/O 多路复用读取 → 输入缓冲区→ 命令解析 → 权限校验→ 执行命令(内存操作)→ 更新数据库→ 追加 AOF 缓冲区→ 主从传播→ 结果写入输出缓冲区→ I/O 多路复用写回 → 客户端接收结果。

2025-09-13 13:28:26 989

原创 MySQL上执行一条SQL语句的全过程解密

客户端]↓ 发送 SQL[连接器] → 验证身份 & 创建连接线程↓[分析器] → 词法/语法/语义分析 → 构建 AST↓[优化器] → 生成最优执行计划(EXPLAIN 可见)↓[执行器] → 调用存储引擎 API 执行↓[存储引擎 InnoDB] → 读取磁盘/内存数据 + 加锁 + 写日志↑[执行器] ← 获取每一行数据↓[执行器] 组织结果集↓[返回客户端]

2025-09-11 09:18:29 803

原创 Kafka&RocketMQ重平衡容灾机制

仅看重平衡方面,RocketMQ确实碾压kafka,机制 中心化协调,分布式计算 完全去中心化,客户端自主计算 RocketMQ架构更简单,无单点协调瓶颈。性能影响 全局停顿(Stop-The-World) 无全局停顿,仅影响涉及变更的队列 RocketMQ优势巨大。在弹性伸缩、故障恢复时对集群整体消费能力影响最小。当然选型mq肯定不仅仅看容灾能力,kafka的吞吐、生态等方面优势还是蛮明显的。

2025-09-03 09:05:16 720

原创 React学习笔记(三)Hook使用

自定义 Hook 是一种代码复用的方式,可以将一些重复的逻辑或状态抽象出来,以 Hook 的形式提供给其他组件使用。自定义 Hook 的命名约定是使用 "use" 开头,这样 React 就可以自动检测到这是一个 Hook 进行相关处理。}, []);在其他组件中使用自定义 Hook 时,只需要导入并调用即可。

2023-07-09 13:50:05 1040

原创 React学习笔记(二)组件详解

当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)以及子组件(children)转换为单个对象传递给组件,这个对象被称之为 “props”。例如,这段代码会在页面上渲染 “Hello, Sara”:element,该段代码执行时发生了以下四步我们调用函数,并传入作为参数。React 调用组件,并将作为 props 传入。组件将元素作为返回值。React DOM 将 DOM 高效地更新为。组件名称必须以大写字母开头。

2023-06-18 16:10:07 1735

原创 React学习笔记(一)DOM、元素

本章介绍了react的dom、元素相关概念,react中元素和组件是最容易混淆的,我们会在接下来的文章中介绍组件。组件是由元素构成的,也是react中最重要的模型/概念。

2023-06-18 14:54:28 1817

原创 Flink学习笔记(七)并行度详解

一个Flink程序由多个任务(Source、Transformation和Sink)组成。一个任务由多个并行实例(线程)来执行,一个任务的并行实例(线程)数目被称为该任务的并行度。

2023-03-27 08:30:00 3247

原创 Flink学习笔记(六)Time详解

虽然大部分情况下,传输到Operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络延迟等原因而导致乱序的产生,特别是使用Kafka的时候,多个分区之间的数据无法保证有序。因此,在进行Window计算的时候,不能无限期地等下去,必须要有个机制来保证在特定的时间后,必须触发Window进行计算,这个特别的机制就是Watermark。对于窗口而言它是有生命周期的,只要属于此窗口的第一个元素到达,就会创建一个窗口,当时间(事件或处理时间)超过其结束时间戳加上用户指定的允许延迟时,窗口将被完全删除。

2023-03-26 15:07:49 1148

原创 Flink学习笔记(五)窗口详解

Flink中Batch是Streaming的一个特例,因此Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理。而Window就是从Streaming到Batch的桥梁。

2023-03-26 14:00:33 852

原创 Flink学习笔记(四)State管理与恢复

Flink中CheckPoin(检查点)t是Flink实现容错机制的核心功能,它可以在任务执行过程中定期保存任务的状态信息,以便在任务出现故障或程序异常终止时,能够使用最近一次的检查点进行恢复,从而保证数据的一致性和可靠性。Checkpoint的实现方式可以是在内存中创建一个快照,也可以将快照保存到外部存储系统中。Checkpoint的使用可以大大减少任务执行过程中数据的丢失和重复处理,提高任务的可靠性和稳定性。

2023-03-24 09:16:59 1258

原创 Flink学习笔记(三)任务之间数据共享机制

Broadcast是指将一个数据集广播到任务的所有并行实例中。在Flink中,可以使用Broadcast机制将小数据集分发到每个任务实例中,以便在任务的运行过程中能够快速访问。Broadcast数据集的大小应该小于可用内存的大小,以防止内存溢出。Flink提供了一个分布式缓存(Distributed Cache),类似于Hadoop,可以使用户在并行函数中很方便地读取本地文件。分布式缓存功能允许有效地在任务和作业运行之间共享数据,减少数据重复和提高性能。

2023-03-13 08:15:00 2154

原创 Flink学习笔记(二)Flink常用API详解

提供了对时间和状态的细粒度控制,简洁性和易用性较差,主要应用在对一些复杂事件的处理逻辑上。

2023-03-12 14:28:26 2717

原创 Flink学习笔记(一)概述

1.Flink是一个分布式流处理框架,它能够在大规模的数据流上进行实时计算和批处理。Flink支持丰富的API,包括DataStream API和DataSet API,可以在多种计算场景中使用,例如实时数据处理、批处理、图形计算和机器学习等。Flink还具有高可用性、低延迟、高吞吐量和高扩展性等特点,是近年来非常流行的数据处理框架之一。

2023-03-12 12:13:51 1887

原创 java 记一次Comparator的踩坑经历

Comparison method violates its general contract!报错问题排查

2022-10-15 15:05:29 1451

原创 记一次频繁fullgc排查到解决全流程复盘

阿里云oss文件上传导致的频繁fullgc问题排查到解决全流程复盘

2022-08-07 18:06:51 5448 8

原创 最新版苹果电脑解决无法根目录创建目录

1.背景:EROFS:read-onlu file system想在苹果电脑上跑一个前端项目报了以下错误定位问题是由于mac系统保护不允许在根目录创建目录2.解决方案:1.低版本的mac可以使用关闭SIP的方法https://jingyan.baidu.com/article/17bd8e52e9cfc5c4aa2bb806.html22.如果上述方法无效的话就需要使用软连接# 创建可用目录(不在根目录下),如mkdir -p ~/test #我本地目录为/Us.

2021-12-15 17:14:21 1906 1

原创 2021年秋招面试真题以及面试技巧分享

一、前言先介绍下自己吧,20届二本院校毕业,java岗,大四上开始实习,毕业一年,两年工作经验,今年秋招也是因为一些原因打算换份工作,我是10月初投的简历,boss投了60多家,面试7家,五家谈offer,一家因为不合适直接放弃了,最终选择是阿里,趁工作交接的空档期总结下整个面试经历吧,方便以后自己看,也是希望帮助到其他人二、面试时间选择面试时间选择真的很重要,金三银四,金九银十真的不是没有道理的,可以在三月份和九月份早一些开始投,如果是社招工作一段时间了在年前一个月也是可以的,竞争会小一些,作

2021-11-10 14:55:44 1667

原创 数据库与缓存数据一致性方法总结

一、背景工作中我们经常会有以下的场景(1)先查缓存,缓存有数据就直接返回(2)缓存没数据就查数据库,数据库有数据返回,并且将数据写入缓存(3)数据库也没有数据就返回空如果只是简单的查询和新增但是这个流程存在几个问题(1)如果需要更新缓存中的数据,更新失败,...

2021-11-08 17:18:20 313

原创 双非秋招四面阿里真实经历分享(已上岸)

一、前言第一次写个人感悟及面试类的文章文采有限多多包涵,不知不觉从大四实习开始已经工作两年,也是因为一些原因打算尝试换一份工作,为了这次秋招面试也是准备的蛮久的,基本上半年前就开始准备了,开始面试的时间选的并不好十一假期结束后才开始面试,基本上就是秋招的尾巴,大概面了六七家吧最终也算是蛮坎坷的上岸阿里,本文主要就分享阿里所有面的经历其他家的面试经历过几天有空时会分享出来,本人目前是实习一年+工作一年二、一面(高p同事面30分钟)一面时说实话当时确实准备还没那么充分,最主要是面试经验十分稀缺,直接

2021-10-30 20:03:11 939

原创 Spring el表达式应用

一、简介Spring的表达式语言,简称SpELl,是一个支持运行时检查和操作对象图的强大的表达式语言,和我们之前学习过的JSP中的EL表达式类似,SPEL使用的是#{}作为定界符,所有在大括号中的字符都被认为的SPEL,SPEL为bean的属性进行动态赋值提供了非常大的便利二、SpringEL的使用(1)通过bean的ID对bean进行引用,类似于 ref标签,比ref更强大(2)可以调用方法以及引用对象的属性// 方法parser.parseExpression("#person.

2021-10-20 11:24:13 937

原创 mysql--乐观锁与悲观锁

先看下之前关于mysql锁的介绍https://blog.youkuaiyun.com/zhang09090606/article/details/117105987一、简介:从之前的文章中我们了解到mysql锁按使用方式可以分为乐观锁和悲观锁,也不仅仅是mysql几乎所有涉及锁的地方都分为乐观锁和悲观锁,比如java的lock和cas、synchronized的锁升级、redis的watch乐观锁和Lua脚本实现悲观锁等等,下面将会详细介绍下mysql的乐观锁与悲观锁二、悲观锁悲观锁(Pessimis

2021-10-17 14:24:13 414

原创 equals和==和hashcode的恩怨情仇

一、前言:equals和==和hashcode是java中的基础中的基础,但是确实容易被问到,而且因为工作中经常用所以很容易在复习时遗漏掉,这几天面了个大厂就在这个问题上翻车了,不仅记混了,而且很坚信自己记混的答案,好在其他问题答的不错,加上面试官容忍度高放过一马,所以今天也就详细整理了下它们三个的恩怨情仇二、【==】双等号【==】其实没那么复杂,它的功能就只是比较两边的值是否相等。只是如果变量是引用类型(Integer、String、Object)的话,比较的就是内存地址,因为引用类型变量存.

2021-10-14 14:31:27 272

原创 mysql--执行计划及sql优化

一、如何查看执行计划MySQL 使用explain + sql 语句查看 执行计划,该执行计划不一定完全正确但是可以参考。以这条sql为例SELECT * FROM `dy_push_source` where hotel_id = '60255778'执行计划:二、执行计划字段说明1.select_type查询数据的操作类型SIMPLE 简单查询 PRIMARY 最外层查询 SUBQUERY 映射为子查询 DERIVED 子查询..

2021-10-12 11:19:57 583 1

转载 I/O 多路复用之select、poll、epoll详解

一、简介:select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。二、selectint select (int n, fd_set *

2021-10-09 11:47:46 238

原创 五种IO模型详解

一、用户空间和内核空间先介绍一些前提知识点现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称

2021-10-09 09:53:40 734

转载 Java 6种延时队列的实现方法

一、延时队列的应用什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列在项目中的应用还是比较多的,尤其像电商类平台:1、订单成功后,在30分钟内没有支付,自动取消订单2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等。。。。上边的这些场景都可以应用延时队列解决。

2021-10-06 13:58:49 5152

原创 java标准注解及元注解详解

一、注解定义注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。注解的语法比较简单,除了@符号的使用之外,它基本与Java固有的语法一致。二、标准注解@Override,表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。@Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息。@SuppressWarnings,关闭不当的编译器警告信息

2021-10-06 13:00:36 314

原创 一致性哈希算法详解

一、什么是哈希散列表,是根据键直接访问在指定储存位置数据的数据结构。通过计算一个关于键的函数也称为哈希函数,将所需查询的数据映射到表中一个位置来访问记录,加快查找速度。这个映射函数称做「散列函数」,存放记录的数组称做散列表。散列函数能使对一个数据序列的访问过程更加迅速有效,是一种空间换时间的算法,通过散列函数数据元素将被更快定位。二、常见的hash算法MD5算法MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个

2021-10-06 12:28:26 832

原创 spring源码笔记--三级缓存及循环依赖

一、什么是循环依赖?1.场景循环依赖产生的场景平时工作中还是蛮常见,但是因为强大的spring已经帮我们解决了所以我们工作中无感知,如下代码,A类中注入了B类,而B类中注入了A类,这就产生了互相依赖,A类需要B类构建完才能构建,同程B类也依赖于A类构建完@Servicepublic class AServiceImpl implements AService { @Autowired private BService bService; ...}@Service

2021-09-28 17:46:53 348 1

原创 spring源码笔记--bean加载(一)

一、代码入口3.1版本之前获取bean的方式:BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));bf.getBean("testBean");3.1版本之后XmlBeanFactory废弃所以推荐采用ApplicationContext获取bean:本章主要介绍此种获取bean的方式 ApplicationContext applicationContext = new

2021-09-28 17:46:18 254

原创 spring配置bean的三种方式

一、传统的XML配置方式<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.

2021-09-28 17:45:45 626

空空如也

空空如也

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

TA关注的人

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