当前位置: 首页 > news >正文

网站开发工程师面试试题青岛营销型网站推广

网站开发工程师面试试题,青岛营销型网站推广,logo设计网站生成器,如何做exo网站目录 Spring的优点什么是Spring AOP#xff1f;AOP有哪些实现方式#xff1f;JDK动态代理和CGLIB动态代理的区别#xff1f;Spring AOP相关术语Spring通知有哪些类型#xff1f;什么是Spring IOC#xff1f;Spring中Bean的作用域有哪些#xff1f;Spring中的Bean什么时候… 目录 Spring的优点什么是Spring AOPAOP有哪些实现方式JDK动态代理和CGLIB动态代理的区别Spring AOP相关术语Spring通知有哪些类型什么是Spring IOCSpring中Bean的作用域有哪些Spring中的Bean什么时候被实例化Spring中Bean的生命周期依赖注入的方式Autowired和Resource有什么区别Component和Bean的区别Bean 是线程安全的吗什么是事务spring 事务的实现方式Spring 事务隔离级别Spring 事务传播属性Spring 事务在什么情况下会失效Spring怎么解决循环依赖的问题什么是MVCSpring MVC工作原理Spring Boot的优势Spring Boot自动装配原理了解Spring Boot中的日志组件吗 Spring的优点 通过控制反转和依赖注入实现松耦合。支持面向切面的编程并且把应用业务逻辑和系统服务分开。支持声明式事务。方便集成各种优秀框架。方便程序的测试。 什么是Spring AOP AOP(Aspect-Oriented Programming)即面向切面编程用人话说就是把公共的逻辑抽出来让开发者可以更专注于业务逻辑开发可以减少系统的重复代码和降低模块之间的耦合度。 切面就是那些与业务无关但所有业务模块都会调用的公共逻辑。 AOP有哪些实现方式 AOP有两种实现方式静态代理和动态代理。 静态代理 代理类在编译阶段生成在编译阶段将通知织入Java字节码中也称编译时增强。AspectJ使用的是静态代理。 缺点代理对象需要与目标对象实现一样的接口并且实现接口的方法会有冗余代码。同时一旦接口增加方法目标对象与代理对象都要维护。 动态代理 代理类在程序运行时创建AOP框架不会去修改字节码而是在内存中临时生成一个代理对象在运行期间对业务方法进行增强不会生成新类。 JDK动态代理和CGLIB动态代理的区别 Spring AOP中的动态代理主要有两种方式JDK动态代理和CGLIB动态代理。 JDK 动态代理 依赖于 反射机制来创建代理适用于实现接口的情况。CGLib 动态代理 通过字节码生成技术创建子类来实现代理适用于没有实现接口的类。 Spring AOP相关术语 术语含义目标(Target)被通知的对象代理(Proxy)向目标对象应用通知之后创建的代理对象连接点(JoinPoint)目标对象的所属类中定义的所有方法均为连接点切入点(Pointcut)被切面拦截 / 增强的连接点切入点一定是连接点连接点不一定是切入点通知(Advice)增强的逻辑 / 代码也即拦截到目标对象的连接点之后要做的事情切面(Aspect)切入点(Pointcut)通知(Advice)Weaving(织入)将通知应用到目标对象进而生成代理对象的过程动作 Spring通知有哪些类型 在AOP术语中切面的工作被称为通知。通知实际上是程序运行时要通过Spring AOP框架来触发的代码段。 Spring切面可以应用5种类型的通知 前置通知Before在目标方法被调用之前调用通知功能后置通知After在目标方法完成之后调用通知此时不会关心方法的输出是什么返回通知After-returning 在目标方法成功执行之后调用通知异常通知After-throwing在目标方法抛出异常后调用通知环绕通知Around通知包裹了被通知的方法在被通知的方法调用之前和调用之后执行自定义的逻辑 通知的执行顺序 什么是Spring IOC IOC控制反转由Spring容器管理bean的整个生命周期。 通过反射实现对其他对象的控制包括初始化、创建、销毁等解放手动创建对象的过程同时降低类之间的耦合度 Spring IOC的实现机制工厂模式反射机制 Spring中Bean的作用域有哪些 Bean的作用域 singleton单例Spring中的bean默认都是单例的。prototype原型每次请求都会创建一个新的bean实例。request每一次HTTP请求都会产生一个新的bean该bean仅在当前HTTP request内有效。session每一次HTTP请求都会产生一个新的bean该bean仅在当前HTTP session内有效。application全局session作用域。 Spring中的Bean什么时候被实例化 单例作用域Singleton在 Spring 容器 启动 时会立即实例化单例作用域的 Bean将它们存储在容器的 Bean 工厂中以便随时获取。原型作用域Prototype在 请求 获取原型作用域的 Bean 时Spring 容器才会实例化该 Bean并返回给请求方。其他作用域如 Web 作用域和 Session 作用域等它们的实例化时间依赖于具体的使用场景。 Spring中Bean的生命周期 Bean生命周期可以粗略的划分为五大步 第一步实例化Bean第二步Bean属性赋值第三步初始化Bean第四步使用Bean第五步销毁Bean 依赖注入的方式 在 Spring 中实现依赖注入的常见方式有以下 3 种 属性注入Field Injection Autowire实现属性注入Resurce实现属性注入 Set方法注入Setter Injection构造方法注入Constructor Injection Autowired和Resource有什么区别 Autowired是Spring提供的Resource是J2EE提供的 Resource默认使用name装配未指定name时会按类型装配 AutoWired按类型装配如果要使用名称装配可以用Qualifier结合使用 Component和Bean的区别 Component 注解用在类上表明一个类会作为组件类并告知Spring要为这个类创建bean每个类对应一个 Bean。 Bean 注解用在方法上表示这个方法会返回一个 Bean。 Bean 注解更加灵活相比 Component 注解自定义性更强 Bean 是线程安全的吗 Spring 框架中的 Bean 是否线程安全取决于其作用域和状态。 prototype 作用域下每次获取都会创建一个新的 bean 实例不存在资源竞争问题所以不存在线程安全问题。 singleton 作用域下IoC 容器中只有唯一的 bean 实例可能会存在资源竞争问题取决于 Bean 是否有状态。 有状态Bean包含可变的成员变量的对象存在线程安全问题。无状态Bean没有定义可变的成员变量比如dao和service不能保存数据是线程安全的。 什么是事务 事务是一个操作序列要么全部执行成功要么全部执行失败。事务有四个重要特性称为 ACID 特性 Atomicity原子性事务中的所有操作要么全部完成要么全部不完成。Consistency一致性事务完成后数据要处于一致的状态。Isolation隔离性一个事务的执行不能被其他事务干扰。Durability持久性事务完成后数据应该永久保存 补充 undo_log 表保证事务 原子性(A) 和 一致性(C ) redo_log 表保证事务 持久性(D)隔离级别 保证事务 隔离性(I) spring 事务的实现方式 Spring事务机制主要包括声明式事务和编程式事务。 **编程式事务通过编程的方式管理事务手动去开启、提交、回滚事务、这种方式带来了很大的灵活性但很难维护。声明式事务将事务管理代码从业务方法中分离出来通过aop进行封装。Spring声明式事务使得我们无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。使用 Transactional 注解开启声明式事务。 Spring 事务隔离级别 读未提交read Uncommited 在该隔离级别所有的事务都可以读取到别的事务中未提交的数据会产生脏读问题在项目中基本不怎么用 安全性太差 脏读所谓的脏读其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X在未提交前事务A读取了X而事务B却回滚了这样事务A就形成了脏读。 也就是说当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。 读已提交read commited 处于 READ COMMITTED 级别的事务可以看到其他事务对数据的修改。也就是说在事务处理期间如果其他事务修改了相应的数据那么同一个事务的多个 SELECT 语句可能返回不同的结果。在一个事务内能看到别的事务提交的数据。出现 不可重复读。 不可重复读事务A首先读取了一条数据然后执行逻辑的时候事务B将这条数据改变 了然后事务A再次读取的时候发现 数据不匹配就是所谓的不可重复读了。 可重复读Repeatable read 这是 MySQL 的默认隔离级别它确保了一个事务中多个实例在并发读取数据的时候会读取到一样的数据不过理论上这会导致另一个棘手的问题幻读 。 幻读事务A首先根据条件索引得到N条数据然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据导致事务A再次搜索发现有NM条数据了就产生了幻读简单来说就是突然多了几行数据。 为了解决幻读问题MySQL引入了两种不同的MVCC实现方式基于快照的MVCC 和 基于原始行的MVCC。 基于快照的MVCC该方式会为每个事务创建一个快照事务开始时记录数据库的当前版本号当事务再次访问该行数据时会检查当前版本号是否与快照版本号一致如果不一致则会进行回滚或重新读取数据。基于原始行的MVCC该方式会为每行数据创建一个版本链表每次更新操作都会创建一个新的版本号并将旧版本号链接到新版本号上。当事务需要读取数据时会检查当前版本号是否在版本链表中如果在则读取最新版本的数据避免幻读问题。 可串行化 有效避免“脏读”、“不可重复读”、“幻读”不过效率特别低。 不可重复读和幻读比较 不可重复读 针对的是 update 或 delete是由于数据发生改变导致的幻读 针对的 insert 是由于行数发生改变导致的。 Spring 事务传播属性 记忆方法 两个REQUIRED一定有事务 带NEW总是自己建自己的事务。不带NEW有就加入没有才建。 两个SUPPORTS 带NOT直接不用。不带NOT有就用没有就拉到。 MANDATORY强制的意思必须用语气强烈没有就异常。 NEVER从不就不用语气强烈有就异常。 NESTED嵌套的意思有建嵌套事务。没有新建普通事务。 Spring 事务在什么情况下会失效 非public修饰的方法 自调用Self-Invocation 自调用指的是一个类的方法在调用同一个类的另一个方法,事务管理会失效。 数据库不支持事务 MySQL中MyISAM引擎不支持事物InnoDB 支持事物 异常类型不匹配 Transactional 注解默认只管理运行时异常如RuntimeException及其子类和错误如Error。 传播属性设置不当导致不走事务 Transactional 默认的事务传播机制是REQUIRED若指定成了NOT_SUPPORTED、NEVER事务传播机制则事物不生效 捕获异常未抛出 Bean没有纳入Spring IOC容器管理 事务方法内启动新线程进行异步操作 Spring怎么解决循环依赖的问题 对于构造器注入的循环依赖Spring处理不了会直接抛出BeanCurrentlylnCreationException异常。 对于属性注入的循环依赖单例模式下是通过三级缓存处理来循环依赖的。 对于非单例对象的循环依赖无法处理。 什么是MVC MVC是指Model-View-Controller是一种软件设计模式它将应用程序分为三个部分模型、视图和控制器 MVC模式的核心思想是将应用程序的表示(视图)和处理(控制器)分离开来从而使得应用程序更加灵活、易于维护和扩展。这种模式可以提高代码的可读性和可维护性同时也可以促进代码的复用和分工使得多人协作开发变得更加容易 Spring MVC工作原理 Spring MVC 原理如下图所示 流程说明重要 客户端浏览器发送请求 DispatcherServlet拦截请求。DispatcherServlet 根据请求信息调用 HandlerMapping 。 HandlerMapping 根据 URL 去匹配查找能处理的 Handler也就是我们平常说的 Controller 控制器 并会将请求涉及到的拦截器和 Handler 一起封装。DispatcherServlet 调用 HandlerAdapter适配器执行 Handler 。Handler 完成对用户请求的处理后会 返回一个 ModelAndView 对象给DispatcherServletModelAndView 顾名思义包含了数据模型以及相应的视图的信息。Model 是返回的数据对象View 是个逻辑上的 View。ViewResolver 会根据逻辑 View 查找实际的 View。DispaterServlet 把返回的 Model 传给 View视图渲染。把 View 返回给请求者浏览器 Spring Boot的优势 约定大于配置大家默认的一些约定可直接使用无需配置开箱即用无需配置直接可使用内置tomcat Spring Boot自动装配原理 Spring Boot自动装配如下图所示 Springboot项目的启动类需要由 SpringBootApplication 注解修饰该注解复合了如下三个注解。 SpringBootConfiguration。表明Springboot启动类是一个配置类 ComponentScan。会将指定路径下的被特定注解修饰的类加载为Spring中的Bean这些特定注解为ComponentControllerServiceRepository和Configuration注解 EnableAutoConfiguration。用于开启Springboot的自动装配该注解复合了如下两个核心注解。 AutoConfigurationPackage。用于将启动类所在的包里面的所有组件注册到spring容器。Import(AutoConfigurationImportSelector.class)。通过AutoConfigurationImportSelector类加载配置文件中配置的bean。 自动装配流程说明重要 Import 将 AutoConfigurationImportSelector 注入到spring容器中AutoConfigurationImportSelector 通过 SpringFactoriesLoader 从类路径下去读取META-INF/spring.factories文件信息此文件中有一个key为org.springframework.boot.autoconfigure.EnableAutoConfiguration定义了一组需要自动配置的bean 了解Spring Boot中的日志组件吗 在Spring Boot中日志组件的设计遵循了门面模式的概念。 在日志处理方面Spring Boot使用SLF4J作为门面。 SLF4J是一个抽象层它为Java平台上的多种日志框架提供了一个统一的接口。 使用时只需要调用api即可不需要关注是哪个组件进行实现的 spring 默认使用的 logback日志组件。
http://www.yingshimen.cn/news/70367/

相关文章:

  • 建设隔热网站免费网站制作报价
  • 手机网站应该怎么做策划公司
  • 嘉兴网站制作平台一个域名权重3如果做网站的话权重会降为0吗
  • 做网站建设公司起名wordpress 文章筛选
  • 北京住房建设部网站首页旅行社网站建设哪家好
  • 嘉兴市做网站优化怎样做网站发帖
  • 成都网站建设有名的公司网页设计策划书
  • 外卖在家做咋上网站做网站要做相应的app吗
  • 创建网站首页android软件开发下载
  • 关于网站建设规划方书案例样式网站轮播广告
  • 网站框架设计网站文章内容排版要求
  • 金融公司网站建设模板下载义乌网站建设公司代理
  • 最全的ppt模板网站装修公司需要多少钱
  • 石家庄企业建站网站模板下
  • qq钓鱼网站怎么制作商城运营
  • 做网站的工作有发展空间没有制作灯笼需要什么材料
  • 义乌做网站的建设网站企业
  • 手机网站有什么区别吗企业网站规范
  • 天水市秦州区建设局网站手机网站用什么开发好
  • 写出网站建设步骤北京seowyhseo
  • 做网站需要哪些基本功能安装好了wordpress
  • 免费做视频网站毛衣品 东莞网站建设
  • 网站设计 字体wordpress 图片
  • 网站开发技术 北京电子商务网站开发公司
  • 建站公司主要做那些业务网络服务合同
  • 南博会官方网站建设投入设计师必备的国际设计网站
  • 深圳罗湖住房和建设局网站官网seo公司是怎么做的
  • wamp个人网站开发来源美图秀秀在线修图
  • 重庆网站制作建设常州网站建设找思创
  • 做网站开发需要考什么证书怎么做百度推广网站