面试总结-java基础

1. jvm相关问题

内存分配

jvm内存区域分为5部分,线程共享:堆、方法区;线程不共享:虚拟机栈、本地方法栈、程序计数器。

  • :存放对象实例
  • 方法区:保存类信息、静态变量、常量
  • 虚拟机栈:描述java方法执行的内存模型。当线程执行一个方法的时候,创建一个栈桢,存储方法的局部变量、方法出口等。
  • 本地方法栈:作用与虚拟机栈类似,描述本地方法。
  • 程序计数器:记录程序执行的字节码的位置。

垃圾回收

哪些内存区域需要回收

线程共享的部分需要回收,即堆和方法区。线程不共享部分,即虚拟机栈、本地方法栈、程序计数器,他们随着线程的死亡而释放。

判断对象是否需要回收

a. 引用计数法,当引用数为0的时候,该对象可回收。这种方法优点是执行快,缺点是无法判断循环引用。
b. 可达性分析法。用图表示对象之间的引用关系,从root开始判断可达性,不可达的对象可回收。

垃圾回收算法

a. 标记-清除
将存活的对象进行标记,只对未存活的对象进行回收。
该方法适用于对象存活率很高的情况,但是容易造成内存碎片。
b. 复制
将区域分为对象面和空闲面,每次扫描对象面,将存货下来的对象全部复制到空闲面。
c. 标记-整理
将存活的对象向左端移动。成本比较高,但是解决了内存碎片的问题。
d. 分代收集法
年轻代主要以copy为主,年老代主要以标记-整理为主。

2. java常用的包有哪些

java.lang 核心类库,包含基本数据类型,字符串等
java.io 输入输出类库
java.util 工具包
java.reflect 反射工具

3. String、StringBuffer、StringBuilder的区别

String是字符串常量,StringBuilder、StringBuffer是字符串变量
String中value(char型数组)使用final修饰,不可变
StringBuilder中value可变,可将value赋值为长度更大的数组。而不是new一个对象
StringBuffer是线程安全的,在append方法上使用了synchronized关键字

4. final关键字的作用

final修饰类,类不能被继承
final修饰方法,方法不能被子类重写
final修饰基本类型,基本类型的值不能改变
final修饰包装类型,不能指向另一对象

5. static关键字的作用

static修饰成员变量和方法,属于类的成员变量,该类所有的对象都可以调用
static修饰代码块,在类加载的时候就会被调用,通常用来初始化静态变量

6. 类加载器的种类,作用,以及双亲委派模型

启动类加载器,负责加载核心类库里的类
扩展类加载器,负责加载lib/ext下的类
系统类加载器,负责加载classpath下的类
当需要加载一个类时,通常子类会抛给父类,如果父类加载不了,则返回给子类。
这样的话,可以避免重复加载一个类,也可以避免核心类库被篡改。

SpringIOC

由Spring容器控制对象之间的关系,对象的生成、使用和销毁。
Spring启动时,扫描所有的类。如果类标记有spring的注解,则自动生成对象,并且放入map(key是全限定名称,value是对象)中,如果成员中有注入,则通过反射生成对象放入map中。使用时,直接从map中获取对象使用。

Spring AOP

基于Spring IOC。使用动态代理的方法,Spring中存有一个map(target, List), target是目标类,用切面注解标记的类,List存放代理类的列表。即一个类可以有多个代理。当调用target类的时候,依次执行代理类,调用每个代理类的时候,使用CGLib动态代理执行结果,并且完成前后的逻辑。
静态代理:在代理类中写死代理哪个类。

4. 基础问题

怎么理解软件工程

软件工程指使用工程化的方法开发和维护高质量的软件产品。软件工程的目标是适用性强,可维护性强。软件工程方法有需求分析、设计、代码编写、测试、质量保证。

怎么理解面向对象

面向对象是一种编程思想,将事物对象化,以对象为中心编程。面向对象的特点是封装、继承和多态。封装是指将类的属性和行为封装起来,使对象模块化。继承指子类可以继承父类,使用父类的成员变量和方法,使用继承可以减少代码的重复。多态,包括重写和重载。重写指的是对父类的方法重新实现,重载指的是,同一个方法名称,在参数个数不通的情况下,有不同的实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值