1
XuHuan1025 219 天前
深的长,浅的短
|
2
FranzKafka95 219 天前 via Android
因为 Java 的人太多了
|
3
maigebaoer 219 天前 via Android
一个是供需,一个是面试官个人喜好
|
4
miaeLKK OP @XuHuan1025 啥意思?
|
5
miaeLKK OP @maigebaoer 我就是好奇。。。这么点钱问这么深,真的招的到人吗?还是因为我每次都只是好运赶上了问的不深的?这个环境了还有问的不深的,那我觉得这种“好运”也许并不是偶然
|
6
XuHuan1025 219 天前 1
@miaeLKK 参考谈恋爱和一夜情,持续开发和改改 bug 上线要求肯定不同吧
|
7
Ericcccccccc 219 天前
其实是看运气
这个和面试官关系非常大 |
8
coderlxm 219 天前
这个是看运气,外包的人鱼龙混杂,主要分为干活类型的,理论类型,混子类型的几种人,看你运气碰到哪种面你。
|
9
BeijingBaby 219 天前
问的深是为了砍价。
找几个你答不上来的问题,然后你自己都开始质疑自己了。 后面别人砍价的时候不是理所当然。 都是套路。 |
10
sagaxu 219 天前
论面试的目的
筛选出符合岗位要求的人 ❌ 给求职者打出有区分度的评分 ✅ |
11
sagaxu 219 天前
问新生代老生代不算深入吧,标准八股还得问问为什么分代,为什么 zgc 最早不分代,为什么后来 zgc 又给分代了。GC 怎么触发,触发后是立即可以执行,还是需要所有线程到达某个状态? safepoint 是什么,又是怎么产生的?执行 JNI 的线程有无特别? JNI 中分配的内存怎么回收,GC 是否参与?堆外内存怎么管理?什么是内存可见性和内存屏障?有没有读过 jsr133 ?为什么 Double checked locking 在 Java 1.5 之前有问题?如何安全高效的发布一个对象?
|
12
miaeLKK OP @sagaxu 可我找的只是个外包,一直也就处理点需求,各种中间件搭起来能跑就行了,我也没找年薪几十万的那种,我也需要知道这么多吗?/捂脸 你这些是背的八股文?还是平时真的遇到过?真诚发问
|
13
uiosun 219 天前
和面试官关系非常大,外包本质上是工作关系的差异,不是工作内容的差异——我这话是为了阐述本质,不是说国情,国情是能去自研绝不去外包。
所以回到正题,面试官如果更期望你有较好的工程能力,就会问一些深入的问题——当然也遇到过那种只问八股的,问完了其实对真正做事,帮助不大。 |
14
sagaxu 219 天前
@miaeLKK 实现细节用不到,但是不理解内存模型写不了并发代码。GC 实际用到的也就看懂 gclog ,微调几个参数而已。不需要压榨性能的项目,大概很少用得到八股里的东西。纯粹用来做区分用,跟考算法题差不多。
|
15
flamingooo 219 天前
可能是从简历来看, 没什么技术含量, 想探下技术深度, 我 6 年+, 面某大厂还被问过页表类型跟置换算法, 没答上来也没啥..
|
16
yeqizhang 219 天前
我之前面外包,三四个人一起面...问分布式系统...
|
18
Cbdy 219 天前 1
在本世纪的前十年,你只要知道 AJAX ,你就可以进百度;在如今,你需要懂 https://roadmap.sh/frontend 上面所有的东西,再加上当场能写 LeetCode Medium 难度的题才行
供需问题,老哥 |
19
fuckaholic 219 天前
以为个人技术面的经历上看,有两种可能的心里逻辑:
一个觉得你不错,拿深一点和交叉一点的东西来试探下你,如果你能顺利答出来,其实会大大加分 另一种,就觉得你可能自我感觉良好了,拿一些东西敲打下,如果你答不出来,正好是一个 pass 的理由 |
20
morgan1freeman 219 天前 2
供需问题,跟技术无关,
大部分 Java 程序员 可能一辈子都不会接触 JNI 跟 堆外代码,何况能被 JNI 的库 99%都是社区大佬写的,剩下可能 1%的情况是公司万年前某个老库的 C/C++的包。 社区大佬写的库 基本上不存在泄露的问题,即使泄露了 也是开源社区去处理,轮不到你写应用的来处理,公司也不会为你这个技能买单,因为它只花了 15k 招了个外包,写库的那个人在美国拿着 30k 的美刀,只是顺带下班 凭着业余爱好 帮你修复了 某个开源 JNI 库的里面 C 代码的某个野指针 另外 GC 这个东西,大方向就是一个有向图可达性分析算法,就是一个图论算法,只要你智商不够低,就能明白大方向上就是 GC 的目标就是 尽可能快速分析完这个图,看下哪些点是不可达的, 但是程序里面引用关系又是随时变化的,那么就是在 GC 吞吐率 跟实时性上 做 trade-off ,没有听说过 既能提高吞吐率又有更高实时性的东西,另外大部分互联网程序 对实时性要求并不高,你都用 java 了 还追求啥实时性,所以就是牺牲 实时性来做 GC 吞吐 分代的原因是因为 能活过几轮的 GC 的 对象都是人精,就像你的 static final Object obj 里面 obj 引用的对象,一般活过几轮之后,它就不太可能在整个生命周期中被清除出去 @sagaxu #11 |
21
imokkkk 219 天前
几年前确定没必要问 现在可选的人太多了 再问基础的达不到筛选的效果
|
22
morgan1freeman 219 天前
@morgan1freeman 所以分代的好处,就是可以把这个 有向图 进行 切割,有些图的 节点就不用去算了,或者直接把老年代当做 GCRoots 也就是图的根节点 去分析,看看有没有可以清理的对象,这样可以减少图分析的时间复杂度,另外还有一些优化的地方,就是逃逸分析,变量没有多线程共享,可以只停顿这一个线程,对这个变量进行 图分析,看是否可以回收
|
23
morgan1freeman 219 天前
@morgan1freeman #20 另外怕你听不懂什么叫做实时性,举个简单的例子就是,你的代码 执行一段时间,然后会停顿下来(物理时间意义上的停顿,在你的程序本身看来 它是连续执行的),然后让 JVM 的代码接管,这个时候 它会去处理内存是否回收利用的问题
至于上楼所说的 safepoint 你可以参考这个 https://github.com/fqdeng/jvm-suspend-working-thread-mechanism 这是我写的例子,主要 JVM 是用了 mprotect 内存回调函数,当机器读内存取指令的时候 会触发一次回调,逻辑流会被 JVM 接管,JVM 接管后 处理完,才是你的 java 代码 开始执行 至于 safepoint 怎么实现,字节码的时候,就直接下 埋点,字节码跑到那里 就把逻辑流切到 JVM 看看是否要做清理动作,如果编译成了 二进制汇编码,就是上述的 mprotect 函数 进行埋点,等你的程序执行到位了,mprotect 就会接管你的 java 代码逻辑流,切换到 JVM 代码 早些年虚拟机代码 可能有些问题,有的地方 没下埋点,结果这 java 线程 跑到系统调用,没有在系统调用前 塞 safepoint 或者其它运算 一直 for 个不停,但是每次 for 里面{} 又没有塞 safepoint 的 这个时候,java 线程停不下来,JVM 没法进行图分析,现在基本上不用操心这个问题了, 前几年 golang 也出现过这个问题,貌似后面官方也迅速解决了, 总而言之,基础是图论算法,后续都是根据工程实践 延伸的知识 |
24
morgan1freeman 219 天前 2
@miaeLKK #12 另外说一句,懂这么多也没用,照旧也是 CRUD ,这是市场决定的,不是个人能力决定的,欧美的程序员 大多在公司也是 CRUD ,业余做一做自己开源项目为社区发电,我们是因为被压榨太狠,没时间搞而已,论技术能力跟工程实践,国内是不差的,开源做不起来 是社会资源分配问题,不是一个技术问题
|