1. MySQL与Redis/Elasticsearch如何进行数据同步?
①、同步方案:更改代码业务代码,加入同步操作缓存逻辑的代码(数据库操作完毕以后,同步操作缓存)
缺点–>耦合度高,影响业务性能
②、异步方案:使用消息队列进行缓存同步:更改代码加入异步操作缓存的逻辑代码(数据库操作完毕以后,将要同步的数据发送到MQ中,MQ的消费者从MQ中获取数据,然后更新缓存)
③、使用阿里巴巴旗下的canal组件实现数据同步:不需要更改业务代码,部署一个canal服务。canal服务把自己伪装成mysql的一个从节点,当mysql数据更新以后,canal会读取binlog数据,然后在通过canal的客户端获取到数据,更新缓存即可。
2. 说说什么是倒排索引?
倒排索引是一个相对的概念,在mysql数据库里面,我们根据索引字段去查询效率会比较高,然而有些查询比如前模糊查询可能会导致索引失效导致查询效率低下。
倒排索引,就是内容反过来确认索引位置。在数据量大的情况下,内容分词出来的关键字数量是远远小于文档数量的,根据分词进行查询就可以加快查询速度。
3. 红黑树的特性有哪些?
①红黑树的节点有红色和黑色
②根节点必须是黑色
③叶子节点必须是黑色
④两个红色节点不能相连
⑤每个节点到所有叶子节点的简单路径上,所经历的黑色节点数量相同
4. 说说JAVA中常见的集合有哪些?
单列集合:Collection list set ArrayList linkedlist hashset treeset
双列集合:map hashmap treemap properties HashTable concurrenthashmap
5. HashMap是否为线程安全,如果不是,如何解决线程安全问题?
不是线程安全的,可以使用Collection.synchronizedMap、HashTable、concurrenthashmap(推荐使用)