编程框架-Spring技术总结

本文围绕Spring技术最核心的是IOC和AOP的两个概念进行详细介绍。

IOC

基本概念

IOC是控制反转,传统的编程情况下,如果一个对象依赖另一个对象,是需要程序员自己定义和初始化一个对象的。现在在Spring框架下,初始化的工作交给了Spring。Spring来负责管理这部分工作。那么具体是如何管理的呢?

  1. 扫描类与类之间的关系
  2. 有一个对象容器,存放每个对象

关键过程

有几个关键的概念:SpringContext BeanFactory FactoryBean

常见的问题:

如果存在循环依赖怎么办?

spring三层缓存

Spring生命周期可以用来做什么?

初始化、属性赋值

PostProcess afterproerset

FactoryBean 跟 BeanFactory有什么区别?

FactoryBean是一种特殊的bean,一般使用场景是将繁琐的初始化事项屏蔽,对外提供一个Bean,比如与数据库的连接

BeanFactory是用来生产Bean的,它提供了通用的接口。

AOP

AOP是面向切面编程。面向切面相当于对一段函数进行能力强化,一般场景是打印日志、权限控制等。那么它是如何实现的呢?

动态代理,使用JDK动态代理或者CGLIB进行代理,JDK是利用反射机制,对有实现接口的类进行代理。CGLIB是通过生成子类来实现的。JDK代理是本身JDK自带的。CGLIB是一个外部库,它是通过字节码agent技术

具体实现方式

设计模式:

工场模式、责任链模式、代理模式、单例模式、适配器模式

系统设计

如果让你设计mysql高可用方案的话,你会优先考虑哪些方面

2、抖音评论系统怎么设计,如果加入好友关系呢?(考虑到数据读取的性能,可以采用写扩散的方式)

3、怎么设计一个短链地址,要考虑跨机房部署问题

你说要哈希算法生成短链,会存在什么问题(哈希冲突),该怎么解决?(可以用布隆过滤器,但是不好控制,而且仍存在hash冲突)

有没有更好的方案?(自增序列算法,每次接收一个长链,就分配一个ID,转成62进制再拼到短域后面)

存在的问题?(自增id方案如果用雪花算法,可能存在机器时钟回拨的问题,导致id重复,说到这里,我终于明白那家伙为什么说要考虑跨机房部署问题)

该怎么解决?(用Redis做自增id生成器,性能高,但要考虑持久性的问题;或者改造雪花算法,通过改造workId解决时钟回拨的问题)


编程框架-Spring技术总结
https://yyb345.github.io/10-Spring技术总结/
Author
杨一博
Posted on
June 13, 2024
Licensed under