基础面试题
1、什么是java
java是一门面向对象编程语言,不仅吸收了C++语言的各个优点,还摒弃了C++里难以理解的多继承,指针等概念
因此java语言具有强大和简单易用的两个特征。
2、Jdk和Jre和JVM的区别
JDK:JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
Jre:JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
Jvm:JVM(Java Virtual Machine),即java虚拟机, java运行时的环境,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。
3、 什么是跨平台性?原理是什么
所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行
实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程
4、Java有哪些数据类型
定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空
分类:
- 基本数据类型
-
- 数值类型
-
- 整数类型(byte,short,int,long)
-
-
- 浮点类型(float,double)
-
-
-
- 字符型(char)
-
-
-
- 布尔型(boolean)
-
- 引用数据类型
-
- 类(class)
-
-
- 接口(interface)
-
-
-
- 数组( [] )
-
5、&和&&的
- &运算符有两种用法:(1)按位与;(2)逻辑与。
- &&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端
的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表
达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
6、final finally finalize区别
- final可以修饰类,变量,方法,修饰类表视类不可以被继承、修饰方法表视方法不能被重写、修饰变量表视变量不能被修改
- finally一般作用在try-catch代码块中,在处理异常的时候,通常我们会将一定要执行的代码放进finally代码块中,表视不是是否出现异常,都会执行改代码块中的代码,一般用来存放一些关闭资源的代码。
- finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的 最后判断。
7、 static存在的主要意义
- static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能
使用属性和调用方法! - static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置
于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执
行每个static块,并且只会执行一次。 - 为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,
很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
8、面向对象和面向过程的
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、
嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出
低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
9、面向对象五大基本原则是什么
1、单一职责原则SRP(Single Responsibility Principle)
类的功能要单一,不能包罗万象,跟杂货铺似的。
2、开放封闭原则OCP(Open-Close Principle)一个模块对于拓展是开放的,对于修改是封闭的,想要增加 功能热烈欢迎,想要修改,哼,一万个不乐
3、里式替换原则LSP(the Liskov Substitution Principle LSP)
子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。哈哈
4、依赖倒置原则DIP(the Dependency Inversion Principle DIP)
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实
现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中
国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的抽象是中国人,而不是你是xx村
的
5、接口分离原则ISP(the Interface Segregation Principle ISP)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电
话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
10、String s = "java" 与String s = new String("java")
String s = "java";
String s = new String("java");
这两者的内存分配方式是不一样的。
第一种: String s ="java"; : 声明字面量的方式定义string, 在常量池中没有java的情况下,创建一个对象
有的话就不会创建了
第二种方式: new String("java") 创建两个对象, new String将这个保存到JVM堆中, 另一个对象也会保存到常量池, 声明了字面量和String对象 在常量池中没有的情况下创建两个