自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Redis 核心技术与实战》课程学习笔记(二)

数据结构:快速的 Redis 有哪些慢操作数据库这么多,为啥 Redis 能有这么突出的表现呢?一方面,因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。另一方面,因为,键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是 Redis 快速处理数据的基础。简单来说,底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。键和值用什么结构组织?为了实现从键到值的快速访问,Redi

2023-07-04 22:49:59 433

原创 《Redis 核心技术与实战》课程学习笔记(一)

基本架构:一个键值数据库包含什么?这样学 Redis,才能技高一筹为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题:一个是写 AOF 和 RDB 会造成 Redis 性能抖动;另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢,限制了同步和恢复速度。其实,一个可行的解决方案就是使用非易失内存 NVM,因为它既能保证高速的读写,又能快速持久化数据。很多技术人都有一个误区,那就是,只关注零散的技术点,没有建立起

2023-07-04 17:10:20 412

原创 《kafka 核心技术与实战》课程学习笔记(十)

Kafka 的 Java 生产者是如何管理 TCP 连接的?为何采用 TCP?Apache Kafka 的所有通信都是基于 TCP 的,而不是基于 HTTP 或其他协议。在开发客户端时,能够利用 TCP 本身提供的一些高级功能,比如多路复用请求以及同时轮询多个连接的能力。除了 TCP 提供的这些高级功能有可能被 Kafka 客户端的开发人员使用之外,目前已知的 HTTP 库在很多编程语言中都略显简陋。Kafka 生产者程序概览Kafka 的 Java 生产者 API 主要的对象就是

2023-06-28 23:04:48 708

原创 《kafka 核心技术与实战》课程学习笔记(九)

客户端都有哪些不常见但是很高级的功能?什么是 Kafka 拦截器?拦截器基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。Spring MVC 拦截器的工作原理:Kafka 拦截器借鉴了这样的设计思路:可以在消息处理的前后多个时点动态植入不同的处理逻辑,比如在消息发送前或者在消息被消费后。Kafka 拦截器Kafka 拦截器分为生产者拦截器和消费者拦截器。生产者拦截器允许你在发送消息前以及

2023-06-28 21:42:46 693

原创 《kafka 核心技术与实战》课程学习笔记(七)

生产者压缩算法怎么压缩?压缩(compression)秉承了用时间去换空间的经典 trade-off 思想,具体来说就是用 CPU 时间去换磁盘空间或网络 I/O 传输量,希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。目前 Kafka 共有两大类消息格式,社区分别称之为 V1 版本和 V2 版本。不论是哪个版本,Kafka 的消息层次都分为两层:消息集合(message set)以及消息(message)。一个消息集合中包含若干条日志项(record item),而日

2023-06-26 12:26:27 880

原创 《kafka 核心技术与实战》课程学习笔记(五)

kafka 集群参数配置

2023-06-25 19:59:50 998

原创 《后端存储实战课》课程学习笔记(三)

商品介绍在商品详情页中占得比重是最大的,包含了大量的带格式文字、图片和视频。其中图片和视频自然要存放在对象存储里面;商品介绍的文本,一般都是随着商品详情页一起静态化,保存在 HTML 文件中。商品详情页静态化之后,不仅仅是可以节省服务器资源,还可以利用 CDN 加速,把商品详情页放到离用户最近的 CDN 服务器上,让商品详情页访问更快。至于商品价格、促销信息等这些需要频繁变动的信息,不能静态化到页面中,可以在前端页面使用 AJAX 请求商品系统动态获取。

2023-06-20 15:27:43 1400

原创 《后端存储实战课》课程学习笔记(二)

创建和更新订单时,如何保证数据准确无误?订单系统是整个电商系统中最重要的一个子系统,订单数据也就是电商企业最重要的数据资产。一个合格的订单系统,最基本的要求是什么?数据不能错。首先,你的代码必须是正确没 Bug 的,如果说是因为代码 Bug 导致的数据错误,那谁也救不了你。然后,你要会正确地使用数据库的事务。比如,你在创建订单的时候,同时要在订单表和订单商品表中插入数据,那这些插入数据的 INSERT 必须在一个数据库事务中执行。订单系统的核心功能和数据简单梳理一下一个订单系统必备的

2023-06-20 14:51:40 1353

原创 《后端存储实战课》课程学习笔记(一)

从今天起,换种方式学存储凡是那些特别难解决的、让你付出巨⼤代价的,或者是损失惨重的技术问题,几乎都可以归为存储系统的问题。存储是系统中最核心、最重要、最关键的组成部分,没有之一。你要关注存储的哪些特点?无论是什么样的存储,比如 MySQL、Redis、ElasticSearch 等等,它们都有几个共同的特点。第一个特点是难用。对于应用程序来说,存储无非就是帮我们安全可靠地保存数据,在我需要的时候能快速读出来也就可以了。很遗憾,几乎没有存储系统能满足这么简单的要求。第二个特点是慢

2023-06-19 22:51:09 3919

原创 《剑指 Offer--LeetCode 学习计划》-- 链表

剑指 Offer 06. 从尾到头打印链表(Easy)题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。限制:0 <= 链表长度 <= 10000。举例说明示例 1:输入:head = [1,3,2]。输出:[2,3,1]。解题思路利用递归:先走至链表末端,回溯时依次将节点值加入列表,这样就可以实现链表值的倒序输出。算法流程:递推阶段:每次传入 head.next,以 head == null(即走过链表尾部节点)为递归终止条件,

2023-06-13 01:27:59 922

原创 《剑指 Offer--LeetCode 学习计划》-- 字符串

−231231−1231−1−231−231。

2023-06-10 15:58:45 858

原创 《Java 核心技术面试》课程笔记(十三)

谈谈接口和抽象类有什么区别?典型回答接口和抽象类是 Java 面向对象设计的两个基础机制。接口接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。抽象类抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化

2023-06-09 00:09:30 358

原创 《Java 核心技术面试》课程笔记(十二)

Java 有几种文件拷贝方式?哪一种最高效?典型回答Java 有多种比较典型的文件拷贝实现方式,比如:利用java.io 类库,直接为源文件构建一个 FileInputStream 读取,然后再为目标文件构建一个 FileOutputStream,完成写入工作。或者,利用 java.nio 类库提供的 transferTo 或 transferFrom 方法实现。总体上来说,NIO transferTo/From 的方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要拷贝和上下文切换。考

2023-06-08 23:41:03 313

原创 《消息队列高手课》课程学习笔记(八)

在 NIO 中,每个已经建立好的连接用一个 Channel 对象来表示。我们希望能实现,在一个线程里,接收来自多个 Channel 的数据。

2023-06-08 22:55:06 512

原创 《Java并发编程实战》课程学习笔记(十二)

【代码】《Java并发编程实战》课程笔记(十二)

2023-06-05 19:17:14 573

原创 《Java并发编程实战》课程学习笔记(十一)

StampedLock:有没有比读写锁更快的锁?

2023-06-05 18:11:01 465

原创 《Java并发编程实战》课程学习笔记(九)

【代码】《Java并发编程实战》课程笔记(九)

2023-06-05 11:28:13 536

原创 《Java并发编程实战》课程学习笔记(八)

所谓可重入锁,顾名思义,指的是线程可以重复获取同一把锁。

2023-06-01 14:13:54 478

原创 《Java并发编程实战》课程学习笔记(六)

管程:并发编程的万能钥匙

2023-05-31 14:09:52 613

原创 《Java并发编程实战》课程学习笔记(五)

安全性、活跃性以及性能问题

2023-05-31 13:54:54 639

原创 《Java并发编程实战》课程学习笔记(三)

Java 内存模型:看 Java 如何解决可见性和有序性问题

2023-05-31 01:14:33 400

原创 《消息队列高手课》课程学习笔记(七)

接下来我们看一下,如何用异步的思想来解决这个问题,实现同样的业务逻辑。异步的实现过程相对于同步来说,稍微有些复杂。

2023-05-30 00:05:51 847

原创 《消息队列高手课》课程笔记(六)

消息积压了该如何处理?优化性能来避免消息积压在使用消息队列的系统中,对于性能的优化,主要体现在生产者和消费者这一收一发两部分的业务逻辑中。对于消息队列本身的性能,不需要太关注。主流消息队列的单个节点,消息收发的性能可以达到每秒钟处理几万至几十万条消息的水平,还可以通过水平扩展 Broker 的实例数成倍地提升处理能力。一般的业务系统需要处理的业务逻辑远比消息队列要复杂,单个节点每秒钟可以处理几百到几千次请求,已经可以算是性能非常好的了。所以,对于消息队列的性能优化,我们更关注的是,在消息的收

2023-05-29 17:33:58 1107

原创 《消息队列高手课》课程笔记(五)

如何处理消费过程中的重复消息?消息重复的情况必然存在在 MQTT 协议中,给出了三种传递消息时能够提供的服务质量标准,这三种服务质量从低到高依次是:At most once: 至多一次。消息在传递时,最多会被送达一次。换个说法就是,没什么消息可靠性保证,允许丢消息。一般都是一些对消息可靠性要求不太高的监控场景使用,比如每分钟上报一次机房温度数据,可以接受数据少量丢失。At least once: 至少一次。消息在传递时,至少会被送达一次。也就是说,不允许丢消息,但是允许有少量重

2023-05-29 17:14:49 1708 1

原创 《Java 核心技术卷一:基础知识》读书笔记(二)

【代码】《Java 核心技术卷一:基础知识》学习笔记(二)

2023-05-28 12:16:29 918

原创 《消息队列高手课》课程笔记(四)

一条消息从生产到消费完成这个过程,可以划分三个阶段:

2023-05-24 19:25:47 1068

原创 《消息队列高手课》课程笔记(三)

如何利用事务消息实现分布式事务?什么是分布式事务?消息队列中的“事务”,主要解决的是消息生产者和消息消费者的数据一致性问题。如果我们需要对若干数据进行更新操作,为了保证这些数据的完整性和一致性,我们希望这些更新操作要么都成功,要么都失败。至于更新的数据,不只局限于数据库中的数据,可以是磁盘上的一个文件,也可以是远端的一个服务,或者以其他形式存储的数据。一个严格意义的事务实现,应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID 特性。原子性,是指一个事务操作不

2023-05-24 19:06:08 698

原创 《消息队列高手课》课程笔记(二)

消息模型:主题和队列有什么区别?两类消息模型早期的消息队列,就是按照“队列”的数据结构来设计的。生产者(Producer)发消息就是入队操作,消费者(Consumer)收消息就是出队也就是删除操作,服务端存放消息的容器自然就称为“队列”。这就是最初的一种消息模型:队列模型。如果有多个生产者往同一个队列里面发送消息,这个队列中可以消费到的消息,就是这些生产者生产的所有消息的合集。消息的顺序就是这些生产者发送消息的自然顺序。如果有多个消费者接收同一个队列的消息,这些消费者之间实际上是竞争的关

2023-05-24 18:37:00 1087

原创 《消息队列高手课》课程笔记(一)

后端服务从请求消息队列中获取 APP 请求,完成后续秒杀处理过程,然后返回结果。网关在收到请求后,将请求放入请求消息队列;

2023-05-24 15:06:29 1373

原创 《Java 核心技术面试》课程笔记(十一)

Java 提供了哪些 IO 方式?典型回答Java IO 基于不同的 IO 抽象模型和交互方式,可以分为:BIO,传统的 java.io 包,它基于流模型实现。提供了我们最熟知的⼀些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会⼀直阻塞在那里,它们之间的调用是可靠的线性顺序。java.net 提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnecti

2023-05-21 18:20:25 526

原创 《Java 核心技术面试》课程笔记(十)

如何保证集合是线程安全的?典型回答Java 提供了不同层⾯的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取⼀个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。普遍的选择是利用并发包提供的线程安全容器类:各种并发容器,比如 Concurr

2023-05-21 15:49:33 635

原创 《Java 核心技术面试》课程笔记(九)

对比 Hashtable、HashMap、TreeMap 有什么不同?典型回答Hashtable、HashMap、TreeMap 都是最常见的⼀些 Map 实现,是以键值对的形式存储和操作数据的容器类型。Hashtable 是早期 Java 类库提供的⼀个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap 是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于 HashMap 不是同步的,支持 null 键

2023-05-19 13:06:11 310

原创 《从0开始学架构》课程笔记(一)

什么是系统架构?

2023-05-17 11:31:14 305

原创 《Java 核心技术卷一:基础知识》读书笔记(一)

Java 语言概述

2023-05-11 13:52:01 294

原创 《MySQL 必知必会》课程笔记(三)

《MySQL 必知必会》课程笔记(三):表

2023-05-10 17:13:09 660

原创 《MySQL 必知必会》课程笔记(二)

《MySQL 必知必会》课程笔记(二):字段

2023-05-10 16:35:00 715

原创 《MySQL 必知必会》课程笔记(一)

mysql 必知必会课程笔记(一):存储

2023-05-10 12:50:58 493

原创 LeetCode 全题解:两数相加(02)

第二题:两数相加

2023-03-08 15:52:01 429

原创 LeetCode 全题解:两数之和(01)

第一题:两数之和

2023-03-07 17:56:27 370

原创 《从零开始学微服务》课程学习笔记(八)

链路追踪

2022-07-20 11:27:10 232 1

空空如也

空空如也

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

TA关注的人

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