技术阅读周刊第十期

c179b4dc14fb5555560f1bbcbf69d420.png

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

周四加了个班,周五没缓过来,就推迟到今天更新了be0e25023bac434d647b6ab295690a23.png

历史更新

  • 20231117:第六期

  • 20231124:第七期

  • 20231201:第八期

  • 20231215:第九期

Golang: 14 Shorthand Tricks You Might Not Know! | by Nidhi D | Dec, 2023 | Canopas

URL: https://blog.canopas.com/golang-14-shorthand-tricks-you-might-not-know-8d8d21954c49

同时声明和初始化变量

// Long form  
var message string  
message = "Hello, Golang!"  // Shorthand  
message := "Hello, Golang!"

声明和初始化多个变量

// Long form  
var a, b, c int  
a = 1  
b = 2  
c = 3  // Shorthand  
a, b, c := 1, 2, 3

交换变量

a, b := 1, 2  // Long form  
temp := a  
a = b  
b = temp  // Shorthand  
a, b = b, a

Defer 函数调用

// Long form  
func cleanup() {  
// Cleanup logic  
}  
defer cleanup()  // Shorthand  
defer func() {  
// Cleanup logic  
}()

检测 Map 中的数据是否存在

// Long form  
value, exists := myMap[key]  
if !exists {  // Key doesn't exist in the map  
}  // Shorthand  
if value, exists := myMap[key]; !exists {  // Key doesn't exist in the map  
}

使用下标和值迭代切片

// Long form  
for i := 0; i < len(numbers); i++ {  
fmt.Println(i, numbers[i])  
}  // Shorthand  
for i, value := range numbers {  
fmt.Println(i, value)  
}

错误检测

// Long form  
result, err := someFunction()  
if err != nil {  
// Handle the error  
}  // Shorthand  
if result, err := someFunction(); err != nil {  
// Handle the error  
}

创建一个变量的指针

// Long form  
var x int  
ptr := &x  // Shorthand  
ptr := new(int)

匿名函数

// Long form  
func add(x, y int) int {  
return x + y  
}  // Shorthand  
add := func(x, y int) int {  
return x + y  
}

创建和初始化 Map

// Long form  
colors := make(map[string]string)  
colors["red"] = "#ff0000"  
colors["green"] = "#00ff00"  // Shorthand  
colors := map[string]string{  
"red": "#ff0000",  
"green": "#00ff00",  
}

声明多个常量

// Long form  
const pi float64 = 3.14159  
const maxAttempts int = 3  // Shorthand  
const (  pi = 3.14159  maxAttempts = 3  
)

Java Mastery Unleashed: 12 Essential Tips Every Developer Must Embrace

URL: https://blog.stackademic.com/boost-your-java-skills-12-must-know-programming-tips-for-java-developers-34f8381ec431

一些常用的 Java 技巧

  • 善用 Lambda 表达式

// Before
List<String> names = new ArrayList<>();  
for (Person person : people) {  
names.add(person.getName());  
}
// After
List<String> names = people.stream()  
.map(Person::getName)  
.collect(Collectors.toList());
  • 使用 Optionals 替代 null

Optional<String> maybeName = Optional.ofNullable(person.getName());  
String name = maybeName.orElse("Unknown");
  • 使用 stream 简化集合操作

List<Integer> evenNumbers = numbers.stream()  
.filter(num -> num % 2 == 0)  
.collect(Collectors.toList());
  • String.format 拼接字符串

String s1 = "Hello";  
String s2 = " World";  
String s = String.format("%s%s", s1, s2);
  • 使用 default method 扩展接口

import java.time.LocalDateTime;  
public interface TimeClient {  
void setTime(int hour, int minute, int second);  
void setDate(int day, int month, int year);  
void setDateAndTime(int day, int month, int year, int hour, int minute, int second);  
LocalDateTime getLocalDateTime();  
}
  • 使用枚举替换常量

public class Main {enum Level { LOW, MEDIUM, HIGH }public static void main(String[] args) {Level myVar = Level.MEDIUM;System.out.println(myVar);}
}
  • 使用 try-with-Resource 管理资源

try (FileReader fileReader = new FileReader("example.txt");BufferedReader bufferedReader = new BufferedReader(fileReader)) {String line = bufferedReader.readLine();// Process the file
} catch (IOException e) {// Handle the exception
}

SpringBoot Webflux vs Vert.x: Performance comparison for hello world case | Tech Tonic

URL: https://medium.com/deno-the-complete-reference/springboot-webflux-vs-vert-x-performance-comparison-for-hello-world-case-41a6bd8e9f8c

本文对比了 SpringBoot Webflux 和 Vert.x 的性能对比

以下是两个框架写的压测接口:

package hello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.reactivestreams.Publisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import reactor.core.publisher.Mono;@SpringBootApplication
@EnableWebFlux
@Controller
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class);}@GetMapping("/")@ResponseBodypublic Publisher<String> handler() {return Mono.just("Hello world!");}
}// Vert.x
package com.example.starter;  import io.vertx.core.AbstractVerticle;  
import io.vertx.core.Promise;  
import io.vertx.core.http.HttpServer;  
import io.vertx.ext.web.Router;  public class MainVerticle extends AbstractVerticle {  @Override  public void start(Promise<Void> startPromise) throws Exception {  HttpServer server = vertx.createHttpServer();  Router router = Router.router(vertx);  router.get("/").respond(ctx -> ctx  .response()  .putHeader("Content-Type", "text/plain")  .end("hello world!"));  server.requestHandler(router).listen(3000);  }  
}

最后直接看对比结果吧:1cc4bec152aa2a9aa9120153ce5264ab.png5db567353c27ddf6a9cc1d84d8a1eeed.png46ab95ff7adfa1f072d790c788c54552.png最终作者根据一个计算公式得出两个框架的得分,规则如下:

  • 差距小于 5% 不得分

  • 5~20 得 1 分

  • 20~50 得两分

  • 大于 50,得三分2b9f4368c60cc3ba0d94e9c9450940ba.png最终是 Vert.x 得分超过 Webflux 55%⬆️

不过个人觉得压测结果再好,套上业务后,比如一个接口查询了多个后端服务,后端服务有依赖于多个数据库,最终出来的 RT 大家都差不多。

除非是某些对性能极致要求的场景,比如实时数据分析、物联网中间件等和直接业务不太相关领域。

它的底层依然是 Netty,但比 Netty 提供了跟易用的 API。

Git Cherry Pick Examples to Apply Hot Fixes and Security Patches — Nick Janetakis

URL: https://nickjanetakis.com/blog/git-cherry-pick-examples-to-apply-hot-fixes-and-security-patches?ref=dailydev

讲解了 git cherry-pick 的作用,什么时候该用,什么时候不用。

举个例子:一些大型的开源项目往往都会有一个主分支,同时维护了不同版本的子分支,有些用户可能就会一直使用一些长期维护的子分支,比如 v2.1.0 \ v2.3.0

但对于大部分的开发者来说主要会维护主分支,也会在主分支上推进一些新功能,这些新功能不一定会同步到上述提到的两个老版本中。

但对于一些安全漏洞,重大 bug 等是需要同步到这些子分支的,但又不能把一些不兼容的新特性同步到子分支中。

此时就可以使用  cherry-pick 这个功能,只将某一个提交给 pick 到目标分支中。

# Cherry pick more than 1 SHA.
#
# This could be useful if you have a handful of commits that you want to bring over,
# you'll likely want to order them with the oldest commit being first in the list.
git cherry-pick <SHA> <SHA># Edit the git commit message for the newly applied commit.
#
# This could be useful if want to customize the git commit message with extra context.
git cherry-pick <SHA> --edit# Avoid automatically creating the commit which lets you edit the files first.
#
# This could be useful if you need to make manual code adjustments before committing,
# such as applying a security patch which uses an older library with a different API.
git cherry-pick <SHA> --no-commit

文章链接:

  • https://blog.canopas.com/golang-14-shorthand-tricks-you-might-not-know-8d8d21954c49

  • https://blog.stackademic.com/boost-your-java-skills-12-must-know-programming-tips-for-java-developers-34f8381ec431

  • https://medium.com/deno-the-complete-reference/springboot-webflux-vs-vert-x-performance-comparison-for-hello-world-case-41a6bd8e9f8c

  • https://nickjanetakis.com/blog/git-cherry-pick-examples-to-apply-hot-fixes-and-security-patches?ref=dailydev

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM中的Prompt提示

简介 在LLM中&#xff0c;prompt&#xff08;提示&#xff09;是一个预先设定的条件&#xff0c;它可以限制模型自由发散&#xff0c;而是围绕提示内容进行展开。输入中添加prompt&#xff0c;可以强制模型关注特定的信息&#xff0c;从而提高模型在特定任务上的表现。 结构 …

hive数据仓库工具

1、hive是一套操作数据仓库的应用工具&#xff0c;通过这个工具可实现mapreduce的功能 2、hive的语言是hql[hive query language] 3、官网hive.apache.org 下载hive软件包地址 Welcome! - The Apache Software Foundationhttps://archive.apache.org/ 4、hive在管理数据时分为元…

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目&#xff0c;自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 &#xff1a;Ho1aAs 版权属于&a…

【C++】 C++11 新特性探索:decltype 和 auto

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用&#x1f6ec; 结论&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 C11 引入了一些强大的新特性&#xff…

LVS负载均衡群集,熟悉LVS的工作模式,了解LVS的调度策略以及ipvsadm工具的命令格式

目录 一、什么是群集 群集的作用&#xff1a; 群集的目的是什么 根据群集所针对的目标差异&#xff0c;可分为三种类型 负载均衡群集&#xff08;LBC&#xff09;load balance cluster 高可用群集&#xff08;HAC&#xff09;high availability cluster 高性能运算群集&a…

MAMOS蓝图: 打造自己的质量工程

针对团队中存在的问题&#xff0c;构造MAMOS蓝图&#xff0c;从而以系统化的方式识别并解决问题。本文将针对减少等待时间这一问题举例说明MAMOS蓝图的组成和使用方式。原文: MAMOS Blueprint: Build your own for Quality at Speed 很难完全摆脱等待时间。 我认为没有必要争论…

在线二进制原码,补码,反码计算器

具体请前往&#xff1a;在线原码/反码/补码计算器

阅读笔记——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

【参考文献】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。…

【Spring】10 BeanFactoryAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将专注于介绍一个重要的接口 BeanFactoryAware&#xff0c;探…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DK-DEV-AGI027RBES 编程/烧录/烧写/下载步骤

DK-DEV-AGI027RBES 的编程步骤&#xff1a; 将 USB 电缆插入 USB 端口 J8&#xff08;使用 J10 时&#xff0c;DIPSWITCH SW5.3&#xff08;DK-DEV-AGI027RES 和 DK-DEV-AGI027R1BES&#xff09;和 SW8.3&#xff08;DK-DEV-AGI027RB 和 DK-DEV-AGI027-RA&#xff09;应关闭&a…

内网穿透工具,如何保障安全远程访问?

内网穿透工具是一种常见的技术手段&#xff0c;用于在没有公网IP的情况下将本地局域网服务映射至外网。这种工具的使用极大地方便了开发人员和网络管理员&#xff0c;使得他们能够快速建立起本地服务与外部网络之间的通信渠道。然而&#xff0c;在享受高效快捷的同时&#xff0…

Linux系统vim,gcc,g++工具使用及环境配置,动静态库的概念及使用

Linux系统vim&#xff0c;gcc&#xff0c;g工具使用及环境配置&#xff0c;动静态库的概念及使用 1. Linux编辑器-vim的使用1.1 vim的基本概念1.2vim的基本操作1.3vim正常模式命令集1.4vim末端模式命令集1.5简单的vim配置 2.Linux编译器-gcc/g的使用2.1 准备阶段2.2gcc的使用2.…

Flutter在Android Studio上创建项目与构建模式

一、安装插件 1、前提条件&#xff0c;安装配置好Android Studio环境 2、安装Flutter和Dart插件 Linux或者Windows平台&#xff1a; 1&#xff09;、打开File > Settings。 2&#xff09;、在左侧列表中&#xff0c;选择"Plugins"右侧上方面板选中 "Market…

C# OpenVINO 直接读取百度模型实现图片旋转角度检测

目录 效果 模型信息 代码 下载 C# OpenVINO 直接读取百度模型实现图片旋转角度检测 效果 模型信息 Inputs ------------------------- name&#xff1a;x tensor&#xff1a;F32[?, 3, 224, 224] --------------------------------------------------------------- Ou…

【vmware】虚拟机固定ip和网络配置

废话不多说&#xff0c;直接干货 桥接模式不多说&#xff0c;动态ip&#xff0c;一般一键下一步就可 本文主要讲 NAT模式下 静态IP设置及公网问题 创建虚拟机 查看ip ip a 或者 ifconfig 设置静态ip 1.设置虚拟机网络 点击上图中NAT设置&#xff0c;配置网关IP&#xff08;vmv…

flume:Ncat: Connection refused.

一&#xff1a;nc -lk 44444 和 nc localhost 44444区别 nc -lk 44444 和 nc localhost 44444 是使用 nc 命令进行网络通信时的两种不同方式。 1. nc -lk 44444&#xff1a; - 这个命令表示在本地监听指定端口&#xff08;44444&#xff09;并接受传入的连接。 - -l 选项…

docker-compose的介绍与使用

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml&#xff0c;其中定义的每个服务可以通过 image 指令指定镜像或 build 指令&#xff08;需要 Dockerfile&#xff09;来自动构建。 注意如果使用 build 指令&#xff0c;在 Dockerfile 中设置的…

安装文本-图像对比学习模型CLIP的方法

文章目录 一、安装clip的误区二、安装clip的官方方法三、离线安装clip的方法1.下载clip包并解压2.然后激活自己的conda环境2.安装clip 一、安装clip的误区 安装clip最容易犯的错误就是直接使用pip安装clip包&#xff0c;如下&#xff1a; pip install clip这里需要注意的是&a…