查看原文
其他

Java基础篇——Java开发面试题5期

素文宅博客 Java精选 2022-08-09


Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,通过浏览面试题和以往的面试经历,总结了从初级到中级以及高级的面试题,供大家学习讨论。


Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals(),它们有何区别?

点击下方空白区域查看答案解析!

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。


equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

Java中的异常处理机制的简单原理和应用?

点击下方空白区域查看答案解析!

当 JAVA 程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。


一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。


另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是 java.lang.Thowable的子类。

垃圾回收的优点和原理,并考虑2种回收机制?

点击下方空白区域查看答案解析!

Java 语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。


垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

请说出你所知道的线程同步的方法

点击下方空白区域查看答案解析!

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。


sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。


notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。


allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 

点击下方空白区域查看答案解析!

1) 两种形式 dtd schema


2)本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)


3)有DOM,SAX,STAX等


DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问


SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 


STAX:Streaming API for XML (StAX)


xml文档有两种定义方法:


dtd:数据类型定义(data type definition),用以描述XML文档的文档结构,是早期的XML文档定义形式。


schema:其本身是基于XML语言编写的,在类型和语法上的限定能力比dtd强,处理也比较方便,因为此正逐渐代替dtd成为新的模式定义语言。

Servlet执行时一般实现哪几个方法?

点击下方空白区域查看答案解析!

public void init(ServletConfig config)    

public ServletConfig getServletConfig()    

public String getServletInfo()    

public void service(ServletRequest request,ServletResponse response)    

public void destroy()     


init ()方法在servlet的生命周期中仅执行一次,在服务器装载servlet时执行。缺省的init()方法通常是符合要求的,不过也可以根据需要进行 override,比如管理服务器端资源,一次性装入GIF图像,初始化数据库连接等,缺省的inti()方法设置了servlet的初始化参数,并用它的ServeltConfig对象参数来启动配置,所以覆盖init()方法时,应调用super.init()以确保仍然执行这些任务。


service ()方法是servlet的核心,在调用service()方法之前,应确保已完成init()方法。对于HttpServlet,每当客户请求一个HttpServlet对象,该对象的service()方法就要被调用,HttpServlet缺省的service()方法的服务功能就是调用与 HTTP请求的方法相应的do功能,doPost()和doGet(),所以对于HttpServlet,一般都是重写doPost()和doGet() 方法。


destroy()方法在servlet的生命周期中也仅执行一次,即在服务器停止卸载servlet时执行,把servlet作为服务器进程的一部分关闭。缺省的destroy()方法通常是符合要求的,但也可以override,比如在卸载servlet时将统计数字保存在文件中,或是关闭数据库连接。


getServletConfig()方法返回一个servletConfig对象,该对象用来返回初始化参数和servletContext。servletContext接口提供有关servlet的环境信息。


getServletInfo()方法提供有关servlet的信息,如作者,版本,版权。

j2ee常用的设计模式?说明工厂模式。

点击下方空白区域查看答案解析!

Java中的23种设计模式:

Factory(工厂模式), 

Builder(建造模式),

Factory Method(工厂方法模式),

Prototype(原始模型模式),

Singleton(单例模式), 

Facade(门面模式),

Adapter(适配器模式), 

Bridge(桥梁模式), 

Composite(合成模式),

Decorator(装饰模式), 

Flyweight(享元模式), 

Proxy(代理模式),

Command(命令模式), 

Interpreter(解释器模式), 

Visitor(访问者模式),

Iterator(迭代子模式), 

Mediator(调停者模式), 

Memento(备忘录模式),

Observer(观察者模式), 

State(状态模式), 

Strategy(策略模式),

Template Method(模板方法模式), 

Chain Of Responsibleity(责任链模式)


工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

点击下方空白区域查看答案解析!

Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。


用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。


throw语句用来明确地抛出一个"异常"。


throws用来标明一个成员函数可能抛出的各种"异常"。


Finally为确保一段代码不管发生什么"异常"都被执行一段代码。


可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

推荐阅读

 

Java基础篇——Java开发面试题4期

Java基础篇——Java开发面试题3期

Java基础篇——Java开发面试题2期

Java基础篇——Java开发面试题1期

Spring基础篇——DI/IOC和AOP原理初识

微框架Spring Boot使用Redis如何实现Session共享

SpringMvc框架MockMvc单元测试注解及其原理分析


更多推荐↓↓↓
 

Java精选

关注微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存