自己实现一些框架的思路

1、LRU

a.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。
 
b.利用一个链表来实现,每次新插入数据的时候将新数据插到链表的头部;每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾部的数据丢弃。
 

2、RPC

使用到的技术
1、动态代理
生成 client stub和server stub需要用到 **Java 动态代理技术 **,我们可以使用JDK原生的动态代理机制,可以使用一些开源字节码工具框架 如:CgLib、Javassist等。

2、序列化
为了能在网络上传输和接收 Java对象,我们需要对它进行 序列化和反序列化操作。

序列化:将Java对象转换成byte[]的过程,也就是编码的过程;
反序列化:将byte[]转换成Java对象的过程;
可以使用Java原生的序列化机制,但是效率非常低,推荐使用一些开源的、成熟的序列化技术,例如:protobuf、Thrift、hessian、Kryo、Msgpack

关于序列化工具性能比较可以参考:jvm-serializers

3、NIO
当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。

4、服务注册中心
可选技术:

Redis
Zookeeper
Consul
Etcd

作者:FX_SKY
链接:https://www.jianshu.com/p/dbfac2b876b1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  

 

3、IOC

IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC。
其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外提供一个getBean()方法,以便我们获得这bean。

 

 

4、消息队列

 

 

5、定时任务

 

6、配置中心

 

7、生产者消费者模型

a wait\notify  

b blockingqueue

 

参考

https://www.jianshu.com/p/dbfac2b876b1

https://zhuanlan.zhihu.com/p/21649950

https://www.cnblogs.com/Ming8006/p/7243858.html

 

posted @ 2018-08-06 21:28  人在江湖之诗和远方  阅读(208)  评论(0编辑  收藏  举报