4 qq_32459653

尚未进行身份认证

暂无相关简介

等级
TA的排名 8w+

注解优雅解决Springboot+mybatis多数据配置问题

最近在开发项目中(ORM层用的是mybatis),需要连接多个数据库,这时候就涉及到多数据源使用了。为了优雅的解决此问题,我们可以使用装饰者模式来优雅的解决此问题 代码https://github.com/skybluehhx/mulitDataSource.git(现已更新支持注解的方式)。首先回顾下数据也就是DataSource这个接口的作用public interface Dat...

2019-07-04 23:03:44

利用netty+zookeep+mysql 自构消息队列,带你理解消息队列的内幕

重要性: 掌握消息中间件是进件为一个高级工程师的必备技能,然而市场上消息中间件有很多中,诸如rocketMQ,kafka,rabbitMQ等等,各种消息中间件层出不穷,大多数人都知其然不知其所以然,仅仅停留在会用的层次,而没有进行深入的研究,本系列博文,将带领大家深入理解消息中间件,并从无到有,手写出一个名为ExquisiteMQ的消息中间件,其中Exquisite译为精致,小巧的...

2019-04-21 12:14:29

SpringMVC之自定义参数解析器(同时支持form提交和json提交)

场景:在重构公司的项目当中(将scalay语言转为java语言),由于历史遗留问题和语言,前端多个页面,对于同一接口有时使用json格式提交,有时使用表单形式提交,项目使用的是前后端分离模式,需要自定义参数解析器。分析:SpringMVC中对json形式和表单形式的参数解析器都有实现,因而不需要我们自己去实现具体参数解析,而是在原有的功能方面进行增强,故此很容易想到可利用java中的装饰器模式...

2019-04-13 23:00:52

Lease(租约)以及在GFS文件系统中的作用

 租约的作用:分布式环境中维持缓存的一致性的一种协议传统的解决方案:轮询:即每次读取数据时都先询问服务器数据是否是最新的,如果不是就从服务器传输新数据,这种方法需要每次读取数据时都与服务器通信。问题:每读取数据都需要与服务器确认,服务器负载大回调或称为无效化:由服务器记住有哪些客户端读取了数据,对数据做修改时首先通知所有这些客户端数据已经失效。问题:需要服务器记住所有读取过...

2018-11-24 14:25:35

事务的一致性设计(2阶提交和3阶提交)

 看到一篇关于事务的好文章,里面对2阶提交,3阶提交,柔性事务都讲解的比较好,因为涉及到侵权的原因只能放链接了,不能转载,感兴趣的小伙伴直接去看原文吧 ...

2018-10-13 20:49:58

一次tomact启动一直报错的原因

在项目发布到tomcat上请一定要将下面的servlet依赖范围scope 为provided,因为tomcat容器自身已近提供,否则将会报错<!-- servlet --><dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api&l...

2018-10-09 17:17:51

简易服务网关的实现

网关服务是单一访问点,并充当多项服务的代理。服务网关启用了跨所有服务的路由转发、过滤和公共处理等。在微服务实践中远不止这点功能,它可以做到统一接入、流量管控、安全防护、业务隔离,权限管理等等等功能。下面是服务网关的大概作用图。  本质来讲服务网关就是在请求来临做一定的处理(如,权限验证,请求转发),从而决定该请求如何进行(如:转发到后台服务,直接拒绝处理),这有点类似spr...

2018-10-06 21:28:36

RateLimiter 源码分析

RateLimiter为guava包下以令牌桶算法抽出来的基类。在这里要说明一下,在令牌桶算法中,理论上是要每隔一定的时间往桶里添加令牌,具体的实现方式有两种第一种:常规实现是采用定时任务,每隔一定的时间往桶里添加令牌 ,该种方式需要额外开启后台线程,消耗资源第二种:(补偿思路) 保存下一次需要添加令牌的时间nextFreeTicketMicros,每次请求时,进行补偿(核对当前时间是否...

2018-10-04 23:38:35

简易时间轮的实现

在处理大量的延迟任务的时候jdk自带的延迟定时任务队列在处理延迟任务(如删除,修改)需要logn的复杂度,这并不能满足已有的需求,于是时间轮延迟算法被设计出来,其原理是模仿生活中的时钟,已每过一段时间,移动一格并执行该格中的任务队列,需要放置任务时,只需要放到当前格的前一格即可,待下次(走满一圈)再次走带该位置在执行此任务,此任务延迟的执行的时间就等于每格所代表的时间*总共的格数,关于时间轮算...

2018-10-02 23:22:29

高并发请求之页面静态化

在高并发请求中(如秒杀系统)需要将请求尽量拦截在上游,减轻下游的压力,常用的在前端的方式有,限定点击次数,检测ip防止脚本式的攻击,页面静态化,后端一般使用消息队列+缓存的形式,一次来最大的拦截无用请求,最小化查询数据库次数,从而减轻服务器压力,达到高并发。今天就实战一下也页面静态化,学习之前请确保会springMVC的基本知识。 什么是页面静态化:我的理解就是对页面进行缓存,当请求来临时,我...

2018-09-25 16:10:35

一次开启vmware使用dubbo时(zookeeper注册中心)遇到的问题

楼主在用dubbo时(zookeeper充当注册中心)在服务与消费者都正确配置时,服务提供方启动正常,而在消费者启动时将会报错,具体错误信息如下Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloServ...

2018-09-24 21:31:45

LRU(多线程)缓存的实现

前面写了个lru缓存,适用于单线程的场景。多线程实现缓存的思路有很多种,有基于ttl淘汰策略的,有基于lru淘汰实现的,而在淘汰的方式也有很多选择,如果选用Concurrenthashmap,可以很好的基于ttl淘汰策略,具体实现是另开一个守护线程,定时淘汰ConcurrenthashMap中的过期键,而在使用lru淘汰策略时则需要额外借助辅助结构双向链表,需要额外的同步操作,由于在本文之前实现了...

2018-09-20 14:27:28

时间复杂度为O(1)的LRU算法

 LRU,算法在操作缓存中常常被用到,由于其访问频繁,因此缩小LRU时间复杂度是非常必要的,好的LRU算法的实现能够很好的提高系统的稳定性数据结构中map的访问速度非常快,时间复杂度为O(1),因此在缓存结构中,可以借助map结构,同时由于缓存需要容量满时需要删除操作,并且对于最近被访问的需要重新置于头部,在数据结构中链表能够很好的完成该操作,故缓存结构借助map加链表结构来降低时间复杂度,...

2018-09-19 01:38:59

Spring+SpringMVC+Mybatis整合

首写 引入maven依赖<properties> <!-- spring版本号 --> <spring.version>4.3.0.RELEASE</spring.version> <!-- junit版本号 --> <junit.version>4.12</junit.versio...

2018-09-18 11:18:36

生产者与消费者从synchronized到ReentantLock

生产者消费者问题是经典的多线程问题,是工业化生产的模型,今天讲的就是生产者,消费者模型以及如何慢慢的改进,进而变为多消费者,多生产者。首先从简单的开始做起,假设我们只有一个生产者,一个消费者。代码实现如下plate代表着共享区,生产者和消费者可以同时操作共享区,分别生产蛋和消费蛋** * Created by lin on 2018/9/15. */public class Pla...

2018-09-16 20:17:46

线程间各种转态的切换,以及等待队列与同步队列的区别

面试的时候曾被问到过线程间状态的转换问题,自己回答的不是太好,故查阅了一些资料来巩固这一片空白,资料参考自微信公众号 java团长。首先线程总共有六种状态,分别是初始,运行,阻塞,等待,超时等待,终止转态。第一种:初始(NEW)指新建一个线程对象如Thread thread = new Thread(()->{});还没有调用其start() 方法。第二种:运行状态(RUNNAB...

2018-09-14 22:18:23

实现一个固定大小的最小堆

/** * Created by lin on 2018/9/13. */public class Heap { private int length; int size = 0; private Integer[] queue;//初始化堆 public Heap(int length) { this.queue = new Integ...

2018-09-13 22:52:25

阅读AQS及其衍生类Semaphore、CountDownLatch、ReentantLock等源码的感悟

曾今阅读过AQS,Semaphore,CountDownLatch,ReentantLock,等并发包的源码,其中后面三个类都是基于AQS实现的,AQS是同步框架的基石,不同的衍生类可以实现tryAcquireShared(主要共享锁实现)tryReleaseShared(主要共享锁实现)tryAcquire(独占锁实现),tryRelease(独占锁实现),以此来实现不同的并发框架,来满足不同的...

2018-09-10 23:08:54

深度分析kmp算法,从原理到实现(看了必会,简单直观)

kmp算法,常用于匹配一个字符串是否是另一个字符串的子串,不同于暴力搜索kmp算法的时间复杂度为O(m+n),网上好多对于该算法的讲解代码,但发现有木有,几乎所有的代码全是一模一样,根本没几个是自己写的,给的都是书上标准优化后的代码,直接抄下来,理解困难,原理讲解不清,含糊其词,因此本人自写一遍关于kmp算法的博客,并讲解该kmp算法的原理,以及为什么需要next数组,并证明每次最优移动次数就是n...

2018-09-09 15:13:43

求一个数中1的个数

碰到遇到一个有趣的题,求一个数二进制的表示中1的个数,该题有两种解法,一种是使用短除法将该数直接转化为二进制数,另一种比较巧妙的算法是使用与运算,原理如下图所示 依照此种思入有如下算法int NumberOf1_Solution3(int i){      int count = 0;      while (i>0)      {            ++ co...

2018-09-06 22:37:28

查看更多

勋章 我的勋章
    暂无奖章