java面试---基础篇

什么是java虚拟机,为什么说java平台无关性
java虚拟机是一个可执行java字节码的虚拟机进程,将java字节码翻译成硬件平台能执行的代码
不同的平台装有不同的jvm,将相同的.class字节码文件翻译成不同平台所能执行的字节码
JDK、JRE、JVM
jdk:java开发工具包
jre:java运行环境
jvm:java字节码运行环境
什么是自动拆装箱
基本类型和引用类型之间的转换
面向对象是什么?特性是什么
面向对象是如今软件开发的主流思想,将功能封装在对象中,让对象去实现具体的细节
封装:封装使类具有独立性和隔离性,只暴露给类外部或者子类必须的属性和操作
继承:对现有类的一种复用机制
多态:是在继承的基础上实现的,三个要素分别是:继承、重写和父类引用指向子类对象
父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为
面向对象的六大原则
1)单一职责:
不要存在多于一个导致类变更的原因
2)里氏替换原则
所有引用基类的地方必须能够透明地使用其子类的对象,子类可以扩展父类的功能,但不能改变父类的功能。
3)依赖倒置
尽量面向接口编程
4)接口隔离
客户端不应该依赖他不需要的接口,接口最小化,臃肿的接口依据功能可以将其拆分为多个接口
5)迪米特法则
高内聚,低耦合,一个类要尽量减少对于其他对象的依赖
6)开闭原则
一个软件实体应当对扩展开放,对修改关闭
**设计模式
工厂模式**
http://www.runoob.com/design-pattern/factory-pattern.html
在工厂模式中有一个类专门负责实例化大量公共接口,消费者无论需要哪种产品只需向工厂发起请求即可。用来创建同一产品的不同类型
抽象工厂模式
围绕一个超级工厂创建其他工厂。用于创建不同的产品
区别:简单工厂模式:根据条件确定一个接口有哪个具体的产品来实现
工厂模式:创建多个工厂类,每个工厂类都对应一个获得接口A实例的方法,用户决定用那个方法—-常见同一产品的不同类型
抽象工厂:对工厂方法进行扩展,在各个工厂类中,在增加一个获得接口B实力的方法—创建不同的产品
适配器模式
是两个不兼容的类之间的桥梁,结合了两个独立接口的功能
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能在一起工作的类可以在一起工作
观察者模式
当对象间存在一对多关系时,采用观察者模式,比如,当一个对象被修改时,则会自动通知他的依赖对象,并被自动更新,可以避免组件间紧密耦合
单例模式
该类负责创建自己的对象,同时确保对象只被创建一次
饿汉式每次调用的时候不用做创建,直接返回已经创建好的实例。这样虽然节省了时间,但是却占用了空间,实例本身为static的,会一直在内存中带着。懒汉式则是判断,在用的时候才加载,会影响程序的速度。最关键的是,在并发的情况下,懒汉式是不安全的。
进制表示
ox:十六进制
负数的二进制补码:对应的正数的二进制按位取反再加一
值传递和引用传递
值传递是传递了基本类型变量的副本,改变副本的值,原变量的值不变。
引用传递传递了引用类型变量的一个地址,这时形参和实参指向同一个地址,如果改变的形参值,就会改变实参中的值。
可否在static环境中访问非static变量
不能,static变量是属于类的,可以通过类名去访问,在类被载入到jvm中时,就被初始化了,而非static变量是属于对象的,只有当类被实例化后才能被初始化。
方法覆盖和方法重载
方法覆盖:在子类继承父类时,对父类的方法进行了重新的定义,函数名、传入的形参、返回类型等都与父类方法一样—运行时多态
方法重载:在同一个类内部,方法名相同,但传入形参的类型和数目不同的两个或两个以上的方法—编译时多态
什么是构造函数,什么是构造函数的重载
当类被实例化时,会自动调用构造函数对类进行初始化,当类中没有开发者定义的构造函数时,java编译器会自动构造一个空参数的构造函数。
构造函数的重载和类的重载类似,可以为一个类构造多个形参个数、类型不一样的构造函数。
java支持多继承吗
java只支持单继承,不支持多继承,但是接口的实现弥补了这一缺陷。
解释内存中的栈、堆、方法区
栈:每个线程都有一个栈区,存放基本数据类型和引用变量、方法
堆:存放new出对象,所有线程共享堆内存
方法区:静态区,和堆内存一样,被所有线程共享包含所有的class和static变量
接口和抽象类
相同点:1 接口和抽象类都不能被实例化
2 接口和抽象类只有在被实现了他们中的接口之后才能够被实例化。
不同点:
1 抽象类中可以定义非抽象的方法,但是接口中全部都是抽象(public,abstract)的方法
2 从编程角度来看,抽象类表示的是一种继承关系,而接口是一种实现关系。
3 接口中定义的方法默认为 public final static
抽象类中的方法可以被定义为private,public、protect,但是,抽象类中的抽象方法不能被private、static、synchronized、native修饰
String、StringBuilder、StringBuffer的区别
1 String、StringBuilder、StringBuffer都可以用于字符串的操作,但是String类型是不可变类,一经定义就不能修改,而其于二者是可以修改的
2 StringBuilder和StringBuffer相比,StringBuilder是线程不安全的,StringBuffer是线程安全的
3 因此,针对数据量较小的字符串操作就使用String,针对单线程较多数据量的字符串操作就使用StringBuilder,针对多线程的多数据量的字符串操作就使用StringBuffer

猜你喜欢

转载自blog.csdn.net/xiongyu9767/article/details/81317050