我可能遇到了假 Java 程序员 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qce7
V2EX    程序员

我可能遇到了假 Java 程序员

  •  
  •   qce7 2018-02-09 13:12:49 +08:00 9218 次点击
    这是一个创建于 2849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    忍不住来 v2 吐槽了,由于业务需要,我们部门和另一个部门的系统要做频繁的接口交互,但是,他们的接口有百分之几的概率会出险空指针异常,各种 504,更奇葩的还会出险访问 A 接口会返回 B 接口的数据。。

    这样的情况持续了大半年,年前任务不多昨天终于忍不住找到他们一个开发,帮他找到日志,定位到了一个存储 sql 数据的对象,对其引用居然是 static 的。。

    他们部门接近 10 个 java 程序员,项目上线这么久居然才发现,还是我这个其他部门的 phper 发现并给出解决方案的,觉得有点奇葩

    第 1 条附言    2018-02-09 13:59:26 +08:00
    语言之争没必要,我只是工作用 PHP,业余搞 Python。。Java 是好语言,只是和 PHP 有同样的问题就是使用者水平参差不齐,没有好的规范和开发流程什么系统到后期都是一坨翔
    第 2 条附言    2018-02-09 14:24:16 +08:00
    抱歉之前没说清楚,他们开发的是公司内部核心业务系统,这个问题发生在整个系统的数据查询类,所有接口都要调用这个对象,所以不是小问题,只是对于他们下面的人觉得这个问题不是自己造成的,是“框架问题”,他们老大对自己曾经写的东西又不会重新检查,我们提了这个问题提了半年都是敷衍了事~
    第 3 条附言    2018-02-10 10:55:43 +08:00

    我没有那边代码库权限,回忆了一下,情况差不多就是这样,大家瞻仰一下,刚看到代码时我的心情也是崩溃的

    public class SqlCore { public static SqlRes sqlRes = null; public static void query(String sql) { SqlCore.sqlRes = Db.excuse(sql); } // 后边还有各种static,非static方法,感觉那边分不清什么时候用static } public class XService { void main() { SqlCore sqlXX = new SqlCore(); String sql = "select * from tablename"; SqlCore.query(sql); SqlRes sqlRes = SqlCore.sqlRes; } } 
    67 条回复    2018-02-11 14:49:11 +08:00
    wxsm
        1
    wxsm  
       2018-02-09 13:16:19 +08:00   3
    少见多怪
    yulitian888
        2
    yulitian888  
       2018-02-09 13:17:47 +08:00
    这事程序员不背锅吧,架构师呢,代码审查呢,单元测试呢?
    3a3Mp112
        3
    3a3Mp112  
       2018-02-09 13:18:38 +08:00
    为什么不能引用 static?
    ai277014717
        4
    ai277014717  
       2018-02-09 13:20:48 +08:00
    @3a3Mp112 用 static 估计多线程时变量有了两种状态
    XinLake
        5
    XinLake  
       2018-02-09 13:23:50 +08:00 via Android
    在这样的公司有个可以预料的未来。

    问题解决了你可能揭别人的短,影响你的职业发展。
    问题没解决碰一鼻子灰。

    反正都是得罪人没收益的事情,楼主做法真是下策啊
    imnpc
        6
    imnpc  
       2018-02-09 13:24:23 +08:00
    应该是引用的条件 /参数 是动态的 根据传参来变动 然后他们直接写死了?
    zjsxwc
        7
    zjsxwc  
       2018-02-09 13:25:45 +08:00
    楼主不应该高兴吗,以后甩锅有人可以接了
    lfzyx
        8
    lfzyx  
       2018-02-09 13:30:33 +08:00   1
    java 程序员基本上是培训班出来的,这事挺正常的
    feverzsj
        9
    feverzsj  
       2018-02-09 13:32:41 +08:00
    java 码农这各群体,水平比较低是正常的
    3a3Mp112
        10
    3a3Mp112  
       2018-02-09 13:33:09 +08:00
    @qce7 楼主能不能说一下为什么不能引用 static
    winglight2016
        11
    winglight2016  
       2018-02-09 13:35:47 +08:00
    static 一般要和 final 联合使用,不然就会多线程会出问题
    qce7
        12
    qce7  
    OP
       2018-02-09 13:36:02 +08:00
    @yulitian888 代码审查,单元测试都不存在的,架构师有没有履行指责不知道。。因为并发才会出现问题,又是概率性的,在他们的内部系统里面让员工重新点击一下就可以
    @XinLake 你说的很有道理,之前我每天基本要花好多时间检查跟他们对接日志,手动修改数据库,浪费不少时间,总之就是咽不下这口气,还是年少气盛
    @ai277014717 @imnpc 写死全局共用一个静态对象属性存放所有查询结果,还在每次调用前初始化
    gxbb097528
        13
    gxbb097528  
       2018-02-09 13:41:54 +08:00
    类成员变量用不用 static 并发都会有问题的吧
    qce7
        14
    qce7  
    OP
       2018-02-09 13:43:17 +08:00
    @3a3Mp112 static 所标记的对象属性在全局共享,并发请求会相互覆盖,我的理解,不知道用 java 黑话咋说
    overhell
        15
    overhell  
       2018-02-09 13:44:24 +08:00
    话说我看到个做 8 年的 java 的 ,一样出现这样的问题 ,问题是他找半天还找不出问题。
    我用 Threadlocal 帮他包了一下,他还问我 threadlocal 是什么东西。。。

    java 程序员真的 10 个里面真的难找出 1,2 个稍微好的。。。或许不应该叫他们程序员 。。。
    choulinlin
        16
    choulinlin  
       2018-02-09 13:45:43 +08:00 via Android   1
    @winglight2016 多线程要用互斥锁 跟 final 有啥关系
    不都不要装好佬
    calming
        17
    calming  
       2018-02-09 13:47:49 +08:00
    开始黑 java 了?好吧,你们的语言都是最好的。
    overhell
        18
    overhell  
       2018-02-09 13:48:17 +08:00
    @choulinlin 他可能是觉得 final 的一般是基本类型 。。哈哈
    choulinlin
        19
    choulinlin  
       2018-02-09 13:54:34 +08:00 via Android
    事实上 java 码农还看不起 phper 呢
    没有完整异常体系啊
    低级啊
    连 class 都不需要啊
    错误难以找到啊
    没有好 ide 啊
    php 国内以前找工作的确很亏 都是 discuz phpwind 垃圾代码 没啥好工作 有些 java 码农反而一培训毕业就有 6 7k 那时 phper 毕业生才 2 3k
    php 的悲哀啊
    ppaapc
        20
    ppaapc  
       2018-02-09 13:54:48 +08:00
    这就是写这段代码的人水平太差,跟其他人有什么关系,一个内部系统谁没事还看同事的代码
    veelog
        21
    veelog  
       2018-02-09 13:57:57 +08:00 via iPhone
    phper 竟然还有权限看 java 代码呀
    yufpga
        22
    yufpga  
       2018-02-09 14:01:07 +08:00
    这个不单单是 java 程序员,现在很多程序员都有这个问题,代码写的不多,废话特多,不会 debug,出现问题全靠猜
    willakira
        23
    willakira  
       2018-02-09 14:01:31 +08:00   2
    @overhell
    ThreadLocal 用不好很容易 memory leak,一般直接加锁来共享 mutable 的 object,或者 static final immutable 的
    黑 Java 没啥必要,其他语言不好的程序员也是一抓一大把
    这里很明显是流程上的问题,既没有 Code review 也没有 unit test,想必也就没有 integration 和完整的部署流程,例如 canary release 之类的吧
    而且看样子对方那个组也没有 SLO/SLA 来保证对外服务的质量
    alamaya
        24
    alamaya  
       2018-02-09 14:08:05 +08:00
    @choulinlin 安全发布看一下
    overhell
        25
    overhell  
       2018-02-09 14:08:49 +08:00   1
    @willakira 感谢回复 , 只遇到过内存溢出 ,内存泄漏可以举个例子看下吗。
    KasonPasser
        26
    KasonPasser  
       2018-02-09 14:09:31 +08:00
    还有就是还有很多人都不会异常的处理,更是有的是捕获异常了都不处理。
    picasso250
        27
    picasso250  
       2018-02-09 14:14:13 +08:00
    你看,楼主发了一条,在我看来是实锤的.

    底下仍然一个:为什么不能 static?

    ???

    都出 bug 了,实际情况都在这里了,不管茴香豆的茴字有几种写法,这里肯定是不能用的.
    gardenia7
        28
    gardenia7  
       2018-02-09 14:19:49 +08:00
    @picasso250 问的应该是 用 static 会出什么具体的问题(比如被覆盖?有泄漏?)吧。。并不是说能不能用
    picasso250
        29
    picasso250  
       2018-02-09 14:22:07 +08:00
    @irisfor 是我激动了.

    从现象看:
    问 A 接口会返回 B 接口的数据

    分析:
    这个应该每个接口 new 一个才正确.(至少)
    sean328
        31
    sean328  
       2018-02-09 14:38:34 +08:00
    有这么黑 java 的吗,php 和 java 的 static 关键字的作用不一样吧,而且 java 对象引用使用 static 到底怎么了?
    overhell
        32
    overhell  
       2018-02-09 14:41:20 +08:00
    @willakira 感谢,其实点出来问题,我应该自己好好搜搜去看看的 ,麻烦兄台了。。
    cuebyte
        33
    cuebyte  
       2018-02-09 14:44:53 +08:00
    麻烦各位 phper 查下薪资统计再来黑 java,谢谢。
    quickma
        34
    quickma  
       2018-02-09 15:29:21 +08:00
    一个多线程问题而已,你只是遇到了工资没有你高的程序员呀。非要上升到语言的高度,拿衣服啊。
    th00000
        35
    th00000  
       2018-02-09 15:49:05 +08:00
    楼主这个问题看似是来吐槽的, 实际上已经发展为吐槽 java 这个语言有多 low 这个问题的讨论
    @overhell 这个同志连 java 程序员不算程序员这种话都说得出来, 我得问您高就啊? 说出来让我们乐呵乐呵
    orangeTop
        36
    orangeTop  
       2018-02-09 16:04:45 +08:00
    那大家都用什么语言啊
    Rickkkkkkk
        37
    Rickkkkkkk  
       2018-02-09 16:08:40 +08:00
    php 果然是最好的语言

    10 个里面 10 个都是大牛

    java 就不一样了, 10 个里面只有一个勉强能称呼为程序员

    @overhell
    luosuosile
        38
    luosuosile  
       2018-02-09 16:14:25 +08:00
    java 程序员都不算程序员了,那还有哪些程序员敢说自己是程序员?
    真觉得程序员这职业很高大上了?
    wfd0807
        39
    wfd0807  
       2018-02-09 16:16:57 +08:00
    最基础的知识都不会,却张嘴闭嘴设计模式、系统架构、高可用、千万并发...张嘴就要百万年薪、应聘都是技术经理级别起步,我就纳闷了,这个行业咋变成这样了?
    potatowish
        40
    potatowish  
       2018-02-09 16:18:20 +08:00
    黑 java 的自己的水平也可见一斑,也好意思出来评论
    overhell
        41
    overhell  
       2018-02-09 16:29:45 +08:00
    @Rickkkkkkk
    @th00000

    不好意思,让你们误解了。我本身也是 java 码农 ,技术也渣的很 。不是程序员不是指所有,而是那 10 个里面的 8,9 个。
    th00000
        42
    th00000  
       2018-02-09 16:55:47 +08:00
    楼主手动沉底算拉倒了, 真不想在 v2 看见这种帖子, 阴阳怪气
    flight2006
        43
    flight2006  
       2018-02-09 16:59:01 +08:00
    什么情况下接口 1 能返回接口 2 的数据? 难道接口返回的是字符串?
    WuwuGin
        44
    WuwuGin  
       2018-02-09 17:06:40 +08:00 via Android
    明明是业务水平的讨论怎么就有人看成黑 Java 了,玻璃心不管学什么语言一样改变不了,楼上各位所谓 Java 程序员一看就是什么都不懂一直黑 PHP,遇见跳脸的直接急了。不信另开一贴黑 PHP 大家都很快乐。
    gowk
        45
    gowk  
       2018-02-09 17:18:04 +08:00
    呵呵呵,被 Spring 搞昏了头的一群废柴
    ppaapc
        46
    ppaapc  
       2018-02-09 17:21:25 +08:00   1
    这种贴子最大的好处就是 block 一些眼瞎和有脑残言论的人
    veightz
        47
    veightz  
       2018-02-09 17:45:22 +08:00
    @ppaapc 以及年末划水图开心~
    yuchenyang1994
        48
    yuchenyang1994  
       2018-02-09 17:46:57 +08:00
    少见多怪,我们有个 sql 把库删了,虽然那张表没啥用,但我尿都吓出来了,这个东西维持了 2 年
    tanszhe
        49
    tanszhe  
       2018-02-0917:59:16 +08:00
    这么明显的问题 出现这么久原因就两个:
    1. 态度太差 敷衍了事 不想解决
    2. 水平太差
    pmispig
        50
    pmispig  
       2018-02-09 18:02:11 +08:00
    为了解决这个问题,我们做了日志关键字监控,专门抓空指针,检测到就报警抓人处理,从开始一天几百几千,到现在几乎没有了
    wizardforcel
        51
    wizardforcel  
       2018-02-09 18:09:58 +08:00 via Android
    php 应该不会出这问题吧,对象生命周期都不一样。
    asuka02
        52
    asuka02  
       2018-02-09 18:13:39 +08:00 via iPhone
    @overhell 那你告诉我什么叫程序员?
    whello
        53
    whello  
       2018-02-09 18:16:42 +08:00 via Android
    其实很多 985 的入门语言就是 Java
    woscaizi
        54
    woscaizi  
       2018-02-09 18:17:03 +08:00 via iPhone
    static 部分的代码可以简单贴一下吗?我觉得这更多的是开发流程的问题吧,楼主说的那些问题应该在自测,code review 阶段消灭。程序员的水平有高有低,应该让开发流程来让程序可用。
    TheBestSivir
        55
    TheBestSivir  
       2018-02-09 18:17:27 +08:00
    @overhell 哭哭,Java 程序员遍布所有一二线互联网公司啊。淘宝,网易和我司甚至几乎全线 java,都被地图炮了呀,哭哭
    kaneg
        56
    kaneg  
       2018-02-09 18:39:42 +08:00 via iPhone
    这是人的问题,Java 不背这个锅。这样的人给他们什么语言都一样。
    HangoX
        57
    HangoX  
       2018-02-09 22:16:39 +08:00 via Android
    楼主少见多怪。。JAVA 后台很多都这样
    willakira
        58
    willakira  
       2018-02-10 11:09:13 +08:00
    这个其实 Code Review 就差不多可以检查出来了…

    流程需要改进

    不过那个团队的心态还蛮有问题的… 一副“代码部署后,那管洪水滔天“的样子…
    ligo
        59
    ligo  
       2018-02-10 14:40:18 +08:00 via Android
    请教为什么 query 结果不直接返回,这是设计模式吗
    qce7
        60
    qce7  
    OP
       2018-02-10 15:37:51 +08:00
    @ligo 我猜是为了在其他的对象方法中可以简化调用查询结果,而不是用形参传递
    enzohobmg
        61
    enzohobmg  
       2018-02-10 21:04:51 +08:00
    跟 java 有什么关系 扯犊子
    beginor
        62
    beginor  
       2018-02-11 07:01:58 +08:00 via Android
    这个也碰到过,非 static 也的 connection 对象也会这样, 并发量一大就出现了。 不只是代码审核,压力测试也能测出问题。
    atcdef
        63
    atcdef  
       2018-02-11 08:59:16 +08:00   1
    就是把本该作为对象成员的设置成了类成员,导致 new 了两个类的实例,A 对象设置 sql 设置完,还没来得及执行查询,B 对象又设置了 sql,由于这个 sql 成员是静态成员,所有该类的对象共享的,然后 A 类再执行查询时执行了 B 设置的 sql,结果当然不对啦。
    atcdef
        64
    atcdef  
       2018-02-11 09:01:19 +08:00
    不过我觉得,这一般不该由程序员背锅,是架构的锅,缺少责任心。
    renke
        65
    renke  
       2018-02-11 09:38:08 +08:00
    sqlRes 指得难道不是 sqlResult ?
    并发时,客户端 1 调用 A,客户端 2 调用 B,1 查询结束,sqlRes=result1,还来得及没有返回,2 查询结束,sqlRes=result2
    ,此时返回 sqlRes 其实是 result2,所以,调用 A,返回了 B 结果。
    另外,你们好像天生就知道每个关键字的用法?
    目前的大环境下面,有多少人是因为对应业务场景或者工作需求去研究语言细节,又有多少人因为兴趣去研究语言细节?
    49gd
        66
    49gd  
       2018-02-11 11:18:03 +08:00
    可能是菜 可能是没责任心 跟什么语言没什么关系吧
    TZ
        67
    TZ  
       2018-02-11 14:49:11 +08:00
    写出这样的垃圾代码,我服气
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2644 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 12:54 PVG 20:54 LAX 04:54 JFK 07:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86