全文字数: 2732算法
阅读时间: 大约9 分钟数据库
1、UML 是什么?经常使用的几种UML图?编程
统一建模语言(Unified Modeling Language,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; } }
第二种懒汉式:app
//懒汉式 public class Singleton { //私有化构造函数 private Singleton(){} //建立一个空对象 private static Singleton instance = null; //建立公有方法调用,对象若是为空建立对象,不然直接返回当前对象 public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
3、Java 中经常使用的设计模式?简述工厂模式?框架
Java 中的23 种设计模式能够分为三类:dom
建立型模式(5种):
Factory( 工厂模式),Builder( 建造者模式), Factory Method(工厂方法模式),Prototype(原型模式),Singleton(单例模式)。
结构型模式(7种):
Facade(外观模式),Adapter(适配器模式), Bridge(桥接模式), Composite(组合模式),Decorator(装饰器模式), Flyweight(享元模式), Proxy(代理模式)。
行为型模式(11种):
Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(中介者模式), Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)。
工厂模式:工厂模式是一种常常被使用到的模式,根据工厂模式实现的类能够根据提供的数据生成一组类中某一个类的实例,一般这一组类有一个公共的抽象父类而且实现了相同的方法,可是这些方法针对不一样的数据进行了不一样的操做。首先须要定义一个基类,该类的子类经过不一样的方法实现了基类中的方法。而后须要定义一个工厂类,工厂类能够根据条件生成不一样的子类实例。当获得子类的实例后,开发人员能够调用基类中的方法而没必要考虑到底返回的是哪个子类的实例。
23种模式简单说明:
单例模式:某个类只能有一个实例,提供一个全局的访问点。
简单工厂:一个工厂类根据传入的参量决定建立出那一种产品类的实例。
工厂方法:定义一个建立对象的接口,让子类决定实例化那个类。
建造者模式:封装一个复杂对象的构建过程,并能够按步骤构造。
原型模式:经过复制现有的实例来建立新的实例。
适配器模式:将一个类的方法接口转换成客户但愿的另一个接口。
组合模式:将对象组合成树形结构以表示“”部分-总体“”的层次结构。
装饰模式:动态的给对象添加新的功能。
代理模式:为其余对象提供一个代理以便控制这个对象的访问。
亨元(蝇量)模式:经过共享技术来有效的支持大量细粒度的对象。
外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
桥接模式:将抽象部分和它的实现部分分离,使它们均可以独立的变化。
模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
策略模式:定义一系列算法,把他们封装起来,而且使它们能够相互替换。
状态模式:容许一个对象在其对象内部状态改变时改变它的行为。
观察者模式:对象间的一对多的依赖关系。
备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
中介者模式:用一个中介对象来封装一系列的对象交互。
命令模式:将命令请求封装为一个对象,使得能够用不一样的请求来进行参数化。
访问者模式:在不改变数据结构的前提下,增长做用于一组对象元素的新功能。
责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
4、开发中都用到了那些设计模式?用在什么场合?
所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题通过证明的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式令人们能够更加简单方便的复用成功的设计和体系结构。每一个模式都描述了一个在咱们的环境中不断出现的问题,而后描述了该问题的解决方案的核心。经过这种方式,你能够无数次地使用那些已有的解决方案,无需在重复相同的工做。
(1) MVC模式,在JavaEE项目开发中主要用在表示层框架中,很好解决视图和流程控制。在项目中采用的Struts、SpringMVC等框架。
(2) DAO模式,在项目开发中主要用在数据层,封装数据的访问操做,为业务层提供数据服务。
(3) IoC模式,在项目开发中业务层有大量对象,他们之间存在依赖关系,可使用IoC模式减小他们之间的代码耦合,提升系统的可扩展性。实际项目中使用的Spring框架来实现业务组件的装配。
(4) Observer模式,在Servlet的监听器中应用到了观察者模式。
(5) singleton单例模式和Factory工厂模式结合使用在项目中无需使用者了解过多的细节就可获取有关的对象实例。好比Hibernate项目中经过SessionFactory来获取Session。
(6) bridge模式,在项目中使用JDBC驱动访问数据库。
5、你对软件开发中迭代的含义的理解。
软件开发中,各个开发阶段不是顺序执行的,各个阶段都是并行执行也就是迭代的意思。这样能更好的适应,开发中的需求变化,及人员的变更
6、XML 文档定义有几种形式?它们之间有何本质区别?解析XML 文档有哪几种方式?
1)两种形式:dtd 以及schema;
2)本质区别:schema 自己是xml 的,能够被XML 解析器解析(这也是从DTD上发展schema 的根本目的);
3)解析方式:
1.DOM解析: DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(一般称DOM树),应用程序正是经过对这个对象模型的操做,来实现对XML文档数据的操做。经过DOM接口,应用程序能够在任什么时候候访问XML文档中的任何一部分数据,所以,这种利用DOM接口的机制也被称做随机访问机制。
2.SAX解析:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不一样,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序经过这些事件处理函数实现对XML文档的访问,于是SAX接口也被称做事件驱动接口。
3.JDOM解析:JDOM采用了Java中的Collection架构来封装集合,是Java爱好者更加熟悉的模式
4.DOM4J解析:xml解析器一次性把整个xml文档加载进内存,而后在内存中构建一颗Document的对象树,经过Document对象,获得树上的节点对象,经过节点对象访问(操做)到xml文档的内容
7、你在项目中用到了xml 技术的哪些方面?怎么实现的?
用到了数据存贮,信息配置两方面。
1.在作数据交换平台时,将不能数据源的数据组装成XML 文件,而后将XML 文件压缩打包加密后经过网络传送给接收者,接收解密与解压缩后再同XML 文件中还原相关信息进行处理。
2.在作软件配置时,利用XML 能够很方便的进行,软件的各类配置参数都存贮在XML 文件中。
8、用jdom 解析xml 文件时如何解决中文问题?如何解析?
代码以下,用编码方式加以解决
public class DOMTest { // 文件路径 private String outFile = "F:\\people.xml"; public static void main(String args[]) { new DOMTest(); } public DOMTest() { try { // 一、获取DOM解析器工厂,以便产生解析器;二、获取DOM解析器,以便解析DOM DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.newDocument(); // 3.建立元素 Element root = doc.createElement("老师"); Element wang = doc.createElement("许"); // 4.向指定元素节点中增长子元素节点或增长元素到子节点 wang.appendChild(doc.createTextNode("我是许老师")); root.appendChild(wang); doc.appendChild(root); // 5.设置而后把DOM写回XML文件 Transformer transformer = TransformerFactory.newInstance().newTransformer(); // 6.指定Transformer应该使用的首选字符编码,将字符序列做为字节序列进行编码 transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312"); // 7.指定Transformer是否能够添加额外的空白,同时输出 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(new DOMSource(doc), new StreamResult(outFile)); } catch (Exception e) { System.out.println(e.getMessage()); } } }
文件效果: