ymdb 是我开源的一款简易的分布式键值存储系统,适用于分布式系统初学者练手或者应届生写上简历,这篇文章将对 ymdb 做一个全面的介绍(建议仅用作学习用途,应用于生产是危险的,因为 ymdb 尚不完善)。
ymdb 使用 Go 语言开发,从面试情况来看,面试官还是很喜欢问这个项目的,并且有几个面试官表示这样的项目比较抓眼球,因为它是一个偏底层的并且不是一个千篇一律(俗称“烂大街”)的项目,因此写在简历上不失为一个好的选择。
ReentrantLock 是 Java JUC(java.util.concurrent) 包下的一个锁工具,它实现了 Lock 接口,与 synchronized 锁不同,ReentrantLock 除了用来做线程间互斥之外,还提供了很多高级的特性,例如公平锁 & 非公平锁以及可中断。
本文将从 JDK17 源码角度介绍一下 ReentrantLock 的底层实现原理,这部分是 Java 面试的常考知识点。(目前看到的博客都是基于 JDK8 源码分析的,而鲜有基于 JDK17 源码进行分析的)
2024美团暑期实习后端开发一面:公平锁与非公平锁是如何实现的? 看完这篇文章你就明白了!
拓扑排序(Topological Sorting)是一种针对有向无环图(DAG)的排序算法。在拓扑排序中,图中的顶点被安排成一个线性序列,使得如果图中存在一条从顶点 u 到顶点 v 的有向边,则在序列中顶点 u 出现在顶点 v 之前。
拓扑排序通常用于描述一组任务或事件之间的依赖关系,其中每个任务都有一些前置任务,必须在它们完成后才能执行。通过拓扑排序,我们可以确定一种合理的执行顺序,以确保所有任务都按照其依赖关系得到正确执行。
Spring 是 Java
生态中一个举足轻重的框架,大大简化了开发,它的主要核心特性包括两个,分别是 控制反转 以及 依赖注入。
Raft 算法是目前应用广泛的分布式共识算法,在许多知名的开源项目比如 etcd 中,都有 Raft 的身影。同时,随着 MIT6.824 课程的普及,Raft 俨然成为了最广为人知的分布式共识算法。
Raft 的设计动机之一就是为解决 Paxos 算法的难以理解性,因此 Raft 的一个大的特性就是易于理解。
直接啃论文是困难的,本文旨在以简洁的文字总结 Raft 算法,让第一次认识 Raft 算法的同学也可以很快有一个整体上的理解。
今天看了The Google File System的论文,我们简称其为GFS。GFS是谷歌的分布式文件存储系统,这篇论文是现代分布式软件系统入门的经典论文,并由此诞生了Hadoop生态中HDFS的开源实现。
我不会一字一句地翻译这篇论文,因为我并不是想实现这样一个系统,我打算将一些关键点提炼出来以供学习。
RPC
,是Remote Procedure Call
的缩写,意为远程过程调用,使得调用远程服务的方法,就像我们调用本地方法一样简单,并且我们不需要关心整个过程底层的细节。
RPC
协议被广泛应用于分布式系统节点间的通信,我所接触的分布式存储Curve
就广泛使用了RPC
协议.
关于RPC
协议的实现,有很多RPC框架可以为我们所用,比如gRPC
dubbo
等,因此我们一般不需要去自己实现RPC
。
IO,即Input/Output
,指的是程序从外部设备或者网络读取数据到用户态内存/从用户态内存写数据到外部设备或者网络的过程。
IO也就是Input/Output
,数据拿到计算机内存中的过程即为输入,反之,数据从内存输出到外部存储(可以是远程主机、磁盘、数据库等)的过程即为输出。数据传输过程类似于水流,因此称作IO流。IO流在Java中分为输出流和输入流,根据数据的处理方式又分为字节流和字符流。(这里的输入输出是以程序为中心的,输入指程序接收输入,输出指程序把数据输出到外部存储)
一致性哈希是一种哈希算法,主要用于分布式系统中数据的分片和负载均衡,一致性哈希算法解决了传统哈希算法在节点动态增减时可能导致数据迁移量过大的问题,能够提供更好的扩展性和性能。