Java面试之 OOAD & UML

Java面试之 OOAD & UMLJava面试之 OOAD & UML

大家好,又见面了,我是你们的朋友全栈君。

1、UML 是什么?常用的几种图?【基础】

答:UML 是标准建模语言;常用图包括:用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

2、编程题: 写一个Singleton 出来。【基础】

答:Singleton 模式主要作用是保证在Java 应用程序中,一个类Class 只有一个实例存在。举例:定义一个类,它的构造函数为private 的,它有一个static的private 的该类变量,在类初始化时实例话,通过一个public 的getInstance
方法获取对它的引用,继而调用其中的方法。
第一种形式:

public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}

第二种形式:

public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if (instance==null)
instance=new Singleton();
return instance;
}
}

其他形式: 定义一个类,它的构造函数为private 的,所有方法为static 的。一般认为第一种形式要更加安全些。

3、说说你所熟悉或听说过的j2ee 中的几种常用模式?及对设计模式的一些看法。【中等难度】

答:
Session Facade Pattern:使用SessionBean 访问EntityBean;
Message Facade Pattern:实现异步调用;
EJB Command Pattern:使用Command JavaBeans 取代SessionBean,实现轻量级访问;
Data Transfer Object Factory:通过DTO Factory 简化EntityBean 数据提供特性;
Generic Attribute Access:通过AttibuteAccess 接口简化EntityBean数据提供特性;
Business Interface:通过远程(本地)接口和Bean 类实现相同接口规范业务逻辑一致性;
EJB 架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可
重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

4、Java 中常用的设计模式?说明工厂模式?【中等难度】

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

5、开发中都用到了那些设计模式?用在什么场合? 【中等难度】

答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC 的设计模式,用来开发JSP/Servlet或者J2EE 的相关应用;及简单工厂模式等。

6、你对软件开发中迭代的含义的理解;【中等难度】

答:软件开发中,各个开发阶段不是顺序执行的,应该是并行执行,也就是迭代的意思。这样对于开发中的需求变化,及人员变动都能得到更好的适应。

7、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)。

8、你在项目中用到了xml 技术的哪些方面?如何实现的? 【中等难度】

答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML 文件,然后将XML 文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML 文件中还原相关信息进行处理。在做软件配置时,利用XML 可以很方便的进行,软件的各种配置参数都存贮在XML 文件中。

9、用jdom 解析xml 文件时如何解决中文问题?如何解析? 【较难】

答:看如下代码,用编码方式加以解决

package test;
import java.io.*;
public class DOMTest{
private String inFile = "c:\people.xml";
private String outFile = "c:\people.xml";
public static void main(String args[]){
new DOMTest();
}
public DOMTest(){
try{
javax.xml.parsers.DocumentBuilder builder =
javax.xml.parsers.DocumentBuilderFactory.
newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = builder.newDocument();
org.w3c.dom.Element root = doc.createElement("老师");
org.w3c.dom.Element wang = doc.createElement("王");
org.w3c.dom.Element liu = doc.createElement("刘");
wang.appendChild(doc.createTextNode("我是王老师"));
root.appendChild(wang);
doc.appendChild(root);
javax.xml.transform.Transformer transformer =
javax.xml.transform.TransformerFactory.
newInstance().newTransformer();
transformer.setOutputProperty(
javax.xml.transform.OutputKeys.ENCODING,"gb2312");
transformer.setOutputProperty(
javax.xml.transform.OutputKeys.INDENT, "yes");
transformer.transform(new
javax.xml.transform.dom.DOMSource(doc),
new javax.xml.transform.stream.StreamResult(outFile));
}catch (Exception e){
System.out.println (e.getMessage());
}
}
}

10、编程用JAVA 解析XML 的方式。【较难】

答:用SAX 方式解析XML,XML 文件如下:

<?xml version="1.0" encoding="gb2312"?>
<person>
	<name>王小明</name>
	<college>信息学院</college>
	<telephone>6258113</telephone>
	<notes>男,1955 年生,博士,95 年调入海南大学</notes>
</person>
事件回调类SAXHandler.java :
import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase{
private Hashtable table = new Hashtable();
private String currentElement
= null;
private String currentValue = null;
public void setTable(Hashtable
table){
this.table = table;
}
public Hashtable getTable(){
return table;
}
public void startElement(String tag, AttributeList attrs)
throws
SAXException{
currentElement = tag;
}
public void characters(char[] ch, int
start, int length)
throws SAXException{
currentValue = new String(ch,
start, length);
}
public void endElement(String name) throws SAXException{
if (currentElement.equals(name))
table.put(currentElement, currentValue);
}
}
JSP 内容显示源码,SaxXml.jsp:
<HTML>
	<HEAD>
		<TITLE>剖析XML 文件people.xml</TITLE>
	</HEAD>
	<BODY>
		<%@ page errorPage="ErrPage.jsp"
		contentType="text/html;charset=GB2312" %>
		<%@ page import="java.io.*" %>
		<%@ page import="java.util.Hashtable" %>
		<%@ page import="org.w3c.dom.*" %>
		<%@ page import="org.xml.sax.*" %>
		<%@ page import="javax.xml.parsers.SAXParserFactory" %>
		<%@ page import="javax.xml.parsers.SAXParser" %>
		<%@ page import="SAXHandler" %>
		<%
		File file = new File("c:\people.xml");
		FileReader reader = new FileReader(file);
		Parser parser;
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser sp = spf.newSAXParser();
		SAXHandler handler = new SAXHandler();
		sp.parse(new InputSource(reader), handler);
		Hashtable hashTable = handler.getTable();
		out.println("
		<TABLE BORDER=2>
			<CAPTION>" +
				"教师信息表
			</CAPTION>
			");
			out.println("
			<TR>
				<TD>姓名</TD>
				" + "
				<TD>" +
					(String)hashTable.get(new String("name")) +
					"
				</TD>
			</TR>
			");
			out.println("
			<TR>
				<TD>学院</TD>
				" + "
				<TD>" +
					(String)hashTable.get(new String("college"))
					+"
				</TD>
			</TR>
			");
			out.println("
			<TR>
				<TD>电话</TD>
				" + "
				<TD>" +
					(String)hashTable.get(new String("telephone"))
					+ "
				</TD>
			</TR>
			");
			out.println("
			<TR>
				<TD>备注</TD>
				" + "
				<TD>" +
					(String)hashTable.get(new String("notes"))
					+ "
				</TD>
			</TR>
			");
			out.println("
		</TABLE>
		");
		%>
	</BODY>
</HTML>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106577.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号