首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

门面模式查看全文
门面模式.png
门面模式(Facade)是常用的设计模式之一,内部功能统一封装在门面层,可以收敛外部系统的访问入口,屏蔽异构的内部系统,从而提升系统的安全性,易用性等。

门面模式将系统分为两种角色: Facade(门面系统),客户端调用其他系统功能的入口,它将代理所有客户端的请求,并且委托给相应的子系统处理; SubSystem(子系统),子系统可能是一个类或者一组类,也可能是几个或者多个的组件/系统,子系统不被客户端直接调用,而通过Facade系统被客户端使用。 门店模式的特点如下: 因为门面模式屏蔽了外部系统和内部子系统的交互,子系统可以有选择性的暴露方法。 模块/子系统中定义的方法可以分成两部分,一部分是给外部系统(Facade)使用的,一部分是子系统内部模块之间相互调用时使用的。Facade可以避免内部方法的暴露。 门面模式可以有很多个门面类 在门面模式中,对门面类的数量没有限制。如果有多个子系统提供多个模块的功能,可以将这些功能进行分类,对每一类的功能提供单独的门面类。 门面模式隔离了子系统和外部系统,所以可以实现安全机制 门面模式可以实现安全机制,避免外部系统和子系统的交互,从而可以保护子系统内部的数据以及方法。 门面模式实现了系统之间的松耦合 客户端与子系统解耦,可以提高子系统的独立性,客户端也不需要知道子系统的内部构造。

门面模式和代理模式都引入了中介,而且中介都起到代理功能。但是代理模式只代理一个类,而且代理类与实现类都有同样的抽象,对外提供统一的接口。门面类代理的是一系列子系统的功能,和子系统可以提供不同的对外接口。
Redis查看全文
Redis的hash存储结构.png
Redis是一个开源软件,遵守BSD 协议,其本质上是一个Key-Value类型的内存数据库。但是和其他的KV缓存例如memcached不同的地方是其功能更加完善,特性更加丰富。

Redis支持多种的数据结构,例如String,Hash,List,Set,ZSet等 Redis支持数据持久化 Redis支持主从结构,支持集群化部署 Redis支持原子操作,可以安全地 SET 或 INCR 键,添加和删除集合中的元素等。 Redis支持通过Lua脚本语言实现事务,原子操作包装等 Redis有较高的性能,支持pipeline等批量操作。 线程模型 Redis基于Reactor模式实现了网络处理模块,该模块分为4部分 套接字管理,Redis是Client-Server架构,Client请求数据的时候需要通过网络链接,所以Redis Server需要对这些链接进行管理,比如移除超时的连接等。 IO多路复用程序,Redis的I/O多路复用有多套实现,分别利用select、epoll、evport和kqueue这些I/O多路复用函数库来实现。 事件分发,多路复用会根据IO事件的类型,例如链接事件,读事件,写事件进行不同的处理逻辑,所以需要事件分发器分到不同的处理器。 事件处理器,不同的事件处理器分别处理连接、读、写等事件。 Redis的IO模型是基于Reactor的单线程,但是可以承担较高的QPS,原因如下: Redis的操作都是基于内存的,所以速度非常快。 Redis使用哈希作为索引,对于大部分查询只需要O(1)的事件复杂度就可以找到key对应的数据。

Redis是基多路复用模型中的epoll模型进行网络通讯的,epoll模型的事件监听机制…
范型【Java】查看全文
范型的擦除.png
泛型的意思是“参数化类型”。参数化类型将之前类方法中具体的类型参数化,运行时再传入具体的类型。

Java的范型可以应用在类、接口和方法中,分别可以被称为泛型类、泛型接口、泛型方法。 编译器检查 Java中泛型的和C++的模版有类似的目的,将通用逻辑和不同数据类型的个性化逻辑进行分离,使用代码更加通用。 泛型可以解决容器的类型安全,使用泛型可以让编译器在编译时借助传入的类型参数检查容器插入/获取的元素类型是否合法,从而将运行时的类型转换错误可以前置到编译时。 使用泛型之后,由于编译器可以知道具体类型,因此编译期会自动进行强制转换,使得代码更加优雅。 运行期擦除 Java 1.5推出的“泛型”,本质上是编译时类型检查的语法糖。 使用范型的代码通过编译器编译后所生成的二进制代码和没有使用范型是完全相同的。 泛型可以将具体的类型作为参数传递给方法,类,接口,在编译时去除这些范型类型的过程称为擦除。 Class范型化 从JDK1.5开始,Class也是范型化类。 Java作为一个比较存粹的面相对象语言,Java所有定义的类的类型信息也有类进行表达,该类就是Class类,Class类的对象就是其他类的类型信息,Object类中的方法getClass()就可以获取一个Class类型的对象,该对象包含了该Object对象的类型信息。 Class范型化之后,范型参数T就代表Class的对象类型,例如String.class类型代表 Class<String>,Serializable.class代表 Class<Serializable>。

Class范型化之后在利用Class类进行反射操作时,可以获取准确的类型…

热门分类

算法题库

精选内容