技术阅读周刊第十二期

7eeb678b6b33c7aa6445ea59d3395f2f.png

年前最后一篇推送,提前祝大家新年快乐。

技术阅读周刊,每周更新。

历史更新

Deno vs Go: Native hello world performance | Tech Tonic

URL: https://medium.com/deno-the-complete-reference/deno-vs-go-native-hello-world-performance-c57d8fc13c75

使用 Deno 和 Go 进行基本的接口对比

  • MacBook Pro M2 with 16GB of RAM

  • Deno v1.38.0

  • Go v1.21.3

都是最简单的 httpServer:

Deno.serve({
  port: 3000,
}, (req) => {
  try {
    const pathName = new URL(req.url).pathname;
    if (pathName !== "/") {
      return new Response(null, { status: 404 });
    }
    return new Response("Hello world!");
  } catch (e) {
    return new Response(null, { status: 500 });
  }
});
package main

import (
  "io"
  "net/http"
)

func main() {
  http.HandleFunc("/", helloWorld)
  http.ListenAndServe(":3000", nil)
}

func helloWorld(w http.ResponseWriter, r *http.Request) {
  io.WriteString(w, "Hello world!")
}
33399861bbf735c3e7991492bf3b637d.png
image.png

总的来说 Deno 比 Go 慢了 30% 左右,但 CPU 占有率比 Go 更少,Go 的内存占用更低。

这个对比就图一乐。

Top 7 Spring Boot Design Patterns Unveiled | by Dharmendra Awasthi | Dec, 2023 | Stackademic

URL: https://blog.stackademic.com/top-7-spring-boot-design-patterns-unveiled-4a2569f8d324

7 个我们可以学习的 Spring Boot 的设计模式

Singleton Pattern 单例模式

这个没啥好说的,面试都被讲烂了,依然很经典。当我们使用这些注解声明一个 Bean 时@Component@Service@Repository, or @Controller,就会被创建一个单例对象注入到 IOC 容器中。

Factory Pattern 工厂模式

Spring 也提供了工厂模式的接口,我们可以自定义创建逻辑:

import org.springframework.beans.factory.FactoryBean;

public class MyFactoryBean implements FactoryBean<MyBean> {
    @Override
    public MyBean getObject() throws Exception {
        // Custom logic to create and return MyBean instance
        return new MyBean();
    }

    @Override
    public Class<?> getObjectType() {
        return MyBean.class;
    }

    @Override
    public boolean isSingleton() {
        return true; // Or false, depending on your bean's scope
    }
}

Builder 创建者模式

这个其实不算是 Spring 所提供的,但确实很好用;通常用于创建需要很多可选参数的对象时使用:

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class User {
    private String username;
    private String email;
    private int age;
    // Other fields
}

User user = User.builder()
    .username("john_doe")
    .email("john@example.com")
    .age(30)
    .build();

Proxy 代理模式

代理模式在 spring 中通常用于 AOP 切面,可以实现一些通用的非业务逻辑功能;比如日志、缓存、安全检测等:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
@Component
public class LoggingAspect {
    
    @Before("execution(* com.example.service.*.*(..))")
    public void beforeServiceMethods() {
        // Logic to be executed before service methods
        System.out.println("Logging before service methods...");
    }
}

Observe 观察者模式

本质上是将业务解耦,生产者发布事件,订阅者接收事件,只是 spring 帮我们封装好了逻辑。

import org.springframework.context.ApplicationEvent;

public class OrderPlacedEvent extends ApplicationEvent {
    private final Order order;

    public OrderPlacedEvent(Object source, Order order) {
        super(source);
        this.order = order;
    }

    // Getters for order information
}


import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;

@Service
public class OrderService {
    private final ApplicationEventPublisher eventPublisher;

    public OrderService(ApplicationEventPublisher eventPublisher) {
        this.eventPublisher = eventPublisher;
    }

    public void placeOrder(Order order) {
        // Logic to place order

        // Publish OrderPlacedEvent
        eventPublisher.publishEvent(new OrderPlacedEvent(this, order));
    }
}


import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class EmailService {

    @EventListener
    public void sendEmailOnOrderPlacement(OrderPlacedEvent event) {
        Order order = event.getOrder();
        // Logic to send email based on the placed order
    }
}

转转一体化监控系统——Prometheus·Grafana成本治理_TakinTalks稳定性技术交流平台

URL: https://news.shulie.io/?p=8229a61728e59293debfea514ae902481581.png

链接里有 B 站视频,文字版链接:https://mp.weixin.qq.com/s/FySeVBL7EfihOlNDBvAPpw

转转的监控方案

  • 基于 Prometheus 架构(确实已经是监控领域的标准了)

  • 使用 M3DB 替换了单机的 Prometheus。

    • 我们使用 VM 替换的 Prometheus,转转没有选择 VM 是因为 M3DB 的压缩率更高。

  • 采用 Push 模型推送数据

    • 由于我们使用了 kubernetes,所以是基于 kubernetes 的 SD 实现的服务发现。

    • 所以我们采用的也是 Pull 拉取模型

    • 由 SDK 进行推送,对业务无感知

    • 省略了注册中心,改为了数据库存储服务节点信息。

  • 重写了告警系统,Prometheus 自带的告警系统存在学习难度大等问题。

文章链接:

  • https://medium.com/deno-the-complete-reference/deno-vs-go-native-hello-world-performance-c57d8fc13c75

  • https://blog.stackademic.com/top-7-spring-boot-design-patterns-unveiled-4a2569f8d324

  • https://news.shulie.io/?p=8229

往期推荐

Pulsar3.0 升级指北

如何给开源项目发起提案

如何编写一个 Pulsar Broker Interceptor 插件

老炮新作,大一统的监控探针采集器 cprobe 开源了

五分钟 k8s 实战-滚动更新与优雅停机

6afa4d140cbaa1c5dc612f25fe5a5ea5.gif

点分享

6cf7342e3418f1d0c52eafa54e9939f8.gif

点收藏

b50a65a9cefb5558d4e0705d1033f26b.gif

点点赞

f08fd557f8afc5ad1cc4050c7268d70c.gif

点在看

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值