为什么感觉 Java 面试难度更难?

2020-05-10 09:09:44 +08:00
 yannxia

背景:笔者在公司内属于多语言工作(做项目杂)

在出去面试的时候,同样的后端开发工程师差不多等级的公司和薪资水平的岗位,对于 Java 的面试难度感觉'背'的知识点是最多的,其他语言比如 Go 面试时,问的内容就会相对变少很多。

我认为是 Java 行业的从业人员巨大,门槛现在变的比较高,大家怎么看。(无语言攻击性……)

9274 次点击
所在节点    问与答
69 条回复
wm5d8b
2020-05-10 21:47:24 +08:00
面试造火箭,来了拧螺丝,有什么意义吗?更何况实际只会画火箭,真要求造一节,还造不出来。
wm5d8b
2020-05-10 21:49:17 +08:00
不说造火箭,真能把每一颗螺丝都安在正确的位置,就可以算得上是优秀人才了
cedoo22
2020-05-10 21:54:07 +08:00
@wm5d8b 比喻太贴切了, 各种型号螺丝 扳手, 能用正确的扳手(配置)扳动正确的螺丝的人 都能找到一碗饭吃。所以记忆力好的人 优势很大
chihiro2014
2020-05-10 21:55:03 +08:00
深入理解 JVM 感觉其实并没有任何用,不如把代码写写好才是王道
feelinglucky
2020-05-10 22:03:56 +08:00
面 golang 的人员话其实可能更多的不会在语言本身方面,其实很多用 golang 的都是第二甚至第 N 语言了,例如一般其实问 iface 和 eface 之间的区别差异能回答清楚其实就差不多了,但是其他配套的生态例如微观层面系统、容器、网络这些;宏观层面架构、高可用等等,用 golang 的话还是必须需要了解的(这里黑下某宇宙条,就是个拧螺丝的面你 mb 的算法)

这块 Java 刚好相反毕竟发展了那么多年,先不说配套的中间件和环境这些,JVM 衍生出来的二级语言和场景都有很多,哪个不是知识点,但 Java 的从业人员又太多了很多时候不问些比较「为难」的问题,根本就不知道应聘者的知识边界在哪里。再加上很多业内甚至很多大厂的技术出生的面试官压根就没有经过系统面试培训的,因此根本就不知道怎么去客观判断应聘者的能力,只能靠这些所谓的面试题「错一杀百」反正僧多粥少也不缺应聘者。
yc8332
2020-05-10 22:12:31 +08:00
感觉面 jvm 的,除非真搞底层优化的,平时开发真心毛用都没有。
NeinChn
2020-05-10 22:44:27 +08:00
@namelosw
"一个 Exception 挂一个线程。"
评价一下 Golang 的 panic 挂掉整个进程,不仅仅是 Goroutine 的设计呗
"搞不了 messaging 要上各种 broker"
除了 Erlang 天生自带 messaging,那 Python 和 Golang 是不是也都坑呢
"同步 Spring 性能菜的抠脚"
怎么看待大部分场景 Python 连长连接都没法做,只能短链接同步调用的情况....
namelosw
2020-05-10 23:26:10 +08:00
@NeinChn
大部分进程模型都有这些问题,只是 Java 被用得太多了,所以大部分 Critical 场景都用了 Java 。但是 Java 搞这些东西很难,只能交给专业人士才能写,还不能保证一次写对。我的意思是 Java 这么难学,是把 Java 当银弹的后果。

相比之下人们不会让 Python 去做这些事。但是简单或者中等的这些场景 Python 很简单,或者参考 Rails,其实一个中型的 Rails 网站往往也不需要这些中间件,一点普通的东西加个 Sidekiq 就搞定。虽然理论上和 Java 一样差,但是至少开发效率有优势,也没那么多所谓的组件,模式,架构各种造火箭的东西要学。

Go 比较特殊,因为它现在已经逐渐被用在 critical 组件上了。
但是考虑到 Java 的面试里入门就有很多严苛的锁问题,所以有 Goroutine 就不用 suffer 这个问题。
不过 Goroutine 没有解决异常,所以相比之下 Erlang 进程不会 suffer 这个问题。所以比起来 Go 还是有它的局限性的,不过我发现异常没有锁那么难搞,所以差不太多。

个人认为一个技术场景“适合”,不考虑生态问题,技术本身航讲,一定程度上就是在要解决的问题上不要新增额外的技术问题,也就是不“添乱”。比如写个 HTTP server 本来是很简单的事情,本质上就是 socket 上的字符串来回:
用 Java 用线程写就要特别仔细考虑异步 /锁 /异常,一不小心就有隐秘的 bug
用 Go 的 Goroutine 写就只需要特别考虑异常
用 Erlang 的默认 one_for_one 进程写就没什么特别需要考虑的了。
starmoon1994
2020-05-10 23:27:56 +08:00
@chihiro2014 深入理解 JVM 感觉其实并没有任何用,不如把代码写写好才是王道

--- 这个不赞同

当你的数据量上去了,或者应用莫名其妙崩了的时候,你就知道 JVM 知识的用处了,否则连排查思路都找不到
gadsavesme
2020-05-10 23:39:08 +08:00
说深入理解 jvm 没有任何作用的人是认真的吗。。你们的工作只有码 if else 代码吗?没有出 bug 需要做优化调优的时候吗。。。
NeinChn
2020-05-10 23:52:01 +08:00
@namelosw

难学么,感觉也还行吧,如果说大家都要做到 60 分的话,确实可能 Python 做的快很多,而且效率也高
但是如果大家都要往 80 分做,Java 会明显更简单一点(毕竟 GIL 挡在那 CPU 密集型操作除了换成 C 写没有别的方法
Java 生态上,只做后端 Server 基本就是 Spring 大一统(国内),入门成本虽然高,但是换家公司几乎一样的技术栈
其他语言生态虽然看起来简单,但是每个公司实现都不太相同,没有一种一致的 pattern,有好有坏吧

但是很多技术也是一样的,比如并发读写 map 这个最简单的场景吧,Python/Golang/Java 都得加锁
当然每个语言都提供了对应的解决方案,但是前提要有意识才能用对....
chihiro2014
2020-05-10 23:58:06 +08:00
@starmoon1994 除非你真的从编译层面去理解 JVM,不然你平时开发,根本不会去进行 JVM 调优。
luckyrayyy
2020-05-11 00:06:10 +08:00
@NeinChn 我不太了解 Python 和 golang,就针对对 map 加锁的场景,请问这两个语言是否提供了简易好用的加锁方式?

Java 蛋疼的就在于有直接关键字加锁,还有可重入锁接口加锁,还有官方给的带锁 map,还不止一个。每一个的实现方式不一样,加锁的关键字在不同 jdk 版本的实现方式也不一样,这些都要考……其他语言面试也这么问吗?
huntcool001
2020-05-11 00:09:46 +08:00
99.9%的公司也用不上 JVM 调优. 最多就调一下 GC, 到了 Java 8 后面的版本默认 G1 了也没啥值得调的了.

我学 JVM 就纯粹觉得有意思而已...看看自己每天用的东西到底咋实现的
NeinChn
2020-05-11 00:27:14 +08:00
@luckyrayyy
锁都是类似的,不过 Java 的锁确实多很多
但是基础的读写锁 /互斥锁各个语言基本一样
Golang 的 sync.Map 目前 clean+dirty 双读然后加锁回写的机制,没有类似 ConcurrentHashMap 那种分桶锁+红黑树实现
Python 虽然说有 GIL 很多情况下可以不考虑 thread-safe,但是实际非 atomic 操作一样要加锁
主要是 Java 实现太完善了,有 hashmap,有 linked map,有 tree map.基本业务需要的都有...
还都是基础库....
knowckx
2020-05-11 00:27:44 +08:00
我最近在面 Golang 的高级开发,go 语言本身常规的面试问题无非是:
1.runtime ( GMP 和 GC )
2.一些语言内建类型的源码问题
3.协程并发常见的实践,上下文,sync 包之类的
然后基本上语言这块就 OK 了。
JAVA 就不一样了,面试的时候面试官的问题更多,更细致,更理论化。

但是再想想的话,其实作为后端开发,也就语言上的问题不一样。
后续的数据库 /缓存 /MQ/分布式,无论是 Go 开发还是 JAVA 开发,大家需要掌握的东西是一样的。
整体看来,大家需要掌握的知识量其实差不多。
zackwan95
2020-05-11 03:16:18 +08:00
@Sapp "各个版本 http,能说清 js 事件循环,vue 、react 的一些基础实现原理" 这些玩意儿叫基础?这些破问题有辨识度?假如培训班群体作案你今天问完明天全部人都有面经了你怎么区分?说到底你们这些人为啥会觉得别人应该会这种问题啊,下班没事去背题库么。还有数据结构,你招前端问哪个数据结构? linkedlist ? tree ?你做前端你用过?
zackwan95
2020-05-11 03:24:46 +08:00
@Sapp 我并不是说面试不能问这些破题,反正横竖得用一些不客观的东西来衡量,但是会不会这些题真的跟基础没关系好么,也跟技术关系不大好么
Sapp
2020-05-11 08:35:37 +08:00
@zackwan95 你可真有意思,哪个培训班会背这些?你去看看培训班都是背的什么问题好吗?数据结构队列和堆是不是要知道? 这不是基础中的基础? HTTP 不是基础中的基础? js 事件循环不是基础中的基础? react 原理不是基础?
Sapp
2020-05-11 08:36:32 +08:00
@zackwan95 看来 v2 人多之后真是水货暴增

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

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

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

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

© 2021 V2EX