最近在备战面试的过程当中,整理一下面试题。大多数题目都是本身手敲的,网上也有不少这样的总结。本身感受老是很乱,因此花了好久把本身以为重要的东西总结了一下。html

面向对象和面向过程的区别

面向过程:
  优势:性能比面向对象高,由于类调用时须要实例化,开销比较大,比较消耗资源;好比单片机、嵌入式开发、Linux/Unix等通常采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象:
  优势:易维护、易复用、易扩展,因为面向对象有封装、继承、多态性的特性,能够设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
java

Java语言有哪些特色?

  1,简单易学;2,面向对象(封装,继承,多态);3,平台无关性(Java虚拟机实现平台无关性);4,可靠性;5,安全性;6,支持多线程(C++语言没有内置的多线程机制,所以必须调用操做系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);7,支持网络编程而且很方便(Java语言诞生自己就是为简化网络编程设计的,所以Java语言不只支持网络编程并且很方便);8,编译与解释并存;面试

什么是字节码?采用字节码的最大好处是什么?什么Java是虚拟机?

先看下java中的编译器和解释器:
  Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只须要面向虚拟机,生成虚拟机可以理解的代码,而后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫作字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不一样的,可是实现的虚拟机是相同的。Java源程序通过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,而后在特定的机器上运行,这就是上面提到的Java的特色的编译与解释并存的解释。
Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。
采用字节码的好处:
  Java语言经过字节码的方式,在必定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特色。因此Java程序运行时比较高效,并且,因为字节码并不专对一种特定的机器,所以,Java程序无须从新编译即可在多种不一样的计算机上运行。
编程

什么是Java虚拟机

  任何一种能够运行Java字节码的软件都可当作是Java的虚拟机(JVM)小程序

什么是Java程序的主类?应用程序和小程序的主类有何不一样?

  一个程序中能够有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不必定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。数组

什么是JDK?什么是JRE?

  JDK:顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其余供开发者使用的工具包。
浏览器

JDKJDK
  JRE:普通用户而只须要安装JRE(Java Runtime Environment)来 来运行Java程序。而程序开发者必须安装JDK来编译、调试程序。

环境变量Path和ClassPath的做用是什么?如何设置这两个环境变量?

Java环境变量PATH和CLASSPATH - 简书 www.jianshu.com/p/d63b099cf…安全

Java应用程序与小程序之间有那些差异?

简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏相似。网络

字符型常量和字符串常量的区别

1) 形式上:
字符常量是单引号引发的一个字符
字符串常量是双引号引发的若干个字符
2) 含义上:
字符常量至关于一个整形值(ASCII值),能够参加表达式运算
字符串常量表明一个地址值(该字符串在内存中存放位置)
3) 占内存大小
字符常量只占一个字节
字符串常量占若干个字节(至少一个字符结束标志)
多线程

Java语言采用何种编码方案?有何特色?

  Java语言采用Unicode编码标准,Unicode(标准码),它为每一个字符制订了一个惟一的数值,所以在任何的语言,平台,程序均可以放心的使用。

构造器Constructor是否可被override

  在讲继承的时候咱们就知道父类的私有属性和构造方法并不能被继承,因此Constructor也就不能被override,可是能够overload,因此你能够看到一个类中有多个构造函数的状况。

重载和重写的区别

  重载:发生在同一个类中,方法名必须相同,参数类型不一样、个数不一样、顺序不一样,方法返回值和访问修饰符能够不一样,发生在编译时。
  重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;若是父类方法访问修饰符为private则子类中就不是重写。

java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍,访问控制符public,protected,private,以及默认的区别

www.2cto.com/kf/201605/5…

java中equals方法的用法以及==的用法

www.cnblogs.com/bluestorm/a…

String和StringBuffer、StringBuilder的区别是什么?String为何是不可变的?

可变性
  String类中使用字符数组保存字符串,private final char value[],因此string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[]value,这两种对象都是可变的。
线程安全性
  String中的对象是不可变的,也就能够理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操做,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,因此是线程安全的。StringBuilder并无对方法进行加同步锁,因此是非线程安全的。
性能
  每次对String 类型进行改变的时候,都会生成一个新的String对象,而后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer对象自己进行操做,而不是生成新的对象并改变对象引用。相同状况下使用StirngBuilder 相比使用StringBuffer 仅能得到10%~15% 左右的性能提高,但却要冒多线程不安全的风险。
对于三者使用的总结:
若是要操做少许的数据用 = String
单线程操做字符串缓冲区 下操做大量数据 = StringBuilder
多线程操做字符串缓冲区 下操做大量数据 = StringBuffer

自动装箱与拆箱

  装箱:将基本类型用它们对应的引用类型包装起来;
  拆箱:将包装类型转换为基本数据类型;
  Java使用自动装箱和拆箱机制,节省了经常使用数值的内存开销和建立对象的开销,提升了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动做。

类、方法、成员变量和局部变量的可用修饰符 -

blog.csdn.net/yttcjj/arti…

在一个静态方法内调用一个非静态成员为何是非法的?

  因为静态方法能够不经过对象进行调用,所以在静态方法里,不能调用其余非静态变量,也不能够访问非静态变量成员。

在Java中定义一个不作事且没有参数的构造方法的做用

  Java程序在执行子类的构造方法以前,若是没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。所以,若是父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,由于Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不作事且没有参数的构造方法。

import java和javax有什么区别

www.cnblogs.com/EasonJim/p/…

接口和抽象类的区别是什么?

1.接口的方法默认是public,全部方法在接口中不能有实现,抽象类能够有非抽象的方法
2.接口中的实例变量默认是final类型的,而抽象类中则不必定
3.一个类能够实现多个接口,但最多只能实现一个抽象类
4.一个类实现接口的话要实现接口的全部方法,而抽象类不必定
5.接口不能用new实例化,但能够声明,可是必须引用一个实现该接口的对象
从设计层面来讲,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

成员变量与局部变量的区别有那些?

  1. 从语法形式上,当作员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量能够被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰;
  2. 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存
  3. 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的建立而存在,而局部变量随着方法的调用而自动消失。
  4. 成员变量若是没有被赋初值,则会自动以类型的默认值而赋值(一种状况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

建立一个对象用什么运算符?对象实体与对象引用有何不一样?

  new运算符,new建立对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用能够指向0个或1个对象(一根绳子能够不系气球,也能够系一个气球);一个对象能够有n个引用指向它(能够用n条绳子系住一个气球)

什么是方法的返回值?返回值在类的方法里的做用是什么?

  方法的返回值是指咱们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的做用:接收出结果,使得它能够用于其余的操做!

一个类的构造方法的做用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为何?

  主要做用是完成对类对象的初始化工做。能够执行。由于一个类即便没有声明构造方法也会有默认的不带参数的构造方法。

构造方法有哪些特性?

  1,名字与类名相同;2,没有返回值,但不能用void声明构造函数;3,生成类的对象时自动执行,无需调用。

静态方法和实例方法有何不一样?

静态方法和实例方法的区别主要体如今两个方面:

  1. 在外部调用静态方法时,可使用"类名.方法名"的方式,也可使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法能够无需建立对象。

  2. 静态方法在访问本类的成员时,只容许访问静态成员(即静态成员变量和静态方法),而不容许访问实例成员变量和实例方法;实例方法则无此限制

对象的相等与指向他们的引用相等,二者有什么不一样?

  对象的相等 比的是内存中存放的内容是否相等而 引用相等 比较的是他们指向的内存地址是否相等。

在调用子类构造方法以前会先调用父类没有参数的构造方法,其目的是?

  帮助子类作初始化工做。

什么是多态机制?Java语言是如何实现多态的?

blog.csdn.net/bornlili/ar…

via:山川, 连接:https://juejin.im/post/5a02cd53f265da431b6ca326 来源:掘金 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。