面试心得总结ing版

1.rpc框架?常见的rpc框架组件?rpc框架与http框架的区别?

   rpc框架是远程服务调用框架,简单来说,就是在同一个网络下,服务a可以调用服务b中的某个接口。底层利用tcp协议(传输层)建立网络通信,相比于http通信(应用层)来说效率更高。

  整个过程是注册中心、服务提供方、服务调用方,提供方将服务注册到注册中心上,调用方通过注册中心来调用,实现了端到端的通信,提供方需要不定时的像注册中心发送“信号”,证明服务的可用性,否则注册中心会认为该服务已经不可用,提供方及时的取消注册可以让注册中心及时通知调用方,取消订阅。

  在实际传输中经过了:建立通信( tcp建立连接)—>网络寻址(redis或zookeeper组件来寻找提供方的路由地址)—>网络传输(序列化/反~)—> 服务调用。其中反序列化将二进制字节流转换成对象之后,还用到了动态代理来生成Proxy类对象完成调用。

   二者相比较来说,rpc框架传输效率高,稳定性高,性能开销小;http协议适合版本开发迭代快的场景。

  常见的rpc框架的技术:dubbon、feign、RESTFUL等。

2.CopyOnWriteArrayList的实现原理?

CopyOnWriteArrayList是线程安全的的List接口的实现类,采用了Reentrantlock锁对增、删、改操作加锁,对读操作不加锁的,也就意味着CopyOnWriteArrayList实现了读写分离,适用于读多写少的的场景,在写操作时是通过复制出新数组,再将修改后的值挪过去达到目的的,所以会带来内存上的消耗,效率比Vector高,但是允许读写分离也就意味着,它会出现数据不一致的情况,保证的是数据的最终一致性,而不能保证数据的强一致性。

3. MyIsam和Innodb数据库引擎的区别?

(1)前者是对整张表加锁,占用资源少,不容易产生死锁;后者采用行级锁,并发性高,容易死锁

(2)前者不支持事务,后者支持事务

(3)前者利用的是hash索引,仅支持精确查找,后者采用b+树索引,区间范围查找能力强。

4.函数式接口?

函数式接口是java8新特性,采用了@FunctionInterface注解修饰,函数式接口内只允许有一个抽象方法,可以搭配 Lambda表达式使用,类似于一个匿名函数的形式。

5.spring是如何解决循环依赖的?

  循环依赖:两个及以上对象的创建互相引用,形成闭环。比如:A创建依赖B,B创建依赖A,这就是个死循环,A和B谁都不可能创建成功,且无限循环。

  Spring中解决循环依赖,利用了三级缓存机制。

  三级缓存:

      一级缓存存放实例化和属性赋值都完成的Bean对象,即“成品”。

      二级缓存存放实例化完成而属性赋值未完成的Bean对象,即“半成品”。

     三级缓存存放创建当前对象的工厂,利用工厂可以创建完成当前对象的实例化,即保证当前对象可用,可以被其他对象引用。

   A创建依赖B,利用当前可以创建B对象的工厂完成B对象的实例化,然后B对象位于二级缓存,然后A对象利用指向B对象的引用完成自身创建,A对象位于一级缓存,此时B对象的利用A对象完成自身的创建。

6.ES为什么快?

ES适合全文索引的,速度快。es对文本进行细粒度的分词,然后建立分词和具体value的关系即对应实际能查找到当前结果的地址,这就是倒排索引,在进行文本查找时可以快速定位,效率高。

7.redis和mysql的一致性怎么保证?

大多数情况下,请求适用的场景都是“旁路缓存”机制,即当前请求key到redis缓存中找,如果未命中,也返回,再到mysql数据库中找。缓存和数据库的一致性问题,即

(1)缓存或数据库中的值不一样

(2)缓存或数据库中存的是数据的旧值

保证缓存和数据库的一致性,可以

(1)牺牲一小部分请求的时间,来保证除了这一部分时间以外,其他整体的缓存个数据库数据是一致的。即先删除缓存中的无效key数据,再写入数据库中,然后根据业务请求的预估处理时间设置当前合适的休眠时间,保证除了这一小段时间以外其他的时候是一致的就ok。

(2)删除失败重试机制。即在删除完数据库无效key之后,对更新缓存数据设置一个重试次数,达到了这个重试次数,则请求人工干预,发出告警信息。在重试次数内的就再次尝试。

(3)利用数据库的binlog日志。数据库更新时的操作会记录到binlog日志中,缓存系统利用cannal框架订阅当前binlog中的数据和key,缓存删除系统尝试删除当前的key,失败则将当前数据放入消息中间件中,再由删除缓存系统在消息中间件中获取消息,删除缓存即可。

 

 

 

 

 

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值