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