携程暑假实习后端开发Java二面面经
自我介绍
项目相关
- 问我项目是用C还是Java,因为我有一个项目是C,一个是Java的。
- 问我从这些项目中收获了什么?
主要回答了对于技术的提升(详细就不多说了)。
八股文
- Java的类的加载机制
加载 连接(验证 准备 解析) 初始化 使用 卸载 主要讲了一下加载 连接 和初始化的过程
通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口
- (写代码)写个单例模式 我主要写了两种单例模式
// 饿汉式
public class Singleton {
private static Singleton INSTANCE = new Singleton();
private Sigleton(){};
public static Singleton getInstance() {
return INSTANCE;
}
}
// 懒汉式
public class Singleton {
private static volatile Singleton INSTANCE;
private Singletion(){};
public static Singleton getInstance(){
if(INSTANCE == null) {
synchronized(Singleton.class){
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
- 这两种是否是线程安全的?
- 你项目中用到了Spring吗?
- 你都用到了那些Spring的特性?AOP,IOC, DI, @Autowired,@Resource......一大堆
IoC(Inverse of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。 为什么叫控制反转? 控制 :指的是对象创建(实例化、管理)的权力 反转 :控制权交给外部环境(Spring 框架、IoC 容器) 将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。 在实际项目中一个 Service 类可能依赖了很多其他的类,假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。如果利用 IoC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。 在 Spring 中, IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。 Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。
- Java的值传递和引用传递的区别?
- 如何克隆一个对象?(深拷贝和浅拷贝)
反问
- 实习生培养方式
- 下个流程的间隔
- 面试评价和以后如何学习(他说我面得还好)