不是吧阿sir,字节跳动架构师讲解Java开发
IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC 容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。
2、Spring AOP,动态代理
3、Bean生命周期
死亡:当对象长时间不用且没有其它对象引用时,由java的垃圾回收机制回收
4、Bean作用域?默认什么级别?是否线程安全?Spring如何保障线程安全的?
| prototype | 每次获取都会创建⼀个新的 bean 实例 |
| request | 每⼀次HTTP请求都会产⽣⼀个新的bean,该bean仅在当前HTTP request内有效。 |
| session | 在一次 HTTP session 中,容器将返回同一个实例 |
global-session 将对象存入到web项目集群的session域中,若不存在集群,则global session相当于session
默认作用域是singleton,多个线程访问同一个bean时会存在线程不安全问题
在类中定义⼀个ThreadLocal成员变量,将需要的可变成员变量保存在 ThreadLocal 中
每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。
5、Spring事务隔离级别和事务传播属性
DEFAULT (默认) 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应。
READ_UNCOMMITTED (读未提交) 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
READ_COMMITTED (读已提交) 保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
REPEATABLE_READ (可重复读) 这种事务隔离级别可以防止脏读、不可重复读,但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读。
SERIALIZABLE(串行化) 这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。除了防止脏读、不可重复读外,还避免了幻像读。
Spring事务传播属性(Propagation):
REQUIRED(默认属性) 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。
MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。
NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
NESTED 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。
6、Spring以及Spring MVC常见注解
@Component 通⽤的注解,可标注任意类为 Spring 组件
@Controller 在展现层使用,控制器的声明(controller层)
@Autowired:可以对类成员变量、方法、构造方法进行标注
默认按照类型注入,若要按照名称注入,需要搭配**@Qualifier**注解一起使用
@Controller 声明该类为SpringMVC中的Controller
@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据
@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。
7、@autowired和@resource的区别?
@Autowired:可以对类成员变量、方法、构造方法进行标注
默认按照类型注入,若要按照名称注入,需要搭配**@Qualifier**注解一起使用
8、mybatis如何防止sql注入?$和#的区别是什么?传入表名用哪个?
在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式
| #{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 (视图渲染)。
最后
以上分享的全部分布式技术专题+面试解析+相关的手写和学习的笔记pdf,高清完整版戳这里免费领取
还有更多Java笔记分享如下:
andler 来调⽤真正的处理器开处理请求,并处理相应的业务逻辑。
处理器处理完业务后,会返回⼀个 ModelAndView 对象, Model 是返回的数据对象
ViewResolver 会根据逻辑 View 查找实际的 View 。
DispaterServlet 把返回的 Model 传给 View (视图渲染)。
把 View 返回给请求者(浏览器)
最后
以上分享的全部分布式技术专题+面试解析+相关的手写和学习的笔记pdf,高清完整版戳这里免费领取
还有更多Java笔记分享如下:
不是吧阿sir,字节跳动架构师讲解Java开发相关推荐
- 字节跳动架构师讲解Java开发!美的java开发面试
前言 今天中午收到我司安全部发了一封邮件:Jackson存在安全漏洞.查了一下,这件事并不算很新鲜了(已经过了5天的样子),本文来聊聊吧. 说起来还蛮戏剧化:阿里云向Jackson官方提交了一个Jac ...
- 字节跳动架构师讲解Java开发!dockerstop命令
美团 一面: 1.ConcurrentHashMap实现原理 2.HashMap实现原理 3.锁的实现原理 4.synchronized和重入所实现原理以及区别 5.一个char[]数组,里面有空格, ...
- 字节跳动架构师讲解Android开发!已成功拿下字节、腾讯、脉脉offer,含BATJM大厂
开头 程序员面试,除了面试技术外,有的公司经常会问应聘者和技术无关的问题,考验求职者的综合能力,并以此作为是否录用的依据,很多时候这类问题往往没有标准答案,就看求应聘者临场的反应能力如何. 张工是一名 ...
- 架构师讲解Java中websocket的应用
这篇文章主要来介绍一下在java项目中,特别是java web项目中websocket的应用. 场景:我做了一个商城系统,跟大多数商城系统,分为客户端和后台,客户端供客户浏览,下单,购买,后台主要管理 ...
- 腾讯架构师讲解Java接口的继承与抽象类
在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...
- 字节跳动内推-杭州-后端开发(高级)工程师-电商运营赋能
字节跳动内推-杭州-后端开发(高级)工程师-电商运营赋能 职位描述 1.探索字节系平台(抖音.抖音火山版.头条.西瓜视频等)内容电商业务模式,承担系统的设计开发维护工作: 2.负责搭建支持电商全链路业 ...
- 微软企业服务部华东区招聘顾问/架构师/.NET高级开发员
[因应华东区服务业务扩展,长期需要咨询顾问/架构师/.NET高级开发员,有意者发送邮件至 ningxue@microsoft.com] Job Title: .NET Consultant/Archi ...
- Java架构师和java工程师的区别是什么?架构师薪资是多少?
java架构师,现在很多新手都知道的名词,这个职位最早在IT领域是没有的,是由于最近几年来,互联网的迅猛发展,网站对于对数据量和高并的活跃度发所引发的需求,引起了众多传统的技术人员的力不从心,越来越多 ...
- 高级开发工程师如何快速晋升为架构师?高级开发工程师与架构师到底有啥区别?
大家好,我是冰河~~ 一直以来,都想写一个系统介绍架构师核心技能的专栏,那就是<架构师进阶系列>.为什么要写这个专栏呢?很多人认为自己技术能力不错,但是每次想面试大厂的时候,总是被面试官吊 ...
最新文章
- 封装运动框架多个属性
- js获取选中文件的后缀名
- 什么是梯度爆炸/梯度消失?
- AceTeamwork 软件成就继续蝉联国内最优秀的项目工时(timesheet)及费用报销(expense)软件...
- LVM逻辑卷详解及创建
- ELK套件FileBeat部署
- 免费体验,阿里云智能LOGO帮你解决设计难题
- 数据结构与算法--图的表示与常用算法
- Airflow 中文文档:使用Mesos扩展(社区贡献)
- Rust 创始人谈 Rust 2019 和未来:社区应限制成长速度
- trie树 java 开源_用于实现Trie的内存java应用程序中的最佳开源
- Unity IOC简单认知
- PHP中Trait详解及其应用
- 用nginx转发请求tomcat 如何配置访问日志获取真实ip
- 免费金融数据API(基金,股票),基金股票网格交易模拟服务
- 10015---MySQL--事务
- gmx-MMPBSA — error while loading shared libraries: libgfortran.so.3: cannot open shared object file
- python将一个正整数分解质因数
- 如何观察一棵树 - 笔记
- 【浅谈递归(一)】递归的基本思想