欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

【詳解】后端研發(fā)常用的服務(wù)端之間通信的五種方式

五種方式總結(jié)

HTTP/HTTPS

基于網(wǎng)絡(luò)請(qǐng)求,調(diào)用方直接與服務(wù)端通信。

RESTful API、跨平臺(tái)調(diào)用

RPC【使用多】

基于二進(jìn)制協(xié)議,調(diào)用方通過(guò)框架(如 Dubbo、gRPC)與服務(wù)端通信。

微服務(wù)架構(gòu)

SDK(Maven)【使用多】

提供封裝好的庫(kù),調(diào)用方通過(guò)依賴管理工具引入并直接調(diào)用。

第三方服務(wù)集成、工具類(lèi)封裝

WebSocket

全雙工通信,適合實(shí)時(shí)性要求高的場(chǎng)景。

實(shí)時(shí)通信(如聊天、推送)

MQ【使用多】

基于異步通信,適合解耦和高并發(fā)場(chǎng)景。

分布式系統(tǒng)、異步任務(wù)處理

下面依次介紹常用的三種方式:SDK(maven)、RPC(Dubbo)、MQ(RocketMQ)。

一、以 Maven 包形式提供給對(duì)方的方式

概述

以 Maven 包的形式提供給對(duì)方是一種常見(jiàn)的 SDK 接入方式。這種方式將功能封裝成一個(gè)可復(fù)用的庫(kù)(Library),并通過(guò) Maven 等依賴管理工具分發(fā)給調(diào)用方。調(diào)用方只需在項(xiàng)目中引入該包即可使用其中的功能。

特點(diǎn)

  1. 封裝性好: 調(diào)用方無(wú)需關(guān)心底層實(shí)現(xiàn)細(xì)節(jié),只需調(diào)用提供的 API。
  2. 易于分發(fā): 通過(guò) Maven 中央倉(cāng)庫(kù)或私有倉(cāng)庫(kù)發(fā)布,方便調(diào)用方引入。
  3. 版本管理: 支持語(yǔ)義化版本控制(如 1.0.0、1.1.0),便于升級(jí)和維護(hù)。
  4. 開(kāi)發(fā)效率高: 調(diào)用方只需引入依賴即可使用,減少了重復(fù)開(kāi)發(fā)的工作量。

適用場(chǎng)景

  • 需要為第三方開(kāi)發(fā)者提供一組功能接口。
  • 希望簡(jiǎn)化調(diào)用方的集成過(guò)程。
  • 功能相對(duì)獨(dú)立且通用,適合封裝成庫(kù)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 封裝性好:調(diào)用方無(wú)需關(guān)心底層實(shí)現(xiàn)細(xì)節(jié)。
  • 易于分發(fā):通過(guò) Maven 中央倉(cāng)庫(kù)或私有倉(cāng)庫(kù)發(fā)布。
  • 版本管理:支持語(yǔ)義化版本控制。
  • 開(kāi)發(fā)效率高:減少重復(fù)開(kāi)發(fā)工作量。

缺點(diǎn)

  • 耦合性:調(diào)用方需要依賴提供方的包,可能會(huì)受到版本更新的影響。
  • 安全性:如果 SDK 包含敏感邏輯或數(shù)據(jù),可能存在泄露風(fēng)險(xiǎn)。
  • 靈活性不足:調(diào)用方無(wú)法輕易修改 SDK 的內(nèi)部實(shí)現(xiàn)。

實(shí)現(xiàn)步驟

1. 提供方:創(chuàng)建 Maven 項(xiàng)目并打包

1.1 創(chuàng)建 Maven 項(xiàng)目

  • 使用 IDE(如 IntelliJ IDEA)創(chuàng)建一個(gè) Maven 項(xiàng)目。
  • 編寫(xiě)核心功能代碼。

1.2 配置 pom.xml

pom.xml 中定義項(xiàng)目的元信息(如 groupId、artifactIdversion)。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>example-sdk</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
</project>

1.3 打包

使用 Maven 打包工具生成 JAR 文件:

mvn clean package

1.4 發(fā)布到 Maven 倉(cāng)庫(kù)

  • 中央倉(cāng)庫(kù):遵循 Maven Central Repository 的發(fā)布流程。
  • 私有倉(cāng)庫(kù):上傳到公司內(nèi)部的 Nexus 或 Artifactory 私有倉(cāng)庫(kù)。

2. 調(diào)用方:引入 Maven 依賴

2.1 在 pom.xml 中引入依賴

調(diào)用方在自己的項(xiàng)目中通過(guò) pom.xml 引入該依賴:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>example-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

2.2 配置私有倉(cāng)庫(kù)(如果需要)

如果是私有倉(cāng)庫(kù),還需要配置倉(cāng)庫(kù)地址:

<repositories>
    <repository>
        <id>private-repo</id>
        <url>https://repo.example.com/repository/maven-releases/</url>
    </repository>
</repositories>

3. 調(diào)用方:使用 SDK 功能

調(diào)用方可以直接使用 SDK 提供的類(lèi)和方法。例如:

import com.example.sdk.ExampleService;

public class Main {
    public static void main(String[] args) {
        ExampleService service = new ExampleService();
        String result = service.doSomething("input");
        System.out.println(result);
    }
}

分類(lèi)

根據(jù) SDK 的實(shí)現(xiàn)內(nèi)容,可以進(jìn)一步細(xì)分為以下幾種:

  1. 功能型 SDK:提供一組功能接口,調(diào)用方可以直接調(diào)用這些接口完成特定任務(wù)。示例:支付 SDK(如支付寶、微信支付)、云服務(wù) SDK(如阿里云、AWS)。
  2. 協(xié)議型 SDK:封裝了與外部系統(tǒng)的通信協(xié)議(如 HTTP 請(qǐng)求、RPC 調(diào)用)。調(diào)用方通過(guò) SDK 間接與外部系統(tǒng)交互,而無(wú)需關(guān)心底層通信細(xì)節(jié)。示例:Dubbo 客戶端 SDK、gRPC 客戶端 SDK。
  3. 工具型 SDK:提供一組工具類(lèi)或工具方法,幫助調(diào)用方完成某些通用任務(wù)。示例:日志工具、加密工具、文件處理工具。

總結(jié)

以 Maven 包的形式提供給對(duì)方屬于 SDK 方式,是一種常見(jiàn)的接入方式。它通過(guò)封裝功能為庫(kù)的形式,簡(jiǎn)化了調(diào)用方的集成過(guò)程,同時(shí)提供了良好的版本管理和分發(fā)能力。

二、以 RPC 方式(如 Dubbo)提供給對(duì)方的方式

概述

Dubbo 是阿里巴巴開(kāi)源的一款高性能 Java RPC 框架,廣泛應(yīng)用于微服務(wù)架構(gòu)中。通過(guò) Dubbo 提供服務(wù)的方式,通常是基于服務(wù)注冊(cè)與發(fā)現(xiàn)的機(jī)制。調(diào)用方和提供方通過(guò) Dubbo 框架進(jìn)行遠(yuǎn)程服務(wù)調(diào)用,而無(wú)需關(guān)心底層通信細(xì)節(jié)。

特點(diǎn)

  1. 透明性: 調(diào)用方像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù),無(wú)需關(guān)心底層通信細(xì)節(jié)。
  2. 高性能: 使用高效的二進(jìn)制協(xié)議(默認(rèn)為 Dubbo 協(xié)議),支持高吞吐量的服務(wù)調(diào)用。
  3. 服務(wù)治理: 支持負(fù)載均衡、熔斷、限流等高級(jí)功能。
  4. 分布式支持: 適合微服務(wù)架構(gòu),能夠輕松實(shí)現(xiàn)服務(wù)間的解耦。

適用場(chǎng)景

  • 微服務(wù)架構(gòu)中的服務(wù)間通信。
  • 需要高性能、低延遲的服務(wù)調(diào)用。
  • 分布式系統(tǒng)中需要服務(wù)注冊(cè)與發(fā)現(xiàn)的場(chǎng)景。
  • 內(nèi)部系統(tǒng)之間的交互。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 透明調(diào)用:調(diào)用方像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。
  • 高性能:使用高效的二進(jìn)制協(xié)議,減少網(wǎng)絡(luò)開(kāi)銷(xiāo)。
  • 服務(wù)治理:支持負(fù)載均衡、熔斷、限流等功能。
  • 分布式支持:適合微服務(wù)架構(gòu),能夠輕松實(shí)現(xiàn)服務(wù)間的解耦。

缺點(diǎn)

  • 復(fù)雜性增加:需要引入服務(wù)注冊(cè)中心(如 ZooKeeper、Nacos)和 Dubbo 框架。
  • 運(yùn)維成本:需要維護(hù)服務(wù)注冊(cè)中心和 Dubbo 框架。
  • 學(xué)習(xí)曲線:需要熟悉 Dubbo 的使用。

實(shí)現(xiàn)步驟

1. 提供方:發(fā)布服務(wù)

1.1 引入 Dubbo 依賴

pom.xml 中引入 Dubbo 和注冊(cè)中心(如 Nacos 或 ZooKeeper)的 Maven 依賴。

<dependencies>
    <!-- Dubbo 核心依賴 -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.2.0</version>
    </dependency>

    <!-- 注冊(cè)中心依賴(以 Nacos 為例) -->
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>2.2.3</version>
    </dependency>
</dependencies>

1.2 定義服務(wù)接口

定義一個(gè)服務(wù)接口,供調(diào)用方使用。

public interface HelloService {
    String sayHello(String name);
}

1.3 實(shí)現(xiàn)服務(wù)接口

提供方實(shí)現(xiàn)服務(wù)接口,并將其發(fā)布為 Dubbo 服務(wù)。

import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

@DubboService(version = "1.0.0")
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

1.4 配置 Dubbo

application.propertiesapplication.yml 中配置 Dubbo 和注冊(cè)中心。

# Dubbo 配置
dubbo.application.name=dubbo-provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

# 注冊(cè)中心配置(以 Nacos 為例)
dubbo.registry.address=nacos://127.0.0.1:8848

1.5 啟動(dòng)服務(wù)

啟動(dòng) Spring Boot 應(yīng)用程序,服務(wù)將自動(dòng)注冊(cè)到注冊(cè)中心。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo // 啟用 Dubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

2. 調(diào)用方:調(diào)用服務(wù)

2.1 引入 Dubbo 依賴

調(diào)用方同樣需要引入 Dubbo 和注冊(cè)中心的 Maven 依賴。

<dependencies>
    <!-- Dubbo 核心依賴 -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.2.0</version>
    </dependency>

    <!-- 注冊(cè)中心依賴(以 Nacos 為例) -->
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>2.2.3</version>
    </dependency>
</dependencies>

2.2 引用遠(yuǎn)程服務(wù)

調(diào)用方通過(guò) Dubbo 框架獲取遠(yuǎn)程服務(wù)的代理對(duì)象,并調(diào)用其方法。

import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

@Component
public class HelloServiceConsumer {

    @DubboReference(version = "1.0.0")
    private HelloService helloService;

    public void callRemoteService() {
        String result = helloService.sayHello("World");
        System.out.println(result);
    }
}

2.3 配置 Dubbo

application.propertiesapplication.yml 中配置 Dubbo 和注冊(cè)中心。

# Dubbo 配置
dubbo.application.name=dubbo-consumer

# 注冊(cè)中心配置(以 Nacos 為例)
dubbo.registry.address=nacos://127.0.0.1:8848

2.4 啟動(dòng)調(diào)用方

啟動(dòng) Spring Boot 應(yīng)用程序,調(diào)用方將從注冊(cè)中心獲取服務(wù)并調(diào)用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumerApplication implements CommandLineRunner {

    @Autowired
    private HelloServiceConsumer consumer;

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        consumer.callRemoteService();
    }
}

3. 配置服務(wù)注冊(cè)中心

3.1 使用 Nacos 或 ZooKeeper

Dubbo 通常依賴服務(wù)注冊(cè)中心(如 Nacos 或 ZooKeeper)來(lái)實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)。

  • Nacos:輕量級(jí)服務(wù)注冊(cè)中心,功能更加強(qiáng)大。
  • ZooKeeper:經(jīng)典的服務(wù)注冊(cè)中心,比較老了。

3.2 配置服務(wù)地址

application.properties 或代碼中配置服務(wù)注冊(cè)中心的地址。

# 配置 Nacos 地址
dubbo.registry.address=nacos://127.0.0.1:8848

# 或配置 ZooKeeper 地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

總結(jié)

通過(guò) Dubbo 提供服務(wù)的方式屬于 RPC 接入方式,它本質(zhì)上是一種同步通信機(jī)制。這種方式適合微服務(wù)架構(gòu)中的服務(wù)間通信,同時(shí)提供了高性能和服務(wù)治理能力。

三、以 MQ 方式(如 RocketMQ)提供給對(duì)方的方式

概述

RocketMQ 是阿里巴巴開(kāi)源的一款分布式消息中間件,廣泛應(yīng)用于高并發(fā)、分布式系統(tǒng)中。通過(guò) RocketMQ 提供服務(wù)的方式,通常是基于消息隊(duì)列的異步通信機(jī)制。調(diào)用方和提供方通過(guò)消息隊(duì)列進(jìn)行解耦,實(shí)現(xiàn)高效、可靠的消息傳遞。

特點(diǎn)

  1. 異步通信: 調(diào)用方和提供方之間通過(guò)消息隊(duì)列進(jìn)行解耦。適合高并發(fā)、分布式系統(tǒng)的場(chǎng)景。
  2. 高性能: RocketMQ 提供了高效的二進(jìn)制協(xié)議,支持高吞吐量的消息傳遞。
  3. 可靠性: 支持消息持久化、重試機(jī)制,確保消息不會(huì)丟失。
  4. 靈活性: 支持多種消息模式(如點(diǎn)對(duì)點(diǎn)、發(fā)布/訂閱)。

適用場(chǎng)景

  • 需要實(shí)現(xiàn)異步通信的系統(tǒng)。
  • 高并發(fā)、分布式架構(gòu)中的服務(wù)解耦。
  • 數(shù)據(jù)流處理(如日志收集、事件驅(qū)動(dòng)架構(gòu))。
  • 不需要實(shí)時(shí)響應(yīng)的場(chǎng)景。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 異步解耦:調(diào)用方和提供方無(wú)需直接交互,降低了耦合度。
  • 高并發(fā)支持:RocketMQ 能夠處理大量消息,適合高并發(fā)場(chǎng)景。
  • 可靠性高:支持消息持久化、重試機(jī)制,確保消息不丟失。
  • 靈活的消息模式:支持點(diǎn)對(duì)點(diǎn)、發(fā)布/訂閱等多種模式。

缺點(diǎn)

  • 延遲較高:由于是異步通信,不適合實(shí)時(shí)性要求高的場(chǎng)景。
  • 復(fù)雜性增加:需要引入消息隊(duì)列組件,增加了系統(tǒng)復(fù)雜性。
  • 運(yùn)維成本:需要維護(hù) RocketMQ 集群。

實(shí)現(xiàn)步驟

1. 提供方:生產(chǎn)消息

1.1 引入 RocketMQ 依賴

pom.xml 中引入 RocketMQ 的 Maven 依賴:

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.9.3</version>
</dependency>

1.2 編寫(xiě)生產(chǎn)者代碼

提供方通過(guò) RocketMQ 生產(chǎn)消息,并將消息發(fā)送到指定的 Topic。

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;

public class RocketMQProducer {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建生產(chǎn)者實(shí)例
        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.setNamesrvAddr("localhost:9876"); // 設(shè)置 NameServer 地址
        producer.start();

        // 創(chuàng)建消息
        Message message = new Message("TopicTest", "TagA", "Hello RocketMQ".getBytes());

        // 發(fā)送消息
        producer.send(message);

        // 關(guān)閉生產(chǎn)者
        producer.shutdown();
    }
}

2. 調(diào)用方:消費(fèi)消息

2.1 編寫(xiě)消費(fèi)者代碼

調(diào)用方通過(guò) RocketMQ 消費(fèi)消息,并根據(jù)業(yè)務(wù)邏輯處理消息內(nèi)容。

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class RocketMQConsumer {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建消費(fèi)者實(shí)例
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroupName");
        consumer.setNamesrvAddr("localhost:9876"); // 設(shè)置 NameServer 地址

        // 訂閱 Topic
        consumer.subscribe("TopicTest", "*");

        // 注冊(cè)消息監(jiān)聽(tīng)器
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    System.out.printf("Receive Message: %s%n", new String(msg.getBody()));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; // 返回消費(fèi)成功狀態(tài)
            }
        });

        // 啟動(dòng)消費(fèi)者
        consumer.start();
        System.out.println("Consumer Started.");
    }
}

3. 配置 RocketMQ 環(huán)境

3.1 安裝 RocketMQ

  • 下載 RocketMQ 并解壓。
  • 啟動(dòng) NameServer 和 Broker:

3.2 驗(yàn)證 RocketMQ

  • 使用 RocketMQ 自帶的工具驗(yàn)證是否正常運(yùn)行:

4. 消息模式

4.1 點(diǎn)對(duì)點(diǎn)模式

  • 每條消息只能被一個(gè)消費(fèi)者消費(fèi)。
  • 適用于任務(wù)分配、訂單處理等場(chǎng)景。

4.2 發(fā)布/訂閱模式

  • 每條消息可以被多個(gè)消費(fèi)者消費(fèi)。
  • 適用于廣播通知、日志收集等場(chǎng)景。

總結(jié)

通過(guò) RocketMQ 提供服務(wù)的方式屬于 消息隊(duì)列接入方式,它本質(zhì)上是一種異步通信機(jī)制。這種方式適合高并發(fā)、分布式系統(tǒng)中的服務(wù)解耦,同時(shí)提供了高可靠性和靈活性。

關(guān)注【碼間煙火錄】,獲取更多技術(shù)干貨呀!??

#Java##后端#
全部評(píng)論
RPC和MQ選型思考
點(diǎn)贊 回復(fù) 分享
發(fā)布于 02-13 00:08 四川

相關(guān)推薦

當(dāng)指尖敲下最后一個(gè)字符,為學(xué)妹學(xué)弟們準(zhǔn)備的分享&nbsp;PPT&nbsp;終于完成時(shí),整個(gè)世界仿佛都安靜了下來(lái)。夜色下的文廣,空曠而肅穆,只有幾盞路燈散發(fā)著昏黃的光暈,灑在冰涼的石板路上。思緒飄回大一下的那個(gè)起點(diǎn),至今已是兩年有余。還清晰記得第一次遇見(jiàn)&nbsp;Java&nbsp;的那個(gè)下午。當(dāng)看到“一切皆對(duì)象”的優(yōu)雅,擺脫了C++那惱人的指針和引用,一套&nbsp;Spring&nbsp;Boot&nbsp;仿佛就能“梭哈”整個(gè)世界時(shí),內(nèi)心那份驚喜與震撼,如同第一次窺見(jiàn)宇宙的奧秘,感覺(jué)自己仿佛掌握了世界上最美妙的語(yǔ)言,一種近乎信仰的狂熱。那時(shí)的西三教學(xué)樓,水泥地面沾染著歲月的痕跡,又臟又破,一排六人的長(zhǎng)桌,肩并肩,空氣中彌漫著泡面的味道和青春特有的躁動(dòng)。我像一塊海綿,瘋狂吸收著韓順平老師視頻里的&nbsp;Java&nbsp;基礎(chǔ)知識(shí),黑馬點(diǎn)評(píng)、瑞吉外賣(mài)……這些如今看來(lái)或許簡(jiǎn)單的項(xiàng)目,在當(dāng)時(shí),卻是我認(rèn)知里的高山。當(dāng)?shù)谝粋€(gè)項(xiàng)目歷經(jīng)無(wú)數(shù)次調(diào)試,終于在屏幕上成功跑起來(lái)的那一刻,那感覺(jué),比第一次登錄心心念念的賽爾號(hào)還要強(qiáng)烈。第一次鼓起勇氣參加騰訊犀牛鳥(niǎo)開(kāi)源項(xiàng)目,仿佛一腳踏入了另一個(gè)世界。名單上,南大的學(xué)生赫然過(guò)半,其余也皆是頂尖&nbsp;985&nbsp;的身影,博士、研究生比比皆是??粗约旱摹?11”標(biāo)簽,渺小得幾乎看不見(jiàn),是靠著填報(bào)院長(zhǎng)名字才勉強(qiáng)擠入的“直通車(chē)”。群里的討論飛速進(jìn)行,各種高深的術(shù)語(yǔ)如同天書(shū),每一次彈出新消息,都讓我心頭一緊,強(qiáng)烈的焦慮感如同潮水般涌來(lái),我生怕這難得的機(jī)會(huì)因自己的無(wú)知而付諸東流。我索性,把“臉皮”這個(gè)東西暫時(shí)丟開(kāi),&nbsp;懷著忐忑的心情,挨個(gè)去“騷擾”群里的各位大佬,小心翼翼地請(qǐng)教。雖然知識(shí)儲(chǔ)備遠(yuǎn)遠(yuǎn)不及,但我憑著一股“東拼西湊”的蠻勁,把大佬們的指點(diǎn)和&nbsp;GPT&nbsp;生成的內(nèi)容,像燉大雜燴一樣,硬生生地整合起來(lái)。最終“順利結(jié)業(yè)”四個(gè)字傳來(lái)時(shí),懸著的心終于落地,長(zhǎng)舒一口氣。緊接著,我又一頭扎進(jìn)了字節(jié)跳動(dòng)青訓(xùn)營(yíng)。這一次,我成為了組長(zhǎng),肩上多了份沉甸甸的責(zé)任。帶著三個(gè)朋友,我們摸索著前進(jìn)。開(kāi)發(fā)過(guò)程異常艱難。如何調(diào)試?如何協(xié)調(diào)團(tuán)隊(duì)進(jìn)度?這些都成了我夜不能寐的難題。最令人崩潰的是,一個(gè)隊(duì)友直接用覆蓋的方式將代碼&nbsp;push&nbsp;到了我的分支,那一刻,我看著屏幕上消失的代碼,感覺(jué)整個(gè)晚上的心血瞬間消失。但放棄?從未想過(guò)。我們咬著牙,在麥當(dāng)勞嘈雜的人聲里,在院樓深夜寂靜的燈光下,在星巴克咖啡香氣的陪伴中,一次次加班加點(diǎn),奮力前行。當(dāng)項(xiàng)目最終成功自測(cè)跑起來(lái)時(shí),我們幾個(gè)疲憊的臉上終于露出了笑容。現(xiàn)在回想,那個(gè)從零到一,從需求分析到數(shù)據(jù)庫(kù)設(shè)計(jì),再到代碼測(cè)試一手包辦的項(xiàng)目,雖然界面簡(jiǎn)陋得有些可笑,但那確確實(shí)實(shí)是我,一個(gè)技術(shù)小白,用無(wú)數(shù)個(gè)不眠之夜和笨拙的雙手,一點(diǎn)點(diǎn)打磨出的、充滿心血的結(jié)晶。盡管最后因?yàn)槭栌陧?xiàng)目部署,比賽方無(wú)法驗(yàn)收,未能順利結(jié)業(yè),留下了深深的遺憾。但那種第一次當(dāng)團(tuán)隊(duì)owner的感覺(jué),卻是難以言表的。大二上的那小半年,現(xiàn)在回想起來(lái),像是一段迷霧籠罩的時(shí)光。每天看似坐在圖書(shū)館,書(shū)本攤開(kāi),目光卻常常失焦,&nbsp;說(shuō)是在學(xué)習(xí),但知識(shí)仿佛都從指縫間溜走,沒(méi)有真正沉淀進(jìn)腦海。圖書(shū)館安靜得能聽(tīng)到自己的心跳,窗外陽(yáng)光明媚,我內(nèi)心卻是一片陰霾。看著那些埋頭苦讀的身影,再對(duì)比自己低效的“奮斗”,一種時(shí)間的空耗感和深深的自我懷疑不斷啃噬著我。那時(shí)總在想,如果當(dāng)時(shí)選擇去實(shí)習(xí),去真實(shí)的項(xiàng)目中摔打,而不是在校園的象牙塔里“沉淀”,會(huì)不會(huì)是另一番景象?幸運(yùn)的是,大二下,一道光照了進(jìn)來(lái)。通過(guò)繼續(xù)教育學(xué)院的技術(shù)負(fù)責(zé)人&nbsp;Leo&nbsp;哥,我獲得了一個(gè)寶貴的機(jī)會(huì),加入了后端開(kāi)發(fā)團(tuán)隊(duì)。這是我的第一段正式實(shí)習(xí),帶著一絲忐忑,更多的是對(duì)未知的興奮。團(tuán)隊(duì)的氛圍出乎意料地好,每個(gè)人都非常&nbsp;nice。兩位直系學(xué)長(zhǎng)更是耐心得如同兄長(zhǎng),手把手地帶著我修改項(xiàng)目中的&nbsp;Bug。我驚嘆于他們搭建的系統(tǒng)架構(gòu),那份精妙與優(yōu)雅,讓我看到了更高層次的技術(shù)世界。那段時(shí)間,我像上滿了發(fā)條,每天都是第一個(gè)到達(dá)工位,辦公室的燈光常常因我而亮起;晚上,當(dāng)周?chē)逆I盤(pán)聲漸漸平息,人影散去,我卻依然留在空蕩的辦公室里,貪婪地閱讀著他們的代碼,試圖理解每一個(gè)設(shè)計(jì)背后的深意。那是學(xué)習(xí)和生活都穩(wěn)步向前的日子。清晨,我會(huì)迎著朝陽(yáng)去操場(chǎng)跑步,感受汗水浸濕衣衫的暢快;回到宿舍,熱一杯香濃的咖啡,開(kāi)啟一天的學(xué)習(xí)。體重不知不覺(jué)降了下來(lái),整個(gè)人仿佛脫胎換骨,精神面貌煥然一新,算是一次成功的“爆改”。四月,恰逢江南梅雨季,天空總是灰蒙蒙的,暴雨說(shuō)來(lái)就來(lái),傾盆而下。我常常踩著濕漉漉的鞋,帶著一身水汽沖進(jìn)辦公室,但內(nèi)心卻燃燒著一團(tuán)火,仿佛擁有永遠(yuǎn)也用不完的精力。暑假,又一份幸運(yùn)降臨,參與了中國(guó)移動(dòng)的線上實(shí)習(xí)。雖然隔著屏幕,溝通和協(xié)作多了些阻礙,項(xiàng)目最終的完成度也并非完美,&nbsp;但這段經(jīng)歷,無(wú)疑又為我的開(kāi)發(fā)經(jīng)驗(yàn)庫(kù)里增添了寶貴的一筆。大三上,我意識(shí)到,是時(shí)候真正走向社會(huì),去爭(zhēng)取一份中大廠的實(shí)習(xí)了。我小心翼翼地“包裝”著自己的項(xiàng)目經(jīng)歷,像準(zhǔn)備一件珍貴的展品,&nbsp;然后開(kāi)始海投簡(jiǎn)歷。內(nèi)心深處,對(duì)&nbsp;BAT&nbsp;那樣高不可攀的名字,還存著一絲膽怯,&nbsp;只敢在&nbsp;Boss&nbsp;直聘上,一遍遍地“騷擾”著中廠的&nbsp;HR。每一次點(diǎn)擊發(fā)送,都伴隨著期待與不安。而那些石沉大海的“已讀不回”,刺痛著我敏感的心。當(dāng)小紅書(shū)的面試官,語(yǔ)速飛快地說(shuō)出一連串我聞所未聞的技術(shù)名詞時(shí),我坐在屏幕前,大腦一片空白,強(qiáng)烈的挫敗感和自我懷疑瞬間將我包圍:我真的可以嗎?我還能有機(jī)會(huì)進(jìn)入夢(mèng)想中的大廠嗎?就在這時(shí),貨拉拉向我伸出了橄欖枝,那封&nbsp;Offer&nbsp;郵件,如同黑夜中的燈塔,瞬間點(diǎn)亮了我的希望。&nbsp;更令人興奮的是,我將有機(jī)會(huì)參與到優(yōu)惠券、活動(dòng)這些核心業(yè)務(wù)中。我收拾行囊,踏上了南下的列車(chē),成為了萬(wàn)千“深漂”中的一員。初到深圳,這座年輕而龐大的城市,對(duì)我來(lái)說(shuō)全然陌生。目之所及,是鱗次櫛比、直插云霄的高樓大廈,壓迫感與繁華感并存。&nbsp;而現(xiàn)實(shí)的骨感也迅速襲來(lái):30&nbsp;元一碗的豬腳飯,動(dòng)輒&nbsp;2000&nbsp;元起步、半年起租的房租,都像一盆冷水,澆滅了我初來(lái)乍到的熱情,讓我望而卻步。為了節(jié)省開(kāi)支,抓緊一切時(shí)間學(xué)習(xí),我買(mǎi)了張簡(jiǎn)易的床墊,在夜深人靜、所有同事都下班后,偷偷鋪在空曠的會(huì)議室冰涼的地板上。&nbsp;那段日子,睡夢(mèng)中都充滿了警惕,生怕被巡邏的保安發(fā)現(xiàn),更怕被同事撞見(jiàn)這窘迫的一幕。耳邊時(shí)常傳來(lái)深夜加班同事匆匆的腳步聲,提醒著我這座城市永不停歇的節(jié)奏和自己的格格不入。我的工位,不幸地緊挨著廁所。每天下午固定的清潔時(shí)間,那刺鼻的消毒水味便會(huì)準(zhǔn)時(shí)彌漫開(kāi)來(lái),&nbsp;濃烈得讓人無(wú)法忽視,我只能緊皺眉頭,屏住呼吸,默默忍受。&nbsp;而更讓我焦慮的是,我的&nbsp;Mentor&nbsp;遲遲沒(méi)有給我分配具體的開(kāi)發(fā)需求。每天的工作,似乎都圍繞著服務(wù)治理、權(quán)限申請(qǐng)、填寫(xiě)各種表格打轉(zhuǎn),我感覺(jué)自己快要變成一個(gè)“Excel&nbsp;Boy”。心中的迷茫和落差感越來(lái)越大,一度,強(qiáng)烈的跑路念頭在腦海中盤(pán)旋。&nbsp;但一想到自己幾乎忘光的“八股文”,想到來(lái)之不易的機(jī)會(huì),我不得不強(qiáng)行按捺住那顆躁動(dòng)且迷茫的心。于是,我開(kāi)始了瘋狂的自救。我一頭扎進(jìn)了組內(nèi)的文檔庫(kù),&nbsp;憑著一股不服輸?shù)膭蓬^,幾乎把貨拉拉整個(gè)中臺(tái)組的技術(shù)文檔翻了個(gè)底朝天。&nbsp;賬號(hào)、會(huì)員、營(yíng)銷(xiāo)活動(dòng)的核心鏈路,被我一點(diǎn)點(diǎn)摸索、串聯(lián)起來(lái);批量派發(fā)權(quán)益卡、活動(dòng)接口的二級(jí)緩存設(shè)計(jì)、定時(shí)任務(wù)的原理、核心接口的&nbsp;Token&nbsp;降級(jí)方案……這些原本晦澀難懂的系統(tǒng)設(shè)計(jì),都被我硬生生地“扒”了遍,理解了遍。至今還記得,那些獨(dú)自留在工位,對(duì)著電腦屏幕刷力扣到深夜&nbsp;11&nbsp;點(diǎn)的夜晚,窗外城市的霓虹璀璨,室內(nèi)只有鍵盤(pán)敲擊的單調(diào)聲響;&nbsp;還記得,周末清晨,天還未亮,便爬起來(lái)去附近的公園跑山,用大汗淋漓對(duì)抗內(nèi)心的焦慮;&nbsp;還記得,每天雷打不動(dòng)灌下兩大杯黑咖啡,依靠咖啡因強(qiáng)行提神的苦澀與亢奮;&nbsp;更記得,每個(gè)周末,拖著疲憊的身軀,往返于廣州與深圳之間,高速公路上那仿佛永無(wú)止境的塞車(chē),一堵就是兩個(gè)小時(shí),當(dāng)終于抵達(dá)公司宿舍時(shí),漆黑的夜幕早已低垂,仿佛宣告著新的一天又在奔波中開(kāi)始了。不知不覺(jué),三個(gè)月如白駒過(guò)隙。我的大三上,就在這緊張、充實(shí),充滿了汗水與掙扎的實(shí)習(xí)生活中,落下了帷幕。當(dāng)&nbsp;2&nbsp;月&nbsp;20&nbsp;日,我鄭重地投出第一份騰訊的簡(jiǎn)歷時(shí),我知道,我的暑期實(shí)習(xí)戰(zhàn)役,已經(jīng)提前打響。至今,我已經(jīng)歷了&nbsp;19&nbsp;場(chǎng)面試的洗禮。期間,也曾收到過(guò)兩份其他大廠的&nbsp;Offer,但我都婉言謝絕了。&nbsp;留在廣州,這個(gè)念頭如同一種宿命,深深地烙印在我心里??墒牵瑥V州的大廠,又有多少呢?競(jìng)爭(zhēng)的激烈可想而知。&nbsp;但我依然堅(jiān)信,付出了這么多努力,經(jīng)歷了這么多波折的我,一定能做到!此刻,我獨(dú)自站在文廣的中央,仰望著天上那輪清冷的下弦月。月光如水,靜靜地灑在這片熟悉的廣場(chǎng)上,也灑在我的身上。&nbsp;“明月曾照古人”,也照亮過(guò)無(wú)數(shù)個(gè)像我一樣,心懷夢(mèng)想與憂愁的人吧。思緒不由得飄回四年前,那個(gè)復(fù)讀的夏天,我也是無(wú)數(shù)次站在這里,&nbsp;或是放聲歌唱,宣泄著青春的迷茫與希望;或是沉默不語(yǔ),在夜風(fēng)中細(xì)數(shù)著內(nèi)心的焦慮與期盼。四年時(shí)光,彈指一揮間。&nbsp;我仿佛還能看到當(dāng)年那個(gè)青澀、懵懂、卻眼神堅(jiān)定的自己。轉(zhuǎn)眼,我的大學(xué)時(shí)光已接近尾聲,留在這片校園的日子,屈指可數(shù)。?
點(diǎn)贊 評(píng)論 收藏
分享
04-11 09:14
已編輯
門(mén)頭溝學(xué)院 Java
感覺(jué)問(wèn)題都好難,還是太菜了#牛客AI配圖神器#1、Spring中的@SpringBootApplication注解的原理是什么?由哪些組合注解組成?2、Spring啟動(dòng)過(guò)程中需要多少個(gè)Bean3、@Component和@Bean的區(qū)別是什么?4、Bean的生命周期?5、Bean的作用域有哪些?BeanFactory和FactoryBean有什么區(qū)別?6、Spring中最重要的兩個(gè)概念是什么?(AOP和IOC)7、Spring管理事務(wù)的方式有哪些?8、Spring事務(wù)中哪些事務(wù)傳播行為?9、@Transactional的實(shí)現(xiàn)原理?10、Java有開(kāi)發(fā)框架了解哪些?11、Hibernate了解過(guò)嘛?使用場(chǎng)景?12、Java中的Socket編程有了解過(guò)嘛?13、Lua腳本有了解過(guò)嘛?有哪些注意事項(xiàng)?缺點(diǎn)是什么?14、常見(jiàn)的線程池有哪些?15、線程池的執(zhí)行原理?16、ThreadLocal的實(shí)現(xiàn)原理,需要注意什么?缺點(diǎn)是什么?17、JUC包知道哪些?怎么使用?18、ConcurrentHashmap了解過(guò)嘛?擴(kuò)容機(jī)制呢?19、ConcurrentHashmap實(shí)現(xiàn)原理是什么?并發(fā)機(jī)制是什么?20、SQL和noSQL的優(yōu)缺點(diǎn)分別是什么?21、Mysql中有哪些索引,場(chǎng)景分別是什么?22、在哪些場(chǎng)景下使用過(guò)redis?23、Redis怎么保證與Mysql數(shù)據(jù)一致性?24、除了Redis還有哪些noSQL?25、Mongodb是什么??jī)?yōu)缺點(diǎn)?26、Gradle是什么?怎么使用?使用場(chǎng)景?27、關(guān)心過(guò)業(yè)務(wù)系統(tǒng)里面的sql耗時(shí)嘛?統(tǒng)計(jì)過(guò)慢查詢嘛?對(duì)慢查詢都是怎么優(yōu)化的?28、Mysql中模糊查詢的%和_的區(qū)別?29、MySQL中的binlog知道原理嘛?30、項(xiàng)目中怎么去進(jìn)行SQL調(diào)優(yōu)?31、多線程中哪些參數(shù)?start()和run()的區(qū)別是什么?32、Volatile和synchronized的區(qū)別是什么?
點(diǎn)贊 評(píng)論 收藏
分享
評(píng)論
4
4
分享

創(chuàng)作者周榜

更多
正在熱議
更多
# 面試問(wèn)題記錄 #
74834次瀏覽 1060人參與
# 工作中,你有沒(méi)有遇到非常愛(ài)罵人的領(lǐng)導(dǎo)? #
20722次瀏覽 145人參與
# 京東TGT #
54533次瀏覽 188人參與
# 上班到公司第一件事做什么? #
41104次瀏覽 383人參與
# 硬件人的簡(jiǎn)歷怎么寫(xiě) #
257965次瀏覽 2901人參與
# 求職季如何保持心態(tài)不崩 #
107699次瀏覽 885人參與
# 找工作的破防時(shí)刻 #
2539次瀏覽 41人參與
# 工作時(shí)那些社死瞬間 #
26414次瀏覽 199人參與
# 拼多多工作體驗(yàn) #
18104次瀏覽 153人參與
# 互聯(lián)網(wǎng)行業(yè)現(xiàn)在還值得去嗎 #
7655次瀏覽 42人參與
# 技術(shù)轉(zhuǎn)行的心路歷程 #
48749次瀏覽 665人參與
# 選完offer后,你后悔學(xué)本專(zhuān)業(yè)嗎 #
39098次瀏覽 217人參與
# 你覺(jué)得技術(shù)面多長(zhǎng)時(shí)間合理? #
87517次瀏覽 647人參與
# 國(guó)企和大廠硬件兄弟怎么選? #
121262次瀏覽 1657人參與
# 你遇到過(guò)哪些神仙同事 #
75781次瀏覽 668人參與
# 安利/避雷我的專(zhuān)業(yè) #
67367次瀏覽 497人參與
# 面試經(jīng)驗(yàn)談 #
50988次瀏覽 816人參與
# 實(shí)習(xí)生應(yīng)該準(zhǔn)時(shí)下班嗎 #
204021次瀏覽 1329人參與
# 米哈游求職進(jìn)展匯總 #
323337次瀏覽 2224人參與
# 面試吐槽bot #
18803次瀏覽 109人參與
# 工作一周年分享 #
20464次瀏覽 113人參與
??途W(wǎng)
??推髽I(yè)服務(wù)