摘要: PRC 即远程服务调用,是实现分布式最基本的方式,而这一实现基于的又是java的反射功能所实现的动态代理。 完全可以自己写一个不到200行的rpc服务: 只需要实现四个类: 0.本地客户端 1. 远程服务的本地代理 2.远程的服务代理 * 功能: 3.远程服务的真正实现者 key : 为什么要用反射 阅读全文
posted @ 2018-07-25 11:29 shawshawwan 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 本地缓存的作用: 0.基于LinkedHashMap实现LRU 1) 构造LRUMap类,重写LinkedHashMap中removeEldestEntry方法; 新增元素的时候,会判断当前map大小是否超过DEFAULT_MAX_CAPACITY,超过则移除map中最老的节点; 2)LinkedH 阅读全文
posted @ 2018-07-17 15:34 shawshawwan 阅读(2280) 评论(0) 推荐(0) 编辑
摘要: 1. 模版方法模式:将多个对象相同的算法抽象,泛化出来,形成超类,由这个超类维护相同的算法骨架,而子类实现具体的算法。 一个简单的例子: 模版方法模式在很多框架中都很常见:由框架去控制如何做事情,而由你(框架的使用者)去指定框架算法中的每个步骤的细节。 2.迭代器与组合模式:管理良好的集合 阅读全文
posted @ 2018-07-08 11:05 shawshawwan 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 如何搭建SpringBoot微服务 ThreadPoolExecutor线程池的使用 ReentrantLock和Synchronized的使用场景 数据库锁机制(悲观锁、乐观锁) 分布式锁(RedissLock、Zookeeper) 进程内消息队列(LinkedBlockingQueue、Arra 阅读全文
posted @ 2018-07-05 15:08 shawshawwan 阅读(218) 评论(0) 推荐(0) 编辑
摘要: Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, 阅读全文
posted @ 2018-06-24 17:22 shawshawwan 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 相信快速排序算法这种经典的算法大家并不陌生。但是基于快速算法的各种变形,你了解吗? 其中很重要的一种变形就是快速选择算法,<!--?xml version="1.0" encoding="UTF-8"?--> 通常用来在未排序的数组中寻找第k小/第k大的元素。快速选择及其变种是实际应用中最常使用的高 阅读全文
posted @ 2018-06-24 16:15 shawshawwan 阅读(16726) 评论(0) 推荐(1) 编辑
摘要: 最近看公司的轮子,发现一个 api服务动态代理。于是打算详细看一下代理模式。动态代理很重要,很多框架底层都是基于它实现的。 代理模式及其变体分为很多种:有远程代理、虚拟代理、保护代理,变体有缓存代理、同步代理、防火墙代理和写入时复制代理。 代理的步骤一般分为: 1)代理对象和真实对象建立代理关系 2 阅读全文
posted @ 2018-06-23 12:19 shawshawwan 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一、GFS Google File System就是HDFS的前身 HDFS 参照了GFS的设计理念,大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver\ 1.设计目标: 多个客户端可以在不需 阅读全文
posted @ 2018-06-20 16:55 shawshawwan 阅读(771) 评论(0) 推荐(0) 编辑
摘要: 一个栗子: 注意构造器是private的,然后uniqueInstance是静态的。静态变量记录该类的唯一实例。 想一想,这会存在什么问题吗? 是不是任何情况下都只是唯一的实例?当我们遇到多线程的时候,事情可能会变得不一样。 解决方法很简单,就是在getinstance方法前加上 但是这样直接对方法 阅读全文
posted @ 2018-06-14 22:27 shawshawwan 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 1. 扫描线算法 1)原理: 平面扫描线算法通常由扫描线、事件点、当前扫描事件点集合构成:通过扫描线按照某一方向依次扫描,扫描事件点,检查事件点状态,然后新增或删除事件点以更新事件点集合。 2)看一道经典的问题: Lintcode391. 数飞机 给出飞机的起飞和降落时间的列表,用 interval 阅读全文
posted @ 2018-06-09 20:41 shawshawwan 阅读(453) 评论(0) 推荐(0) 编辑