前话
伴随着行业的不景气,无论是前端工程师还是服务端工程师都收到了不小的影响。当然,我也听说了一些有意思的梗。
- "前端已死"的"谣言";
- 大厂的"开猿节流"、"降本增笑"以及屡次的宕机的故事;
- Java沦落到语言排行榜第四位;
- 某公司对员工"先降薪"再"裁员"的骚操作,可以少付好多钱;
- 某公司领导带头离职后消失,帮助公司变相裁员;
- 某公司将正式员工转为外包人员,变相裁员;
- 某公司和正式员工重新签订合同,将基本工资调低,其他的算成绩效工资;
- 某公司......
让我想到了"群魔乱舞"这个词语。
Java能做AI项目么?
行业在变化,编程语言也在变化,只不过我们所看到的可能只有Java8和spring。
其实,在2020年,Oracle
已经开源了Java
机器学习库Tribuo
,这是一个开源ML
库。它可以从其他系统和语言部署模型,并提供了指向ONNX Runtime
、TensorFlow
和XGBoost
的接口。其中,对 onnx
模型的支持允许在 Java
中部署一些 Python
软件包(例如 pytorch
)训练的模型。
当然,撼动不了python的地位。
Java版本
其实JDK21的虚拟线程还是不错的,如果激进一些,直接上JDK21也是不错的。现在用JDK8的项目也在减少了,我在新项目中使用的技术栈也很少考虑JDK8,个人常用的技术栈如下:
- JDK17 + Quarkus + PG;
- JDK17 + Quarkus Reactive + PG;
- JDK21(虚拟线程) + Quarkus + PG;
- JDK21(虚拟线程) + Vert.x + PG;


构建工具
还是以Maven为主。

IDE
以IntelliJ为主。

主流数据库
我更喜欢PG。

中国地区更喜欢MYSQL。
PHP、JAVA的程序员喜欢MYSQL。 Rust、GO的程序员更喜欢PG。
性别
程序猿远比程序媛多,这在服务端很明显。

AI 助手
AI助手已经不是一个罕见的功能了,而使用AI成为一项技能。



云开发

使用的操作系统
Window还是主流。

移动平台

代码质量管理

Java报告
读了一些行业报告,主要是关于JAVA的,主要总结出几点
- Java仍然是企业应用的主力军;
- Java应用的现代化改造是重中之重;
- Java应用正在往云原生迁移;
- 技术栈不断发展;
其中关于技术栈如下

我个人比较倾向于Quarkus、Vert.x这类技术,对于全栈的Vaadin Flow
不太感兴趣,而且国内来说,其实前后端分离还是主流。
当然,我们也要晓得Vaadin Flow
也是比较受国外程序喜欢的全栈框架,写法贴一下,有兴趣的可以感受下。
java
package com.example.application.views.main;
import com.vaadin.flow.component.Key;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route;
@Route("")
public class MainView extends VerticalLayout {
public MainView() {
VerticalLayout todosList = new VerticalLayout();
TextField taskField = new TextField();
Button addButton = new Button("Add");
addButton.addClickListener(click -> {
Checkbox checkbox = new Checkbox(taskField.getValue());
todosList.add(checkbox);
});
addButton.addClickShortcut(Key.ENTER);
add(
new H1("Vaadin Todo"),
todosList,
new HorizontalLayout(
taskField,
addButton
)
);
}
}