百度-Java中级面试题分享-

BeanFactory 和 ApplicationContext 有什么区别

> BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义, 以便在接收到客户端请求时将对应的 bean 实例化。 

> BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。 

> 从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置,根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的功能。 

> 提供了支持国际化的文本消息 

> 统一的资源文件读取方式 

> 已在监听器中注册的 bean 的事件 

Spring Bean 的生命周期

> Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除。 

> Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。 

> 初始化之后调用的回调方法。 

> 销毁之前调用的回调方法。 

> Spring 框架提供了以下四种方式来管理 bean 的生命周期事件: 

> InitializingBean 和 DisposableBean 回调接口 

> 针对特殊行为的其他 Aware 接口 

> Bean 配置文件中的 Custom init()方法和 destroy()方法 

> @PostConstruct 和@PreDestroy 注解方式 

Spring IOC 如何实现 

> Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了Spring 框架 IoC 容器的基础。 

> BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的WebApplicationContext。 

> org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具体实现,用来包装和管理前面提到的各种 bean。BeanFactory 接口是 Spring IoC 容器的核心接口。 

说 说 Spring AOP

> 面向切面编程,在我们的应用中,经常需要做一些事情,但是这些事情与核心业务无关,比如,要记录所有 update*方法的执行时间时间,操作人等等信息,记录到日志, 

> 通过 spring 的 AOP 技术,就可以在不修改 update*的代码的情况下完成该需求。 

Spring AOP 实现原理

> Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类。 

> 如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。CGLIB

(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final, 那么它是无法使用 CGLIB 做动态代理的。 

动态代理(cglib 与 JDK)

> JDK 动态代理类和委托类需要都实现同一个接口。也就是说只有实现了某个接口的类可以使用 Java 动态代理机制。但是,事实上使用中并不是遇到的所有类都会给你实现一个接口。因此,对于没有实现接口的类,就不能使用该机制。而 CGLIB 则可以实现对类的动态代理。 

Spring 事务实现方式

> 1、编码方式 

> 所谓编程式事务指的是通过编码方式实现事务,即类似于 JDBC 编程实现事务管理。 

> 2、声明式事务管理方式 

> 声明式事务管理又有两种实现方式:基于 xml 配置文件的方式;另一个实在业务方法上进行@Transaction 注解,将事务规则应用到业务逻辑中 

Spring 事务底层原理

> a、划分处理单元——IOC 

> 由于 spring 解决的问题是对单个数据库进行局部事务处理的,具体的实现首相用 spring 中的 IOC 划分了事务处理单元。并且将对事务的各种配置放到了 ioc 容器中(设置事务管理器,设置事务的传播特性及隔离机制)。 

> b、AOP 拦截需要进行事务处理的类 

> Spring 事务处理模块是通过 AOP 功能来实现声明式事务处理的,具体操作(比如事务实行的配置和读取,事务对象的抽象),TransactionProxyFactoryBean 接口来使用 AOP 功能,生成 proxy 代理对象,通过 TransactionInterceptor 完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中。读取 ioc 容器事务配置属性,转化为 spring 事务处理

需要的内部数据结构(TransactionAttributeSourceAdvisor),转化为TransactionAttribute 表示的数据对象。 

> c、对事物处理实现(事务的生成、提交、回滚、挂起) 

> spring 委托给具体的事务处理器实现。实现了一个抽象和适配。适配的具体事务处理器:DataSource 数据源支持、hibernate 数据源事务处理支持、JDO 数据源事务处理支持,JPA、JTA 数据源事务处理支持。这些支持都是通过设计

PlatformTransactionManager、AbstractPlatforTransaction 一系列事务处理的支持。 为常用数据源支持提供了一系列的 TransactionManager。 

> d、结合 

> PlatformTransactionManager 实现了 TransactionInterception 接口,让其与TransactionProxyFactoryBean 结合起来,形成一个 Spring 声明式事务处理的设计体系。 

如何自定义注解实现功能

> 创建自定义注解和创建一个接口相似,但是注解的 interface 关键字需要以@符号开头。 

> 注解方法不能带有参数; 

> 注解方法返回值类型限定为:基本类型、String、Enums、Annotation 或者是这些类型的数组; 

> 注解方法可以有默认值; 

> 注解本身能够包含元注解,元注解被用来注解其它注解。 

Spring MVC 运行流程

> 1.spring mvc 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。 

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

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

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

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

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

Spring MVC 启动流程

> 在 web.xml 文件中给 Spring MVC 的 Servlet 配置了 load-on-startup,所以程序启动的 

> 时候会初始化 Spring MVC,在 HttpServletBean 中将配置的 contextConfigLocation 

> 属性设置到 Servlet 中,然后在 FrameworkServlet 中创建了 WebApplicationContext, 

> DispatcherServlet 根据 contextConfigLocation 配置的 classpath 下的 xml 文件初始化 

> Spring MVC 总的组件。 

为什么选择 Netty

> 1) API 使用简单,开发门槛低; 

> 2) 功能强大,预置了多种编解码功能,支持多种主流协议; 

> 3) 定制能力强,可以通过 ChannelHandler 对通信框架进行灵活的扩展; 

> 4) 性能高,通过与其它业界主流的 NIO 框架对比,Netty 的综合性能最优; 

> 5) 成熟、稳定,Netty 修复了已经发现的所有 JDK NIO BUG,业务开发人员不需要再为NIO 的 BUG 而烦恼; 

> 6) 社区活跃,版本迭代周期短,发现的 BUG 可以被及时修复,同时,更多的新功能会被加入; 

> 7) 经历了大规模的商业应用考验,质量已经得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它可以完全满足不同行业的商业应用。 

> 正是因为这些优点,Netty 逐渐成为 Java NIO 编程的首选框架。 

说说业务中,Netty 的使用场景

> 构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、ESB 消息总线等, Netty 主要作为基础通信框架提供高性能、低时延的通信服务; 

> 公有或者私有协议栈的基础通信框架,例如可以基于 Netty 构建异步、高性能的WebSocket 协议栈; 

> 各领域应用,例如大数据、游戏等,Netty 作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信。 

原生的 NIO 在 JDK 1.7 版本存在 epoll bug

> 它会导致 Selector 空轮询,最终导致 CPU 100%。官方声称在 JDK 1.6 版本的 update18 修复了该问题,但是直到 JDK 1.7 版本该问题仍旧存在,只不过该 BUG 发生概率降低了一些而已,它并没有得到根本性解决。 

什么是 TCP 粘包/拆包

> 1、要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包。 

> 2、待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。 

> 3、要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。 

> 4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。 

TCP 粘包/拆包的解决办法

> 1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。 

> 2、发送端将每个数据包封装为固定长度(不够的可以通过补 0 填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。 

> 3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。 

Netty 线程模型

> 首先,Netty 使用 EventLoop 来处理连接上的读写事件,而一个连接上的所有请求都保证在一个 EventLoop 中被处理,一个 EventLoop 中只有一个 Thread,所以也就实现了一个连接上的所有事件只会在一个线程中被执行。一个 EventLoopGroup 包含多个 EventLoop,可以把一个 EventLoop 当做是 Reactor 线程模型中的一个线程,而一个 EventLoopGroup 类似于一个 ExecutorService 

说说 Netty 的零拷贝

> “零拷贝”是指计算机操作的过程中,CPU 不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。 

Netty 内部执行流程

> 1. Netty 的接收和发送 ByteBuffer 采用 DIRECT BUFFERS,使用堆外直接内存进行Socket 读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行 Socket 读写,JVM 会将堆内存 Buffer 拷贝一份到直接内存中,然后才写入Socket 中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝。 

需要白嫖java学习资料包括《JVM、Netty、Mysql、Mybatis、Redis、Dubbo、Nginx、设计模式》等10G资料礼包、可以看我主页或私信博主都行

打卡更新Java文章  23 / 100天

大家可以点赞、收藏、关注、评论我啦 、下面的投票也可以积极互动起来哟

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1t硬盘怎么分区最好_win7系统硬盘怎么分区 win7系统硬盘分区步骤【介绍】

我们在使用win7系统的过程当中,经常都会把硬盘分成几个盘,不过因为一些原因,需要把硬盘进行重新分区,不过很多用户都不知道在不重装系统的情况下进行分区,那么win7系统硬盘如何分区呢?今天为大家分享win7系统硬盘分区…

京东-Java中级面试题分享-

1、哪些情况下的对象会被垃圾回收机制处理掉? 利用可达性分析算法,虚拟机会将一些对象定义为 GC Roots,从 GC Roots 出发沿着引用链向下寻找,如果某个对象不能通过 GC Roots 寻找到,虚拟机就认为该对象可以被回收掉。 …

斑能不能彻底去掉_淡妆能不能只用洗面奶卸掉?

淡妆能不能只用洗面奶卸掉?洗面奶能卸妆吗?洗面奶不可以卸妆。洗面奶一般只能清除掉水溶性的污垢,对于油性的彩妆卸效果不大。如果是化妆之后单纯地用洗面奶洁面的话,彩妆不能清除干净容易堵塞毛孔,造成毛孔粗大,皮肤粗糙。卸妆洁面二合一效果的洗面奶能够清除一部分彩妆,但是…

台式电脑连接宽带远程计算机没反应怎么办,怎么处理宽带连接提示连接被远程计算机终止?...

现在有很多人使用宽带拨号上网,有个小伙伴的宽带有一天就出现了宽带被远程计算机终止,这是怎么一回事呢?这样一来他的宽带就无法上网了,电脑没了网基本什么也干不了。请大家和小编一起来看看这个问题有什么好办法可以解决呢&#…

❤️六W字《计算机基础知识》(一)(建议收藏)❤️

计算机简介: 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量…

语言中要输出表格_C语言 | 表格输出若干人的信息

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是…

❤️六W字《计算机基础知识》(二)(建议收藏)❤️

上一篇: ❤️六W字《计算机基础知识》(一)❤️ 51、 Access是一种____数据库管理系统。 A、发散型 B、集中型 C、关系型 D、逻辑型 52、 用高级程序设计语言编写的程序,要转换成等价的可执行程序,必须经过____。 A、…

Oracle 数据怎么实时同步到 DM DB 达梦数据库 | 亲测干货建议收藏

摘要 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。我自己亲测了一种方式,可以很方便地完成 Oracle 数据实时同步到 DM DB 达梦数据库&#xff0c…

datagrid底部显示水平滚动_看完《惊奇队长》等彩蛋,我想到了一个制作PPT滚动字幕的方法...

滚动字幕大家都不陌生,每每看完电影,影院亮灯的时候就能看到:电影片尾滚动字幕前两天去看了《惊奇队长》,在等彩蛋的过程中,看着一行行的字幕在面前滚动,我突然想到:这种滚动字幕式动画&#xf…

Oracle 数据怎么实时同步到 Elasticsearch | 亲测干货建议收藏

摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。我自己亲测了一种方式,很快实现了Oracle 数据实时同步到 Elasticsearch&#xff…

pe估值 python_Python编程学习笔记(7)

欢迎关注我的公众号【小散逆袭大本营】学到目前这个程度,我们已经可以画出个股的PE和PB曲线图了。但是我们知道,对于个股来说,PE或者PB的参考价值很有限,不同类型企业,其PE的市场认可程度是不同。我们几乎不可能通过仅…

Oracle 数据怎么实时同步到 MongoDB | 亲测干货分享建议收藏

摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。我自己亲测了一种方式,可以非常方便地完成 Oracle 数据实时同步到 MongoDB&#…

html css怎么连在一起,CSS秘密花园:连体字母_html/css_WEB-ITnose

《 CSS Secrets 》是 Lea Verou 最新著作,这本书讲解了有关于CSS中一些小秘密。是一本CSSer值得一读的一本书,经过一段时间的阅读,我、南北和彦子一起将在W3cplus发布一系列相关的读后感,与大家一起分享。和人一样,不是…

Oracle 数据怎么实时同步到 PgSQL | 亲测干货分享建议收藏

摘要: 这段时间负责一个老项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中有些系统表数据与基础资料数据经常需要进行同步,相信很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,…

Oracle 数据怎么实时同步到 SQL Server | 亲测干货分享建议收藏

摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。我自己亲测了一种方式,可以非常方便地完成 Oracle 数据实时同步到 SQL Server&am…

资阳停车场系统推荐_详细讲解停车场管理车牌识别系统安装

停车场管理系统现在基本都是车牌识别与无人值守了,车牌识别系统中道闸设备与摄像头该如何安装呢?今天给大家详细的介绍一下。直道安装直的车道是较理想的安装环境,车辆在驶入识别区域时,能够获得高质量的相片。1、施工时停车场车牌…

Oracle 数据怎么实时同步到 Kafka | 亲测干货分享建议收藏

摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据、表多、数据量大等情况就难以同步。我自己亲测了一种方式,可以非常方便地完成 Oracle 数据实时同步到 Kafka&#xf…

盲人如何学计算机编程,盲人程序员是如何编程的?

我是一个程序员,我也是一个盲人。我的世界中从来没有任何画面,我生来就看不见任何东西。每次新同事——那些从来没有经历过任何形式视力障碍的人——听说了我的事迹,常常会跑来问我以下这些问题:那么,你怎么读取别人的…

ks检验正态分布结果_KS检验及其在机器学习中的应用

KS检验及其在机器学习中的应用什么是KS检验Kolmogorov–Smirnov 检验,简称KS检验,是统计学中的一种非参数假设检验,用来检测单样本是否服从某一分布,或者两样本是否服从相同分布。在单样本的情况下,我们想检验这个样本…

Oracle 数据怎么实时同步到 MySQL | 亲测干货分享建议收藏

摘要: 这段时间负责一个老项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中有些系统表数据与基础资料数据经常需要进行同步,相信很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,…