您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页Java高级题

Java高级题

来源:二三娱乐

此文非原创,来源网络上的面试题

Java中的反射

1.说说你对Java中反射的理解

java中的反射首先是能够获取到Java中要反射类的字节码,获取字节码有三种方法:

  • Class.forName(className)
  • 类名.class
  • this.getClass() ;
    然后将字节码中的方法,变量,构造函数等映射成相应的Method,Filed, Constructor等类,这些类提供了丰富的方法可以被我们所使用。

Java中的动态代理

1.写一个ArrayList的动态代理类(笔试题)

final List<String> list = new ArrayList<String(); List<String> proxyInstance = (List<String>)Proxy.newProxyInstance( list.getClass().getClassLoader(), list.getClass().getInterfaces(), new InvocationHandler(){ @Override public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{ return method.invoke(list,args); } } ); proxyInstance.add("你好"); System.out.println(list);

Java中的设计模式

1.你所知道的设计模式有哪些

重点需要掌握的:
创建型模式:工厂方法模式,抽象工厂模式,单例模式,建造者模式
结构型模式:适配器模式,代理模式
行为型模式:策略模式,观察者模式

2.工厂设计模式

工厂模式分为工厂方法模式和抽象工厂模式
1.工厂方法模式
工厂方法模式分为三种:
普通工厂模式:建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
多个工厂方法模式:是对普通工厂模式的改进,在普通工厂模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
静态工厂方法模式:将上面的多个工厂方法模式里面的方法置为静态的,无须创建实例,直接调用即可。
2.抽象工厂模式
抽象工厂模式有一个问题就是,类得到创建依赖工厂类,也就是说,如果想要扩展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就需要用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

3.建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是抽象工厂模式和最后的Test结合起来得到的。

4.适配器设计模式

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式,对象的适配器模式,接口的适配器模式。

  • 类的适配器模式:
  • 对象适配器模式:基本思路和类的适配器模式相同,只是将Adapter 类作修改,这次不继承Source 类,而是持有Source 类的实
    例,以达到解决兼容性的问题。
  • 接口的适配器:接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

5.装饰模式(Decorator)

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰者和被装饰者实现同一个接口,装饰对象持有被装饰对象的实例。

6.策略模式(strategy)

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。策略模式的决定权在用户,系统本身提供不同的算法实现,新增或者删除算法,对各种算法进行封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

7.观察者模式(Observer)

观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是, 当你订阅了该文章,如果有后续更新,会及时通知你,其实,简单来说一句话:当一个对象发生变化,其他依赖该对象的对象都会收到通知,并且随着变化!对象之间存在一种一对多的关系。

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务