JAVA编程试题集合2

过滤器 拦截器

  • 过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url
  • 拦截器:是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
  • 拦截器与过滤器的区别 :

1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

2 解释一下RPC

  • RPC(Remote Procedure Call Protocol)就是远程调用,本质上是一种通信方式。核心思想是将不同进程间的通讯抽象为函数调用,基本过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际处理,然后将结果序列化后返回给调用端。通常RPC通过接口来实现,接口定义服务名,接口方法定义每个请求的入参和结果。RPC内部的序列化、网络通讯等细节则由框架完成,对用户完全透明。

4.面向对象的特征有哪些方面?

  • 抽象:将一类对象的共同特征总结出来构造成类,包括数据抽象和行为抽象。抽象只关注对象有哪些属性和行为,不关注行为细节。
  • 继承:从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让程序有一定的延续性。
  • 封装:封装是把数据和操作数据的方法绑定起来,对数据访问只通过已有接口。面向对象的本质就是将现实世界描绘成一系列对象。在类中编写方法就是对实现细节的封装;编写一个类就是对数据和数据操作的封装。封装就是隐藏一切可隐藏的,只向外界提供最简单的接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好操作更简单;智能手机也是封装得足够好,因为几个按键(接口)就搞定所有事情)。
  • 多态性:多态性是指允许不同子类型的对象对同一消息作出不同响应。简单说是用同样对象引用调用同样方法但是做了不同事情。多态性分为编译时多态性和运行时多态性。方法重载(overload)实现了编译时多态性(也称为前绑定),而方法重写(override)实现了运行时多态性(也称为后绑定)。运行时多态是面向对象最精髓的东西,要实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样方法就会根据子类对象的不同而表现出不同行为)。

5.什么是DAO模式?

  • DAO(Data Access Object)是一个为数据库提供抽象接口的对象,在不暴露底层存储细节的前提下提供各种数据访问操作。
  • 实际中就是建立一个接口,将所有数据访问操作抽象后封装起来,当需要和数据源交互时使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。
  • DAO模式实际包含两部分,一是解决如何访问数据,二是解决如何用对象封装数据。

9.解释名词:JRE、JDK、JVM 及 JIT

  • JRE 代表Java run-time,是运行Java引用所必须。
  • JDK 代表 Java 程序的开发工具,如 Java 编译器,它也包含 JRE。
  • JVM 代表 Java 虚拟机(Java virtual machine),责任是运行 Java 应用。
  • JIT 代表即时编译(Just In Time compilation),当代码执行次数超过一定阈值时,会将 Java 字节码转换为本地代码(热点编译),有利于提高 Java 应用性能。

10.值传递和引用传递

  • 值传递:方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
  • 引用传递:方法调用时,实际参数的引用(内存地址)被传递给方法中的形式参数,函数接收实际参数的内存地址;形参和实参指向同一块内存,方法执行中对引用的操作将影响到实际对象。
  • 基本数据类型使用传值,对形参的修改不影响实参;引用类型传引用,形参和实参指向同一内存地址,对参数的修改会影响到实际对象;不可变类(String,Integer等)由于自身特性,可以理解为传值,最后操作不会修改实参对象
    1.当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤。
  • Dns解析(域名-IP)->IP寻址 –>tcp连接(三次握手)–>服务器处理请求–>服务器响应–>浏览器解析—>链接关闭

2.什么是正则表达式?

  • 处理字符串时,经常需要查找符合某些复杂规则的字符串。正则表达式就是用于描述这些规则的工具。就是记录文本规则的代码。

3.get和post请求的区别?

  • get用来从服务器获得数据,post用来向服务器提交数据;
  • get将表单数据按照name=value的形式,添加URL后面,并且使用"?“连接,而各个变量间使用”&"连接;post是将表单数据放在HTTP协议的请求头或消息体中传递URL;
    (http://xxx.com/visitRecord?type=weixin&userId=107)
  • get传输数据要受到URL长度限制(1024字节);而post可以传输大量数据,上传文件通常使用post方式;
  • 使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据则应使用post

4.过滤器,拦截器,监听器的区别

  • 过滤器(Filter):当有一堆东西的时候,只选择符合要求的某一些。定义这些要求的工具,就是过滤器。顾名思义是用来过滤的,你传入的request,response提前过滤一些信息,或设置一些参数,然后进行业务逻辑处理,比如过滤掉非法url、统一设置字符集等。filter 流程是线性的, url传来检查之后,可保持原来流程继续执行,被下一个filter接收处理,形成一个链条.
  • 拦截器(Interceptor):在一个流程进行时,希望干预它的进展,甚至终止它进行,这是拦截器做的事情。用于在某个方法或字段被访问前后进行拦截,然后加入某些操作。拦截是AOP的一种实现策略
  • 监听器(Listener):当一个事件发生时,希望获得这个事件发生的详细信息,并不想干预这个事件本身的进程,这就用到监听器。监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前后可以做一些必要的处理。

4.Spring有哪些优点?

  • 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。

  • 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。

  • 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。

  • MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。

5. BeanFactory模块

  • Spring的基本模块,它提供了Spring框架的基本功能。BeanFactory 是所有Spring应用的核心。Spring框架是建立在这个模块之上的,这也使得Spring成为一个容器。
  • BeanFactory是工厂模式的一种实现,它使用控制反转将应用的配置和依赖与实际的应用代码分离开来。最常用的BeanFactory实现是XmlBeanFactory类,它根据XML文件中定义的内容加载beans。该容器从XML文件中读取配置元数据,并用它来创建一个完备的系统或应用。

6.Spring中的依赖注入是什么?

  • 依赖注入作为控制反转(IOC)的一个层面,可以有多种解释方式。在这个概念中,你不用创建对象而只需要描述如何创建它们。你不必通过代码直接的将组件和服务连接在一起,而是通过配置文件说明哪些组件需要什么服务。之后IOC容器负责衔接。
  • 构造器依赖注入:构造器依赖注入在容器触发构造器的时候完成,该构造器有一系列的参数,每个参数代表注入的对象。
  • Setter方法依赖注入:首先容器会触发一个无参构造函数或无参静态工厂方法实例化对象,之后容器调用bean中的setter方法完成Setter方法依赖注入。

7.什么是Spring Beans?

  • Spring Beans是构成Spring应用核心的Java对象。这些对象由Spring IOC容器实例化、组装、管理。这些对象通过容器中配置的元数据创建,例如,使用XML文件中定义的创建。
  • 在Spring中创建的beans都是单例的beans。在bean标签中有一个属性为”singleton”,如果设为true,该bean是单例的,如果设为false,该bean是原型bean。Singleton属性默认设置为true。因此,spring框架中所有的bean都默认为单例bean。
  • Spring Bean中定义了所有的配置元数据,这些配置信息告知容器如何创建它,它的生命周期是什么以及它的依赖关系

9.举例几种注解

  • @Autowired:提供更精细的控制,包括自动装配在何处完成以及如何完成。它可以像@Required一样自动装配setter方法、构造器、属性或具有任意名称和参数的方法。
  • @Qualifier:当有多个相同类型的bean而只有其中一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用消除这种混淆,指明需要装配的bean。

10.git镜像仓库/maven镜像库:

  • 将git远程的仓库(master+所有分支clone到本地),对应的git clone一般只可以clone主干分支
  • git clone --mirror git remote update
  • maven镜像库(setting.xml):maven构建时依赖的jar包下载源*

11.git暂存区

  • 类似于缓存的概念,将准备提交的数据分批次放入暂存区,然后可以一次性commit
  • 设计初衷是方便命令行下的操作,有选择的提交数据(git add xxx.java)

16.java注解

  • 即元数据:描述数据A(类、方法、变量等)的数据B,对数据A做声明,然后通过反射获取描述信息,并根据描述信息的条件来执行数据A
  • @Override:在编译阶段生效,编译的时候编译器会检查使用@Override修饰的方法是否和父类方法签名(方法名+参数)相同,如果不同则报错
  • 使用场合:与java源代码写在一块,简单直观,不过注解散布在代码各处,有时不易维护,对于需要集中配置的场合,则推荐使用XML配置(如mybatis的数据源配置)
  • 自定义注解:测试 @Test
@Retention(RetentionPolicy.RUNTIME)
@Target(ElmentType.METHOD)
public @interface Test(){
    boolean ignore() default false;
}

public class AaTest{
    @Test
    public int test1(){
        return 1;
    }
    @Test(ignore=true)
    public int test2(){
        return 2;
    }
}

public static void main(String [] args){
    AaTest tt = new AaTest();
    run(tt);
}

public static void run(Object obj){
    for(Method m : obj.getClass().getMethods()){
        Test t = m.getDeclaredAnnoation(Test.class);
        if(t!=null && !t.ignore()){
            m.invoke(obj);
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值