V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikulch
V2EX  ›  Java

好像很多写别的语言的都觉得 Java 又笨又重配置又难部署成本高,还有巨大的安全隐患

  •  
  •   mikulch · 2022-05-07 03:34:09 +08:00 · 7603 次点击
    这是一个创建于 691 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可能是以前 j2ee 那一套真的给大家留下了巨大的阴影吗。

    65 条回复    2022-05-10 10:46:07 +08:00
    billlee
        1
    billlee  
       2022-05-07 04:03:11 +08:00   ❤️ 3
    我觉得倒不是 j2ee 的问题,问题在 jvm 本身上。对于 adhoc 任务来说,java 就是又笨又重配置又难部署成本高。搞个 hello world 要分别装开发环境和运行环境,启动还要另外写 shell 脚本。综合了编译型语言和解释型语言的缺点。
    echo1937
        2
    echo1937  
       2022-05-07 07:33:32 +08:00 via iPhone   ❤️ 1
    所以到底是谁觉得又笨又重配置又难部署成本又高了?

    9 成的人没有写过 j2ee 项目,ssm 可不是 j2ee 。
    chendy
        3
    chendy  
       2022-05-07 08:01:15 +08:00
    好像很多发别的帖子的都觉得这个帖子又*又***又难**成本高,还有巨大**隐患
    建议移动到水区

    可能因为是从 ssh 那个时期开始接触的,感觉 java 的这套东西还挺好理解的,spring-boot 之后更好一些
    最大的问题还是内存使用,起步内存高,对小机器不友好,xmx 太低了也不太行,不太适合个人整活
    xuanbg
        4
    xuanbg  
       2022-05-07 08:29:22 +08:00   ❤️ 1
    又笨又重配置又难部署成本高,还有巨大的安全隐患?
    并不觉得 Java 笨重,语法确实稍显啰嗦,但好处是容易看明白啊。
    配置难是什么年代的事情了? Spring boot 了解下?
    部署成本哪里高了?都自动化了啊?
    巨大安全隐患说的是 log4j 么?其实像我就没有受到任何影响呢。
    buruoyanyang
        5
    buruoyanyang  
       2022-05-07 08:33:11 +08:00
    我们公司写 C 和 C++的大佬就是这么认为的,太吃内存,当初 Log4j 的漏洞,还特地发文章给我看。。。。
    murmur
        6
    murmur  
       2022-05-07 08:34:40 +08:00   ❤️ 1
    java 干企业开发还是挺好的,事越多的东西越适合 java ,你就一个简单的计数器啥的的确没必要 java
    Goooooos
        7
    Goooooos  
       2022-05-07 08:38:30 +08:00   ❤️ 8
    但这并不影响我用来赚钱
    bthulu
        8
    bthulu  
       2022-05-07 08:39:40 +08:00   ❤️ 1
    主要是吃内存, 并且没有内置模块, 稍微干点正儿八经的活, 就要引入 maven, 都上 maven 了, 那不得再整个 IDE? 这样一看, 是不是就很重了
    murmur
        9
    murmur  
       2022-05-07 09:21:07 +08:00   ❤️ 1
    @bthulu maven 其实挺好的,至少人家只专注拉 jar 包,npm 什么的乱七八糟 js 下载来,又是去下 bin 又是编译 dll 的
    nba2k9
        10
    nba2k9  
       2022-05-07 09:42:38 +08:00
    先问是不是
    sheeta
        11
    sheeta  
       2022-05-07 09:46:55 +08:00
    Java 就是内存占用太大,我一个 1c1g 的 do 机器跑了 PHP,MariaDB,Nginx,Redis
    storyxc
        12
    storyxc  
       2022-05-07 09:54:59 +08:00
    1.笨重是真的,适合搞中大型项目,自己整些小玩意儿是真的费劲,比如给朋友写个小工具,让别人运行还要把 jre 打过去,这就很扯淡了。。
    2.配置难、部署成本高这个并不认同,因为 spring 的加成,现在 Java web 的开发已经很简单了。
    srx1982
        13
    srx1982  
       2022-05-07 09:57:26 +08:00
    @murmur 确实,编译这个事搞疯我好几次
    hello2090
        14
    hello2090  
       2022-05-07 10:01:02 +08:00 via iPhone   ❤️ 2
    @buruoyanyang 大佬收入多少?年入 200 万以下就不要到处指指点点了,让干啥干啥毕竟养家要紧。
    WIN2333
        15
    WIN2333  
       2022-05-07 10:13:28 +08:00   ❤️ 1
    一个语言被吐槽的越多说明他越火,而且现在部署起来很方便哈,springboot 下并不需要写 shell ,直接打包成可执行文件./service.jar start 就行了,还能做成系统服务来启动
    vincent7245
        16
    vincent7245  
       2022-05-07 10:15:15 +08:00
    从天安门到西单,你走着就能过去,骑车稍微快一点,开车也可以但是不好停车,你非要修条铁路开高铁也不是不可以,就是麻烦点。甚至你为了能开飞机过去修个机场也行。
    pengtdyd
        17
    pengtdyd  
       2022-05-07 10:22:15 +08:00   ❤️ 3
    安全???谷歌工程师本周表示,Chrome 代码库中大约 70%的严重安全漏洞是内存管理和安全漏洞。而造成这种结果的不是 java ,而是 C++
    stephenxiaxy
        18
    stephenxiaxy  
       2022-05-07 10:25:20 +08:00
    很烦 xml
    mekingname
        19
    mekingname  
       2022-05-07 10:26:32 +08:00   ❤️ 2
    com/xxx/yyy/zzz/www/kkk/mmm/ddd/qqq.java

    我曾经见过一个项目,总共就只有 3 个.java 文件,结果项目嵌套了十几层文件夹。
    SimbaPeng
        20
    SimbaPeng  
       2022-05-07 10:43:11 +08:00
    @hello2090 200W 以上还搞技术本身就是个伪命题
    yixin026
        21
    yixin026  
       2022-05-07 10:43:27 +08:00
    java 确实感觉好难用,一个新手要开发 java,得配置 java,idea,idea 插件,maven 这一大堆东西,idea 还经常抽风,maven 不翻墙也经常连不上,偶尔遇见 eclipse 的老项目也是抓瞎,一旦使用稍微冷门点的东西比如 bazel 和 osgi,代码高亮跳转都要搞半天,而差不多的 c#,一个 vs 解决百分之 99 的问题..
    RainCats
        22
    RainCats  
       2022-05-07 10:48:01 +08:00   ❤️ 1
    @mekingname 这个难道不是使用者的问题吗,换什么语言都是这样
    mekingname
        23
    mekingname  
       2022-05-07 10:49:40 +08:00
    @RainCats Java 就鼓励这样深层嵌套文件夹。Java 程序员都被教坏了。
    liangkang1436
        24
    liangkang1436  
       2022-05-07 10:53:18 +08:00 via Android   ❤️ 1
    @mekingname 这不是 Java 的问题,这是写 Java 的人的问题
    windyboy
        25
    windyboy  
       2022-05-07 10:59:39 +08:00   ❤️ 1
    讲真我现在觉得 spring 全家桶基本上已经到达旧 j2ee 这么重的程度
    liuhuansir
        26
    liuhuansir  
       2022-05-07 11:00:09 +08:00   ❤️ 1
    @mekingname java 是鼓励把域名反过来当包名,啥时候鼓励深层嵌套了?
    zapper
        27
    zapper  
       2022-05-07 11:08:24 +08:00
    go/monthly
    ghost024
        28
    ghost024  
       2022-05-07 11:10:49 +08:00   ❤️ 1
    @mekingname 是 Java 导致的深层嵌套还是程序员自己喜欢深层嵌套啊,你别啥锅都往 Java 上面扣啊,你也可以平级搞很多个包啊,Java 也是 ok 的啊,而且本来就是一个 namespace 的问题,啥都是语言的问题呗。。。。。。
    seanthecat
        29
    seanthecat  
       2022-05-07 11:11:23 +08:00   ❤️ 1
    Java 本身的安全隐患比 C/C++小多了,至少没有指针就很难有各种内存漏洞。漏洞主要是在应用层,各种五花八门的框架提供了整套整套的功能,很难完全没有漏洞。但这不是 Java 的锅,不管什么语言搞一个 Java 这样的生态不见得能有更少的漏洞。
    libook
        30
    libook  
       2022-05-07 11:12:24 +08:00   ❤️ 3
    以前作为一个 Java 新手的感受是,学 Spring 那一套只能照猫画虎,站在层层抽象外无法看透内部原理,以至于自己无法理解自己写的代码,各种注解更加重了这种困惑;然后就是各种 PO/POJO/VO/BO/DAO/DTO ,反正不管写啥,先照着固定模式把这些“O”写一遍;最后就是终极大杀器——Tomcat 等一众容器,接手一个项目可能要花很多天才能在本地搭好一个可以跑的开发环境,各种依赖的版本兼容性需要跟同事打听才能了解到……最终的天花板就是 JVM 原理,我记得当时凡是 5 年以上经验的同事都人手一本 JVM 的书。

    后来我在想,Java 作为历史最悠久的技术栈之一,技术方案已经进化得非常成熟,但对于新手来说,可能还是得亲自走一走整个进化过程,才能理解为什么当前的 Java 是当前这个样子。但那样的话,也确实需要相当多的时间,来承载这个技术栈悠长的历史。

    当然我已经不用 Java 很多年了,也有耳闻 Java 依旧在进化中,比如当前顺应微服务潮流的解决方案,似乎对新手友好了很多。但 Java 技术栈似乎被其他语言抢先了一些宣传推广的机会,国内的技术发展模式跟海外很多地区有较大的区别,国内的技术宣传比较擅长贩卖焦虑,比如各种捧一踩一和取代论,而国内的开发者普遍有从众心理和“被淘汰”焦虑,以此催生出了“面向简历开发”等现象,最终导致一些宣传工作做得很好的技术栈得到了大量的推广和应用,甚至一些本来跑得好好的项目也会被强行换一些“新潮”的技术栈重写。

    一门技术要想在开发者中站稳脚,就得集思广益(开放)、快速迭代,顺应业务需求变化、生产需求变化、开发模式变化,我不清楚 Java 技术栈是否是这样的,如果是的话,就一定会长久发展下去的。
    hello2090
        31
    hello2090  
       2022-05-07 11:19:58 +08:00 via iPhone   ❤️ 1
    @SimbaPeng 200 万以下搞技术的都是混口饭吃,就别挑肥拣瘦了。
    banmuyutian
        32
    banmuyutian  
       2022-05-07 11:28:14 +08:00   ❤️ 3
    各种"O"和路劲 /文件夹嵌套是架构设计(开发者)的问题。。
    jdk 半年一个版本迭代,但很多人仍停留在 JDK8 ,这个也是开发者的问题
    说到 Java ,上来就是 Spring 全家桶的各种配置,能不重么?就好像说去学 JS ,一上来就是 Vue ,React ,NPM ,WEBPACK 啥的一大堆不一样又笨又重?
    每门语言有不同特性适合不同用途,老怼产品经理搞不清需求,程序员也要明白自己需求才对啊,反正我的需求就是赚钱,用 Java 不妨碍我赚钱
    BBCCBB
        33
    BBCCBB  
       2022-05-07 11:37:31 +08:00   ❤️ 2
    @windyboy 你也可以不用全家桶, 就用他核心的 ioc, aop, 其他各种组件自己写轻量级的.
    NoKey
        34
    NoKey  
       2022-05-07 12:04:09 +08:00
    @mekingname 这个是典型的套着模板写代码,如果就是很简单的功能,完全不用搞很多层嵌套,开发者自己的问题
    lmshl
        35
    lmshl  
       2022-05-07 13:16:34 +08:00   ❤️ 1
    我们写 Scala 只觉得 Java 笨,但大家都在 JVM 上跑,一样的重,配置难,部署成本高。
    但安全隐患是真的,语言弱鸡只能依赖运行时反射,你看 CVE 列表是不是有一半漏洞都是因为 Java 笨,不够灵活动态,开发着自作聪明的反射,动态解释引入的漏洞?😏
    MakHoCheung
        36
    MakHoCheung  
       2022-05-07 13:18:24 +08:00   ❤️ 1
    @storyxc 假如你这个小工具换成 JS 或者 Python 还不是一样,可能自包含做得还不如 Java ,需要你朋友自个儿装 NodeJS 或者 Python
    zinwalin
        37
    zinwalin  
       2022-05-07 13:20:13 +08:00 via iPhone
    jvm 的问题
    zinwalin
        38
    zinwalin  
       2022-05-07 13:20:50 +08:00 via iPhone
    @xuanbg 自动化出问题呢,难调试
    zinwalin
        39
    zinwalin  
       2022-05-07 13:22:15 +08:00 via iPhone
    @sheeta 再来个搜索,酸爽
    461da73c
        40
    461da73c  
       2022-05-07 13:29:56 +08:00
    @xuanbg 我那个年代 J2EE 太流行,各种配置要吐血,后来的什么 SprintBoot 都没碰过,不搞 JAVA ,舒畅太多。
    SuperManNoPain
        41
    SuperManNoPain  
       2022-05-07 13:36:51 +08:00   ❤️ 1
    先问是不是
    ffxrqyzby
        42
    ffxrqyzby  
       2022-05-07 13:43:25 +08:00   ❤️ 1
    是, 但是 java 工程化高, 更适合多人合作
    shyangs
        43
    shyangs  
       2022-05-07 14:47:57 +08:00
    @MakHoCheung @storyxc

    小工具包一個 JDK8 200MB 分發太不爽了.
    Java 不適合做小工具.

    PageFileUsageMonitor[1] 用 VB6 寫的,60KB.
    NoClose[2] 用 AutoHotkey 寫的,500KB.

    小工具就該用 VB ,AutoHotkey 寫,免安裝,單一執行檔.


    [1] http://www.standards.com/ThisAndThat/PageFileUsageMonitor.html
    [2] https://www.dcmembers.com/skrommel/download/noclose/
    liprais
        44
    liprais  
       2022-05-07 14:54:29 +08:00
    java 跑起来还不简单....
    encro
        45
    encro  
       2022-05-07 15:10:17 +08:00
    @pengtdyd

    但是为什么 Google 工程师和 firefox 工程师为什么不用 java 而要用 C++和 Rust 呢?


    这个也许就能回答 OP
    clf
        46
    clf  
       2022-05-07 15:35:02 +08:00   ❤️ 1
    代码是工具,Java 适合 web 业务; python 适合做小工具……不同需求使用合适的语言是一个程序员应该有的能力吧。

    当然咯,如果别人限制你使用的语言了,也没啥好讨论的。

    程序员的核心是逻辑设计与算法设计,还有对业务需求的理解,最后再加上对编程语言工具的运用。
    Evilk
        47
    Evilk  
       2022-05-07 16:31:57 +08:00
    PHP 呢?
    macha
        48
    macha  
       2022-05-07 16:35:36 +08:00   ❤️ 1
    Java 适合一个水平高的,带一帮水平一般的干活。
    C++的话,就要一帮水平高的。
    yedanten
        49
    yedanten  
       2022-05-07 16:40:35 +08:00 via Android
    确实笨重,难写,部署恶心。最后那个巨大安全隐患不至于,还有个 PHP 垫底呢,养活了一代渗透测试员呢( doge
    xuanbg
        50
    xuanbg  
       2022-05-07 16:41:06 +08:00
    @zinwalin 自动化部署还要调试个啥?机器不坏就不会出问题。你以为运维也和你的代码一样被产品经理要求天天改来改去啊。
    zhangchongjie
        51
    zhangchongjie  
       2022-05-07 16:41:42 +08:00
    @buruoyanyang 老鄙视链了
    Huelse
        52
    Huelse  
       2022-05-07 16:55:01 +08:00
    @mekingname #19 嵌套是程序员和项目规划的问题啊,你完全可以平铺写
    weak
        53
    weak  
       2022-05-07 16:58:17 +08:00 via iPhone
    引战帖
    mekingname
        54
    mekingname  
       2022-05-07 17:10:25 +08:00   ❤️ 2
    ![]( https://kingname-1257411235.cos.ap-chengdu.myqcloud.com/20220507165820.png)
    ![]( https://kingname-1257411235.cos.ap-chengdu.myqcloud.com/20220507170149.png)

    在 Github 上面,随便用一个关键词找 Java 代码,就会发现全都是这种嵌套十几二十层的结构。

    如果只有一两个项目这样写,我可以说是程序员的问题。但是几乎所有 Java 项目都是这样组织代码的,只能说明是 Java 生态圈的问题,Java 的开发模式就鼓励这样写。而且,Github 上面,绝大部分的项目代码量连 500 行都没有,但是文件夹嵌套了几十层。

    连个代码文件组织都搞得这么繁杂冗余,窥一斑而见全豹,Java 这个语言,无论是语言特性,还是生态环境,还是开发模式,都又笨重,成本又高,部署又麻烦。

    楼上有些人还拿 spring 来说事情。很多搞微服务的人,用 Spring 来做微服务,真正的业务代码只有十几行,结果要用 Spring 这么重的框架。用一个非常『笨重』的框架来搞『微』服务,简直是讽刺。他们还沾沾自喜,觉得 Spring 解放了生产力,提高了开发效率。真是好笑,最提高开发效率的事情,难道不是抛弃 Java 吗?

    @Huelse
    @NoKey
    @ghost024
    @liuhuansir
    @liangkang1436
    darkengine
        55
    darkengine  
       2022-05-07 17:28:30 +08:00
    笨重这点没得洗,撸的三年腾讯云🐔儿跑几个 go 服务都没啥问题,java 的 ssh 那套起两个,内存就不够了
    kett
        56
    kett  
       2022-05-07 17:36:47 +08:00
    我觉得我们公司的业务量根本用不着上 Java ,但是 Java 招人好招,上手就能糊代码。
    kingjpa
        57
    kingjpa  
       2022-05-07 17:52:48 +08:00
    编程语言和普通语言一样 很容易先入为主。

    习惯了脚本语言 php/js ,任何静态语言都觉得别扭,写变量还要定义类型,脱裤子放 p
    习惯了静态语言,任何脚本语言都觉得糟糕,没有规矩没有约束乱写

    先学中文会觉得中文很美,古事宋词,英文枯燥单一
    先学英文会觉得中文很晦涩难懂,莫名其妙。

    实际上 php java go node 写一个应用 没有啥本质的区别,就是单纯的语法不同而已
    haah
        58
    haah  
       2022-05-07 17:57:03 +08:00
    没人拦着你用 C/C++ 呀!
    dzdh
        59
    dzdh  
       2022-05-07 18:00:57 +08:00
    对,医院里的人都有病。
    liuhuansir
        60
    liuhuansir  
       2022-05-07 18:20:12 +08:00
    @mekingname 你的截图里 src/main/java 这三层是 maven 的项目结构,跟 Java 本身又没关系,去掉域名的三层,还剩 4 层,也不算很离谱吧?
    Sh4p
        61
    Sh4p  
       2022-05-07 18:32:41 +08:00   ❤️ 1
    1. JVM 在 o11y 上有天然的优势。如果换一套 practice / 换一个 vendor ,你就知道别的语言有多痛苦了。没有 wire ,probe 要不要 dev 自己改?没有 agent ,SRE 要不要自己出苦工?

    用 Spring 无论是 dev 还是 SRE 只需要把全家桶里那些事实规范照着一引入就好了。

    2. 对研发来说,我自己体验的部署成本取决于服务发现(不要从 ip 开始让我啥都自己写) / 配置方式(自己写一屁股 yaml placeholder 还是热配置中心) / 部署平台(能不能让我点点点就完事)的成熟度。跟语言没啥关系。

    3. 开发效率取决于能不能方便切分「可以乱写的部分」和「不能乱写的部分」,并规整好它们的依赖。C++我没写过,不敢乱说。就 C 和 go 这种语言的 module 和依赖管理,光是想到一下头就在疼了。
    codefun666
        62
    codefun666  
       2022-05-08 08:07:11 +08:00
    Java 太重了,部署也很麻烦。如果追求性能,用 C/C++;追求开发效率用 Python(Python 也可以做复杂业务)。

    举个例子,现在优秀的开源项目用 Java 不多了,因为开发效率低,灵活性不够。
    afewok
        63
    afewok  
       2022-05-08 15:25:32 +08:00
    java ,是不是很久没有出现新鲜的好玩的开源项目了?大部分都是八股文或者旧酒新瓶
    Sh4p
        64
    Sh4p  
       2022-05-09 23:30:10 +08:00 via iPhone
    @afewok 我第一时间想到的就是 Pulsar
    james122333
        65
    james122333  
       2022-05-10 10:46:07 +08:00
    @mekingname

    java 本身、jvm 就不讲了 重点 spring 那一套 基本上都可以更简单的实现 灵活性可维护性都可以很好 一堆人还把 spring 当成宝 甚至熟悉一些稍微封装就能达成一样功能的特色就觉得高人一等然后面试用来洗脸...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3500 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.