1、请问你们用ShardingJDBC分库分表后是如何扩容的? (问法2:你们使用ShardingJDBC后,原有数据库的数据是怎样迁移到新数据库的?)
(1)站点挂一个公告“为了为广大用户提供更好的服务,本站点将在今晚00:00-2:00之间升级,届时将不能登录,用户周知”;
(2)微服务停止服务,数据库不再有流量写入;
(3)新建2*n个新库,并做好高可用; 2主2从 4主4从 扩容
(4)写一个小脚本进行数据迁移,把数据从n个库里select出来,insert到2*n个库里;(最耗时)
(5)修改微服务的数据库路由配置,模n变为模2*n;
(6)微服务重启,连接新库重新对外提供服务;
2、请说说Spring的IOC和DI?
IOC简单理解就是利用Spring的Bean工厂为我们生产Bean。(控制反转)
DI简单理解就是从Spring的Bean工厂中注入我们需要的对象。(依赖注入)
3、请说说Spring的AOP及原理?
AOP是面向切面编程。用于对目标类方法的业务进行增强,如日志增强或事务增强等等。
AOP底层有两种方式实现,JDK 动态代理和 CGLIB 动态代理。
目标类有接口,则执行JDK动态代理(接口代理)。
目标类没有接口,则执行Cglib动态代理(类代理)。
4、Hashmap、Hashtable、ConcurrentHashMap的区别?
1)HashMap是非线程安全,HashTable线程安全,ConcurrentHashMap也是线程安全。但是需要线程安全的话,建议使用ConcurrentHashMap,而不建议使用HashTable(因为没有代码优化)
2)ConcurrentHashMap在JDK1.8之前采用分段锁机制,JDK1.8之后采用CAS和synchronized来保证并发安全,synchronized只锁定当前链表或红黑树二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。
HashMap和ConcurrentHashMap在JDK1.8之后,都是数组+链表+红黑树。
