关于 Java 很重有感

2022-05-10 11:20:45 +08:00
 Bingchunmoli
  1. 感觉很多人对 java 还停留在 j2ee 时代,不过 java 还在 jdk 还在 1.8 ,就不需要谈了。
  2. 今天写前端突然发现前端的路径也是他们俗称的臭长,明明一个 model/LoginInfo.ts 就能创建为 api/interface/LoginInfo/index.ts 特别是 index.js index.ts 都是创建文件单一个 index 明明如果不是多个就叫 router.ts 就好了嘛,不知道有什么特殊的吗。
  3. 我觉得有一句话我挺认同的,路径长,一个是便于管理(很多写路径规范吧,或者跟着教程学的就是这样),一个是和语言无关,和写代码的人有关。毕竟还有的人接口前面带 I 有的人不带的。没有对错之分。
13364 次点击
所在节点    程序员
142 条回复
dcsuibian
2022-05-10 13:26:28 +08:00
换语言对于”历史包袱“指标不治本,就是下一次轮回而已
2NUT
2022-05-10 13:39:24 +08:00
@wolfie #4 别的语言为什么没采用这种方式呢?
pengtdyd
2022-05-10 13:42:06 +08:00
为啥没人说 C 很重呢?
cheng6563
2022-05-10 13:57:56 +08:00
@statumer Java 又没协程,把 servlet 和 jdbc 丢掉又有什么用?常规的 curd 业务代码换用 vert.x 那套来写不得花 3 倍时间?
Chinsung
2022-05-10 14:00:01 +08:00
@billlee #19 叕叕叕看到有人吹 NIO 了,NIO 固然厉害,但是建议楼主了解 NIO 原理和 netty 就行了,至于说 JDBC 因为同步阻塞不用的更是有点牛,大部分复杂点的业务都是要大量 sql 的,你不会把依赖上下文的 sql 写回调里或者手动 block 吧,不会有人喜欢这么写业务逻辑吧,不会吧不会吧。spring 自己都推不动 spring boy 用 spring reactive ,咋办呢?
Vegetable
2022-05-10 14:06:24 +08:00
人家是 src/api/interface/LoginInfo/index.ts
java 是 src/main/java/com/example/api/services/LoginInterface.java ,旁边还有一个 LoginInterfaceImple.java

前端就是再长也长不过 java 啊
java 本身没什么,关键是写 JAVA 那些所谓的规范
statumer
2022-05-10 14:06:35 +08:00
@cheng6563 Java 提供不了这样的基础设施,Spring Boy 整不明白异步编程,综合起来可不就构成了 Java 性能差劲的印象么?
BeautifulSoap
2022-05-10 14:16:01 +08:00
最近学 Kotlin ,当我知道 Java 一个文件里只能定义一个公开类的时候,我是震惊的
dcsuibian
2022-05-10 14:19:20 +08:00
@pengtdyd 我之前也有这个疑问:Java 天天人人喊打,但 JavaScript 、C 、C++就没什么人提。
后来想明白了,js 之于浏览器、C 之于嵌入式、C++之于游戏基本上都是不可替代的(就是打不过),但 Java 之于后端不是。新出的语言又大多是上层的,是个语言都能写后端。因此人人都想 battle 一下。
但这么多年都没打下来,说白了就是 Java 确实好用罢了。
byte10
2022-05-10 14:22:30 +08:00
@billlee JDBC 同步阻塞是真的问题,会导致 NIO 无法被真正使用上来。如果想理解为何,可以看看我的那个教程。我的那个教程有一个 Nodejs 写的服务,如果你用 java 传统的同步阻塞去调用,那么性能很慢,用异步去调用就快很多了。我的那个视频讲解有讲为何 NIO 能做到无视 IO 时间,依然保持高水平的吞吐量。你也可以请教一下评论区的其他网友, 他们也是懂的。
Mohanson
2022-05-10 14:24:29 +08:00
本质是 OOP 的问题.

"以 OOP 设计为导向的语言的问题是每个变量都随身携带着全部隐含环境. 您想要一个香蕉, 但您得到的是一只拿着香蕉的猩猩, 甚至它背后的整个丛林." - Erlang 创造者 Joe Armstrong
nekoneko
2022-05-10 15:18:39 +08:00
@statumer #27 你说的这些跟 java 有什么关系呢, 异步编程 quarkus 就主打异步编程呀, spring 又有异步编程组件呀, reactor 跟语言又有什么关系呢? 是 java 没法实现 reactor 还是 java 没法实现 nio 了呢
billlee
2022-05-10 15:23:27 +08:00
@byte10 我觉得那个视频说的很对,我也认同阻塞会导致 NIO 失效。但 JDBC 是连接数据库的,数据库服务端还是同步阻塞线程模型啊,我们就算实现一个异步的数据库客户端,那还是大家一起在数据库服务器的线程池上排队。
lizhesystem
2022-05-10 15:32:09 +08:00
怎么天天有人讨论这种问题?
statumer
2022-05-10 15:37:32 +08:00
@nekoneko 我说的是 Spring Boy 没资格说 Java 不重,而不是 Java 本身很差。实际上 Java 性能很强,HotSpot JVM 的优化在 GC 语言里是顶尖水平,techempower 打榜日常前十。拜托先看明白我在说什么。
liy333
2022-05-10 15:50:21 +08:00
NIO 首先要区分是操作系统的 NIO ,还是 Java 的 NIO 。Java NIO ,N 表示 New ,它其实是 IO 多路复用。一般说的 NIO 是非阻塞 IO 。IO 多路复用一般都是使用 Reactor 模式实现,Java NIO 也是基于该模式。IO 多路复用是为了处理大量 IO 问题,比如一万个请求,用 BIO 需要一万个线程,IO 复用只需要几个线程。处理数据的效率不是它关心的,但为什么使用 IO 复用能提高接口的响应时间?因为原本用来处理连接的资源被节省下来用于处理数据。IO 复用只关心处理连接的效率即可,不要跟处理数据混为一谈。
Suddoo
2022-05-10 16:08:07 +08:00
@cheng6563 好消息,Java 支持纤程了

https://openjdk.java.net/jeps/425

现在已经 preview 了
heeeeeem
2022-05-10 16:08:39 +08:00
@TWorldIsNButThis 啊 这不是人蠢吗?你嘴巴吃布了吧
Chinsung
2022-05-10 16:25:35 +08:00
@statumer #35 啊确实,根据 idea 的统计,用 java 的里面基本还是 spring boot 和 tomcat 称王,说明全世界的 javaer 基本都是你嘴巴里不懂 NIO 的 spring boy
https://www.jetbrains.com/zh-cn/lp/devecosystem-2021/java/
java 厉害,但是 java 里最流行的框架 spring 不行,你不觉得你精神分裂吗?
不知道你用的什么完美语言,竟然都让你用出优越感了,我有点想学习下新语言了
byte10
2022-05-10 16:45:41 +08:00
@billlee 额,你不能这样的分析哦,你分析问题要看整体。至于 mysql 里面是怎么运行,你只要需要知道 mysql 能到多少的吞吐量就可以了,你要把 mysql 考虑成一个整体,它吞吐量是多少就说明 java 最大的吞吐量上限是多少。。。。关于”那还是大家一起在数据库服务器的线程池上排队“, 这个排队在 mysql 服务里面,对于客户端无所谓,客户端完全不关心你啥时候返回,客户端可以等 1 分钟都可以等得起。

换句话说,如果没有 JDBC-NIO 客户端,那么 Java 的 NIO 服务就无法用起来了,多线程依然会存在 java 服务中,如果 NIO 客户端,那么 java 就不用关注多线程了,它不需要考虑 mysql 的响应时间来调整线程数。不过 NIO 需要考虑背压,不然无脑的请求下游服务会出问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX