面试涉及的框架与设计模式

单例模式

私有的静态内部类

public class Singleton {  
    private Singleton() {  
    }  
      
    private static class HolderClass {  
            private final static Singleton instance = new Singleton();  
    }  
      
    public static Singleton getInstance() {  
        return HolderClass.instance;  
    }  
}

枚举单例

public enum Factory {
	INSTANCE;
	public static Factory getInstace() {
		return INSTANCE;
	}

}

Spring优点

  1. 降低了组件之间的耦合性 ,实现了软件各层之间的解耦
  2. 可以使用容易提供的众多服务,如事务管理,消息服务等
  3. 容器提供单例模式支持
  4. 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
  5. 容器提供了众多的辅助类,能加快应用的开发
  6. spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
  7. spring属于低侵入式设计,代码的污染极低
  8. 独立于各种应用服务器
  9. spring的DI机制降低了业务对象替换的复杂性
  10. Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

IOC

定义

  • 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者,因此也称为依赖注入。

方式

  • 设置注入和构造注入。
  • 设置注入的优点:直观,自然
  • 构造注入的优点:可以在构造器中决定依赖关系的顺序。
构造注入
   <!-- Definition for textEditor bean -->
   <bean id="textEdior" class="com.tutorialspoint.TextEditor">
  		<constructor-arg ref="spellChecker"/>
   </bean>

   <!-- Definition for spellChecker bean -->
   <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
   </bean>
设置注入
	<!-- Definition for textEditor bean -->
   <bean id="textEditor" class="com.tutorialspoint.TextEditor">
      <property name="spellChecker" ref="spellChecker"/>
   </bean>

   <!-- Definition for spellChecker bean -->
   <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
   </bean>

AOP

定义

  • 面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。

方式

Spring MVC

这里写图片描述

  1. 收到一个 HTTP 请求后,DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器。
  2. 控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。Service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中。
  3. DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图。
  4. 一旦确定视图,DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中。

参考

https://www.w3cschool.cn/wkspring/9pf81ha5.html

servlet生命周期及各个方法

  • servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁。
  • init():在Servlet的生命周期中,仅执行一次init()方法。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。
  • service():它是Servlet的核心,负责响应客户的请求。
  • destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

tomcat和servlet工作流程

  1. Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
  2. Web Client 向Servlet容器(Tomcat)发出Http请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它(也可以在容器启动时创建)。
  3. Servlet容器接收Web Client的请求,Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
  4. Servlet容器创建一个HttpResponse对象。
  5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
  6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
  7. 逻辑处理。
  8. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
  9. Servlet容器把HttpServlet的响应结果传给Web Client。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值