详解后端Java面试——OOA/D,UML,和XML

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!!

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;
    }
}

第二种懒汉式:

//懒汉式
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 种设计模式可以分为三类:

创建型模式(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、开发中都用到了那些设计模式?用在什么场合?

所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。

  • MVC模式,在JavaEE项目开发中主要用在表示层框架中,很好解决视图和流程控制。在项目中采用的Struts、SpringMVC等框架。
  • DAO模式,在项目开发中主要用在数据层,封装数据的访问操作,为业务层提供数据服务。
  • IoC模式,在项目开发中业务层有大量对象,他们之间存在依赖关系,可以使用IoC模式减少他们之间的代码耦合,提高系统的可扩展性。实际项目中使用的Spring框架来实现业务组件的装配。
  • Observer模式,在Servlet的监听器中应用到了观察者模式。
  • singleton单例模式和Factory工厂模式结合使用在项目中无需使用者了解过多的细节就可获取有关的对象实例。比如Hibernate项目中通过SessionFactory来获取Session。
  • bridge模式,在项目中使用JDBC驱动访问数据库。

5、你对软件开发中迭代的含义的理解。

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

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

  • 两种形式:dtd 以及schema;
  • 本质区别:schema 本身是xml 的,可以被XML 解析器解析(这也是从DTD上发展schema 的根本目的);
  • 解析方式
    • DOM解析: DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。
    • SAX解析:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。
    • JDOM解析:JDOM采用了Java中的Collection架构来封装集合,是Java爱好者更加熟悉的模式
    • DOM4J解析:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容

7、你在项目中用到了xml 技术的哪些方面?怎么实现的?

用到了数据存贮,信息配置两方面

  • 在做数据交换平台时,将不能数据源的数据组装成XML 文件,然后将XML 文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML 文件中还原相关信息进行处理。

  • 在做软件配置时,利用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 {
            // 1、获取DOM解析器工厂,以便产生解析器;2、获取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());
        }
    }
}

文件效果

image.png

写在最后


点关注,不迷路;持续更新Java架构相关技术及资讯热文!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 一. Java基础部分.................................................
    wy_sure阅读 3,789评论 0 11
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,412评论 1 14
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,498评论 3 93
  • 竞争包含目标以及达成目标的手段,伐谋、伐交、伐兵、攻城是达成目标的不同手段。每种不同的手段对应的收益/成本,实施所...
    neo_7号阅读 294评论 0 1