Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15】—— Spring框架1

  大家好,我是陈哈哈,北漂五年。认识我的朋友们知道,我是非科班出身,半路出家,大学也很差!这种背景来北漂,你都不知道你会经历什么🙃🙃。

  不敢苟同,相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍热门面试题及恰如其分的解答。当然,我不会太深入,因为我怕记不住!!

  因此,不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法,希望这100天能够让我们有质的飞越,一起冲进大厂!!,让我们一起学(juan)起来!!!

在这里插入图片描述
有小伙伴知道这是哪里吗??

作者:對你何止一句钟意


车票

  • 面试题1:能简单说一下你对Spring框架的理解么?
    • 追问1:常见的Core组件有哪些?
  • 面试题2:谈谈对Spring IOC的理解
    • 追问1:Spring中的bean的作用域有哪些?
    • 追问2:Spring中的bean生命周期?
    • 追问3: Spring 中的 bean 是线程安全的吗?
  • 面试题3:说一下 SpringMVC 运行流程?
    • 追问1:能介绍一下SpringMVC各组件的作用么?
  • 每日小结


  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识集合容器并发编程JVMSpring全家桶MyBatis等ORMapping框架MySQL数据库Redis缓存RabbitMQ消息队列Linux操作技巧等。

面试题1:能简单说一下你对Spring框架的理解么?

  我们一般说的Spring框架就是Spring Framework,一种轻量级框架,用于提高开发人员的开发效率和可维护性。它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块包括:核心容器数据访问/集成响应式 web 编程AOP(面向切面编程)工具消息和测试模块

  下图对应的是Spring 4.x的版本,目前最新的5.x版本中Web模块的Portlet组件已经被废弃掉,同时增加了用于异步响应式处理的WebFlux组件。

在这里插入图片描述

主要模块包括:

Spring Core:Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。

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

Spring JDBC:负责Java数据库连接。

Spring JMS:负责Java消息服务。

Spring ORM:用于支持常用的Hibernate,Mybatis等框架,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理;

Spring Web:WEB模块提供对常见框架如Struts X,SpringMVC,JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。

Spring Test:提供了对JUnit和TestNG测试的支持。

  Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。

追问1:常见的Core组件有哪些?

  • IoC Container,控制反转容器
  • Events,事件编程
  • Resources,资源加载
  • i18n,国际化
  • Validation,校验
  • Data Binding,数据绑定
  • Type Conversion,类型转换
  • SpEL,Spring 表达式
  • AOP,面向切面编程

在这里插入图片描述

课间休息,又来秀一下来自咱们群里同学的搬砖工地,坐标:上海 朱家角

作者:🇨 🇭 🇪 🇳 🇬


面试题2:谈谈对Spring IOC的理解

  IOC(Inversion Of Controll,控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。

  IOC在其他语言中也有应用,并非Spring特有。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。
在这里插入图片描述

  将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这是不现实的。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。

  Spring时代我们一般通过XML文件来配置Bean,后来开发人员觉得用XML文件来配置不太友好,于是Sprng Boot注解配置就慢慢开始流行起来。

推荐:Spring IOC 容器源码分析(IOC详细总结)

追问1:Spring中的bean的作用域有哪些?

spring 支持 5 种作用域,如下:

  • singleton:唯一bean实例,Spring中的bean默认都是单例的。

  • prototype:每次请求都会创建一个新的bean实例。

  • request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。

  • session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。

  • global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。

追问2:Spring中的bean生命周期?

  1. Bean容器找到配置文件中Spring Bean的定义。

  2. Bean容器利用Java Reflection API创建一个Bean的实例。

  3. 如果涉及到一些属性值,利用set()方法设置一些属性值。

  4. 如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。

在这里插入图片描述

  1. 如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。

  2. 如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。

  3. 与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。

  4. 如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法。

  5. 如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。

  6. 如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。

  7. 如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。

  8. 当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法

  9. 当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

追问3: Spring 中的 bean 是线程安全的吗?

  Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。

  结合上面提到的Spring bean 的作用域(scope)

  1. 对于prototype作用域的Bean,每次都创建一个新对象,也就是线程之间不存在Bean共享,因此不会有线程安全问题。
  2. 对于singleton作用域的Bean,所有的线程都共享一个单例实例的Bean,因此是存在线程安全问题的。但是如果单例Bean是一个无状态Bean,也就是线程中的操作不会对Bean的成员执行查询以外的操作,那么这个单例Bean是线程安全的。比如Controller类、Service类和Dao等,这些Bean大多是无状态的,只关注于方法本身。
  • 有状态Bean(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的
  • 无状态Bean(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的

  线程安全这个问题,要从单例与原型Bean分别进行说明。

  对于有状态的bean(比如ModelAndView),就需要自行保证线程安全,最浅显的解决办法就是将有状态的bean的作用域由“singleton”改为“prototype”。也可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量。

  ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。

  • 同步机制:采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。

  • ThreadLocal:采用了“空间换时间”的方式。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。


在这里插入图片描述

课间休息,又来秀一下来自咱们群里同学的搬砖工地,坐标:济南 遥墙机场

作者:對你何止一句钟意


面试题3:说一下 SpringMVC 运行流程?

在这里插入图片描述

流程说明:

  1. 客户端(浏览器)发送请求,直接请求到DispatcherServlet。

  2. DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler

  3. 解析到对应的Handler(也就是我们平常说的Controller控制器)。

  4. HandlerAdapter会根据Handler来调用真正的处理器(对应的接口)来处理请求和执行相对应的业务逻辑。

  5. 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是逻辑上的View。

  6. ViewResolver(视图解析器)会根据逻辑View去查找实际的View。

  7. DispatcherServlet把返回的Model传给View(视图渲染)。

  8. 把View返回给请求者(浏览器)。

追问1:能介绍一下SpringMVC各组件的作用么?

  1. DispatcherServlet前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性,系统扩展性提高。由框架实现
  2. HandlerMapping处理器映射器。HandlerMapping负责根据用户请求的url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,根据一定的规则去查找,例如:xml配置方式,实现接口方式,注解方式等。由框架实现
  3. Handler处理器。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
  4. HandlAdapter处理器适配器。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
  5. ModelAndView:是springmvc的封装对象,将model和view封装在一起
  6. ViewResolver视图解析器。ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
  7. View:是springmvc的封装对象,是一个接口, springmvc框架提供了很多的View视图类型,包括:jspview,pdfview,jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

每日小结

  今天我们复习了面试中常考的Spring框架相关的三个问题,你做到心中有数了么?对了,如果你的朋友也在准备面试,请将这个系列扔给他,如果他认真对待,肯定会感谢你的!!好了,今天就到这里,学废了的同学,记得在评论区留言:打卡。,给同学们以激励。


参考内容

https://thinkwon.blog.csdn.net/article/details/104397427
https://www.zhihu.com/question/48427693/answer/692943779
https://www.cnblogs.com/yanggb/p/11004887.html

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

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

相关文章

update多表联合更新

t_student表和t_class表 Mysql UPDATE db_shop.t_student s,db_shop.t_class c SET s.class_namec.name,c.stu_names.name WHERE s.class_idc.id --等效于 UPDATE db_shop.t_student s JOIN db_shop.t_class c SET s.class_namec.name,c.stu_names.name WHERE s.class_…

oracle update 多表关联更新

oracle 多表 关联 更新 先看例子 select t.*, t.rowid from T1 t;select t.*, t.rowid from T2 t;错误示范: update t1 set t1.money (select t2.money from t2 where t2.name t1.name);结果: 因更新条件不够,可以看到name不相等的mone…

linux普通账户变为管理员,你就可以将普通账户升级为管理员账户了

当每台电脑装上系统后,都会有一个Administrator管理员账户,它是Windows默认的最高权限用户,它有权力对系统进行任何等级设置或删除应用,而一般的帐户就只有对这个系统的使用权,没有管理权。那么,我们可以将…

Power Automate Forms 提交表单 到 Teams 群组中的Excel行

新建一个Forms表单 Teams 研究群组 中新建一个 个人信息.xlsx 注意:一定要是xlsx格式 个人信息.xlsx 中 设置表格 在Power Automate 中 找一个 Forms 开始的模板 删除原来SharePoint 的部分 添加Excel Online 选择 在表中插入新行 建立 Forms 和Excel 表格的 对应…

社区电商平台除了小红书,这个运营社群的平台你肯定没用过!

有的阿,比如有赞、粉丝圈、云之家等等......,现在的微信生态圈在不断的完善,不仅仅是社交内容层面上的不断优化,社群平台更多的是打开了服务自己店铺的用户端口,不断在这个空间内扩大自己的用户池。 就来说说粉丝圈吧…

小红书店铺的所有商品API接口(整店商品详情查询接口)

小红书店铺的所有商品API接口(整店商品详情查询接口)代码对接如下: 1.公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中,点击获取请求key和secret )secretString是调用密钥api_nam…

如何打造爆款单品?小红书品牌营销全链路解决方案来了

导语 爆款单品已经成为小红书品牌增长的捷径。爆款单品能让新锐品牌实现从0到1的增长,那么能让网红品牌从1到10吗? 《小红书品牌营销全链路解决方案》专栏第二部分:网红单品打造。与大家一起探讨如何打造爆款单品以及延长它的生命周期。 01…

2021年小红书电商直播趋势报告-小红书数据分析报告

千瓜数据独家推出《2021年小红书电商直播趋势报告》,基于2020年春节期间小红书直播数据,通过直播大盘数据概览、品牌自运营探究、直播观众画像、直播达人洞察等方面,分析小红书直播数据,前瞻2021年小红书电商直播趋势和解决方案。…

直播电商,小红书的商业化“解药”?

配图来自Canva可画 随着互联网流量增长日趋放缓、广告业务逐渐疲软,商业化焦虑就成为了当下整个互联网行业需要共同面对的难题。在此背景下,目前最火热的赛道——互联网直播带货就成为了不少平台和公司寻找新增量的重要方向,以及寻求商业化破…

小红书电商入驻全流程指南

小红书电商入驻全流程指南#小红书 五类店铺入驻要求可售卖类目你知道吗?#运营#干货 你知道小红书的 5 类店铺的入驻要求以及可售卖类目吗?hello,大家好,我是专注搞流量的百收编辑狂潮老师。小红书目前支持的五大类型的店铺分别是…

小红书自研小程序:电商体验与效果优化的运行时体系设计

小程序在其诞生后的几年内,凭借其简单、轻量、流畅、无需安装等特点,引来了爆发式的增长。伴随小红书电商业务的发展,我们洞察到越来越多的商家和品牌大客户有自己定制化需求场景,传统的电商和薯店存在下面三大问题: 为…

facebook怎么运营?

很多做跨境的小伙伴都是通过facebook进行聊天交友,通过facebook平台去做营销引流获客。大家在做facebook营销的时候难免会遇到一些问题,尤其是账号封禁申诉、facebook运营等等一系列内容,下面跨境王营销助手就为大家详细讲解下,希…

以前管Facebook叫“脸书” 现在管Meta叫什么呢

一 硅谷今天的大新闻是Facebook宣布改名了,改叫Meta。 段子挺多,比如国内有媒体宣布,Facebook不要脸了。 还有这张很有趣的图: 不过这张包浆严重的图有个小毛病,按照前后逻辑要一致,google不是google&am…

【WhatsApp营销】如何在Facebook和Instagram上创建Click-to-WhatsApp广告

关键词:WhatsApp营销,Click-to-WhatsApp广告 通过 WhatsApp 中简单快速的客户沟通,公司和客户可以建立直接且有价值的关系。但是,由于WhatsApp不允许企业与用户直接发起会话,要想鼓励客户在WhatsApp上与商家联系&…

双色球系统开发

import java.util.Random; import java.util.Scanner;public class Test8 {public static void main(String[] args) {//双色球系统开发//投注号码由6个红色球号码和1个蓝色球号码组成//红色球号码从1-33中选择,要求选择红球不能重复//蓝色球号码从1-16中选择//共7个…

每日新闻 | 科大讯飞董事长刘庆峰:我国中学生六成作业是重复的

点击蓝字 关注我们 更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第08-02期 1 趋势洞察 科大讯飞董事长刘庆峰:我国中学生六成作业是重复的 在由北京师范大学与科大讯飞联合主办的人工智能与教育大数据峰会上科大讯飞董事长刘庆峰表示&…

科大讯飞董事长刘庆峰:人工智能窗口期有多远?【软件网每日新闻播报│第10-19期】

每一个企业级的人 都置顶了 中国软件网 中国软件网 为你带来最新鲜的行业干货 小编点评 小编: 今儿个 Garner划了4000亿刀的云计算赛道 别跑偏!别掉队! 大家撒丫子跑吧 趋势洞察 科大讯飞董事长刘庆峰:人工智能产业进入窗口期 …

补贴下的科大讯飞:盈利水平堪忧、股东接连减持,刘庆峰没信心?

成立超20年,科大讯飞仍严重依赖补贴,且股东也在接连减持。 10月26日,科大讯飞发布2020年第三季度财报。财报显示,2020年1-9月,科大讯飞营收实现72.84亿元,同比增长10.82%;归属于上市公司股东的…

产业、生态、渠道,三个关键词解码2020年科大讯飞开发者节刘庆峰发言

10月23日,以“AI焕新更美好”为主题的2020年科大讯飞全球1024开发者节在安徽广播电视台亚洲一号演播厅举行。发布会上,科大讯飞董事 长刘庆峰向与会者分享了自己对产业的洞察,并对科大讯飞接下来的发展做了阐述。 01 刘庆峰谈2020人工智能产…

chatgpt赋能python:Python关键词搜索优化

Python关键词搜索优化 Python是一种高级编程语言,通常被用于开发Web应用程序、数据科学、人工智能、机器学习等领域。Python拥有大量的库和框架,能够在很大程度上提升开发效率。 但是,想要在Python领域获得成功,需要了解Python关…