1.java 内存模型为什么要有 工作内存和主内存
2.java new 一个对象的时候,什么情况下会发生 GC
如果新生代和老年代没有满呢
3.jdk 8 去掉方法区用 元数据 代替,是为什么?
4.dubbo 调用一个服务的详细过程
1
hantsy 2020-03-25 18:38:06 +08:00
这是 P8 的面试吗?
|
2
hantsy 2020-03-25 18:38:52 +08:00
内存模型,虚拟机,GC 全上了。
|
3
luckyrayyy 2020-03-25 18:39:08 +08:00
1. cpu 都有三级缓存啊,速度更快,还有寄存器。
2. gc root 不可达该对象的时候。满了就 full gc,没满就 minor gc 3. 方法区是一个概念吧,虽然永久代去除了,不能说方法区没有了。不知道为什么... HotSpot 觉得实现方式不合适? |
5
hantsy 2020-03-25 18:55:44 +08:00
这种面试的公司有病。。。
|
6
cxshun 2020-03-25 19:00:40 +08:00
1 、为了优化啊,每次都从主内存读,肯定性能不大行
2 、gc root 不可达的情况下。 新生代的 eden 区未满不会有 GC,只有 eden 区快要满才,会发生 ygc,并且 s0,s1 交换 3 、没有去年方法区,去掉永久代,改为元数据区。这样是为了突破 JVM 的内存限制,直接使用物理内存。 4 、dubbo 调用会先从 zookeeper 拉取 producer 的地址列表 ,然后根据负载均衡算法挑选一下进行调用。他们的协议是用自己的。我用的不多,只知道大概原理。 |
8
hangszhang 2020-03-25 22:44:47 +08:00
@zxc1234 挂了的话 zk 会知道
|
9
y0bcn 2020-03-25 22:52:55 +08:00
钓鱼贴?
|
10
varrily 2020-03-25 23:23:57 +08:00
4.dubbo 调用一个服务的详细过程
spi, 动态代理,序列化,netty,nio,zk,选举,cap,重试机制 java 的东西,深究起来是个无底洞,回答上关键字就行了。 |
11
ysjiang4869 2020-03-26 00:04:31 +08:00 via Android
阿里不都是这么问的么
|
12
skypyb 2020-03-26 07:15:07 +08:00
额, 我当时一年经验去面试,好像也是问的这些东西
java 圈子好像就是这样的。 (摊手 人均百万并发、 面试问就是多线程、GC 、微服务、分布式。 哈哈 |
14
cxshun 2020-03-26 09:58:51 +08:00
|
16
sagaxu 2020-03-26 11:22:36 +08:00 via Android
虽然没用,也不体现能力,但是就是爱问,毕竟很多面试官没有能力出题,只能网上找宝典问,久而久之,大家都觉得这些很重要了
|
17
zxc1234 OP |
18
zxc1234 OP 个人觉得问这些没问题,要不然筛选候选人呢,怎么面试比较好呢
|
20
luckyrayyy 2020-03-26 11:39:01 +08:00
我也不太清楚第五点问的是什么,推测只是考察解决问题的思路?
既然限定了没有跨机房,还是物理层的原因,那软件层面是处理不了故障了,只能尽量减少损失...说说怎么做日常的数据备份,通电之后怎么清理脏数据,怎么做数据恢复,怎么保证跟其他地方的数据一致性?跟其他机房有数据同步的话,会不会一开机就有这段时间攒下的数据涌进来?怎么避免类似缓存雪崩一样的问题? 展开能说的就太多了,每一个点都有可能深问你,仅供参考。 |
21
zxc1234 OP @luckyrayyy 那如果是集群方式部署,跨机房呢
|
22
luckyrayyy 2020-03-26 11:50:33 +08:00
@zxc1234 我的话可能会从数据一致性、可用性方面回答。可以说说像多集群多节点的话怎么做数据同步,怎么保证数据一致,了解分布式一致性协议类似 raft 、zab 算法可以说一说。流量猛地转移到另一个机房会不会承载不了啊,是不是得扩容、熔断降级什么的...能说的也蛮多的。
|
23
cxshun 2020-03-26 12:06:03 +08:00
@zxc1234 #17 单机房,机房挂了就没了。
如果是上了云,有前置的 Load Balance,可以赶紧挂上一个新的另外一个机房的服务。如果没有用 LB,是直连机房,那神仙都没办法了,只能等恢复了。 |
25
Aresxue 2020-03-26 12:37:37 +08:00
1.因为 CPU 有缓存, 工作内存能有效利用缓存比主存执行速度要快;
2.当分配内存的区域(Eden 和老年代都有可能)满了的时候会去 GC, 正常情况下不满就不会 GC ; 3.避免方法区溢出,元空间存放在本地内存而非 JVM 内存内,严格意义上本地内存耗尽前不会溢出; 4.只是调用不考虑初始化的话就是根据协议选取 Invoker 默认是 DubboInvoker, 拼接参数组别版本号之类, 判断是否配置了异步, 没有的话就是把异步转同步(实现上 dubbo 底层只有异步), 然后就是利用 netty 进行消息的发送和接收,实现类 HeaderExchangeChannel,中间还有个序列化操作, 默认用 hession(一种基于 tcp 的二进制协议) |
26
li24361 2020-03-26 14:34:51 +08:00
2 如果分配对象比较大,会直接进入老年代,满了就 fullGc
|
27
zhuyichen1017 2020-03-26 15:44:11 +08:00
1. storeBuffer, invalidateQueue
|
28
yjxjn 2020-03-26 16:20:37 +08:00
@ysjiang4869 其实我想说的是,大部分进入做开发的话,貌似真没有能考虑这么多的,比如垃圾回收机制,再比如 GIT 的原理,以及 Java 虚拟机之类的问题,想想工作中大部分的都在写逻辑代码,这些可能真的不会考虑的(可能我这个工作比较 low,真的高并发,分布式啥的用不上呀。。。)
|
29
yjxjn 2020-03-26 16:33:29 +08:00
@luckyrayyy 大佬你好,我想问一下,既然楼主前面给的问题大多是 Java 相关的,但是第五道题其实不都涉及到运维层面了么,这到底是是招聘开发还是运维 😝
|
30
MrCastle 2020-03-26 16:37:01 +08:00
第五题,把所有服务器都放在一个机房的运维,是要被吊死在桅杆上的……
|
31
sadfQED2 2020-03-26 16:56:38 +08:00
第五题,面试官想问的应该是自动熔断以及自动降级相关的问题吧,或者是服务切换。实际生产中,有人问我这种问题,我只会说,你他妈机房肯定有备用电源已及发电机啊,机房都能断电,玩蛇啊
|
34
zsdroid 2020-03-26 20:50:06 +08:00
如果碰到第五题,就反问他,如果地球炸了,那么应该如何处理,有什么措施吗
|
35
zxc1234 OP 老哥们 帮忙看下第 7 个问 谢谢
|
36
leafre 2020-03-26 20:54:46 +08:00
5.如果服务器部署在一个机房,没有跨机房,那么机房挂了 比如断电了,网络不通
那么应该如何处理,有什么措施吗 先通电 |
37
noteseeker 2020-03-26 21:31:49 +08:00
@zxc1234 第 7,and 中的顺序对如何选择索引无关,查询优化器会自动优化顺序,选择最有效率的顺序执行,所以会用到索引。
|
38
TimeRain 2020-03-26 21:47:52 +08:00 via Android
看深入 Java 虚拟机那本书吧,垃圾收集器,锁,类加载器等知识那本书都有
|
39
cxshun 2020-03-27 15:43:43 +08:00
@zxc1234 #24 对的,这是正常的多机房方案。当然,你要是想要再复杂点,可以参考支付宝的“两地三中心”的部署方案。那个就太复杂了,正常情况下都没必要。
回答一个另外两个: 6 和 7 是同类问题,因为这里完全是等值的,引擎会把语句优化成可以使用缓存的情况,因此是可以用到缓存的。 你可以简单的这样认为,当没有完全覆盖索引的情况下,需要使用最左前缀原则来分析,如上面的比如只有 c = 'xxx' and b = 'xxx'这里就要用最左前缀原则;而如果覆盖到了就没那么简单了,比如上面的 b,c,d 都覆盖到了,这里还要考虑引擎优化的情况,就是顺序的处理上面。 |
40
zxc1234 OP 求大佬们帮忙解答 第 8 个问题
|
41
zxc1234 OP |
42
RRRSSS 2020-03-31 11:20:10 +08:00
其实 Java 是这样的,因为这些东西出来太久了,默认就是你应该要会,要不没什么好问的,因为就只是写业务搬砖的话,每个人区别不大,只能这么涮人。面试考算法同理。
|
43
cxshun 2020-03-31 17:05:32 +08:00
我来答一下 8
B+树不会在正常结点中存放数据,会在叶子结点中存放数据,并且是通过链表组织的,可以通过链表获取所有数据。 @zxc1234 #41 dubbo 怎么调用?是指 consumer 怎么调用 producer 吗?那就是 RPC 罗,因为 dubbo 用了自己的协议,详细可以找一下网上的文章。 zookeeper 获取到 producer 地址? zookeeper 不需要获取 producer 的地址啊,producer 的地址是注册到 zookeeper,由 consumer 去获取。 而 dubbo 获取 producer 的地址就直接通过 zookeeper 提供的 client 去获取的,没啥特殊的东西。 |
45
zxc1234 OP @cxshun dubbo 用 RPC 协议 那 netty 是做什么用的 ,一直没用过 netty,都不知道是做啥的
|