Java开发框架和中间件面试题(5)

44.Tomcat一个请求的处理流程?

     假设来自客户的请求为:

          http://localhost:8080/test/index.jsp请求被发送到本机端口8080,被在那里侦听Copote HTTP/1.1  Connector,然后

1.Connector把该请求交给它所在的Service的Engine来处理,并等待Engine来处理,并等待Engine的回应。

2.Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host。

3.Engine获得请求localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为Engine的默认主机)

4.localhost  Host获得请求/test/index.jsp,匹配它所拥有的所有的Context

5.Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“”的Context去处理)

6.path=“/test”的Context获得请求/index.jsp,在它的mapping  table中寻找对应的servlet。

7.Context匹配到URL  Pattern为*.jsp的servlet,对应于JspServlet类,构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。

8.Context把执行完了之后的HttpServletResponse对象返回给Host

9.Host把HttpServletResponse对象返回给Engine

10.Engine把HttpServletResponse对象返回给Cconnector

11.Connector把HttpServletResponse对象返回给客户browser

45.Tomcat中类加载机制?

 在Bootstrap中我们可以看到有如下三个classloader

1.为什么要设计多个类加载器?

如果所有的类都使用一个类加载器来加载,会出现什么问题呢?

 假如我们自己编写一个类java.util.Object,他的视线可能有一定危险性或者隐藏的bug。而我们知道Java自带的核心类里面也有java.util.Object,如果我们知道Java自带的核心类里面也有java.util.Object,如果JVM启动的时候先行加载的是我们自己编写的java.util.Object,那么就有可能出现安全问题!

所以Sun(后被Oracle收购)采用了另外一种方式来保证最基本的,也是最核心的功能不会被破坏。你猜的没错,那就是双亲微拍模式!

2.什么是双亲委派模型?

双亲委派模型解决了类错乱加载的问题,也设计得非常精妙。

双亲委派模式对类加载器定义来层级,每个类加载器都有一个父类加载器。在一个类需要加载的时候,首先委派给父类加载器来加载器,而父类加载器又委派给祖父类加载器来加载,以此类推。如果父类以及上面的类加载器都加载不了,那么由当前类加载器来加载,并将被加载的类缓存起来。

所以上述类是这么加载的

     Java自带的核心类:由启动类加载器加载。

    Java支持的可扩展类:由扩展类加载器加载。

    我们自己编写的类:默认由应用程序类加载器或者其子类加载。

为什么Tomcat 的类加载器也不是双亲委派模型?

     Java默认的类加载机制是通过双亲委派模型来实现的,而Tomcat实现的方式又和双亲委派模型有所区别。

原因在于一个Tomcat容器允许同时运行多个Web程序,每个Web程序依赖的类又必须是相互隔离的。因此,如果Tomcat使用双亲委派模式来加载类的话,将导致Web程序依赖的类变成共享的。

举个例子,假如我们有两个Web程序,一个依赖A库的1.0版本,另一个依赖A库的2.0版本,他们都使用了类xxx.xx.Clazz,其实现的逻辑因类库版本的不同而结构完全不同。那么这两个Web程序的其中一个必然因为加载的Clazz不是所有使用的Clazz而出现问题!而这对于开发来说是非常致命的!
46.Tomcat Container设计?

  我们看下几个Container之间的关系:

    

从上图上,我们可以看出Container顶层也是基于Lifecycle的组件设计得。

   1.在设计Container组件层次组件时,上述4个组件分别做什么的呢?为什么要四种组件呢?

       engine:表示整个container的servlet引擎,多数情况下包含一个或多个子容器,这些字容器要么是Host,要么是Context实现,或者是其他自定义组。

Host:表示包含多个Context的虚拟主机。

Context:表示一个ServletContext,表示一个web app,他通常包含一个或者多个wrapper。

wrapper:表示一个servlet定义的(如果servlet本身实现了SingleThreadModel,则可能支持多个servlet实例)。

2.结合整体的框架图中上述组件部分,我们看下包含了什么?

很明显,除了四个组件的嵌套关系,Container中还包含了Realm,Cluster,Listeners,Pipleline等支持组件。

这一点,还可以通过相关注释可以看出:

47.Tomcat  LifeCycle机制?

1.Server以及他组件

   

2.Server后续组件生命周期以及初始化

3.Server的依赖结构

48.Tomcat 中Executor?

   1.Tomcat 希望将Executor也纳入Lifecycle生命周期管理,所以让他实现了Lifecycle接口;

   2.引入超时机制:也就是说当work queue满时,会等待指定时间,如果超时将抛出RejectedExcutionException,所以这里增加了一个void  execute(Runnable command,long timeout,TimeUnit unit )方法;其实本质上,他构造来JUC中TreadPoolExcutor,通过他调用ThreadPoolExecutor的void  execute(Runnable command,long timeout,TimeUnit unit)方法。

49.Tomcat中的设计模式?

 责任链模式:管道机制

  在软件开发的常接触的责任链模式是FilterChain,他体现在很多软件设计中:

   1.比如Spring  Security框架中

         

2.比如HttpServletRequest处理的过滤器中

    当一个request过来的时候,需要对这个request做一系列的加工,使用责任链模式可以使每个加工组件化,减少耦合。也可以使用在当一个request过来的时候,需要找到合适的加工方式。当一个加工方式不适合这个request的时候,传递到下一个加工方法,该加工方式再尝试对request加工。

    网上找了图,这里我们后文将通过Tomcat请求处理向你阐述。

 外观模式:request请求

观察者模式:事件监听

Java中的事件机制的参与者有3种角色

1.Event  Source:事件源,发起事件的主体。

2.Event  Object:事件状态对象,传递的信息载体,就好比Watcher的update方法的参数,可以是事件源本身,一般作为参数存在listener的方法中。

3.Event Listener:事件监听器,当他监听到event object产生的时候,他就调用相应的方法,进行处理。

其实还有个东西比较重要:事件环境,在这个环境中,可以添加事件监听器,可以产生事件,可以触发事件监听器。

模板方式:Lifecycle

LifecycleBase是使用了状态机+模板模式来实现的。模板方法有下面这几个:

     

50.什么是Spring框架?Spring框架有哪些主要模块?

    Spring是一个控制反转和面向切面的容器框架。

   Spring有七大功能模块:

1.Core

Core模块是Spring的核心类库,Core实现了IOC功能。

2.AOP

Spring AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常见的拦截器,供用户自定义和配置。

3.orm提供常用ORM框架的管理和支持,hibernate,mybatis等。

4.Dao  Spring提供对JDBC的支持,对JDBC进行封装。

5.Web对Struts2的支持。

6.Contrext

Context模块提供框架式的Bean的访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入。

7.MVC

MVC模块为Spring提供了一套轻量级的MVC实现,即Spring  MVC。

52.解释一下Spring  IOC,AOP?

  借助Spring实现具有依赖关系的对象之间的解耦。

  对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。

  获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。

53.Bean Factory和ApplicationContext有什么区别?

     Bean Factory是Spring最底层接口,包含Bean的定义,管理bean的加载,实例化,控制bean的生命周期,特点是每次获取对象时才会创建对象。ApplicationContext是Bean factory的子接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有对象。ApplicationContext的额外功能:

   继承MessageSource,支持国际化;

   统一的资源文件访问方式

   提供在监听器中注册bean

   同时加载多个配置文件 

  载入多个(有继承关系)上下文,使得每个上下文都专注于一个特定的层次,比如应用的web层。

2.Bean Factory通常是以编程的方式被创建,ApplicationContext可以以声明的方式创建,如使用ContextLoader。

3.Bean Factory和ApplicationContext都支持Bean PostProcesssor,BeanFactoryPostProcessor,但Bean Factory需要手动注册,Application Context则是自动注册。

54.什么是JavaConfig?

  JavaConfig是Spring3.0新增的概念,就是以注解的形式取代Spring中繁琐的XML文件。Java Config结合了XML的解耦和Java编译时检查的优点。

@Configuration,表示这个类是配置类。

@ComponentScan,相当于xml的

@Bean,相当于xml的

@EnableWebMvc,相当于xml的

@ImportResource,相当于xml的

@PropertySource,用于读取properties配置文件

@Profile,一般用于多环境配置,激活时可用@ActiveProfile(“dev")注解

55.Spring有几种配置方式?

1.xml配置文件方式

2.基于注解的方式,项目越来越大,基于xml注解配置太麻烦,Spring2.x时代提供了生命bean的注解。

  2.1Bean的定义相关注解 @Component,@Controller,@Service,@Repository

  2.2Bean色注入相关注解@AutoWire

3.基于Java的方式Spring3.x以后,可以通过Java代码装配@Bean。

 Spring容器中的bean可以有5个作用范围:

1.singleton:这种bean范围是默认的,这种范围确保不管接受多少请求,每个容器中只有一个bean实例,单例模式。

2.prototype:为每一个bean提供一个实例。

3.request:在请求bean范围内为每一个来自客户端的网络请求创建一个实例,在请求完毕后,bean会失效并被垃圾回收器回收。

4.session:为每个session创建一个实例,session过期后,bean会随之消失。

5.global session:global  session和Portlet应用相关。当你的应用部署在Portlet

容器中工作时,他包含了很多portlet。如果你想要声明让所有的porlet公用全局的存储变量的话,那么全局变量需要存储在global  session中。

57.什么是Spring inner beans?

在Spring框架中,无论何时bean被使用时,当仅被调用一个属性。可以将这个bean声明为内部bean。内部bean可以用setter注入“属性”和构造方法注入“构造参数”的方式来实现。

比如,在我们的应用程序中,一个Customer类引用了一个Person类,我们要做的是创建一个Person实例,然后在Customer内部使用。

58.Spring框架中的单例Beans是线程安全的么?

  Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。

但实际上,大部分的Spring bean并没有可变的状态,所以在某种程度上说Spring的单例bean时线程安全的。如果你的bean有多种状态的话,比如view  model,需要自行保证线程安全啦。

最浅显的解决方案就是将多态bean的作用域由singleton变更为propertype。

59.请解释SpringBean的自动装配?

    Spring支持IOC,自动装配不用实例化,直接从bean容器中取。

   1.配置在xml中

    2.@Autowired自动装配

60.如何开启基于注解的自动装配?

  要使用@Autowired,需要注册AutowiredAnnotationBeanPostProcessor,可以有以下两种方式来实现:

1.引入配置文件中的下引用

2.在bean配置文件中直接引入AutowiredAnnotationBeanProcessor

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/271725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Antd Cascader 组件指定 placement 弹出位置无效

最近在使用 Antd Cascader 组件时&#xff0c;发现指定 placement 弹出位置无效&#xff0c;查看官方文档也没有找到相关的说明&#xff0c;经过一番搜索&#xff0c;终于发现了问题所在。 问题复现 代码示例&#xff1a; <Form.Item name"intention" label&quo…

7_js_dom编程入门1

Objective&#xff08;本课目标&#xff09; 掌握获取页面元素的常用方法 掌握事件触发案例 能够区分innerText和innerHTML的区别 综合案例训练 1 DOM 介绍 1.1 什么是DOM 文档对象模型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09;&#xff0c;是 …

分享3种常用的前端埋点方式

只有了解用户&#xff0c;我们才能服务好用户&#xff0c;而最接近用户的我们&#xff0c;自然要承担起更多的责任。 那么在一个企业中&#xff0c;我们要如何去了解用户呢&#xff1f; 最直接有效的方式就是了解用户的行为&#xff0c;了解用户在网站中做了什么&#xff0c;呆…

工业交换机的冗余电源设计

在市场上&#xff0c;尤其是在工业级交换机上&#xff0c;我们经常能看到一个支持冗余电源的选项。在大多数工业现场中&#xff0c;我们都知道网络的稳定性是非常关键的。而且&#xff0c;像光伏和煤矿这样的行业经常位于偏远地区&#xff0c;环境条件恶劣。因此&#xff0c;在…

WAVE SUMMIT+ 2023倒计时2天,传文心一言将曝最新进展!

传文心一言将曝最新进展&#xff01; 亮点一&#xff1a;趋势引领&#xff0c;“扛把子”文心一言将曝新进展亮点二&#xff1a;干货十足&#xff0c;硬核低门槛开发秘籍大放送亮点三&#xff1a;蓄势待发&#xff0c;大模型赋能产业正当时亮点四&#xff1a;群星闪耀&#xff…

FPFA.一种二倍频电路代码描述以及测量详情

一、前言 1、因为需要倍频电路所以找了个二倍频的电路&#xff0c;通过fpga实际测量发现经过倍频后的电路峰值降低。不过这个也正常&#xff0c;因为该电路只要过触发点就会开始发生波形变化&#xff0c;而电路的触发值不是峰值。​​​​​​​ 2、继续对电路做倍频后信号做二…

西南科技大学计算机网络实验三 (路由器基本配置与操作,RIP、OSPF路由协议配置)

一、实验目的 基于网络设备模拟软件,学习和使用路由器的各种基本配置与验证命令,学习和使用路由器的静态路由、RIP、OSPF路由协议配置。 二、实验环境 使用RouterSim Network Visualizer软件来模拟网络设备与网络环境;主机操作系统为windows。 三、实验内容 1、路由器名称…

[足式机器人]Part4 南科大高等机器人控制课 CH11 Bascis of Optimization

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 课程链接 &#xff1a; https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch11 Bascis o…

android jetpack组件一篇搞定

Jetpack 是 Android 官方推出的一套开发库&#xff0c;其中包含众多的组件&#xff0c;可以让 Android 开发者更快更高效地开发应用程序。Jetpack 组件分为四大部分&#xff1a;架构、行为、UI 和基础组件。 下面详细阐述如何合理使用 Jetpack 组件开发 Android 项目。 1. 熟练…

时尚机密防线升级:迅软DSE助力时装企业应对终端泄密挑战

客户简要介绍 某高级时装是国际知名的奢侈品牌控股及管理运营公司。公司依靠丰富的奢侈品市场运作经验、成熟的品牌管理架构&#xff0c;以及对艺术文化的热爱与尊重&#xff0c;发掘低调且优秀的意大利品牌&#xff0c;将其推向市场取得成功。公司在全球范围内践行多品牌发展…

Mesh网格撞击变形

物理碰撞 两个游戏物体发生碰撞的必要条件&#xff1a; 发生碰撞的两个游戏物体有Collider&#xff08;碰撞器&#xff09;组件&#xff1b;其中一个物体有Rigidbody&#xff08;刚体&#xff09;组件。 MonoBehaviour中的相关回调函数&#xff1a; 回调函数详解OnCollisio…

支持多医院使用的云HIS医院信息化管理系统源码 SaaS模式

一、什么是HIS系统 HIS系统&#xff08;Hospital InformationSystem&#xff09;是医院信息化建设的核心组成部分&#xff0c;它是为了管理和运营医院而设计和开发的一套综合性的信息系统。HIS系统通过整合医院各个部门和业务流程的数据和信息&#xff0c;实现了医院内部的信息…

GNN 图神经网络

GCN 邻接矩阵A&#xff1a;adjacency matrix用来表示节点间的连接关系。 度矩阵D&#xff1a;degree matrix用来表示节点的连接数 特征矩阵X&#xff1a;feature matrix用来表示节点的特征

鸿蒙4升级进展:共137款产品加入升级,Mate 20也能升级了

从华为官方发布的鸿蒙升级进展来看&#xff0c;2018年发布的Mate 20系列机型也开始了鸿蒙4系统升级的测试招募。 5年之期已到&#xff0c;再战5年不是梦想&#xff1f; 另外&#xff0c;从明年一季度的升级预告来看&#xff0c;春节前后升级的主要为穿戴手表产品。 目前&…

求求咯,一定要让幼师姐妹们都刷到啊啊啊啊

幼师姐妹还有不知道的吗???再也不用为了写东西而发愁烦恼了&#xff0c;就是这个写什么都可&#xff0c;各种总结&#xff0c;教案&#xff0c;评语&#xff0c;日报等等 都能写!尊嘟有用啊!!

淄博•关爱天使 质子治疗距普通患者又近一步!质子救助持续发热中

儿童肿瘤近年来有增多趋势&#xff0c;其原因可能有很多&#xff0c;与成人肿瘤一样&#xff0c;儿童肿瘤也分为良性和恶性。当孩子长了良性肿瘤时&#xff0c;开始一般不会有明显的症状&#xff0c;只有在肿瘤长到一定大小&#xff0c;开始挤压周围脏器&#xff0c;并影响这些…

SQL server 数据库练习题及答案(练习3)

一、编程题 公司部门表 department 字段名称 数据类型 约束等 字段描述 id int 主键&#xff0c;自增 部门ID name varchar(32) 非空&#xff0c;唯一 部门名称 description varchar(1024) …

暴力破解(Pikachu)

基于表单的暴力破解 先随便输入一下&#xff0c;然后抓包&#xff0c;进行字典爆破 验证码绕过(on server) server服务端要输入正确的验证码后进行爆破 之后的操作没什么不一样 验证码绕过(on client) 这个也需要输入验证码&#xff0c;但是后面进行字典爆破的时候&#xf…

EasyRecovery数据恢复软件好不好用?值不值得购买?

EasyRecovery是一款专业优秀的数据恢复软件&#xff0c;支持硬盘、光盘、U盘、手机、数码相机等设备&#xff0c;可以尽可能恢复被误删的文件数据&#xff08;视频、音频、图片等&#xff09;&#xff0c;欢迎下载。 EasyRecovery-2024mac最新版本下载: https://wm.makeding.c…

Matlab论文插图绘制模板第132期—函数等高线填充图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线填充图。 先来看一下成品效果&#xff1a; 特…