​ IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC 容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。

2、Spring AOP,动态代理

​ AOP(Aspect-Oriented Programming:⾯向切⾯编程)能够将那些与业务⽆关,却为业务模块所共同调⽤ 的逻辑或责任(例如事务处理、⽇志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模 块间的耦合度,并有利于未来的可拓展性和可维护性。

​ Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接⼝,那么Spring AOP会使⽤JDK Proxy,去创建代理对象,⽽对于没有实现接⼝的对象,就⽆法使⽤ JDK Proxy 去进⾏代理了,这时候 Spring AOP会使⽤Cglib ,这时候Spring AOP会使⽤ Cglib ⽣成⼀个被代理对象的⼦类来作为代理,

3、Bean生命周期

单例对象: singleton

出生:当容器创建时对象出生

活着:只要容器还在,对象一直或者

死亡:容器销毁,对象消亡

总结:单例对象的生命周期和容器相同

多例对象: prototype

出生: 使用对象时spring框架为我们创建

活着:对象只要是在使用过程中就一直活着

死亡:当对象长时间不用且没有其它对象引用时,由java的垃圾回收机制回收

白嫖资料

4、Bean作用域?默认什么级别?是否线程安全?Spring如何保障线程安全的?

| 名称 | |

| — | — |

| singleton | 单例对象,默认值的作用域 |

| prototype | 每次获取都会创建⼀个新的 bean 实例 |

| request | 每⼀次HTTP请求都会产⽣⼀个新的bean,该bean仅在当前HTTP request内有效。 |

| session | 在一次 HTTP session 中,容器将返回同一个实例 |

global-session 将对象存入到web项目集群的session域中,若不存在集群,则global session相当于session

默认作用域是singleton,多个线程访问同一个bean时会存在线程不安全问题

保障线程安全方法:

在Bean对象中尽量避免定义可变的成员变量(不太现实)。

在类中定义⼀个ThreadLocal成员变量,将需要的可变成员变量保存在 ThreadLocal 中

ThreadLocal:

​ 每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。

​ 将一个共用的ThreadLocal静态实例作为key,将不同对象的引用保存到不同线程的ThreadLocalMap中,然后在线程执行的各处通过这个静态ThreadLocal实例的get()方法取得自己线程保存的那个对象,避免了将这个对象作为参数传递的麻烦。

5、Spring事务隔离级别和事务传播属性

隔离级别:

  1. DEFAULT (默认) 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应。

  2. READ_UNCOMMITTED (读未提交) 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

  3. READ_COMMITTED (读已提交) 保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

  4. REPEATABLE_READ (可重复读) 这种事务隔离级别可以防止脏读、不可重复读,但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读。

  5. SERIALIZABLE(串行化) 这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。除了防止脏读、不可重复读外,还避免了幻像读。

Spring事务传播属性(Propagation):

  1. REQUIRED(默认属性) 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。

  2. MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。

  3. NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

  4. NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  5. REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

  6. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

  7. NESTED 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

6、Spring以及Spring MVC常见注解

Spring部分:

​ 声明bean的注解

​ @Component 通⽤的注解,可标注任意类为 Spring 组件

白嫖资料

​ @Service 在业务逻辑层使用(service层)

​ @Repository 在数据访问层使用(dao层)

​ @Controller 在展现层使用,控制器的声明(controller层)

​ 注入bean的注解

​ @Autowired:可以对类成员变量、方法、构造方法进行标注

​ 默认按照类型注入,若要按照名称注入,需要搭配**@Qualifier**注解一起使用

​ @Resource:默认按照名称来装配注入

Spring MVC部分:

​ @Controller 声明该类为SpringMVC中的Controller

​ @RequestMapping 用于映射Web请求

​ @ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据

​ @RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。

​ @PathVariable 用于接收路径参数,比如@RequestMapping("/hello/{name}")申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。

7、@autowired和@resource的区别?

@Autowired:可以对类成员变量、方法、构造方法进行标注

​ 默认按照类型注入,若要按照名称注入,需要搭配**@Qualifier**注解一起使用

@Resource:默认按照名称来装配注入

8、mybatis如何防止sql注入?$和#的区别是什么?传入表名用哪个?

防止sql注入:

​ 在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式

#和$区别:

| # | $ |

| — | — |

| 相当于对数据加上双引号 | 相当于直接显示数据 |

| 很大程度上防止SQL注入 | 无法防止SQL注入 |

| #{xxx},使用的是PreparedStatement,会有类型转换,比较安全 | ${xxx},使用字符串拼接,容易SQL注入 |

​ 简单的说就是#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

要实现动态传入表名、列名,需要做如下修改:

添加属性statementType=“STATEMENT”,同时sql里的属有变量取值都改成${xxxx}

9、Spring MVC工作原理

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

DispatcherServlet 根据请求信息调⽤ HandlerMapping ,解析请求对应的 Handler 。

解析到对应的 Handler (也就是 Controller 控制器)后,开始由HandlerAdapter 适配器处理。

HandlerAdapter 会根据 Handler 来调⽤真正的处理器开处理请求,并处理相应的业务逻辑。

处理器处理完业务后,会返回⼀个 ModelAndView 对象, Model 是返回的数据对象

ViewResolver 会根据逻辑 View 查找实际的 View 。

DispaterServlet 把返回的 Model 传给 View (视图渲染)。

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

最后

以上分享的全部分布式技术专题+面试解析+相关的手写和学习的笔记pdf,高清完整版戳这里免费领取

还有更多Java笔记分享如下:

andler 来调⽤真正的处理器开处理请求,并处理相应的业务逻辑。

处理器处理完业务后,会返回⼀个 ModelAndView 对象, Model 是返回的数据对象

ViewResolver 会根据逻辑 View 查找实际的 View 。

DispaterServlet 把返回的 Model 传给 View (视图渲染)。

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

最后

以上分享的全部分布式技术专题+面试解析+相关的手写和学习的笔记pdf,高清完整版戳这里免费领取

还有更多Java笔记分享如下:

不是吧阿sir,字节跳动架构师讲解Java开发相关推荐

  1. 字节跳动架构师讲解Java开发!美的java开发面试

    前言 今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞.查了一下,这件事并不算很新鲜了(已经过了5天的样子),本文来聊聊吧. 说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jac ...

  2. 字节跳动架构师讲解Java开发!dockerstop命令

    美团 一面: 1.ConcurrentHashMap实现原理 2.HashMap实现原理 3.锁的实现原理 4.synchronized和重入所实现原理以及区别 5.一个char[]数组,里面有空格, ...

  3. 字节跳动架构师讲解Android开发!已成功拿下字节、腾讯、脉脉offer,含BATJM大厂

    开头 程序员面试,除了面试技术外,有的公司经常会问应聘者和技术无关的问题,考验求职者的综合能力,并以此作为是否录用的依据,很多时候这类问题往往没有标准答案,就看求应聘者临场的反应能力如何. 张工是一名 ...

  4. 架构师讲解Java中websocket的应用

    这篇文章主要来介绍一下在java项目中,特别是java web项目中websocket的应用. 场景:我做了一个商城系统,跟大多数商城系统,分为客户端和后台,客户端供客户浏览,下单,购买,后台主要管理 ...

  5. 腾讯架构师讲解Java接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...

  6. 字节跳动内推-杭州-后端开发(高级)工程师-电商运营赋能

    字节跳动内推-杭州-后端开发(高级)工程师-电商运营赋能 职位描述 1.探索字节系平台(抖音.抖音火山版.头条.西瓜视频等)内容电商业务模式,承担系统的设计开发维护工作: 2.负责搭建支持电商全链路业 ...

  7. 微软企业服务部华东区招聘顾问/架构师/.NET高级开发员

    [因应华东区服务业务扩展,长期需要咨询顾问/架构师/.NET高级开发员,有意者发送邮件至 ningxue@microsoft.com] Job Title: .NET Consultant/Archi ...

  8. Java架构师和java工程师的区别是什么?架构师薪资是多少?

    java架构师,现在很多新手都知道的名词,这个职位最早在IT领域是没有的,是由于最近几年来,互联网的迅猛发展,网站对于对数据量和高并的活跃度发所引发的需求,引起了众多传统的技术人员的力不从心,越来越多 ...

  9. 高级开发工程师如何快速晋升为架构师?高级开发工程师与架构师到底有啥区别?

    大家好,我是冰河~~ 一直以来,都想写一个系统介绍架构师核心技能的专栏,那就是<架构师进阶系列>.为什么要写这个专栏呢?很多人认为自己技术能力不错,但是每次想面试大厂的时候,总是被面试官吊 ...

最新文章

  1. Hive的安装-Hive的交互方式
  2. elasticsearch使用优化备忘
  3. 波士顿房价数据集解读
  4. (mac)阿里云ECS服务器配置过程
  5. modemcu 打包_nodemcu固件的烧录及lua开发
  6. 计算机软件技术信息安全哪个好,国内哪个大学的计算机安全专业最好?
  7. springboot的学习笔记,这个很重要
  8. Django~1 一 什么是web框架?
  9. 面试必看:java面试考点精讲视频教程
  10. gitHub 代码从fork到push
  11. MATLAB 绘制堆叠柱状图
  12. 控温/恒温烙铁操作方法及使用说明
  13. python对象不可订阅_python - TypeError:'int'对象不可订阅 - 尝试创建csv文件时 - SO中文参考 - www.soinside.com...
  14. LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)
  15. MySql系列之mysql查询执行过程(附Mysql架构图及实操解析)
  16. 怎样无损放大图片?这几个方法不容错过
  17. 如何看懂Code128条形码
  18. ArcMap 基于DEM的基础地形分析
  19. 简单5步,从0开始搭建你的第一款小程序
  20. 双网卡数据共享(网卡转发)

热门文章

  1. 彩虹六号围攻服务器未响应,彩虹六号围攻运行错误解决办法汇总_3DM单机
  2. 【重磅!】《2021隐私机密计算蓝皮书》正式发布
  3. 北交大研究生计算机专硕好考么,北京交通大学考研难度 北交的研究生好考吗...
  4. 计算机一级办公软件试题,办公软件应用-计算机一级考试试题.doc
  5. 谁敢说360不行? 那是你不会用!教你制服360
  6. java 不设置classpath_无需设置JAVA中的CLASSPATH
  7. 跑yolo3模型出的效果图_【目标检测实战】Darknet入门—yolov3模型训练(Win10下的安装、编译、实现)...
  8. android魅族手机 定位功能吗,魅族手机被偷? 看看Flyme找回案例 两招包你找回手机...
  9. 我的娘子(创作中。。)
  10. 海岛奇兵服务器修改,海岛奇兵NPC刷新详解 官网阐述未来更改变动