编程框架-Spring技术总结
本文围绕Spring技术最核心的是IOC和AOP的两个概念进行详细介绍。
IOC
基本概念
IOC是控制反转,传统的编程情况下,如果一个对象依赖另一个对象,是需要程序员自己定义和初始化一个对象的。现在在Spring框架下,初始化的工作交给了Spring。Spring来负责管理这部分工作。那么具体是如何管理的呢?
- 扫描类与类之间的关系
- 有一个对象容器,存放每个对象
关键过程
有几个关键的概念: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解决时钟回拨的问题)