Java理论知识及面试题

一.springMVC 的工做(实现)原理?javascript

工做原理html

一、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,若是匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.java

二、DipatcherServlet接收到这个请求以后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找处处理请求的处理器(Handler)。android

3-四、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。程序员

五、Handler对数据处理完成之后将返回一个ModelAndView()对象给DispatcherServlet。web

六、Handler返回的ModelAndView()只是一个逻辑视图并非一个正式的视图,DispatcherSevlet经过ViewResolver将逻辑视图转化为真正的视图View。ajax

七、Dispatcher经过model解析出ModelAndView()中的参数进行解析最终展示出完整的view并返回给客户端。redis

 

二.struts2工做(实现)原理?spring

工做原理sql

一个请求在Struts2框架中的处理大概分为如下几个步骤

一、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

二、这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin)

三、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个Action,FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。

四、若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

五、ActionProxy经过ConfigurationManager询问框架的配置文件,找到须要调用的Action类 ,这里,咱们通常是从struts.xml配置中读取。

六、ActionProxy建立一个ActionInvocation的实例。

七、ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。

 

三.SpringMVC 和Struts2的区别?

1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就致使了两者的机制不一样。

2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每一个action都会被注入属性,而spring基于方法,粒度更细,但要当心把握像在servlet控制数据同样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就建立一个Action,而后调用setter getter方法把request中的数据注入;struts2其实是通 setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3. 参数传递:struts是在接受参数的时候,能够用属性来接受参数,这就说明参数是让多个方法共享的。

4. 设计思想上:struts更加符合oop(面向对象编程)的编程思想, spring就比较谨慎,在servlet上扩展。

 

四.三大框架整合步骤(详细)

一、导入必须框架jar()
二、jar addtoBuildPath
三、 创建对应各个层包
四、创建bean(entry)-----加上hibernate须要的对应的注解
五、web.xml加入struts须要的拦截(只针对struts的配置)
在action中实现ModelDriven 接口,能够快速从表单装入对应实体属性
六、新建struts.xml,设置好对应跳转关系
七、根据struts创建对应jsp和action

注意事项:
一、须要去掉整合spring须要的struts2-spring-plugin-2.1.6.jar,否则运行只有struts配置时,会报错。
二、注意路径问题。在struts.xml中的package name="user" 是跳转的“相对值”,因此,若是设置jsp的所在的文件夹(若是设置文件夹的话)和strut对应包的name对应,
可使用同一个对应值,转发时比较方便,直接写对应jsp便可,由于会默认包含对应所在的包。或者,使用绝对路径(比较好理解),直接 /jsp所在文件夹/xxx.jsp

 

五.JAVA中反射是什么?

java一般是先有类再有对象,有对象我就能够调用方法或者属性。反射实际上是经过Class对象来调用类里面的方法。经过反射能够调用私有方法和私有属性。大部分框架都是运用反射原理


Mybatis部分

一、mybatis与hibernate区别?

  Hibernate是面向对象的思想操做数据、mybatis是以纯sql操做数据

  相对于mybatis容易优化.扩展性好,可是移植性差。

二、mybatis如何动态sql?

  MyBatis的动态SQL是基于OGNL表达式的

SpringMVC部分

一、springmvc工做原理

   1.spring mvc请全部的请求都提交给DispatcherServlet,它会委托应用系统的其余模块负责负责对请求进行真正的处理工做。

   2.DispatcherServlet查询一个或多个HandlerMapping,找处处理请求的Controller.

   3.DispatcherServlet请请求提交到目标Controller

   4.Controller进行业务逻辑处理后,会返回一个ModelAndView

   5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

   6.视图对象负责渲染返回给客户端。

什么是单例?

  单例对象(Singleton)是一种经常使用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:

第一种(懒汉,线程安全):

public class Singleton {

private static Singleton instance;

   public static synchronized Singleton getInstance() {

    if (instance == null) {

      instance = new Singleton();

    }

    return instance;

    }

}

第二种(饿汉):

public class Singleton {

  private static Singleton instance = new Singleton();

    private Singleton (){}

    private Singleton (){}{

      return instance;

    }

}

什么是webserivce?

  Webservice的一个最基本的目的就是提供在各个不一样平台的不一样应用系统的协同工做能力。

  Web service 就是一个应用程序,它向外界暴露出一个可以经过Web进行调用的API。

  SOAP是一种简单基于xml的轻量协议,用户web上交换结构化信息和类型信息。

  soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: text/xml任何数据均可以xml化。

Spring部分

一、说说spring?

spring的核心是控制反转、依赖注入,aop(面向切面)至关于把每一个bean与bean之间的关系交给第 三方容器进行管理.

二、说springioc、springvaop?

spring IOC 至关于把每一个bean与bean之间的关系交给第三方容器管理。而这个容器就是spring

springaop 面向切面的编程,或AOP, 是一种编程技术,容许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。 springaop 就是用 Javva的动态代理

三、简述spring的优缺点?

spring 的优势:

   1.下降了组件之间的耦合性 ,实现了软件各层之间的解耦?

   2.可使用容易提供的众多服务,如事务管理,消息服务等?

   3.容器提供单例模式支持

   4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能?

  5.容器提供了众多的辅助类,能加快应用的开发?

   6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等?

   7.spring属于低侵入式设计,代码的污染极低?

   8.独立于各类应用服务器?

   9.spring的DI机制下降了业务对象替换的复杂性?

   10.Spring的高度开放性,并不强制应用彻底依赖于Spring,开发者能够自由选择spring的部分或所有?

  缺点:用到了大量的反射机制,执行效率比较低

四、spring的生命周期?

  Spring容器 从XML 文件中读取bean的定义,并实例化bean。

  Spring根据bean的定义填充全部的属性。

  若是bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。

  若是Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。

  若是有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。

  若是bean实现IntializingBean了,调用它的afterPropertySet方法,若是bean声明了初始化方法,调用此初始化方法。

  若是有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。

  若是bean实现了 DisposableBean,它将调用destroy()方法。

五、Spring框架中的单例bean是线程安全的吗?

  不,Spring框架中的单例bean不是线程安全的。

六、说说spring的做用域

  singleton:在每一个Spring IoC容器中一个bean定义对应一个对象实例。

  prototype:一个bean定义对应多个对象实例

  request:在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义建立而成。该做用域仅在基于web的Spring ApplicationContext 情形下有效。

  session:在一个HTTP Session 中,一个bean定义对应一个实例。该做用域仅在基于web的SpringApplicationContext 情形下有效。

  global session:在一个全局的HTTP Session 中,一个bean定义对应一个实例。典型状况下,仅在使用portlet context的时候有效。该做用域仅在基于web的Spring ApplicationContext 情形下有效。

7. @Required 注解

  这个注解代表bean的属性必须在配置的时候设置,经过一个bean定义的显式的属性值或经过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。

8. @Autowired 注解

  @Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required同样,修饰setter方法、构造器、属性或者具备任意名称和/或多个参数的PN方法。

9. @Qualifier 注解

  当有多个相同类型的bean却只有一个须要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定须要装配的确切的bean。

十、Spring面向切面编程(AOP)

   a. 解释AOP

    面向切面的编程,或AOP, 是一种编程技术,容许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。

  b. Aspect 切面

    AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。好比,一个日志模块能够被称做日志的AOP切面。根据需求的不一样,一个应用程序能够有若干切面。在Spring AOP中,切面经过带有@Aspect注解的类实现。

   c.在Spring AOP 中,关注点和横切关注的区别是什么?

    关注点是应用中一个模块的行为,一个关注点可能会被定义成一个咱们想实现的一个功能。
    横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,好比日志,安全和数据传输,几乎应用的每一个模块都须要的功能。所以这些都属于横切关注点。

   d. 链接点

    链接点表明一个应用程序的某个位置,在这个位置咱们能够插入一个AOP切面,它其实是个应用程序执行Spring AOP的位置。

   e. 通知

    通知是个在方法执行前或执行后要作的动做,其实是程序执行时要经过SpringAOP框架触发的代码段。

  Spring切面能够应用五种类型的通知:

    before:前置通知,在一个方法执行前被调用。

    after: 在方法执行以后调用的通知,不管方法执行是否成功。

    after-returning: 仅当方法成功完成后执行的通知。

    after-throwing: 在方法抛出异常退出时执行的通知。

    around: 在方法执行以前和以后调用的通知。

   f. 切点

     切入点是一个或一组链接点,通知将在这些位置执行。能够经过表达式或匹配的方式指明切入点。

  g. 什么是引入?

    引入容许咱们在已存在的类中增长新的方法和属性。

  f. 什么是目标对象?

    被一个或者多个切面所通知的对象。它一般是一个代理对象。也指被通知(advised)对象。

  g. 什么是代理?

    代理是通知目标对象后建立的对象。从客户端的角度看,代理对象和目标对象是同样的。

  h. 有几种不一样类型的自动代理?

    BeanNameAutoProxyCreator

    DefaultAdvisorAutoProxyCreator

    Metadata autoproxying

hibernate部分

一、说一下orm与jdbc的区别?

  jdbc只是一个java操做数据库的规范接口而已

  orm不过是一种思想,对象关系映射。

  ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.

  JDBC:是从底层访问数据库服务器。通常银行,金融行业为了安全起见,直接用JDBC访问

二、说说hibernate?

  hibernate是一个基于ORM持久框架,可让程序员以面向对象的思想操做数据库,提升生产效率.

三、hibernate的懒加载? 有几种禁用方法

  在Hibernate框架中,当咱们要访问的数据量过大时,明显用缓存不太合适, 由于内存容量有限 ,为了减小并发量,减小系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,可是这只是弥补而不是用了懒加载整体性能就提升了。

  咱们所说的懒加载也被称为延迟加载,它在查询的时候不会马上访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。

    1.使用代理对象:Hibernate.initialize("代理对象");

    2.在须要禁用懒加载的映射文件中显示的加入lazy = "false"

    3.使用openSessionInView【须要借助于过滤器】

四、hibernate load与get区别?

  load :找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制

  get找不到的话会返回null。

若是查询不到数据,get 会返回 null,可是不会报错, load 若是查询不到数据,则报错ObjectNotFoundException
使用get 去查询数据,(先到一级/二级)会当即向db发出查询请求(select ...), 若是你使用的是 load查询数据,(先到一级、二级))即便查询到对象,返回的是一个代理对象,若是后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象咱们称为懒加载(lazy)
五、hibernate的三种状态?

  在Hibernate中,对象有三种状态:临 时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。

  处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject).

六、hibernate有几种查询方式?

  一、 属性查询二、 参数查询、命名参数查询三、 关联查询四、 分页查询五、 统计函数

七、hibernate的缓存机制

  Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

  1.Hibernate一级缓存又称为“Session的缓存”。

  Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期一般对应一个数据库事务或者一个应用事务)。

  一级缓存中,持久化类的每一个实例都具备惟一的OID。

8.Hibernate二级缓存又称为“SessionFactory的缓存”。

  因为SessionFactory对象的生命周期和应用程序的整个过程对应,所以Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,所以须要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。

  第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。

  Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

九、简述一下 hibernate的优缺点?

  1.Hibernate的优缺点:
    优势:一、程序更加面向对象;
    二、提升了生产率;
    三、方便移植(修改配置文件);
    四、无侵入性。
  缺点:
    一、效率比JDBC略差;
    二、不适合批量操做。
如何优化hibernate?

  what ???

JavaEE部分

一、http get与Post区别?

  get:传参是经过url传输,有大小限制差很少2KB吧,安全级别差,服务端Request.QueryString["id"],

  post:传参是经过form的action方式提交到服务器,基本无大小限制,安全级别比get要强点,隐藏提交URL参数

二、解释一下什么是 servlet;

  Servlet是一种服务器端的Java应用程序,具备独立于平台和协议的特性,能够生成动态的Web页面。 它担当客户请求(Web浏览器或其 他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java 应用程序,与传统的从命令行启动的Java应用程序不一样,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机

三、servlet线程安全吗?为何?

  servlet 是不安全的,同时一个servlet实现类只会有一个实例对象,也就是一个单利的、,因此多个线程是可能会访问同一个servlet实例对象的。

四、说一说 Servlet 的生命周期?

  servlet 有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。
  这个生存期由 javax.servlet.Servlet 接口的 init,service 和 destroy 方法表达。

五、SERVLET API 中 forward()与 redirect()的区别?

  forward是转发 是不显示URL请求,会发送一次请求 。两个资源之间是同一个 request对象,能够共享 request中的数据

  redirect()是重定向 而是重定向指向的新的URL,会发送两次请求。两个资源之间不是同一个 request对象,不能够共享  

六、拦截器、过滤器、监听器的区别?

  1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提早过滤掉一些信息,或者提早设置一些 参数,而后再传入servlet或者struts的action进行业务逻辑,好比过滤掉非法url(不是login.do的地址请求,若是用户没有登录都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室常常用到的,一些骂人的话)。filter 流程是线性的, url传来以后,检查以后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等.

  2.监听器:这个东西在c/s模式里面常常用到,他会对特定的事件产生产生一个处理。监听在不少模式下用到。好比说观察者模式,就是一个监听来的。又好比struts能够用监听来启动。Servlet监听器用于监听一些重要事件的发生,监听器对象能够在事情发生前、发生后能够作一些必要的处理。

  3.java的拦截器 主要是用在插件上,扩展件上好比 hivernate spring struts2等 有点相似面向切片的技术,在用以前先要在配置文件即xml文件里声明一段的那个东西。

七、jsp 有哪些内置对象?做用分别是什么?

  答:JSP 共有如下9个内置的对象:

    request 用户端请求,此请求会包含来自 GET/POST 请求的参数

    response 网页传回用户端的回应

    pageContext 网页的属性是在这里管理

    session 与请求有关的会话期

    application servlet 正在执行的内容

    out 用来传送回应的输出

    config servlet 的构架部件

    page JSP 网页自己

    exception 针对错误网页,未捕捉的例外

八、 jsp 有哪些动做?做用分别是什么?

  答:JSP 共有如下6种基本动做
    jsp:include:在页面被请求的时候引入一个文件。
    jsp:useBean:寻找或者实例化一个 JavaBean。
    jsp:setProperty:设置 JavaBean 的属性。
    jsp:getProperty:输出某个 JavaBean 的属性。
    jsp:forward:把请求转到一个新的页面。
    jsp:plugin:根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记
九、页面间对象传递的方法

  request, session, application, cookie 等

十、JSP 和 Servlet 有哪些相同点和不一样点,他们之间的联系是什么?

  JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。 JSP编译后是"类 servlet"。 Servlet 和 JSP 最主要的不一样点在于, Servlet 的应用逻辑是在 Java文件中,而且彻底从表示层中的 HTML 里分离开来。而 JSP 的状况是 Java 和 HTML 能够组合成一个扩展名为.jsp 的文件。 JSP 侧重于视图, Servlet 主要用于控制逻辑。

十一、MVC 的各个部分都有那些技术来实现?如何实现?

  答:MVC 是 Model-View-Controller 的简写。 Model 表明的是应用的业务逻辑(经过JavaBean, EJB 组件实现), View 是应用的表示面(由 JSP 页面产生), Controller 是提供应用的处理过程控制(通常是一个 Servlet),经过这种设计模型把应用逻辑,处理过程和显示逻辑分红不一样的组件实现。这些组件能够进行交互和重用。

十二、反射的优缺点?

  反射:就是正在运行动态读取这个类的完整信息。

  优势:java的反射机制就是增长程序的灵活性、

  缺点:缺点:

    (1)性能问题:使用反射基本上是一种解释操做,用于字段和方法接入时要远慢于直接代码。所以反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

    (2)使用反射会模糊程序内内部逻辑:程序员但愿在源代码中看到程序的逻辑,反射等绕过了源代码的技术,于是会带来维护问题。反射代码比相应的直接代码更复杂。

1三、那些地方用到了反射?

    jdbc链接、经常使用框架、spring ioc、Java动态代理、jsp:useBean android加载布局文件等。

1四、什么是Java序列化?

  咱们有时候将一个 java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个 java对象,例如,要将 java 对象存储到硬盘或者传送给网络上的其余计算机,这个过程咱们能够本身写代码去把一个 java 对象变成某个格式的字节流再传输,可是, jre 自己就提供了这种支持,咱们能够调用 OutputStream 的 writeObject 方法来作,若是要让 java 帮咱们作,要被传输的对象必须实现 serializable 接口,这样, javac 编译时就会进行特殊处理,编译的类才能够被 writeObject 方法操做,这就是所谓的序列化。须要被序列化的类必须实现Serializable 接口,该接口是一个 mini 接口,其中没有须要实现的方法,implementsSerializable 只是为了标注该对象是可被序列化的。


Java集合部分

一、 ArrayList (线性表结构、数组)和 Vector 的区别
  a、这两个类都实现了List接口(List接口继承了Collection接口),

  b、Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不一样步的。若是只有一个线程会访问到集合,那最好是使用ArrayList,由于它不考虑线程安全,效率会高些;若是有多个线程会访问到集合,那最好是使用Vector,由于不须要咱们本身再去考虑和编写线程安全的代码。

二、HashMap 和 Hashtable 的区别

  a、HashMap线程不安全,HashTable线程安全。

  b、HashTable不容许null值(key和value都不能够) ,HashMap容许null值(key和value均可以)。

三、List 和 Map 区别?

  List集合是单列集合,Map集合是双列集合 经过key,value。

   List集合是有序集合,Map集合是无序集合。
  List此接口的用户能够对列表中每一个元素的插入位置进行精确地控制。
  用户能够根据元素的整数 索引(在列表中的位置)访问元素,并搜索列表中的元素
四、 List, Set, Map 是否继承自 Collection 接口?

  List, Set 是, Map 不是
五、List、 Map、 Set 三个接口,存取元素时,各有什么特色?
  list:存储: 有序的 可重复的

    访问:能够for循环,foreach循环,iterator迭代器 迭代。

  set:存储:无序的 不重复的

    访问:能够foreach循环,iterator迭代器 迭代

  map:存储:存储的是一对一对的映射 ”key=value“,key值 是无序,不重复的。value值可重复

    访问:能够map中key值转为为set存储,而后迭代这个set,用map.get(key)获取value也能够 转换为entry对象 用迭代器迭代

六、 Map的数据结构

  1.散裂图HashMap

  2.链式散裂图LinkedHashMap

  3. 树形图 TreeMap

七、Arraylist与LinkedList(双向链表类)区别?

  ArrayList和LinkedList二者都实现了List接口,可是它们之间有些不一样。

  (1)ArrayList是由Array所支持的基于一个索引的数据结构,因此它提供对元素的随机访问,复杂度为O(1),但LinkedList存储一系列的节点数据,每一个节点都与前一个和下一个节点相链接。因此,尽管有使用索引获取元素的方法,内部实现是从起始点开始遍历,遍历到索引的节点而后返回元素,时间复杂度为O(n),比ArrayList要慢。

  (2)与ArrayList相比,在LinkedList中插入、添加和删除一个元素会更快,由于在一个元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。

  (3)LinkedList比ArrayList消耗更多的内存,由于LinkedList中的每一个节点存储了先后节点的引用。

八、java中hashset和hashmap有什么区别

  一、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是经过调用 HashMap 的方法来实现的,所以 HashSet 和 HashMap 两个集合在实现本质上是相同的。
  二、HashMap的key就是放进HashSet中对象,value是Object类型的。
  三、当调用HashSet的add方法时,其实是向HashMap中增长了一行(key-value对),该行的key就是向HashSet增长的那个对象,该行的value就是一个Object类型的常量

Java基础部分(直说重点部分)

一、"=="和 equals 方法究竟有什么区别?

  ==若是判断值类型的话,判断内容是否相同。若是判断引用类型则是判断内存地址是否相同

二、静态变量和实例变量的区别?

  在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

  实例变量必须建立对象后才能够经过这个对象来使用,静态变量则能够直接使用类名来引用。

三、是否能够从一个 static 方法内部发出对非 static 方法的调用?
  非static方法能够访问static方法.

  static方法不能访问非static方法

四、Integer 与 int 的区别 

  int是java提供的8种原始数据类型之一。Java为每一个原始类型提供了封装类,Integer是java为int提供的封装类。

  int的默认值为0,而Integer的默认值为null

  在JSP开发中,Integer的默认为null,因此用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,因此用el表达式在文本框中显示时,结果为0

  Integer提供了多个与整数相关的操做方法,例如,将一个字符串转换成整数

五、请说出做用域 public, private, protected,以及不写时的区别

  这四个做用域的可见范围以下表所示。

  说明:若是在修饰的元素上面没有写任何访问修饰符,则表示 friendly。

六、重载与重写区别?

  重载是同一个类中,方法名称相同, 可是参数或个数不一样。与返回值没有关系。

  重写是在多个类中, 产生继承关系。父类与子类的方法方法必须相同。

七、接口与抽象类的区别?

  区别:定义接口的关键字是:interface 而定义抽象类的关键字是:abstract。
    接口中成员不能有私有, 抽象类能够。
    接口中定义的成员, 是finl public static 类型, 抽象类没有。
    接口中的不能有普通方法, 抽象类中能够。
  相同:
    两个都不new,可是 接口与抽象类是面向对象必备知识,设计模式、重构代码有必然做用

八、 final, finally, finalize 的区别。

  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
  finally 是异常处理语句结构的一部分,表示老是执行。
  finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可
  以覆盖此方法提供垃圾收集时的其余资源回收,例如关闭文件等。 JVM 不保证此方法总被
  调用

九、Java的垃圾回收机制

  Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

  System.gc()

  Runtime.getRuntime().gc()

十、 反射的优缺点?

  反射:就是正在运行动态读取这个类的完整信息。

  优势:java的反射机制就是增长程序的灵活性、

  缺点:缺点:(

   (1)性能问题:使用反射基本上是一种解释操做,用于字段和方法接入时要远慢于直接代码。所以反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

   (2)使用反射会模糊程序内内部逻辑:程序员但愿在源代码中看到程序的逻辑,反射等绕过了源代码的技术,于是会带来维护问题。反射代码比相应的直接代码更复杂。

十一、那些地方用到了反射?

   例如: jdbc、Java经常使用框架、jdk的动态代理、android的加载布局文件

十二、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承, 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

  字节流,字符流。字节流继承于 InputStream OutputStream,字符流继承于InputStreamReaderOutputStreamWriter。在 java.io 包中还有许多其余的流,主要是为了提升性能和使用方便。

1三、字节流与字符流的区别

字节流什么都存,字符流只能存放中文

其余部分

一、xml与json的区别?

  不一样:

    xml是重量级、json是轻量级

    xml比较占带宽、json占带宽小,易于压缩

    json在webservice 用的比较少、xml用的较多

  相同:

    二者都用在项目交互下 例如 移动app接口用的就是json、在web项目中与其余项目对接用xml较多。

    json经常使用解析方法 gson、jsonobject、jackson等 xml dom sax pull 解析

二、redis使用场景

  redis是 缓存数据库,可以减轻数据库访问操做,比关系数据访问效率高! 使用场景: 发送短信验证码计时、token生成。

三、JavaWeb安全编程

一、xss攻击

什么恶意执行javascript代码或html代码 例如获取用户cookie、论坛恶意留言

四、sql注入

5 尽可能少用隐藏域、或不要暴露敏感数据信息。

  例如:不少网站忘记密码, 经过手机号码找回,前面是手机号码+图像验证码。点击下一步是讲上一个页面的手机号放到隐藏域中。发送验证码取隐藏域里面的值。这样我讲隐藏域里面的值修改本身的手机。就能够破解别人的帐号密码

六、App接口设计必定要规范

  最好项目更新时最好用 网站安全扫描工具扫描一下。return instance;


Spring 概述
1. 什么是spring?
Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,可是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并经过POJO为基础的编程模型促进良好的编程习惯。

2. 使用Spring框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约2MB。

控制反转:Spring经过控制反转实现了松散耦合,对象们给出它们的依赖,而不是建立或查找依赖的对象们。

面向切面的编程(AOP):Spring支持面向切面的编程,而且把应用业务逻辑和系统服务分开。

容器:Spring 包含并管理应用中对象的生命周期和配置。

MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

事务管理:Spring 提供一个持续的事务管理接口,能够扩展到上至本地事务下至全局事务(JTA)。

异常处理:Spring 提供方便的API把具体技术相关的异常(好比由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

3. 核心容器(应用上下文) 模块。
这是基本的Spring模块,提供spring 框架的基础功能,BeanFactory 是 任何以spring为基础的应用的核心。Spring 框架创建在此模块之上,它使Spring成为一个容器。

4. 什么是Spring IOC 容器?
Spring IOC 负责建立对象,管理对象(经过依赖注入(DI),装配对象,配置对象,而且管理这些对象的整个生命周期。

5. IOC的优势是什么?
IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试再也不须要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。

6. ApplicationContext一般的实现是什么?
FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。

ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你须要正确设置classpath由于这个容器将在classpath里找bean配置。

WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的全部bean。

7. Bean 工厂和 Application contexts 有什么区别?
Application contexts提供一种方法处理文本消息,一个一般的作法是加载文件资源(好比镜像),它们能够向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不禁bean工厂以程序化方式处理的操做,能够在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。

依赖注入
1. 什么是Spring的依赖注入?
依赖注入,是IOC的一个方面,是个一般的概念,它有多种解释。这概念是说你不用建立对象,而只须要描述它如何被建立。你不在代码里直接组装你的组件和服务,可是要在配置文件里描述哪些组件须要哪些服务,以后一个容器(IOC容器)负责把他们组装起来。

2. 有哪些不一样类型的IOC(依赖注入)方式?
构造器依赖注入:构造器依赖注入经过容器触发一个类的构造器来实现的,该类有一系列参数,每一个参数表明一个对其余类的依赖。

Setter方法注入:Setter方法注入是容器经过调用无参构造器或无参static工厂 方法实例化bean以后,调用该bean的setter方法,即实现了基于setter的依赖注入。

3. 哪一种依赖注入方式你建议使用,构造器注入,仍是 Setter方法注入?
你两种依赖方式均可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖。

Spring 的MVC
1. 什么是Spring的MVC框架?
Spring 配备构建Web 应用的全功能MVC框架。Spring能够很便捷地和其余MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也容许以声明的方式把请求参数和业务对象绑定。

2. DispatcherServlet
Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理全部的HTTP请求和响应。

3. WebApplicationContext
WebApplicationContext 继承了ApplicationContext 并增长了一些WEB应用必备的特有功能,它不一样于通常的ApplicationContext ,由于它能处理主题,并找到被关联的servlet。

4. 什么是Spring MVC框架的控制器?
控制器提供一个访问应用程序的行为,此行为一般经过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个很是抽象的方式实现了一个控制层,容许用户建立多种用途的控制器。

5. @Controller 注解
该注解代表该类扮演控制器的角色,Spring不须要你继承任何其余控制器基类或引用Servlet API。

6. @RequestMapping 注解
该注解是用来映射一个URL到一个类或一个特定的方处理法上。

 

多线程部分

1、什么是多线程?

  在一个应用程序中,同时,有多个不一样的执行路径。

2、什么是线程同步、异步?

  线程同步表示,当前线程执行完后下一个线程接着执行。

  线程异步表示,  在一个应用程序中,同时,有多个不一样的执行路径。例如 javaweb ajax android handler

3、线程之间如何同步

  线程之间同步使用 synchronized、wait 与 notify

4、什么是线程不安全?如何解决?

      就是在多个线程共享同一个数据会受到其余线程的干扰。如何解决:使用线程同步技术, 用上锁(synchronized)。 让一个线程执行完了,在让另外一个线程执行。

5如何建立一个线程?有几种方法?

       继承thread类, 重写run方法、实现Runnalbe接口,从新run方法 , 启动一个线程用start();

6sleep() wait()有什么区别?

        a、sleep是让当前线程指定休眠时间,而后继续工做  不释放锁

        b、让当前线程wait则是等待,直到有线程通知notify()唤醒他才会从新工做。释放锁

7、什么是线程池?

  线程池是指在初始化一个多线程应用程序过程当中建立一个线程集合,而后在须要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量一般彻底取决于可用内存数量和应用程序的需求。然而,增长可用线程数量是可能的。线程池中的每一个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并等待下一次分配任务。

8、为何要线程池

  基于如下几个缘由在多线程应用程序中使用线程是必须的:

      1. 线程池改进了一个应用程序的响应时间。因为线程池中的线程已经准备好且等待被分配任务,应用程序能够直接拿来使用而不用新建一个线程。

      2. 线程池节省了CLR 为每一个短生存周期任务建立一个完整的线程的开销并能够在任务完成后回收资源。

      3. 线程池根据当前在系统中运行的进程来优化线程时间片。

      4. 线程池容许咱们开启多个任务而不用为每一个线程设置属性。

      5. 线程池容许咱们为正在执行的任务的程序参数传递一个包含状态信息的对象引用。

      6. 线程池能够用来解决处理一个特定请求最大线程数量限制问题。

      九、什么是死锁?

     十、wait()方法和notify()方法干什么用的,wait()方法有什么使用限制,是哪儿都能用么?

 

struts2细节

resultmap:用于查询resultype:主要用于向where查询语句中传入数据,经常使用于模糊查询

相关文章
相关标签/搜索