摘要: 一 基于 Redis 实现分布式锁 1 如何基于Redis实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在Redis中, SETNX 命令是可以帮助我们实现互斥。SETNX即SET if Not eXists (对应 Java 中的 setIfAbsent 方法),如果 阅读全文
posted @ 2024-03-17 15:20 balfish 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 一 数据库主键自增 这种方式就比较简单直白了,就是通过关系型数据库的自增主键产生来唯一的 ID。 优点:实现起来比较简单、ID 有序递增、存储消耗空间小 缺点:支持的并发量不大、存在数据库单点问题(可以使用数据库集群解决,不过增加了复杂度)、ID 没有具体业务含义、安全问题(比如根据订单 ID 的递 阅读全文
posted @ 2024-03-17 15:19 balfish 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 一 引言 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。 比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端 阅读全文
posted @ 2024-03-17 11:03 balfish 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 一 什么是高可用,判断标准是神么 高可用(High Availability)描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。 一般情况下,我们使用多少个 9 来评判一个系统的可用性,比如 99.9999% 就是代表 阅读全文
posted @ 2024-03-15 22:52 balfish 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 什么是读写分离? 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。 如何实现读写分离? 不论是 阅读全文
posted @ 2024-03-09 22:34 balfish 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 一 什么是消息推送 推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。 消息推送通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备 APP 进行的主动消息推送。 消息推送一般又分为 Web 端消息推送和移动端消息推送。 移动端消息推送示例 阅读全文
posted @ 2024-03-06 22:51 balfish 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 一 单机定时任务 Timer java.util.Timer是 JDK 1.3 开始就已经支持的一种定时任务的实现方式。 Timer 内部使用一个叫做 TaskQueue 的类存放定时任务,它是一个基于最小堆实现的优先级队列。TaskQueue 会按照任务距离下一次执行时间的大小将任务排序,保证在堆 阅读全文
posted @ 2024-03-06 21:22 balfish 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 一 多版本并发控制 (Multi-Version Concurrency Control) 1、读操作(SELECT): 当一个事务执行读操作时,它会使用快照读取。快照读取是基于事务开始时数据库中的状态创建的,因此事务不会读取其他事务尚未提交的修改。具体工作情况如下: 对于读取操作,事务会查找符合条 阅读全文
posted @ 2024-03-05 22:00 balfish 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 一 整数类型的 UNSIGNED 属性有什么用? MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数。使用 UNSIGNED 属性可以将正整数的上限提高一倍,因为它不需要存储负数值。 例如, TINYINT UNSIGNED 类型的取值范围是 0 ~ 255, 阅读全文
posted @ 2024-03-05 19:33 balfish 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 一 网络分层模型 OSI 七层模型 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: TCP/IP 四层模型 是目前被广泛采用的一种模型,我们可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本,由以下 4 层组成: 应用层 传输层 网络层 网络接口层 需 阅读全文
posted @ 2024-03-05 14:21 balfish 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 一 何为IO I/O(Input/Output) 即输入/输出 。 从计算机结构的角度来解读 I/O : 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 输入设备(比如键盘)和输出设备(比如显示器)都属于外部设备。网卡、硬盘这种既可以属于输入设备,也可以 阅读全文
posted @ 2024-03-04 17:16 balfish 阅读(17) 评论(1) 推荐(0) 编辑
摘要: 一 概念 所谓原子类就是具有原子/原子操作特征的类。Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 以 AtomicInteger 为例子来介绍。AtomicInteger 类常用方法如下 public final int get() 阅读全文
posted @ 2024-03-03 22:59 balfish 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 一 概述 对于一个单链表,即使链表是有序的,如果我们想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。对平衡树的插入和删除往往很可能导致平衡树进行一次全局的调整。而对跳表的插入 阅读全文
posted @ 2024-03-03 22:46 balfish 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 一 概述 AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类,主要用来构建锁和同步器。 二 AQS原理 AQS 核心思想是,如果被请求的共享资源空 阅读全文
posted @ 2024-03-03 22:33 balfish 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue Java 集合框架如下图所示: List Ar 阅读全文
posted @ 2024-03-03 14:34 balfish 阅读(8) 评论(0) 推荐(0) 编辑