自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 问答 (1)
  • 收藏
  • 关注

原创 JWT-无状态方案处理

1.JWT的优势在于无状态,如果非要结合redis等相关nosql来进行一些方案的处理,我觉得是没有必要的。这样还不如直接使用session集群。2.那么针对JWT就会有几个问题(1)退出登录,需要把token无效化(2)修改密码,需要把token无效化(3)单用户登录,需要进行判断其实(1)(2)是属于差不多的类型。这两种情况的处理就比较相似了。那么我们首先考虑jwt...

2019-03-06 12:11:28 1408

原创 背包算法-记录

背包算法学习

2023-01-18 10:08:34 435

原创 Mysql——SQL优化

下面主要讲一下常用的sql大局上的优化技巧,对于底层不做过多解释。1.尽量走索引,如果可以的话,可以尝试联合索引,但是索引不易过多,因为这样mysql维护索引的成本会增加,写入,删除会变慢。2.表的主键尽量是递增的整数,这样的话对于索引而言是有益的,索引文件会相对小,读取会相对快一点3.利用冗余数据的方式,例如想要查看一个订单的下单用户名,那么t_order里面一般都会有user...

2020-03-18 14:53:22 141

原创 JVM-CMS全过程分析

其实网上有很多这类的文章,但是主要最近闲来无事,就写一下自己在经过了各类书籍的研究后得出的一些自己的见解。那么CMS的大部分流程其实都有说到,那么我们就从每个细节开始讲解一下吧。1.初始标记2.并发标记3.重新标记4.并发清除一.首先是第一步:初始标记,该过程会导致STW,这个过程是为了扫描JVM当中的根对象(GC roots)以及直接关联的对象,所谓的根对象一般来说的话通常是指...

2020-03-02 15:11:08 992

原创 锁操作封装

//锁行为 public static <T,R>R doWithLock(String key,Object method,T param){ Lock lock = null; try { //获取锁 lock = getLock(key); //上锁:需要保证阻塞 lock.lock(); //执行结果 return invoke(...

2019-11-19 11:29:56 314

原创 一些常见问题的实际处理方案

一.数据库主从延迟目前,做了一个登陆系统,数据库采用主从复制,偶尔会存在注册用户后,用户登陆却不存在,这是因为登陆的时候是从读库中去读取的数据,然而数据同步还没到位,因此我采用的方案是:(1)在注册的时候将该条数据放入redis当中(需要注意的是,用户的登陆方式有几种,就需要把几种唯一标识符都放入进去,例如,手机,微信,qq等)。(2)在登陆的时候,先从缓存当中读取,如果还是没有的话,...

2019-06-18 11:11:27 138

原创 RocketMQ整个流程

1.发送消息,producer会在本地缓存的broker列表里面获取一个broker,如果没有,那就会去namesrv获取broker的地址,然后发送消息到broker。2.broker接受到消息后,会进行一系列检查,然后把收到的消息,存入到commitLog当中,然后进行刷盘,如果是同步的刷盘策略,那么就会在写入到pageCache中时,再真正落地到磁盘的时候才会进行response的返回...

2019-05-21 10:50:48 1683

原创 reactor模型—生动形象

网上有很多讲解reactor模型的,我还是看了比较久才稍微领悟一点意思,那么我就举个例子讲讲自己的理解。我们首先先结合NIO、多路复用的知识,做一个比喻。大前提:餐馆的服务员现在假设只有一个(还需要兼职厨师),那么当一个客人来了之后,服务员会把菜单给客人,然后就走开去迎接其他客人,当有客人点好餐的时候会把菜单告诉服务员,服务员就会去做事,热按后服务员再把菜给客人,就完成了完整的一次流程。...

2019-04-16 23:04:44 252 2

原创 记录一下一个不错的NIO的教程地址

https://www.jianshu.com/u/f223a6ff7f2a

2019-04-04 13:56:23 126

原创 不定数量多线程轮询打印i++

package dmeo;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;...

2019-03-15 10:28:42 178

原创 代理效率对比

1.JDK动态代理速度最快,差不多是cglib的5-10倍。但是仅限于有接口的实现。速度是12.cglib代理速度较中。不仅限于接口。速度是5-103.javassist代理。不仅限于接口。速度较慢,差不多是cglib的35倍。速度:170-3504.asm代理这个还没实现。之后实现了会贴出来...

2019-02-24 16:45:28 223

原创 mysql-写阻塞

先说一下前提,我的mysql是使用的5.6版本,隔离级别是RR。表结构CREATE TABLE `t` (  `id` int(11) NOT NULL,  `c` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `t` VALUES ('0', '...

2019-01-28 13:53:50 785

原创 java-延时队列-DelayQueue源码分析

首先延时队列的发现是基于一个实际场景:如何处理超时的订单这个问题很容易想到解决方案(1)写一个定时任务,轮询超时的订单(缺点:性能消耗过大,对数据库造成压力)(2)放入延时队列当中那么我就选择一下延时队列,看一下java的实现吧。贴出一个入门的博客:https://www.cnblogs.com/barrywxx/p/8525907.html然后我们就以这个博客来入手源码...

2018-12-21 17:09:49 300

原创 网络神器frp

推荐一款神器,因为公司业务有很多回调要弄,但是每次放到公网上面测试又很烦。所以可以使用一个内网穿透的神器frp。他是能够生成一个三级域名,将生成的三级域名注册给二级域名,然后回调服务通过域名去找到我们的服务。...

2018-11-29 16:17:20 293

原创 分布式任务调度简化

首先,我也没有做过什么分布式的任务调度框架,我只是这几天做定时任务,为了解决高可用的特性,弄了一个简化版的分布式任务调度。其实分布式任务调度很简单,说白了在单机上做的话,就需要利用lock或者锁了。而多服务器了之后,就需要提供一个分布式锁即可,但是这样会在每个方法里面去显式地去写出一段代码,例如我使用redis来实现的话。boolean haveGotLock = redisUtil.set...

2018-11-20 22:41:59 278

原创 RxJava学习

为了学springCloud的hystrix,没办法呀,只能硬啃咯~。当然,为了学这个我还是参考了这个博客https://www.jianshu.com/p/5e93c9101dc5那么还是从如何用开始了解。Observable&lt;String&gt; sender = Observable.create(new Observable.OnSubscribe&lt;String&gt...

2018-11-20 15:03:32 96

转载 转载几篇微服务很好的文章

http://blog.daocloud.io/microservices-1/http://blog.daocloud.io/microservices-2/http://blog.daocloud.io/microservices-3/http://blog.daocloud.io/microservices-4/http://blog.daocloud.io/microser...

2018-11-09 13:49:07 119

原创 springboot+ssm+mysql 读写分离+动态修改数据源

一.我们最开始先实现读写分离(其实和多数据源差不多,只是多数据源的定义更加广泛,读写分离只是其中的一个应用而已)这里就不怎么探讨mysql的主从的一个原理了,我直接贴出一个博客,可以去看看,大致了解一下mysql主从。我学东西喜欢先跑一次,如果成功了,我就再深入研究了,其实大体的逻辑还是很简单,在service层做一个dataSource的选择,(网上有很多在dao层做,这是不合道理的,因...

2018-10-29 13:09:04 479

原创 数据库连接池认知+手写一个

首先推荐一篇不错的文章。https://www.cnblogs.com/newpanderking/p/3875749.html接下来,看了这篇文章之后,我们再看一下1.首先是连接池的规范/** * 连接池 顶级规范 */public interface IPool { /** * 获取连接 */ MyConn getConnection(...

2018-09-30 15:47:43 168

原创 SpringCloud的一些坑(以后会持续记录)

记录一下springCloud的坑1.现在假设我有2台机器,A,B机器。A机器装了注册中心,装了xx-Client服务。B机器装了xx-feign服务。B去调A的时候,会因为注册中心会返回一个 将ip+端口返回一个随机域名,就会导致unknowHostException因此不可能考虑一个个地去配。需要在被调用的服务方添加一个配置信息:eureka.instance.prefer-ip-addr...

2018-09-28 22:54:14 1336

原创 对于Cookie的Domain的认知(转载)

https://www.cnblogs.com/wenjia-hao/p/7365569.html

2018-09-28 19:56:10 110

转载 保存一篇RocketMQ非常不错的文章(不仅限于RocketMQ)

https://www.jianshu.com/p/453c6e7ff81c

2018-09-24 22:25:56 170

原创 线程池源码分析(2)submit

线程池的话,其实就那么几种,前面已经分析过了。大体的流程已经清楚了。至于其他几种线程池的区别(其实区别就在于队列的放入,放出的处理不同)的话,就可以放在后面来慢慢看看区别。接下来,今天要看的是能够得到返回值的线程任务—Callable。//先看一下平常的使用方式。Callable job = new YourJob();Future<Object> future = exe...

2018-09-17 08:53:43 247

原创 jedis工具类—优化

jedis工具类的使用很简单。但是考虑到一些性能的问题做出一些调整。public Jedis getJedis() { Jedis jedis = null; try { jedis = jedisPool.getResource(); } catch (Exception e) { e.printStackTrace(); ...

2018-09-15 17:22:23 559

原创 线程池源码分析(1)execute()方法

接下来,我将讲解线程池的源码分析。作为新手入门的手册的话,我就选取曾经自己看的文章,写的相当不错。https://www.jianshu.com/p/210eab3454231.从最简单的单线程-线程池入手。//一点点的进行分析。首先,放出第一种用法。ExecutorService executor=Executors.newSingleThreadExecutor();//只需要实...

2018-09-15 17:15:04 353

原创 Semaphore源码分析

还是像之前,关于Semaphore的使用方法,我就不介绍了,依然提供一个博客地址供大家了解。https://blog.csdn.net/zzy7075/article/details/52095773平常的使用的话:`//permits是指允许进入的线程数量Semaphore semaphore=new Semaphore(permits);semaphore.acquire()...

2018-09-12 09:00:20 143

原创 Condition源码解析—依赖ReentrantLock

condition的几个api和object的几个方法非常相似,但是对于锁的控制力度更加强大了,比如控制粒度更细了,提供了更多的功能:在一定时间内等待..等等。那么就先来看一下平时的使用吧。ReentrantLock lock = new ReentrantLock();Condition condition= lock.newCondition();//构造方法,基本属于什么都没...

2018-09-10 09:21:17 242

原创 CyclicBarrier源码分析

接下来就分析一下CyclicBarrier,如果有不了解CyclicBarrier的使用的话,给大家推荐一篇生动形象的入门博客:https://blog.csdn.net/carson0408/article/details/794714901.构造方法。public CyclicBarrier(int parties, Runnable barrierAction) { i...

2018-09-09 23:10:02 100

原创 CountDownLatch源码分析

首先,我就不介绍CountDownLatch了,如果不知道的同学,可以参考一下:https://www.cnblogs.com/bqcoder/p/6089101.html//这就是平时的使用方式了/** * (1)看一下构造方法 * (2)看一下await()方法 * (3)看一下countDown()方法 */CountDownLatch cdl=new CountDownL...

2018-09-08 20:32:01 88

原创 spring源码学习(7)

第六篇暂时放置,先不进行讲解,等后面再看一遍的时候再来重新编写。那么我们就来讲一下Spring的AOP,至于AOP是什么,可以自行去百度一下,这里就不多做介绍了。protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) throws Be...

2018-08-08 22:07:01 201

原创 spring源码学习(6)

前面了解了xmlBeanFactory,那么接下来,我们就去看一下真正常用的类:classPathXmlApplicationContext。classPathXmlApplicationContext拥有比xmlBeanFactory更多的功能。ClassPathXmlApplicationContext factory=new ClassPathXmlApplicationConte...

2018-08-05 15:22:23 126

原创 spring源码学习(1-5 总结)

对前面5篇的文章进行总结一下,因为是第一次看spring的源码,说实话,看起来确实很复杂,但是也能有一点收获,我可能探究的不够深入,但是至少了解了大致的流程。那么接下来就大致总结一下流程。(1)首先是通过Resource进行配置文件的读取,得到流。(2)对配置文件进行校验,验证通过过后之后得到解析之后的document。(3)将document转换为持有xml信息的beanDefini...

2018-08-05 13:17:08 372

原创 spring源码学习(5)

今天就接着进入createBean()方法,去看一下spring是如何生成bean的。protected Object createBean(String beanName, RootBeanDefinition mbd, Object[] args) throws BeanCreationException { if (logger.isDebugEnabled()) { log...

2018-08-04 16:23:17 342

原创 spring源码学习(4)

前面一节,我们看了一下getBean的大致流程,首先是转化beanName,然后根据beanName去缓存当中获取,如果没有的话,那我们就会通过factory去生成指定域的bean,放入缓存当中。那么我们接着就深入了解一下每一步的详细流程。那么今天,就来看一下我们到底应该如何得到bean。(1)缓存当中获取Object sharedInstance = getSingleton(be...

2018-08-01 23:24:05 219

原创 spring源码学习(3)

前面学习完了spring的xml解析,将所要生成的bean的信息保存在beanDefinitionHolder里面,那么接下来就该学习一下spring中bean的加载了。那么我们通常获得bean的方式是通过getBean("beanName")来获得的。那么我们就从入口开始。UserEntity bean = (UserEntity) factory.getBean("user");@...

2018-07-31 22:21:41 127

原创 spring源码学习(2)

前面总算是找到了bean的加载与注册的入口了,下面就是应该是真正的操作了吧。private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { //import标签 ...

2018-07-29 20:29:07 117

原创 spring源码学习(1)

网上有很多spring的源码分析教程,也有很多类图,但是spring的源码特别复杂,一层嵌套一层,刚开始看,很难受,越看越懵,所以我买了本书《spring源码深度解析》。跟着书的内容来学习吧。首先是spring读取配置文件,spring有一个专门读取配置的较为顶级的接口-Resource。假设我们使用ClassPathResource进行resource的实例化。//得到resource...

2018-07-29 15:34:04 230

原创 定制专属的mybatis

突然发现自己这篇文章写得很差,用了最笨的方法(不应该去考虑修改源码),后面我换一种实现做--------------------------------------------------------------------------------------------------------------------现在的orm框架都是选择mybatis,那么mybatis好用吗?应该是...

2018-07-26 09:18:51 284

原创 设计模式-责任链模式

责任链模式的定义:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。责任链模式的重点在“链”上,有一条链去处理相似的请求在链中决定由谁去处理这个请求,并返回相应的结果。就是设计模式的核心思想—可拓展性高,解耦合。考虑几种场景:1.if else if else if 。。。...

2018-07-23 09:04:32 99

原创 设计模式-委派模式(算是吧)

看了mybatis源码之后,发现了大量的委派模式,并且最近在学习spring的源码的时候也发现了大量的委派模式,那么就大致看一下。还是结合场景来分析,我们程序员都有个上级,比如我们码农得听项目经理的话,项目经理得听老板的话,当老板布置一个任务给了项目经理,他不可能还要写代码三,所以就让我们码农写代码了,但是在老板看来,其实是项目经理完成的。这样就是简单的委派模式了。/** * 所有类的基类...

2018-07-21 19:04:03 259

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除