元戎启行Java后端一面凉经
背景:985本硕,快手实习
自我介绍
Integer i = new Integer(100); Integer j = new Integer(100); (i == j) ? false // 只有valueOf才会使用常量池(-128~127),new Integer会直接创建新对象 String a = "abc"; String b = "a" + "b" + "c"; // 经过编译器优化成了String str = “abc” (a == b) ? true // 字符串常量池,字面量相同的引用也相同 String c = "abcd"; String d = a + "d"; // 经过编译器优化成了StringBuilder (c == d) ? false
回答输出结果,为什么?
String b在JVM中具体是怎么创建的?
栈中创建一个对String类的对象引用变量b,然后通过符号引用去字符串常量池里找有没有”abc”,如果没有,则将”abc”存放进字符串常量池,并令str2指向”abc”,如果已经有”abc” 则直接令b指向“abc”。“abc”存于常量池在 编译期间完成 。
JVM中运行时数据区都包含那些部分?
新生代内存(Young Generation) (Eden 区、两个 Survivor 区 S0 和 S1) 老生代(Old Generation) 永久代\元空间
堆是干嘛的?方法区是干嘛的?虚拟机栈是干嘛的?
讲讲堆分为那些部分?每个部分都是啥?
讲讲垃圾收集?
一个对象是怎么从新生代流转到老年代的?
survive0区域、survive1区域,具体讲讲?
大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 S0 或者 S1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁和年龄中位数的最小值),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。 HotSpot实现的复制算法流程如下: 1. 当Eden区满的时候,会触发第一次Minor gc,把还活着的对象拷贝到Survivor From区;当Eden区再次触发Minor gc的时候,会扫描Eden区和From区域,对两个区域进行垃圾回收,经过这次回收后还存活的对象,则直接复制到To区域,并将Eden和From区域清空。 2. 当后续Eden又发生Minor gc的时候,会对Eden和To区域进行垃圾回收,存活的对象复制到From区域,并将Eden和To区域清空。 3. 部分对象会在From和To区域中复制来复制去,如此交换15次(由JVM参数MaxTenuringThreshold决定,这个参数默认是15),最终如果还是存活,就存入到老年代。
Java线程有那些状态,各个状态是怎么流转的
如果执行sleep方***进入什么状态
线程同步机制了解嘛?
Lock有那些具体实现?
Synchronize和RetreentLock有什么区别?分别会在什么情况下使用?
讲讲Synchronize锁升级?
讲讲CAS的原理?会遇到什么问题?怎么解决?
线程安全的集合类有那些?
如果我想要一个线程安全的List,应该怎么做?
线程池了解嘛?有哪些核心参数?执行流程是什么?
内存有限,快速找到top10000,怎么办?
数据量极大,找到一个数在其中是否存在,怎么做?
布隆过滤器的原理?优缺点?
如果让你实现布隆过滤器的hash算法,怎么写?
k(hash算法个数) = -(ln p)/ (ln 2) p为误检率
Mysql事务讲一讲
Mysql是如何实现事务的四大特性的?
redo log、undo log、bin log都是干啥的?
Innodb的索引的数据结构是什么?
B树和B+树的区别是什么,为什么使用B+树?
聚簇索引和非聚簇索引的区别是什么?
非主键索引是聚簇索引吗,怎么实现的?讲讲回表?
select a from database where b = 1 order by c
,如果是你该怎么建立索引?为什么这么建立?tcp、udp有什么区别?有什么优缺点?
tcp比udp效率高?为什么tcp比udp效率高?
总结:面了一个小时八股,我写的答案的都是当时没答出来的......
#元戎启行##面经##23届提前批#