- 博客(29)
- 收藏
- 关注
原创 RocketMQ之NameServer
引言消息生产者怎么得知消息会发往哪台服务器?如果服务器宕机,生产者如何感知?NameServer:路由中心。提供路由管理、服务注册与服务发现的机制,使消费者找到远程的生产者,完成网络通信。每个NameServer都会和所有的Broker连接,NameServer之间互不相连,同一时刻NameServer之间的数据可能并不相同。当Broker启动时,先向 所有NameServer注册,二...
2020-04-10 21:24:09 424
原创 秒杀项目基础
SpringBoot构建电商基础秒杀项目https://www.imooc.com/learn/1079主要知识点是领域模型的分层设计,包括基础电商项目的用户管理、商品管理、交易管理及秒杀活动管理。分层设计数据库:mysql数据层:数据Dao,对数据@Transactional注解进行处理业务层:用户服务,商品服务,交易服务,活动服务web接入层:通用异常处理及通用返回对象供前端调...
2020-04-04 22:34:23 177
原创 二叉树相关算法实现
二叉树打印所有节点前序,中序,后序public class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }}//前序递归public void preOrder(Node head) { if(head ...
2019-09-21 23:33:52 1351 1
原创 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test)
编译rocketmq时,测试报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project rocketmq-store: There are test failures.在pom.xml中增加配置,跳过测试用例 <plugi...
2019-06-19 16:35:53 2210
原创 MVC架构模式
M–Model:数据管理(如数据库访问)V–View:数据显示(界面)C–Controller:控制响应策略组成MVC的三种模式:组合模式:https://blog.csdn.net/tjgongxl/article/details/90265092策略模式:https://blog.csdn.net/tjgongxl/article/details/92705343观察者模式:htt...
2019-06-17 22:51:18 956
原创 观察者模式(Observer)
场景:广播机制。消息发布----消息订阅。多个订阅者、客户称为观察者,需要同步给多个订阅者的数据封装到对象中,称为目标。核心:1:N的通知。当一个对象(目标对象Subject或Observable)的状态变化时,他需要及时告知一系列对象(Observer),令他们做出响应。通知方式:push:广播,观察者只能被动接收。pull:观察者知道有情况即可。什么时候获取内容或获取什么内容,都可...
2019-06-17 22:24:43 205
原创 策略模式(Strategy)
分离算法,选择实现。提供解决某一问题的算法族,允许用户从算法族中任选一个算法解决问题,方便更换算法或增加新算法。客户端决定调用哪个算法。假设场景:一个报价系统,根据不同类型的用户及采购商品数量,给不同的折扣。建立一个策略接口。public interface Strategy { public double getPrice(double standardPrice);}不同...
2019-06-17 21:01:19 156
原创 fastdfs环境搭建
最近在搞一个分布式文件系统,考虑到是海量的中小文件,选择用fastdfs搭建。系统环境 centOS 7.3 阿里云服务器,做demo用所以所有的配置都在单机上设置了,工程应用的时候再切分布式服务器。安装基本依赖yum -y install tcl lrzsz deltarpm zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl opens...
2019-06-11 15:38:03 230
原创 HTTP
HTTP方法以HTTP/1.1方法进行介绍。GET: 获取资源请求访问已被URI识别的资源。指定资源经服务器端解析后返回响应内容。POST: 传输实体主体GET和POST的区别:GET在url中提交,POST在request body中提交。GET请求会被浏览器自动缓存。GET有长度限制(HTTP协议本身没有URL长度限制,但处理过长URL会产生性能和安全问题,限制来源于浏览器和...
2019-05-17 14:42:00 446
原创 装饰模式(Decorator)
装饰模式动态为一个对象增加新的功能。一种用于替代继承的技术,无需通过继承增加子类就能扩展对象的新功能。实现细节Component抽象构件角色真实对象和装饰对象有相同的接口。ConcreteComponent具体构件角色(真实对象)Decorator装饰角色:持有一个抽象构件的引用。接受所有客户端的功能,并把这些请求转发给真实对象,这样就能在真实对象调用前后增加新的功能。Concre...
2019-05-17 14:17:19 108
原创 组合模式(Composite)
组合模式把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。角色抽象构件(Component):定义叶子和容器构件的共同点叶子构件(Leaf):无子节点容器构件(Composite):有容器特征,可以包含子节点具体来说:容器构件的特征就是增加了add和remove子节点,以及进行索引的功能。public interface Component {...
2019-05-16 16:45:26 357
原创 代理模式(Proxy)
代理模式通过代理,控制对对象的访问。可以详细控制某个或某类对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。举个例子:用户邀请明星唱歌,可以通过经纪人作为代理。那么经纪人完成面谈合同安排等等,明星只负责前置处理技术后唱歌,如果经纪人负责多个明星,它可以为多个明星提供前置服务。核心角色抽象角色:定义代理角色和真实角色的公共对外方法。真实角色:实现抽象角色,定义真实角色所要...
2019-05-14 22:45:55 330
原创 适配器模式(Adapter)
适配器模式将一个类的接口转换为客户希望的另一个接口。使原本由于接口不兼容而不能一起工作的类可以在一起工作。主要角色:目标接口(Target): 客户期待的接口。目标可以是具体或抽象的类,或接口。需要适配的类(Adaptee)适配器:通过包装一个需要适配的对象,将原接口转换为目标接口。...
2019-05-14 21:16:08 124
原创 Manacher算法
字符串中找最长回文子串。如何处理奇偶字符串的问题?113311 ,11311,计算中心是字符还是字符间空格?可以对字符进行填充。#1#1#3#1#1#将每一个空隙都用同一个字符填充上(什么字符都可以,原字符串中包含的字符也可以),求出以每个字符为中心扩展出的最长回文的长度,找到其中的最大值除以二,即为最后结果。几个概念:回文半径:以某一个字符为中心扩出来的回文字符串范围。回文右边...
2019-05-11 18:59:42 103
原创 二叉树的序列化与反序列化
序列化:用两个特殊字符,#代表此处为null,用#占位!代表该节点已被序列化结束,表终止先序遍历方式:图一:12!3!#!#!#!图二:1!23!#!#!#!反序列化:按照终止符!进行字符切割,装进队列里,将队列中的元素依次弹出构建左右子树。public class serialTree { public static class Node { public int...
2019-05-11 16:25:40 100
原创 原型模式(Prototype)
原型模式通过new产生一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式。以某个对象为原型,复制出新的对象,效率高。java里的原型模式就是clone。主要注意浅拷贝和深拷贝的问题。模拟一个克隆羊的过程,实现一个Sheep类:public class Sheep implements Cloneable, Serializable { private String sname...
2019-05-07 00:21:54 91
原创 链表算法题目--链表相交
参考《程序员代码面试指南》。链表相交问题判断两个单链表是否相交:链表可能是有环也可能是无环的。对于每一个链表,判断链表是否有环,如果有环,返回第一个进环节点。两个无环链表是否相交。两个有环链表是否相交。一个有环一个无环一定不相交。判断链表是否有环方法1:创建HashSet存储已遍历过的节点,每遍历到一个新节点,就与HashSet中的节点比较。方法2:快慢指针法定义两个指针...
2019-05-06 23:17:23 256
原创 配置goclipse环境
平时用java比较多,一般用eclipse,在eclipse上搭建一下go语言环境。离线安装GoClipse在线安装始终没有成功,所以直接下的离线安装包。https://github.com/GoClipse/goclipse.github.io/archive/master.zip安装包下载解压之后,在Eclipse中Help -> Install New Software,添加解...
2019-05-04 00:58:27 252
原创 HashMap源码分析(jdk1.8)
以jdk1.8中的HashMap源码进行分析。继承关系public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable其中,AbstractMap是对Map接口骨干实现,以最小化实现Map接口所需工作。Node结构是H...
2019-05-03 20:13:07 127
原创 建造者模式(Builder)
建造者模式(Builder)适用情况:要建造一个复杂的产品,有很多的子组件构成,需要将子组件按照一定步骤装配在一起。本质:分离对象子组件的单独构造(Builder负责)和装配(Director负责)。适用于某个对象构建过程复杂的情况。一般建造者模式和工厂模式搭配使用。假设场景:构建一个XX牌宇宙飞船,包含发动机,轨道舱,逃逸塔,且需要按顺序进行装配。创建一个宇宙飞船类,它包含三个私有fi...
2019-05-02 23:33:15 103
原创 工厂模式
简单工厂模式也叫静态工厂模式,工厂类一般使用静态方法,通过接收参数的不同返回不同的对象实例。但对于新增加产品,必须修改已有类或已有方法,是违反开闭原则的。...
2019-05-02 15:57:05 151
原创 KMP算法
查看某个字符串是否是另一个字符串的字串。1. 计算字符串中每个元素之前的字符串中,前缀字串和后缀子串的最大匹配长度。定义一个与字符串match长度一致的next[]数组,next[i]代表从match[0,…i-1]中,以match[0]为开始的前缀字串与以match[i-1]为结尾的后缀子串的最大匹配长度。从左到右依次求解next[0]默认为-1;next[1] = 0;假设要求A位...
2019-05-01 19:00:17 131
原创 Leetcode 45: 跳跃游戏2
先回顾一下跳跃游戏1(Leetcode 55):class Solution { public boolean canJump(int[] nums) { if(nums[0] == 0 && nums.length ==1) return true; if(nums[0] == 0 && nums.length >...
2019-04-30 15:05:01 546
原创 Leetcode 54: 螺旋矩阵
主要思路:将矩阵分圈,即每次都输出最外面一层的矩形,每一圈分为四个序列,每一圈的边界都基于其左上角坐标(tR,tC)和右下角坐标(dR,dC)。通过四个while循环,对边界条件的判断就可以打印完一圈,然后tR,tC加1,dR,dC减1。如果行数和列数不相等,到最后一圈可能会出现只剩一行或者只剩一列的情况,对应tR = dR 或 tC = dC,需要单独进行判断,而不需要四次循环打印。c...
2019-04-29 23:57:15 169
原创 Leetcode 51: N皇后
回溯法:class Solution { List<List<String>> res = new ArrayList<>(); public List<List<String>> solveNQueens(int n) { // 定义array数组用于存放每一行中皇后的列号 int[...
2019-04-29 22:22:17 119
原创 读取数据流的中位数
利用一个大根堆和一个小根堆,中位数始终位于堆顶或是两个堆顶的平均数。import java.util.PriorityQueue;import java.util.Comparator;public class Solution { int count = 0; PriorityQueue<Integer> minHeap = new PriorityQueue...
2019-04-28 23:33:47 122
原创 基本数据类型和封装类中的equals和==
以int和Integer类型为例。Integer自动装箱: Integer a1 = 128; Integer a2 = 128; System.out.println(a1 == a2); //false System.out.println(a1.equals(a2)); //true Integer b1 = 127; Integer b2 = 127; S...
2019-04-28 20:27:51 160
原创 一致性哈希算法
参考左程云算法视频及《程序员代码面试指南》。考虑一个缓存场景:通过使用服务器集群设计和实现数据缓存。取模法通过数据的ID计算hash值(key),假设有N台机器,计算key%N,即为缓存的机器编号。主要问题如果机器数量不是固定的,每次机器有增删时,都需要对所有数据重新计算hash,同时会造成大批量的数据迁移。Hash环假设哈希值范围为232, 可以将这232个假想成一个环:通过每...
2019-04-27 13:39:57 137
原创 单例模式
单例模式定义实现方法饿汉式--线程安全懒汉式--线程不安全懒汉式--线程安全双重检查--禁止指令重排允许重排--使指令重排不可见功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文...
2019-04-26 23:45:50 111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人