Java开发面试知识点梳理(含答案)

出于篇幅考虑,这篇文章给出了10个专题。

Java面试宝典产生自我7月份准备社招跳槽的过程,当时网上找了些试题,但是没答案,然后一边梳理自己的知识,一般结合自己平时钻研的知识和工作经验,自己对试题进行了整理,解答。

也凭借着这次梳理,社招一路过关斩将,offer收割率100%。面了头条,和美团的3个事业部,均收获offer。

也预祝各位校招和社招的朋友,斩获满意的offer。悄悄告诉你,外面的世界真TM精彩!!!

-------------------------------------------------------------------

一:Java基础

1. String, Stringbuffer, StringBuilder 的区别。

答:String 是 final 类,⽆法继承,也⽆法被修改,每次修改都会创建新的 String 对象。

Stringbuffer 和 StringBuilder 则能正常被修改,两者的区别是 StringBuffer 每个方法都加了锁,是线程安全的

 

2. JAVA8 的 ConcurrentHashMap 为什么放弃了了分段锁,有什么问题吗,如果你来设计,你如何设计。

答:在 1.8 之前, ConcurrentHashMap 通过一个大⼩为 16 的 Segment 数组,这 16 个Segement 继承自 ReenterLock,类似 16 把锁均匀的维护着所有的桶。每次写操作将会锁住 1 个 segment 下所有的桶,锁力度较大,会降低支持的并发数。所以 1.8 进行了优化,采用了更细力度的锁, hash 后,如果没有相关的桶,不加锁,直接通过 Unsafe 的类似 CAS 操作将值放入,如果有桶,则对这个桶加锁,其他桶的节点依然可以正常操作

 

3. 继承和聚合的区别在哪。

答:继承主要描述的是‘A is B’的关系,而聚合描述的是‘A has B’的关系,一般情况下,优先使用聚合,因为继承可能会继承父类中一些不必要的属性和方法。但是,如果需要向上转型,就需要用继承。

 

4. 反射的原理,反射创建类实例的三种方式是什么。

答:当⼀个类加载完成后,会生成一个 Class 对象, Class 对象可以获取类的所有属性,⽅法等数据。

⽅式一:对象调用 getClass()方法

⽅式二:类名.class

⽅式三:Class.forName(全路径名称)

创建 class 对象后,直接调用 class 对象的 newInstance()方法即可创建实例

 

二:Jvm

1. Jvm 包括那⼏大部分。

答:主要包含 4 个部分:类加载器,字节码执行引擎,内存模型,本地方法调⽤

图参考:https://blog.csdn.net/zsh2050/article/details/81229034

2. 什么情况下会发生栈内存溢出。

答:一般在递归调用的时候容易发生。

虚拟机栈描述的是 Java 方法执行的内存模型,每个⽅法的执行都会创建一个栈帧,用于保存局部变量表, 操作数栈,动态链接,方法出口等信息。

如果请求的栈深度大于虚拟机所允许的最大深度,将抛出 StackOverFlowError,如果无法申请所需的内存,则会抛出 OutOfMemoryError。

 

3. JVM 内存为什么要分成新生代,⽼年代,持久代。新生代中为什么要分为 Eden 和Survivor。

答:分为新生代,⽼年年代和持久代是为了不同的区域根据特点采用不同的 GC 策略,例如新生代对象⼀般是朝⽣夕死,一般采⽤复制算法,区分进一步分为一个 Eden 和两个Survivor 区域。而老年代和持久代则一般采⽤标记清除算法

 

4. 详细介绍下 CMS 垃圾回收器器。

答:CMS 是⽼年代垃圾回收器,⽬标是最短的停顿时间。它的⼯作主要包括 4 个阶段:

(1)初始化标记,主要是标记老年年代中被 GCroots 和新生代引用的对象,需要 STW

(2)并发标记:从第一步对象开始,并发的完成标记

(3)重新标记:因为第二步是并发完成的,过程中对象引用可能发生变化,这一步主要是保证实际清理前标记是正确的,需要 STW

(4)并发清除:对标记对象并发进行清除

第一步和第三部虽然依然需要 STW,但完成的工作较简单,较少,时间较短;最耗时的完成标记过程和清除过程都是并发进行的,所以 CMS 能控制较短的停顿时间。

【STW的解释:Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。GC时的Stop the World(STW)是大家最大的敌人。】

参考:https://www.cnblogs.com/williamjie/p/9222839.html

三:开源框架知识

1. 简单介绍 Spring 加载流程。

答:资源的定位(Resource) -> bean 的解析(BeanDefinition) -> bean 的注册(conncurrentHashMap)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值