最近被公司安排到只开发报表的咸鱼,完全不用写代码了,怕越待越废,而且公司管理有点问题,想着看看换个环境,看了一圈好像要求会分布式事务,分库分表经验的少了,还看到有些要求多线程编程,熟悉 JVM 调优的。我只在小公司和外包待过,做了有差不多 3 年了,工作中这些都没接触过,也感到很疑惑,多线程和 JVM 调优这些是具体应用在哪些场景下的,因为我觉得这些应该框架中就已经做了很大部分工作了,希望经验丰富的大佬们指教下,谢谢。(不知道发的版对不对,第一次发,错了的话,麻烦说一下,谢谢)
1
thetbw 2021-02-03 23:40:01 +08:00 via Android
进去还是拧螺丝
|
2
young1lin 2021-02-04 01:24:50 +08:00 16
其实他们的要求就是:
看过《深入理解 Java 虚拟机》《 Java 并发编程的艺术》,并且能够讲出原理,背出来。 实际工作中,最多让你去生产环境看看是哪些代码造成的系统 Hang 住或者响应时间低。 如何优化,JAVA_OPTS 这个环境变量,比如根据实际机器内存大小调 Xms Xmx 一样大了,避免内存碎片,低版本的 JDK 调大永久代防止永久代 OOM 了。关闭偏向锁,开启逃逸分析了。 使用 JDK 自带的工具诊断线上环境。 其实不会让你真正干这些的,除非是小公司,这些运维帮你搞定了,但是你要了解原理。多线程那个就更悬了,平时可能根本用不到,最多用用线程池方面的,所以这个你讲清楚各个参数,流程,优化,以及拒绝策略这些基本 ok 了。还有 synchronized ( MarkWord,锁的升级与降级),volatile ( MESI 协议,Happesn-before ),JMM 这些八股文一般就行了。 |
3
trevis761923 2021-02-04 08:12:15 +08:00
多线程主要还是处理异步请求比较多吧.
|
4
xiaTianChiXiGua 2021-02-04 08:44:33 +08:00
进去会发现 狗屁多线程都没用上
|
5
uselessVisitor 2021-02-04 08:47:49 +08:00
没啥用,多线程一般都 MQ 了
|
6
idoggy 2021-02-04 09:04:06 +08:00 via Android 2
多线程的知识面很多的,工作中也要用的。
你做的项目可能真的是太小了,框架里的线程池 new 一个出来啥都不改直接用是会 oom 的。redis 刷缓存不上锁遇上高并发是会击穿数据库的。 像 volatile 这种你基本不会用但是也要知道,防止有新人写代码给你埋雷。 定时任务无论是 quartz 或是 spring 自带的你总得知道线程池的运行机制,不然任务某天不执行了都意识不到是队列阻塞了还在那儿瞎折腾。 |
7
mikael 2021-02-04 09:25:25 +08:00 1
其实这些都是 hr 发布的,hr 们都是从其他招聘信息里直接复制来的,具体的还得看用人部门的要求,而 hr 简历的筛选就是根据你简历中是不是有这些八股文的内容,拿到面试资格后,就是跟技术部门直接聊了,而聊的内容都是你简历上写的,所以,你简历上的写的内容先得过了 hr,然后你还得知道(万一问了你不知道,就尴尬了),所以这些八股文就背背好了。
|
9
passerbytiny 2021-02-04 09:55:17 +08:00 via Android
国内招聘要求“都”是随便写的,别太在意。(你写得太精确,那是直接告诉竞争对手自己准备干啥)
即使是用人部门发得要求,也是随便写的(毕竟最后还是靠面试),因为用人部门跟 HR 之间也是不能脱光见面的。 |
10
fisher335 2021-02-04 11:24:15 +08:00
我看好多招聘都需要 jvm 性能调优,但是实际应聘来的连 jvm 是什么都不知道
|
11
hgjian 2021-02-04 12:29:07 +08:00 via Android
@passerbytiny 最后一句话啥意思啊?
|
12
hxndg 2021-02-04 12:57:53 +08:00 1
我个人觉得。。。。很多的线程同步的东西实际上底层都给你做了。。。。
类似什么 MCS,CLH,钟表锁之类的别说你不知道,面试官可能也不知道,但是知道了又能怎么样呢? TAS 和 TTAS 的性能为什么不同,底层 MESI 造成的后果这些都不会有人了解,除非你去做内核。 也就我们拿 C,有时候需要自己设计多线程操作的才会实现自旋锁之类的多线程, 有的时候我们抄 linux 内核的东西也得理解一些锁的操作等等。 所以你就多刷刷算法,和基础调优之类就够了 大厂内卷现在和高考差不多,都是不看工程能力,一套题目一把梭。 |
15
FantaMole 2021-02-04 15:26:03 +08:00 2
对部分公司来说,多线程和 JVM 就是用在面试场景下的。反正这种东西也没什么好说的,会背就是了。
假设我是面试官,我想招人,想问多线程相关,就像楼上说的 volatile 。我就先问 volatile 有什么用?你回答个七七八八,那就算合格。 那我再问个,两个线程循环执行 x = x + 1, 变量 x 使用了 volatile 修饰,会不会出问题,为什么会出问题?你又回答上来了,我就比较满意了,知道你碰到这个不会踩坑。 最后我问,volatile 具有可见性为什么不能保证原子性?可能我作为面试官自己都拎不清。你要能详细答出来,只刷新缓存不刷新寄存器这一套机制。搞不好你的水平能当我的上司。 这就是部分公司的情况。实际上我很赞同楼上的说法,大部分公司招人,其实更应该看的是业务理解和工程能力,不是背八股的能力。 |
16
a719031256 2021-02-04 16:08:18 +08:00
@idoggy 目前在做一个全国 500 强的企业系统,被公司外派到母公司这边进场,三面,每次 4 个面试官,那阵仗被吓惨了,分布式多线程变着花样的问,然而现在在撸纯业务代码,毫无技术的项目。。。。
|
17
hgjian 2021-02-04 17:44:20 +08:00 via Android 3
@a719031256 会修航母吗?会。好,你被录用了;去拿个拖把,把甲板拖一下。
|
18
dengtongcai 2021-02-04 17:51:32 +08:00
哈哈哈 面试是面试 工作是工作
|
19
SuXinXing 2021-02-04 18:01:24 +08:00
我理解这些东西没必要全会,但是会的越多,你将来的薪酬还是有质的提升,比如现场出问题了,你可以利用这些技术去处理个问题,然后领导看到了,对于你以后的发展和工资还是有提高的。
|
20
a719031256 2021-02-05 08:43:50 +08:00
@hgjian 。。。。。。。一个小东西,都要拆分成 n 个模块,要开会三小时才能决定一个大概
|
21
superBearL 2021-02-05 11:45:06 +08:00
同小公司大部分是做内部项目,接触不到高并发,目前狂补这部分知识,感谢楼各位上大佬的指点
|
22
superBearL 2021-02-05 11:50:38 +08:00
同时想问下有没有熟悉 Java 面试的小伙伴,最近面试的侧重方向大致是啥?知识点太多了看不过来。
比如说:JVM 、多线程、SQL 、NoSQL 等方面? 分布式方面的 zookeeper 、kafka 、k8s 等问得多不多? |
23
Takamine 2021-02-05 12:06:29 +08:00 via Android
JVM 调优问题是面试专属我信。多线程也只是当八股文去背,确定不是在给人埋坑吗。
|