技术阅读周刊第🔟期
技术阅读周刊,每周更新。
历史更新
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
同时声明和初始化变量
1 | // Long form |
声明和初始化多个变量
1 | // Long form |
交换变量
1 | a, b := 1, 2 |
Defer 函数调用
1 | // Long form |
检测 Map 中的数据是否存在
1 | // Long form |
使用下标和值迭代切片
1 | // Long form |
错误检测
1 | // Long form |
创建一个变量的指针
1 | // Long form |
匿名函数
1 | // Long form |
创建和初始化 Map
1 | // Long form |
声明多个常量
1 | // Long form |
Java Mastery Unleashed: 12 Essential Tips Every Developer Must Embrace
一些常用的 Java 技巧
善用 Lambda 表达式
1
2
3
4
5
6
7
8
9// 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
1
2Optional<String> maybeName = Optional.ofNullable(person.getName());
String name = maybeName.orElse("Unknown");使用 stream 简化集合操作
1
2
3List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());String.format 拼接字符串
1
2
3String s1 = "Hello";
String s2 = " World";
String s = String.format("%s%s", s1, s2);使用 default method 扩展接口
1
2
3
4
5
6
7import 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();
}使用枚举替换常量
1
2
3
4
5
6
7public class Main {
enum Level { LOW, MEDIUM, HIGH }
public static void main(String[] args) {
Level myVar = Level.MEDIUM;
System.out.println(myVar);
}
}使用 try-with-Resource 管理资源
1
2
3
4
5
6
7try (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
本文对比了 SpringBoot Webflux 和 Vert.x 的性能对比
以下是两个框架写的压测接口:
1 | package hello; |
最后直接看对比结果吧:
最终作者根据一个计算公式得出两个框架的得分,规则如下:
- 差距小于 5% 不得分
- 5~20 得 1 分
- 20~50 得两分
- 大于 50,得三分
最终是Vert.x
得分超过Webflux
55%⬆️
不过个人觉得压测结果再好,套上业务后,比如一个接口查询了多个后端服务,后端服务有依赖于多个数据库,最终出来的 RT 大家都差不多。
除非是某些对性能极致要求的场景,比如实时数据分析、物联网中间件等和直接业务不太相关领域。
它的底层依然是 Netty,但比 Netty 提供了跟易用的 API。
Git Cherry Pick Examples to Apply Hot Fixes and Security Patches — Nick Janetakis
讲解了 git cherry-pick 的作用,什么时候该用,什么时候不用。
举个例子:
一些大型的开源项目往往都会有一个主分子,同时维护了不同版本的子分支,有些用户可能就会一直使用一些长期维护的子分支,比如 v2.1.0 \ v2.3.0
但对于大部分的开发者来说主要会维护主分支,也会在主分支上推进一些新功能,这些新功能不一定会同步到上述提到的两个老版本中。
但对于一些安全漏洞,重大 bug 等是需要同步到这些子分支的,但又不能把一些不兼容的新特性同步到子分支中。
此时就可以使用 cherry-pick 这个功能,只将某一个提交给 pick 到目标分支中。
1 | Cherry pick more than 1 SHA. |
文章链接:
- 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
#Newletters