大厂程序员,竟然是这样学新技术的?

本文介绍了如何通过理解Etcd的基本功能、快速上手实践和进阶学习来掌握这一云原生分布式存储技术。作者强调了结合实际操作和理论学习的重要性,以及与其他技术的对比和应用场景分析。

以当下非常流行的 Etcd 云原生分布式存储中间件 为例,给大家分享我快速入门新技术的通用经验和小技巧。

本文也是一个极简的 Etcd 入门教程,保证能让你会用这个技术,但并不会有什么很深入、劝退的东西。

学会的同学记得点赞、收藏支持呀~

通用技术学习方法

如何学好一门技术,从入门到入土呢?

图片

1、基本了解 - Etcd 介绍

先搞清楚为什么要学这个技术?

有同学说了:找工作要求的。

那要明确几个问题:

  1. 这个技术是做什么的?

  2. 有什么优点和缺点?

  3. 适用于什么场景?

为什么找工作会要求这个技术,对不对?

就以 Etcd 技术为例,一般我了解一门技术会先去看他的 官方文档或者官方开源仓库 ,能获得最官方的定义。

Etcd 的官方 GitHub:https://github.com/etcd-io/etcd

根据官方的介绍,Etcd 是 Go 语言实现的、开源分布式键值存储系统,它主要用于存储分布式系统中最关键的数据。

图片

让我们思考前面几个问题:

1)Etcd 是做什么的?存储键值对数据的。

2)它有什么优点?简单易用、安全、高性能、可靠、高可用。

3)适用于什么场景?官方也说了,好多公司在用它,第一个,大名鼎鼎的容器管理平台 k8s 就使用了 Etcd 来存储集群信息,还有什么配置管理、任务调度、分布式锁、服务发现。

图片

听到这里,可能学过后端的同学会有点想法:这不就是 ZooKeeper、Redis 么?

的确可以把它们理解为同类的中间件,能解决的问题都是差不多的。那为什么还要学 Etcd 呢?

毕竟它是 Go 语言实现的,会更轻量、易部署、性能更高,所以比较受到大厂的青睐。

如果你的目标是进大厂,学这个技术会非常加分。至少我看了这么多份简历,基本上没有同学在简历上写这个技术。毕竟教程比较少嘛,大部分同学没教程不会学技术的,但是我这篇文章发出来后,相信会有更多同学了解和运用它吧。

2、快速上手 - Etcd 基本操作

对技术有了基本的了解后,我们要做什么呢?

先不要管他为什么高性能、高可用、什么 Raft 算法,怎么用它实现分布式锁、服务发现,而是要先 快速上手,通过写 Demo 等实战的方式,快速用这个技术完成基本操作,不要上来就看一堆理论。

怎么用呢?

还是要看官方文档。换位思考,如果你创造了一个技术,肯定要写一个最容易上手的例子来吸引别人去用。

Etcd Playground

那首先,我们可以使用官方提供的  Playground 来玩 Etcd,便于学习理解。

Playground 地址:http://play.etcd.io/play

和所有数据存储中间件一样,Etcd 的基本操作无非就是:增删改查。

可以用可视化界面模拟操作,下图中的小圆圈就是我们的 Etcd 服务器节点,比如写入一条键值对数据:

图片

然后根据键名来读取数据:

图片

还支持根据键名的前缀搜索数据:

图片

绿色的小圆圈是 Etcd 的主节点(负责写数据),其余节点是从节点(负责读数据):

图片

当主节点挂掉后,需要重新选出一个主节点。但是我们会发现,并没有新的从节点成为主节点,因为还剩 2 个节点,一人一票,谁都不服谁!这种现象也称为 “脑裂”。

图片

然后我们再启动一个节点,会发现有节点被选举为了新的主节点:

图片

大概就是这样,暂时没必要深究背后的算法了,能理解 Etcd 的基本操作和选举方式就行。

Etcd 安装

了解 Etcd 的基本操作后,我们要在自己的电脑上安装它。

直接进入官方的下载页:https://github.com/etcd-io/etcd/releases

找到自己的操作系统,复制脚本,在终端中执行即可:

图片

安装完成后,会得到 2 个脚本:

  • etcd:etcd 服务本身

  • etcdctl:客户端,用于操作 etcd,比如读写数据

执行 etcd 脚本就可以启动服务了,服务默认占用 2379 和 2380 端口,作用分别如下:

  • 2379:提供 HTTP API 服务,和 etcdctl 交互

  • 2380:集群中节点间通讯

图片

启动服务后,你就可以使用 etcdctl 客户端来操作 ectd 了,比如通过下列命令写入和读取数据:

etcdctl put mykey "this is awesome"
etcdctl get mykey
Etcd 可视化工具

如果将 Etcd 用于项目,用终端来管理数据是不方便的。

一般情况下,我们使用数据存储中间件时,可以使用可视化工具,更直观清晰地管理数据,也便于学习。比如 Redis 的 RDM。

Etcd 的可视化工具我推荐 etcdkeeper ,安装成本更低,学习使用更方便。

地址:https://github.com/evildecay/etcdkeeper/

进入项目的 GitHub,就能看到安装方式,直接按照指引下载、解压、运行脚本即可:

图片

安装后,控制台执行命令,可以在指定端口启动可视化界面:

./etcdkeeper -p 8081

执行命令后,通过浏览器访问,就能看到可视化页面了:

图片

我们会发现,Etcd 存储数据的模式类似于文件系统路径的层次结构,所以能够很灵活地按前缀查询,也比较适用于注册中心的实现。

Etcd Java 客户端

工具准备好了,我们就要学习如何在代码中操作 Etcd。不同的语言,需要的客户端类库也不同,比如Java 客户端推荐使用 jetcd。

地址:https://github.com/etcd-io/jetcd

同样打开官方仓库就能看到使用教程,注意,JDK 的版本必须大于 11!

它的用法非常简单,就像 curator 能够操作 ZooKeeper、jedis 能够操作 Redis 一样。

1)首先在 Maven 项目中引入 jetcd:

<!-- https://mvnrepository.com/artifact/io.etcd/jetcd-core -->
<dependency>
    <groupId>io.etcd</groupId>
    <artifactId>jetcd-core</artifactId>
    <version>0.7.7</version>
</dependency>

2)按照官方文档的示例写一个增删改查的 Demo:

package com.yupi.yurpc.registry;

import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.Client;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.kv.GetResponse;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class EtcdRegistry {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // create client using endpoints
        Client client = Client.builder().endpoints("http://localhost:2379")
                .build();

        KV kvClient = client.getKVClient();
        ByteSequence key = ByteSequence.from("test_key".getBytes());
        ByteSequence value = ByteSequence.from("test_value".getBytes());

        // put the key-value
        kvClient.put(key, value).get();

        // get the CompletableFuture
        CompletableFuture<GetResponse> getFuture = kvClient.get(key);

        // get the value from CompletableFuture
        GetResponse response = getFuture.get();

        // delete the key
        kvClient.delete(key).get();
    }
}

在这段代码中,我们使用了最常用的 KVClient 来对 Etcd 写入和读取数据。除此之外,Etcd 还提供了很多其他客户端。

我们可以巧用编辑器的提示来了解更多的用法,我个人很喜欢这么干,多花一点点时间,就能探索到很多新知识。

图片

3)最后,我们可以通过 Debug 模式执行上述代码,观察 Etcd 的数据结构。

你会发现除了 key 和 value 外,还能看到版本、创建版本、修改版本字段。这是因为 etcd 中的每个键都有一个与之关联的版本号,用于跟踪键的修改历史。当一个键的值发生变化时,其版本号也会增加。

图片

完成这些操作后,大家就算入门 Etcd 了。怎么样,是不是非常简单?

Etcd 的入门成本是极低的,只要你学过 Redis、ZooKeeper 或者对象存储中的一个,就能够很快理解 Etcd 并投入实战运用。我们学技术的一个技巧,就是把新技术和老技术进行类比和关联。

3、进阶学习

熟悉一门技术的基本操作后,感兴趣的同学,就可以开启进阶学习了。

首先是 系统学习:通过看一套教程,学会某个技术的核心特性,并能运用到项目中。

像 Etcd 有很多特性值得学习,尤其是租约、监听机制,非常实用。

理想情况下,大家要掌握一个能力:就是能自发地想到用某种技术或特性来解决问题,比如要做分词搜索就想到用 Elasticsearch。所以多自主思考和敲代码很重要。网上有一些 Etcd 系统教程,但是我会更推荐看书和项目实战。

当你能熟练运用一门技术后,才是最后的几个阶段:了解原理、深入源码、修改源码,甚至能够推陈出新,创造一个类似的技术。

我反正是做不到,机会交给大家了,苟开源、勿相忘啊!

近年来,大厂程序员面试真题的获取和解析成为许多开发者提升自身能力的重要途径。以下是一些常见领域及对应的真题示例和解析: ### 数据结构与算法 在大厂的面试中,数据结构与算法是考察的重点之一。例如,常见的问题包括排序算法、查找算法、树和图的相关操作等。 ```python def two_sum(nums, target): """ 给定一个整数数组 nums 和一个目标值 target, 请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 """ hash_map = {} for i, num in enumerate(nums): complement = target - num if complement in hash_map: return [hash_map[complement], i] hash_map[num] = i return [] ``` ### 系统设计 系统设计问题通常要求候选人能够设计一个高并发、可扩展的系统架构。例如,设计一个短网址服务或设计一个分布式缓存系统[^1]。 ```text 设计一个支持百万级并发的即时通讯系统需要考虑以下几个方面: - 消息传递机制:使用长轮询、WebSocket 或 HTTP/2 Server Push 技术。 - 负载均衡:使用 Nginx 或 HAProxy 进行流量分发。 - 数据存储:选择合适的数据库(如 Redis 用于缓存,MySQL 用于持久化)。 - 安全性:确保通信加密和用户身份验证。 ``` ### Android 开发 对于 Android 开发者来说,除了基础的 Java/Kotlin 编程知识外,还需要掌握 Android 四大组件、性能优化、内存泄漏检测等内容[^3]。 ```java // 示例:使用 LeakCanary 检测内存泄漏 public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); // Normal app init } } ``` ### 计算机网络 计算机网络相关的题目也是高频考点,比如 TCP/IP 协议栈、HTTP/HTTPS 协议、DNS 解析过程等。 ```text TCP 三次握手的过程如下: 1. 客户端发送 SYN 报文给服务器,进入 SYN_SENT 状态。 2. 服务器收到 SYN 后,回复 SYN-ACK(SYN=1, ACK=1),进入 SYN_RCVD 状态。 3. 客户端收到 SYN-ACK 后,回复 ACK 报文,双方连接建立成功。 ``` ### 操作系统 操作系统方面的题目可能涉及进程调度、内存管理、文件系统等方面。 ```text Linux 中的进程状态有以下几种: - R (Running):进程正在运行或准备运行。 - S (Sleeping):进程处于睡眠状态。 - D (Disk Sleep):不可中断的睡眠状态。 - Z (Zombie):僵尸进程。 - T (Stopped):进程被停止。 ``` ### 数据库 数据库相关的问题主要集中在 SQL 查询优化、事务处理、索引原理等方面。 ```sql -- 示例:创建一个带有索引的表 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100), INDEX idx_email (email) ); ``` ### 分布式系统 分布式系统的相关问题包括一致性哈希、CAP 定理、Paxos/Raft 箉法等[^1]。 ```text Raft 箅法的核心思想是通过选举出一个 Leader 来协调所有的日志复制操作。 Leader 负责接收客户端请求并将这些请求作为日志条目追加到自己的日志中。 然后 Leader 将这些日志条目复制到其他 Follower 节点上。 一旦大多数节点成功复制了日志条目,Leader 就会提交这些日志条目并通知所有 Follower 提交。 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值