技术阅读周刊第十期

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.mzph.cn/news/230888.shtml

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

相关文章

LLMs 玩狼人杀:清华大学验证大模型参与复杂交流博弈游戏的能力

作者&#xff1a;彬彬 编辑&#xff1a;李宝珠&#xff0c;三羊 清华大学研究团队提出了一种用于交流游戏的框架&#xff0c;展示了大语言模型从经验中学习的能力&#xff0c;还发现大语言模型具有非预编程的策略行为&#xff0c;如信任、对抗、伪装和领导力。 近年来&#x…

设计模式——迭代器模式

引言 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。 尽管如此&#xff0c; 集合只是一组对象的容器而已。 大部分集合使用…

Spring 原理(一)

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点 轻量级控制反转面向切面容器框架集合 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring 常用注解 bean …

达索系统SOLIDWORKS 2024 云服务新功能

“云服务 是基于互联网的相关服务的增加、使用和交互模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网&#xff0c;后来也用来表示互联网和底层基础设施的抽象。云服务指通过网络以…

小贴士:知道方程的解如何求通解

1.思路&#xff1a;认知&#xff1a;题中的所有解都是特解&#xff0c;解的形式为kxb 1.如何求通解&#xff1a;a1a2是题目中提供的条件&#xff0c;根据认知它们的和是2b&#xff0c;所以b等于a1a3除2&#xff0c;而有一条认知&#xff0c;为两个特解的差为通解向量&#xff0…

python绘图总结

1 二维图像 1.1 二维曲线 plot(x, y, ls"-", lw1.5, labelNone)x, y&#xff1a;横坐标和纵坐标ls&#xff1a;颜色、点标记、线型列表&#xff0c;如 ls‘r*-’ 表示红色实线、*形点&#xff0c;ls‘g.’ 表示绿色散点lw&#xff1a;线宽度label&#xff1a;线标签…

波奇学Linux:进程等待

僵尸进程(Z状态)无法被kill指令杀死&#xff0c;通过进程等待杀掉它&#xff0c;解决内存泄漏问题&#xff08;进程处于僵尸态&#xff0c;仍然维护pcb结构体来解决问题&#xff09; 通过进程等待&#xff0c;获得进程退出情况 wait回收僵尸态进程 我们可以看到进程由五秒后子…

php hyperf 读取redis,存储到数据库

redis中排行榜中的数据 public function execute(string $date){$query ChannelConfig::query();$query->where(module_name, rank_reward);$rewardData $query->first();$rewards [];if( $rewardData ){$rewardContents $rewardData->content;foreach ($rewardC…

VMware----基于 VMware 玩转 CentOS 虚拟机创建、克隆以及配置后台运行

查看原文 文章目录 一、安装 Vmware二、创建 CentOS7 系统的虚拟机三、克隆虚拟机四、设置虚拟机后台运行 一、安装 Vmware &#xff08;1&#xff09;打开VMware下载地址页面&#xff0c;滑动页面&#xff0c;找到如下界面&#xff0c;点击【下载】 &#xff08;2&#xff…

本地电商平台商业模式 同城实体店引流获客方法

本地电商平台的商业模式通常是基于在线市场交易的。这样的平台允许本地商家在其上发布商品信息&#xff0c;消费者可以在平台上选择购买&#xff0c;并直接向卖家付款。商家可以通过平台获得更广泛的市场覆盖和销售机会&#xff0c;同时消费者也可以享受更加便利和多样化的购物…

RPC(3):HttpClient实现RPC之GET请求

1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能&#xff0c;但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 H…

Neural Network——神经网络

1.feature reusing——特征复用 1.1 什么是特征复用 回顾我们之前所学习的模型&#xff0c;本质上都是基于线性回归&#xff0c;但却都可以运用于非线性相关的数据&#xff0c;包括使用了如下方法 增加更多的特征产生新的特征&#xff08;多项式回归&#xff09;核函数 在本身…

Spring IOC 原理(二)

Spring IOC 原理 概念 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系&#xff0c;利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上&#xff0c;还提供了 Bean 实例缓存、生命周期管理、 Bean 实…

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝&#xff0c;了解它们在内存上的区别&#xff0c;并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前&#xff0c;咱们先来看一个常见的情景&#xff0c;如下图&#xff1a; 大家觉得这是深拷贝还是浅拷贝&#xff0…

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心 前言一. Amazon Connect 介绍 &#x1f5fa;️二. Amazon Connect 使用教程 &#x1f5fa;️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可&#xff1b;3.在进入之后我们就…

【C++初阶】八、初识模板(泛型编程、函数模板、类模板)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】七、内存管理 &#xff08;C/C内存分布、C内存管理方式、operator new / delete 函数、定位new表达式&#xff09; -CSDN博客 目录 一 . 泛型编程 二 . 函数模板 函数模板…

使用ffmpeg将图片合成为mp4

首先在在图片文件夹输入cmd 这里确保已经安装ffmpeg并配置好环境变量。 然后这是我的文件夹目录&#xff1a; 将21张图片合成为mp4视频 这里使用如下命令&#xff1a; ffmpeg -framerate 1 -start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4 -framerat…

设计模式——中介者模式

引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框&#xff0c; 它由各种控件组成&#xff0c; 例如…

[渗透测试学习] Analytics - HackTheBox

文章目录 信息搜集漏洞利用内核提权 信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.233发现两个端口&#xff0c;22端口为ssh服务&#xff0c;80端口有http服务 尝试访问80端口&#xff0c;发现重定向到http://analytical.htb/并且无法访问 编辑/…

Java+Swing: 数据回显和修改功能的实现 整理14

1. 数据回显 其实数据回显就是为修改功能的实现做准备的 1.1 在MainView类中&#xff0c;创建一个方法获取选中行的id // 获取选中的行的idpublic int[] getSelectedRowIds() {int[] selectedRows mainViewTable.getSelectedRows();int[] ids new int[selectedRows.length];…