面试Java常问问题汇总

  

  又是一年的金三银四,随着各个行业的复工,大家也都开启了找工作的热潮,那么作为优就业Java培训的老师,也为很多的学生解决面试上的一些难题,那么今天给大家简单的介绍些Java面试中会遇到的问题。

  1、JAVA的跨平台原理

  源码被编译会生成字节码文件,通过不同平台上下载的不同版本的JVM,将字节码文件翻译成对应的机器码。注意的是,跨平台的Java程序,不是JVM。JVM是使用C/C++开发的,是编译后的字节码,不能跨平台。

  2、int和Integer的区别?

  1)、Integer是int的包装类,int则是java的一种基本数据类型2)、Integer变量必须实例化后才能使用,而int变量不需要3)、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值4)、Integer的默认值是null,int的默认值是0

  3、Java对象的生命周期

  创建阶段、应用阶段、不可见阶段、不可达阶段、收集阶段、终结阶段、对象空间重新分配阶段等等,

  4、Map或者HashMap的存储原理

  HashMap是由数组+链表的一个结构组成,具体参照:HashMap的实现原理

  5、JVM结构原理、GC工作机制详解

  具体参照:JVM结构、GC工作机制详解,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2、GC回收机制的两种算法,a、引用计数法b、可达性分析算法(这里的可达性,大家可以看基础2 Java对象的什么周期),

  6、JAVA面向对象的特征?

  封装、继承、多态、抽象封装:通过类来体现,将实体封装成类,其中包含属性和方法

  继承:类与类之间可以继承特点,使得代码重用

  多态:通过传递给父类对象引用不同的子类从而表现出不同的行为

  抽象:将一类实体的共同特性抽象出来,封装在一个抽象类中。

  7、final,finally,finalize的区别

  final:

  1、修饰符(关键字)如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。

  2、将变量或方法声明为final,可以e68a84e8a2ade799bee5baa6e79fa5e9819331333365666235保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。

  finally:

  在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。

  finalize:

  是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。

  finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。

  8、Java有没有goto?

  goto是java语言中的保留字,目前还没有在java中使用

  goto是c语言中的与条件配合使用,用于跳出循环等操作,java是结构化程序语言,在java中使用goto会造成许多不必要的麻烦,goto还没被使用,java要求简单方便

  9、error和exception有什么区别?

  Exception和Error都继承了Throwable类,在java中只有Throwable类型的实例才可以被抛出(Throw)或者捕捉(catch),它是异常处理机制的基本组成类型。

  Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。

  Error指在正常情况下,不大可能出现的情况,绝大部门的Error都会导致程序处于非正常的,不可恢复状态。既然是非正常情况,所以不便于也不需要捕获。比如常见的OutOfMemoryError之类,都是Error的子类。

  Exception类又分为可检查异常(checked)和不检查异常(unchecked),可检查异常在源码里必须显示的进行捕获处理,这是编译期检查的一部分。

  不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误。

  10、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?

  看A、B两字段做组合索引的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有索引效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有索引效果,如果使用双%号匹配,那么则无索引效果

  11、List,Set,Map是否继承自Collection接口?

  List和Set是继承自Collection接口专的接口,Set不允许重复的项目,List允许重复项目,Set接口派生的类有TreeSet,HashSet,LinkedHashSet。属List接口派生的类有ArrayList,Vector等。Map是独立的接口,不继承Collection接口。

  12、是否可以继承String类?

  “不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。”

  13、分布式、集群环境中,缓存如何刷新,如何保持同步?

  A、缓存如何刷新?1、定时刷新2、主动刷新覆盖,每个缓存框架都有自带的刷新机制,或者说缓存失效机制,就拿Redis和Ehcache举例,他们都有自带的过期机制,另外主动刷新覆盖时,只需获取对应的key进行数据的覆盖即可

  B、缓存如何保持同步?这个redis有自带的集群同步机制,即复制功能,Ehcache也有分布式缓存同步的配置,只需要配置不同服务器地址即可

  13、如何阻止新来的任务提交?

  通过将线程池的状态改成STOP,当再将执行execute提交任务时,如果测试到状态不为RUNNING,则抛出rejectedExecution,从而达到阻止新任务提交的目的.

  14、String、StringBuilder、StringBuffer之间的区别?

  (1)运行速度:StringBuilder>StringBuffer>String

  String是字符串常量,其他两者属于字符串变量,String对象创建后不可以改变,对String的操作实际上是不断创建和回收的过程,执行速度慢。

  (2)线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的

  StringBuffer对象在字符串缓冲区被多个线程使用时,可以使用synchronized关键字,能够保证线程安全。

  (3)使用场景

  String适用于少量的字符串操作;StringBuilder适用于单线程下的在字符串缓冲区进行大量的操作的情况下;StringBuffer适用于多线程下的在字符串缓冲区进行大量的操作的情况下。

  15、==和equals的区别?

  (1)基本数据类型之间的比较,使用双等号(==),比较两者的值

  (2)复合数据类型(类)之间的比较,比较的是在内存池的地址,使用equals。在Java语言中,通常equals交给开发者自行定义,满足什么条件的Object是equals的。

  16、java容器都有哪些?

  JAVA的容器包括如下:

  List,Map,Set,Collection,List,LinkedList,ArrayList,Vector,Stack,Set

  Map,Hashtable,HashMap,WeakHashMap

  17、创建线程有哪几种方式?

  有4种方式可以用来创建线程:

  1.继承Thread类(真正意义上的线程类),是Runnable接口的实现。

  2.实现Runnable接口,并重写里面的run方法

  3.应用程序可以使用Executor框架来创建线程池。Executor框架是juc里提供的线程池的实现。

  4.实现Callable接口通过FutureTask包装器来创建Thread线程

  18、什么是反射?

  在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法

  Java反射机制主要提供了以下功能:

  1.在运行时判断任意一个对象所属的类。

  2.在运行时构造任意一个类的对象。

  3.在运行时判断任意一个类所具有的成员变量和方法。

  4.在运行时调用任意一个对象的方法。

  19、shutdownNow()有什么功能?

  阻止新来的任务提交,同时会中断当前正在运行的线程,即workers中的线程。另外它还将workQueue中的任务给移除,并将这些任务添加到列表中进行返回。

  20、为何对提交的任务不产生任何影响?

  在调用中断任务的方法时,它会检测workers中的任务,如果worker对应的任务没有中断,并且是空闲线程,它才会去中断。另外的话,workQueue中的值,还是按照一定的逻辑顺序不断的往works中进行输送的,这样一来,就可以保证提交的任务按照线程本身的逻辑执行,不受到影响。

  以上就是优就业Java培训老师给大家总结的在面试中常见的问题,希望对面试的你们有一定的帮助。

猜你喜欢

转载自www.cnblogs.com/jiuq521/p/12702780.html