基础面试题

面试题:请解释PATHCLASSPATH的区别?

· PATH是操作系统的路径,windows中使用的是PATHLinux下用的是/etc/profile

· CLASSPATHJava解释程序时所需要的路径,指的是类的加载路径;

 

面试题:请问在String对象比较的时候“==”和“equals()”的区别?

· “==”:实现的是数值比较,比较的是两个对象的地址数值是否相等;

· “equals()”:是String类中的一个方法,用于比较两个字符串的内容是否相等。

 

面试题:请解释String类两种实例化方式的区别?

· 直接赋值:只会开辟一块堆内存空间,并且声明的对象可以自动保存在对象池之中,以供相同内容的字符串对象引用;

· 构造方法实例化:会开辟两块堆内存空间,并且有一块堆内存将成为垃圾,此类模式产生的实例化对象,不会自动入池,但是可以通过intern()方法手工入池。 

 

面试题:抽象类与接口的区别

 

No.

区别

抽象类

接口

1

关键字

abstract class

interface

2

组成

属性、常量、构造、普通方法、抽象方法

全局常量、抽象方法

3

权限

可以使用各种权限

只能够是public访问权限

4

子类使用

使用extends继承抽象类

使用implements实现接口

5

关系

抽象类可以实现多个接口

接口不允许继承抽象类,但是一个接口可以继承多个父接口

6

使用

都需要定义有子类,子类一定要覆写所有抽象方法,并且依靠子类对象的向上转型实现抽象类或接口的对象实例化操作

7

限制

一个子类只能够继承一个抽象类

一个子类可以实现多个接口

 

面试题:请解释一下OverloadingOverride的区别?在OverLoading时能否改变返回值类型?

No.

区别

重载

覆写

1

定义

方法名称相同,参数的类型和个数不同

方法名称、参数类型和个数、返回值全部相同

2

范围

发生在一个类之中

发生在继承关系类中

3

权限

没有权限要求,可以使用任意权限

被子类所覆写的方法不能拥有比父类更为严格的访问控制权限

4

英文单词

Overloading

Override

 

面试题:thissuper的区别?

No.

区别

this

super

1

定义

调用本类的属性、普通方法、构造方法,如果本类没有指定名称的结构存在,则调用父类

由子类直接调用父类的属性、方法、构造,不查找子类本身

2

约定

this调用构造时必须放在构造方法首行,表示调用本类构造

super调用父类构造时,必须放在子类构造方法的首行,而且一定会存在有“super()”的语句

3

特殊

表示当前对象

-

 

面试题:public class class的区别 ?

· “public class”:要求类名称与文件名称保持一致,一个*.java文件里面只允许有一个public class定义,只有定义为public class的类才可以被外部的开发包所使用;

· “class”:类名称可以和文件名称不一致,生成的*.class文件的名称为类名称,在一个*.java文件之中可以保存多个class定义的类,并且编译之后会根据不同的类定义创建出不同的“*.class”文件,如果使用class定义,则类只允许本包访问。

 

面试题:请解释ErrorException的区别?

· ErrorJVM虚拟机错误,此时的异常无法处理;

· Exception:程序运行中出现的异常,这个时候可以进行处理; 也就是说用户可以处理的异常都是Exception的子类。

 

面试题:异常处理流程:

· 当程序运行之中产生了异常之后,JVM会根据产生的异常类型,找到与之匹配的XxxException类并且自动创建一个异常类的实例化对象;

· 随后需要判断该程序代码之中是否可以进行异常处理,就是判断是否可以通过try来捕获此异常对象,如果没有相关的异常处理,则程序会中断当前的执行操作,而后交由JVM做默认处理,输出异常信息之后,程序中断执行;

· 如果说现在有异常处理,那么此异常类的实例化对象将会由try语句捕获;

· 随后会交由catch匹配异常类型,根据每一个已经出现的catch类型进行匹配处理,如果此时已经匹配到了合适的catch的异常,那么将会使用此catch中所带的语句进行处理,如果没有匹配上,则继续向后面的catch匹配,那么这个时候就有可能产生两种情况:匹配成功并且正常处理、匹配失败没有处理;

· 不管现在是否匹配catch成功都会将操作交由finall代码执行,进行一些固定的收尾操作;

· 随后在finally代码执行完毕后,会判断此异常是否正常处理,如果正常处理了,则继续向后执行其它代码,如果没有正常处理了,则交由JVM默认处理。

 

面试题:请解释throwthrows区别?

· throw:表示在方法之中手工抛出异常;

· throws:在方法声明上使用,表示将此方法中有可能出现的异常告诉给调用者,也可以表示本方法不处理异常,交由方法的被调用处处理。

 

面试题:请解释一下ExceptionRuntimeException的区别?请写出几个你常见的RuntimeException

· RuntimeExceptionException的子类;

· RuntimeException的异常可以不需要强制性进行处理,而非RuntimeException的子类就需要强制性异常处理;

 

面试题:请解释ComparableComparator的区别?

· 如果要进行对象数组的比较处理,那么必须有比较器的支持,比较器有两个:ComparableComoparator

· java.lang.Comparable是在类定义的时候实现好的接口,里面只定义有一个compareTo()方法;

· java.util.Comparator属于挽救的比较器接口,需要单独定义一个比较规则类,里面有一个compare()方法,在JDK 1.8开始将其定义为函数式接口。

 

面试题:请解释ThreadRunnable实现多线程的区别?

面试题:请解释多线程的两种实现模式?

· 多线程的操作一定需要一个线程的主体类,那么这个类可以继承Thread或实现Runnable接口,但是如果使用了继承Thread类的方式处理,则一定会造成单继承局限,所以开发之中优先考虑使用Runnable实现多线程处理;

· 使用Runnable要比Thread类更加清楚的描述多个线程的数据共享这一概念。

 

面试题:请说明线程的状态控制

1线程对象使用new来进行创建,但是对于JVM而言,此时也只是创建了一个线程类的对象而已,这个对象还没有意义;

2当线程对象调用了start()之后才表示线程已经启动了,但是此时可能有20个线程同时调用start(),所以调用了start()不表示你就可以执行了;

3所有的线程调用了start()之后将进入到就绪状态,等待系统分配资源(等着抢占资源);

4抢占到资源的线程开始执行,但是一个线程并不能够一直占用资源,而是需要进行轮流运行,所以当一个线程运行一段时间(不固定)之后,那么就会让出资源,虽有其它线程继续开始抢占。

5如果此时线程的操作执行完毕(run()执行完了),那么将进入到结束状态。

 

面试题:请问多个线程访问同一资源时需要注意什么?可能带来那些问题

· 多个线程访问同一资源必须考虑同步问题,同步可以使用synchronized定义方法或代码块;

· 过多的同步可能会造成死锁。

 

面试题:请解释wait()sleep()的区别?

· wait()Object类中定义的方法,必须通过notify()notifyAll()唤醒;

· sleep()Thread类中的static方法,到时间之后可以自动唤醒。

 

面试题:请说明线程池的创建

·普通的执行线程池接口:java.util.concurrent.ExecutorService

·调度线程池接口:java.util.concurrent.ScheduledExecutorService

线程池创建的核心的功能类(用户直接使用的):java.util.concurrent.Executors,提供有如下的方法:

· 创建无大小限制的线程池:public static ExecutorService newCachedThreadPool()

· 创建固定大小的线程池:public static ExecutorService newFixedThreadPool(int nThreads)

· 创建单线程池:public static ExecutorService newSingleThreadExecutor()

· 创建定时调度池:public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

 

面试题:请解释ArrayList LinkedList 的区别?

· ArrayList LinkedList 都属于List 接口的子类;

· ArrayList 是针对于数组的包装,而LinkedList 是针对于链表的包装;

· ArrayList 的时间复杂度为1,而LinkedList 时间复杂度为n

 

面试题:请解释ArrayList Vector 区别?

· ArrayListJDK 1.2 版本提供,属于非线程安全的操作,性能更高。ArrayList 支持IteratorListIteratorforeach 输出;

· VectorJDK 1.0 版本提供,属于线程安全操作,性能相对较低。Vector 支持IteratorListIteratorforeachEnume  

 

面试题:请解释HashSetTreeSet区别?

· HashSet保存的数据无序,而TreeSet保存的数据有序;

· HashSet允许存放有一个null,而TreeSet不允许存放null

 

面试题:请解释HashMap Hashtable 的区别?

· HashMap JDK 1.2 提供的,属于非线程安全的操作,允许key value 保存null

· Hashtable JDK 1.0 提供的,属于线程安全的操作,不允许key 或者是value 保存nul,会造成NullPointerException

JDK 1.8 开始,如果在HashMap 里面保存的数据量过大的时候,会自动将Map 集合变为红黑树(均衡二叉树)以保证查询速度。

 

面试题:请解释Map 如何使用Iterator 输出

· 利用Map 接口中的entrySet()方法将Map 集合变为Set 集合;

· Set 接口之中提供有iterator()方法,可以利用此方法将Set 集合使用Iterator 输出;

· 利用Iterator 迭代后取出每一个的Map.Entry 对象,并且进行key value 的分离。

 

面试题:请解释CollectionCollections的区别?

· Collection是集合的接口,定义有ListSet子接口;

·Collections是一个集合的工具类,可以方便的操作ListSetMap等接口。  

 

面试题:请解释enum Enum 的区别?

· enum JDK 1.5 之后追加的一个关键字;

· Enum 属于一个枚举的抽象类,也是在JDK 1.5 之后追加;

· 使用enum 定义的枚举就相当于一个类继承了Enum 类而已。

 

面试题:请解释intInteger的区别?

· int的包装类为Integer,而且有了自动装箱处理之后,利用包装类可以使得Object接收int

· Integerint相比可以将数据设置为null

 

面试题:请写出Proxy设计模式?

把静态代理写出来,并且详细区分静态代理的问题;

把动态代理写出来,并且说明一点,Java中的动态代理设计需要以接口为操作依据,而使用CGLIB可以利用共同的父类来实现动态代理设计模式。

 

面试题:运行时数据区分为几块内存空间:

· 堆内存:保存所有引用数据类型的真实信息;

· 栈内存:基本类型、运算、指向堆内存的指针;

· 方法区:所有定义的方法的信息都保存在方法区之中,此区属于共享区;

· 程序计数器:是一个非常小的内存空间,小的可以忽略;、

· 本地方法栈:每一次执行递归的方法处理的时候实际上都会将上一个方法入栈;

 

面试题:JVM的启动有两种模式:

· “-server”:服务器模式,占用的内存大、启动速度慢,默认模式;

· “-client”:本地单机运行程序模式,启动的速度快。

 

面试题:JVM 堆内存分为了哪几块:

· 年轻代:新对象和没达到一定年龄的对象都在年轻代;

· 老年代:被长时间使用的对象,老年代的内存空间应该要比年轻代更大;

· 元空间:像一些方法中的操作临时对象等,直接使用物理内存;

 

面试题:GC 的处理流程

1、 当现在有一个新的对象产生,那么对象一定需要内存空间,于是现在就需要为该对象进行内存空间的申请;

2、 首先会判断伊甸园区是否有内存空间,如果此时有内存空间,则直接将新对象保存在伊甸园区;

3、 但是如果此时伊甸园区的内存空间不足,那么会自动执行一个Minor GC 操作,将伊甸园区的无用内存空间进行清理,清理之

后会继续判断伊甸园区的内存空间是否充足?如果内存空间充足,则将新的对象直接在伊甸园区进行空间分配;

4、 如果执行了Minor GC 之后发现伊甸园区的内存依然不足,那么这个时候会进行存活区判断,如果存活区有剩余空间,则将伊

甸园区的部分活跃对象保存在存活区,那么随后继续判断伊甸园区的内存空间是否充足,如果充足,则在伊甸园区进行新对象的空

间分配;

5、 如果此时存活区也已经没有内存空间了,则继续判断老年区,如果此时老年区空间充足,则将存活区中的活跃对象保存到老

年代,而后存活区就会存现有空余空间,随后伊甸园区将活跃对象保存在存活区之中,而后在伊甸园区里为新对象开辟空间;

6、 如果这个时候老年代也满了,那么这个时候将产生Major GCFull GC),进行老年代的内存清理。

7、 如果老年代执行了Full GC 之后发现依然无法进行对象的保存,就会产生OOM 异常“OutOfMemoryError”

 

面试题:一般什么时候会发生GC?如何处理?

Java中的GC会有两种回收:年轻代的Minor GC,另外一个就是老年代的Full GC

新对象创建时如果伊甸园空间不足会触发Minor GC,如果此时老年代的内存空间不足会触发Full GC,如果空间都不足抛出OutOfMemoryError

 

面试题:如果整个Java项目运行缓慢,你该如何解决?

避免堆内存的伸缩空间进行操作,将初始化内存空间与整体堆内存空间大小设置为一一样,使用“-Xms”、“-Xmx” 

面试题:当一个对象非常大的时候,请问是如何保存的?

该对象将直接保存在老年代。

 

面试题:请问gc()方法执行时执行的是何种GC处理?

一定会产生Full GC

 

面试题:StackOverflowErrorOutOfMemoryError什么时候出现?

 

 

 

面试题: Java引用类型

· 强引用:当内存不足的时候,JVM宁可出现OutOfMemory错误停止,也需要进行保存,并且不会将此空间回收;

· 软引用:当内存不足的时候,进行对象的回收处理,往往用于高速缓存中; 特点在于:不足时回收,不充足时不回收

· 弱引用:不管内存是否紧张,只要有垃圾产生了,那么立即回收; 只要一进行GC处理,那么所引用的对象将会被立刻回收

· 幽灵引用:和没有引用是一样的。 、

 

面试题:请解释JSP之中两种包含的区别?

· 静态包含:先包含后处理;

|- 语法:<%@include file="包含路径"%>   

· 动态包含:可以自动的判断被包含的是静态页还是动态页,如果是静态页则采用先包含后处理的模式(被包含页面中的所有JSP代码将不会被执行),而如果是动态页面,则使用先处理后包含的模式;

|- 语法: <jsp:include page="包含文件路径">

<jsp:param name="参数名称" value="参数内容"/>

  <jsp:param name="参数名称" value="参数内容"/> ...

</jsp:include>

 

面试题:九个内置对象

No.

JSP内置对象

类型

描述

1

request

javax.servlet.http.HttpServletRequest

服务器端接收客户端发送来的请求

2

response

javax.servlet.http.HttpServletResponse

服务器端对客户端的回应处理

3

session

javax.servlet.http.HttpSession

描述的是个人的信息

4

application

javax.servlet.ServletContext

描述的是整个WEB容器

5

pageContext

javax.servlet.jsp.PageContext

描述的是一个JSP页面

6

config

javax.servlet.ServletConfig

取得一些初始化配置操作

7

out

javax.servlet.jsp.JspWriter

实现页面的显示输出,输出的内容都变为HTML

8

page

java.lang.Object

整个页面的对象表示

9

exception

java.lang.Throwable

每个JSP页面都不会强制性的要求进行异常处理

 

·pageContextjavax.servlet.jsp.PageContext

|- pageContext对象只允许在JSP页面之中使用,并且可以进行forward()include()等操作,还可以操作九个内置对象;

|- 设置和取得属性:public void setAttribute(String name,Object value)public Object getAttri

·requestjavax.servlet.http.HttpServletRequest

|- 主要是服务器端接收客户端发送来的请求数据,请求的数据可能是表单数据也可能是头信息;

|- 设置和取得属性:public void setAttribute(String name,Object value)public Object getAttribute(String name)

|- 取得所有请求参数名称:public Enumeration<String> getParameterNames()

|- 设置请求编码:public void setCharacterEncoding(String charset) throws UnSupportedEncodingException

|- 取得上下文路径:public String getContextPath()

|- 取得全部的Cookie数据:public Cookie [] getCookies()

·responsejavax.servlet.http.HttpServletResponse

|- 服务器端对客户端的回应处理;

|- 设置头信息:public void setHeader(String name,String value)

|- 设置cookiepublic void addCookie(Cookie c)

|- 取得输出流:public Writer getWriter()

|- 设置回应编码:public void setCharacterEncoding(String charset) throws UnSupportedEncodingException

·sessionjavax.servlet.http.HttpSession

|- 主要是进行用户的登录检测处理;

|- 设置和取得属性:public void setAttribute(String name,Object value)public Object getAttribute(String name)

|- session失效:public void invalidate()

·applicationjavax.servlet.ServletContext

|- 是进行整个WEB上下文的处理操作;

|- 取得真实路径:public String getRealPath(String path)

·configjavax.servlet.ServletConfig

|- 可以取得web.xml文件里面配置的初始化参数内容;

|- 取得初始化参数:public String getInitParameter(String param)

·outjavax.servlet.jsp.JspWriter

·exceptionjava.lang.Throwable

·pagejava.lang.Object

 

面试题:请解释JSP之中两种跳转的区别?

· 客户端跳转:跳转之后地址栏变为目标路径,无法传递request属性,整个页面执行完毕后才进行跳转;

|- 语法:超连接(html)、window.locationjs)、response.sendRedirectJSP);

· 服务器端跳转:跳转之后地址栏不会发生改变,可以传递request属性,无条件跳转,跳转之后的代码不执行;

|- 语法:<jsp:forward page="路径"/>

请问GenericServletHttpServlet有什么区别?

GenericServlet属于HttpServlet的父类,本身不受协议控制,而HttpServlet只为http服务;

HttpServlet中的service()方法负责分配用户请求的处理,以找到与之匹配的doXxx()方法;

1、 请问如果覆写了HttpServlet类中的service()方法会怎么样?

所有的doGet()或者是doPost()方法将无法使用。

 

面试题:请解释HTMLXML的区别?

· HTML可以更加方便的实现数据的显示处理操作;

· XML更多的是进行数据结构的描述,主要的功能是进行数据交互使用。

 

面试题:请解释DOMSAX的区别?

· DOMDocument Object Module)属于W3C定义的XML文件的处理标准,本身可以实现数据的读取与修改功能,但是内存中需要形成DOM树,所以不适合于读取大型文件;

· SAXSimple API for XML)属于民间标准,采用顺序式的方式实现XML读取处理,本身由于不会全部将数据加载到内存之中,所以适合于大文件的读取,但是SAX不允许修改文件。

 

面试题:请问eval()JSON.parse()有什么区别?

· JavaScript之中只提供有一个eval()函数实现字符串与JSON的转换;

· JSON.parse()函数实际上是使用一些正则判断后才进行了eval()调用处理,如果正则判断出问题则会抛出异常对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值