这篇文章上次修改于 1947 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 1.mysql 的隔离级别和锁 + mysql 的锁分为共享锁(又叫S锁)和拍他锁(又叫X锁),S锁----允许多个事务并发的读取同一个资源,互补干扰。X锁----事务T加上排他锁后,其他事务不能再加任何锁。 + read uncommit ---没有锁,所以会出现脏读 + read commit ----共享锁,允许读,但是不允许写。---会出现,不可重复读(一个事务范围内,多次读取的结果不一样) + 可重复读--- X锁,读写都不允许,保证了可重复读。但是不能保证幻读,mysql引入了mvcc来解决这个问题。 2.Spring bean的生命周期 + instantiation ---实例化 + properties injection ---属性注入 + setBeanName ---of bean name Aware接口的实现调用 + setBeanClassLoader----BeanClassLoaderAare接口的方法 + setBeanFactory ----BeanFactoryAware接口 + PostProcessBeforeInitialization-----BeanPostProcessor接口 + afterPropertiesSet-----InitializingBean 接口 + 自定义的init-method----在spring xml中 + postProcessAfterInitilazation ---BeanPostProcessor接口 + destroy----DisposableBean 接口 + 自定义的destroy method 3.设计一个抢红包系统 + 用redis + lua https://www.jianshu.com/p/b58ed2fe6976?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation + 原理:生成一个正太分布的红包值,比如100元,生成10个包。然后利用redis+lua的原子性,把hongbaoList(-1操作),hongbaoConsumedList(+1操作),hongbaoConsumedMap(去重操作)放在一起执行。 注意jedis是和某太机器建立会话,发送lua脚本,采用用redis单线程来保证原子性和抢红包的单线程竞争。 4.分布式锁的公平竞争、线程锁的公平竞争 + 大多是通过单机,或者单线程里面的锁或者时钟顺序性来保证。 + zookeeper在一个指定节点的lockpath下创建临时会话顺序节点(类似于mysql的自增)。谁创建的节点序号小,谁有限获得锁。其他节点都会监听比自己小的节点,在监听事件中判断自己是否最小,从而获得锁 + redis 通过lua的原子性脚本,保证setnx+pexpire的执行原子性(防止没有expire,其他获取锁的机器渴死),类似与MULTI / EXEC 和单线程来保证事务,其实利用了单线程带来的隔离性,串行化,不被打断。不算严格的原子性 + mysql的唯一键保证,其他线程不能插入 + 线程的公平竞争,使用队列,公平不允许插队,非公平允许插队。见问题8 5.线程wait和sleep的区别 6.dubbo自定义注解的实现 + 调用端---- 实现spring提供的NamespaceHandler 接口,向Spring 容器注册 BeanDifinationParser,通过parser转换相关的xml到Spring 的bean + 服务端----- Service Bean,dubbo服务提供者都实现 dubbo:service,Spring把 dubbo:service 解析成一个ServiceBean,ServiceBean实现了ApplicationListener和InitializingBean接口,afertPorpertiesSet中调用export方法暴露这些服务方法。即注册到provider的map里面 7.类的加载 8.ReentrantLock 机制,公平和非公平 9.DDD理解,战略,战术 + 首先领域---就是问题域,即我们要研究的问题边界,不要把所有问题放到一起,我们的问题有自己的边界,是为领域。首先我们系统要做成什么样,然后对问题进行拆分,划分边界,成为领域。比如一个电商可以接拆为---会员中心,商品中心,订单中心,交易中心,库存中心,营销促销中心。但是领域划分有时候会产生领域复杂问题,比如商品中心,有商品和库存,那么随着维护困难,可以再次拆分子领域,也就是我们常说的垂直切分。会员包括用户和账户,也可以垂直切分。 + 按功能可以分为核心域(赚钱的)、通用域、支撑域 + 战略是对系统整体的规划,划分,DDD的战略设计主要包括领域/子域、通用语言、限界上下文和架构风格等概念。 + 战术是设计模式,领域对象,entity,值对象。聚合。Domain Service,Repository,Domain Event
没有评论