京东社招面试经历(Java工程师)

1、手撕代码。牛客题霸上的原题,可以去看看:NC21 链表内指定区间反转

2、RedisMysql双写一致性方案

先更新数据库,再删缓存。数据库的读操作的速度远快于写操作的,所以脏数据很难出现。可以对异步延时删除策略,保证读请求完成以后,再进行删除操作


3、索引B+树的叶子节点都可以存哪些东西?

可能存储的是整行数据,也有可能是主键的值。B+树的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引


4、分代回收

1HotSpot JVM把年轻代分为了三部分:1Eden区和2Survivor区(分别叫fromto)。一般情况下,新创建的对象都会被分配到Eden(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。

2)因为年轻代中的对象基本都是朝生夕死的,所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。

3)在GC开始的时候,对象只会存在于Eden区和名为“From”Survivor区,Survivor“To”是空的。紧接着进行GCEden区中所有存活的对象都会被复制到“To”,而在“From”区中,仍存活的对象会根据他们的年龄值来决定去向。年龄达到一定值(年龄阈值,可以通过-XX:MaxTenuringThreshold来设置)的对象会被移动到年老代中,没有达到阈值的对象会被复制到“To”区域。经过这次GC后,Eden区和From区已经被清空。这个时候,“From”“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎样,都会保证名为ToSurvivor区域是空的。Minor GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。


5、线程之间如何通信?

1)利用最基本的synchronized

2)利用synchronizednotifywait

3while轮询的方式

4)利用LockCondition

5)利用volatile

6)利用AtomicInteger

7)利用CyclicBarrier

8)利用PipedInputStream

9)利用BlockingQueue

#京东##社招##面经##Java工程师#
全部评论

相关推荐

3 24 评论
分享
牛客网
牛客企业服务