技术阅读周刊第十二期

news2025/4/17 19:00:13

7eeb678b6b33c7aa6445ea59d3395f2f.png

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

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

历史更新

  • 20231201:第八期

  • 20231215:第十期

  • 20231122:第十一期

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

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1356164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TSINGSEE青犀智能分析网关V4视频智能分析在智慧幼儿园中的应用

一、背景需求 在科技浪潮的推动下&#xff0c;智慧化监管已然成为幼儿园管理发展的必然趋势。通过引入尖端技术手段&#xff0c;智慧幼儿园监管解决方案不仅显著提升了管理效率&#xff0c;更为孩子们的安全与健康筑起一道坚实的屏障。为了全方位守护幼儿的平安&#xff0c;幼…

java设计模式学习之【策略模式】

文章目录 引言策略模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用计算示例代码地址 引言 设想你正在玩一个策略游戏&#xff0c;每一个决策都会导致不同的游戏结局。同样地&#xff0c;在软件开发中&#xff0c;我们常常需要根据不同的场景或条件选择不同…

【c++————————构造函数和析构函数】

【c————————构造函数和析构函数】 欢迎阅读新一期的c模块————构造函数和析构函数 ✒️个人主页&#xff1a;-Joker- &#x1f3f7;️专栏&#xff1a;C &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c…

如何配置Zabbix告警邮件通知并基于GPT提供解决方案?

一、概述 时间来到2023年末&#xff0c;距离Open AI发布GPT-3.5&#xff0c;首次向公众推出ChatGPT已经整整过去了一年。如今&#xff0c;以ChatGPT为代表的人工智能模型已然被应用众多领域&#xff0c;当然也包括IT运维。在IT运维中&#xff0c;通过对接运维监控平台&#xff…

人生重开模拟器

前言&#xff1a; 人生重开模拟器是前段时间非常火的一个小游戏&#xff0c;接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏&#xff1a; 人生重开模拟器 (ytecn.com) 1.实现一个简化版的人生重开模拟器 &#xff08;1&#xff09; 游戏开始的时…

【JAVA】深入了解 Java 中的 DelayQueue

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 Java中的DelayQueue是一个强大的工具&#xff0c;常用于处理需要延迟执行的任务或具有过期时间的元素。通过实现Delayed接口&#x…

MySQL慢查询日志分析(慢查询日志)

一、背景 &emsp;&emsp;MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;他用来记录在MySQL中响应的时间超过阈值的语句&#xff0c;具体指运行时间超过long_query_time&#xff08;默认是10秒&#xff09;值的SQL&#xff0c;会被记录到慢查询日志中。 &em…

CAAC无人机操作证考证报名流程及白底证件照片制作方法

在这个无人机技术日新月异的时代&#xff0c;拥有一张CAAC民用无人机操作证不仅意味着你能够合法地在天空翱翔&#xff0c;也象征着你对飞行技术的尊重和对规章制度的遵守。如果你怀揣着成为无人机飞行员的梦想&#xff0c;那么&#xff0c;让我们一起揭开CAAC民用无人机操作证…

Docker安装Elasticsearch,kibana,ik分词器

安装elasticsearch 下载elasticsearch&#xff0c;查看版本&#xff1a;Elasticsearch Guide [8.11] | Elastic docker pull elasticsearch:7.17.16 查看镜像是否下载成功 docker images 创建网络&#xff0c;因为需要部署kibana容器&#xff0c;要让es和kibana容器互联 …

由浅入深理解C#中的事件

目录 本文较长&#xff0c;给大家提供了目录&#xff0c;可以直接看自己感兴趣的部分。 前言有关事件的概念示例​ 简单示例​ 标准 .NET 事件模式​ 使用泛型版本的标准 .NET 事件模式​ 补充总结 参考前言 前面介绍了C#中的委托&#xff0c;事件的很多部分都与委托…

MySQL——事物

目录 一.发现问题 二.什么时事物 三.事务提交方式 四.事物的常规操作方式 五. 事务隔离级别 1.如何理解隔离性 2.隔离级别 3.查看与设置隔离性 4.读未提交【Read Uncommitted】 5.读提交【Read Committed】 6.可重复读【Repeatable Read】 7.串行化【serializabl…

A01、class文件简要说明

关于 .class 文件的相关结构说明 1、字节码文件相关名词 类型名称数量u4magic1u2minor_version1u2major_version1u2constant_pool_count1cp_infoconstant_poolconstant_pool_count - 1u2access_flags1u2this_class1u2super_class1u2interfaces_count1u2interfacesinterfaces_c…

vue登录 滑动验证,记住密码及AES加密解密

相关依赖 npm install js-cookie //js-cookie npm install crypto-js //AES加密解密 npm install -S vue-puzzle-vcode //滑动验证 vue2 <template><div class"login"><div class"login-box"><div class"imgbox">&…

进阶学习——Linux系统——程序和进程

目录 一、程序和进程的关系 1.程序 2.进程 2.1线程 2.2协程 3.进程与线程的区别 4.总结 4.1延伸 5.进程使用内存的问题 5.1内存泄漏——Memory Leak 5.2内存溢出——Memory Overflow 5.3内存不足——OOM&#xff08;out of memory&#xff09; 5.4进程使用内存出现…

听GPT 讲Rust源代码--compiler(11)

File: rust/compiler/rustc_mir_transform/src/simplify.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_mir_transform/src/simplify.rs文件是Rust编译器中一系列进行MIR&#xff08;中间表示&#xff09;简化的转换的实现。MIR是Rust编译器中用于进行优化和代码生成的中间…

PDF.js实现搜索多个不同的关键词高亮显示效果

static\PDF\web\viewer.js 392行左右 // 自定义搜索关键词---------------------------------------- this.searchKeywords keyword > {if (typeof PDFViewerApplication ! undefined) {PDFViewerApplication.eventBus.dispatch(find, {query: keyword,caseSensitive: fal…

HTML5+CSS3⑥——CSS三大特性、表格、列表

CSS特性 继承性 层叠性 优先级 叠加计算规则 表格 表格结构标签 合并单元格 列表 无序列表 有序列表 定义列表

「数据结构」八大排序1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;初阶数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;插入排序&#x1f34c;直接插入排序&#x1f95d;复杂度及稳定性 &#x1f34c;希尔排序&#x1f95d;预…

Required request body is missing报错及解决

今天&#xff0c;我在尝试调用后端接口展示文章数据时遇到了错误&#xff0c;错误原因是请求体缺失&#xff0c; 但是我明明传了参数 然后我找了很久错误原因&#xff0c;发现在之前跟着写的一个差不多的功能时&#xff0c;请求方式是post 而我写的确是get 将get改为post后&…

【DevOps-06】Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…