自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蜡笔小明的博客

不求闻达,但求无愧于心

  • 博客(87)
  • 资源 (4)
  • 收藏
  • 关注

原创 Stream的一些常用操作

由于最近换了工作,项目中是使用jdk1.8,所以有必要学习一些jdk1.8骚操作,此文章不断更新。 如何理解Stream?在我看来,Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。简单来说,它的作用就是通过一系列操作将数据源(集合、数组)转化为想要的结果。Stream有三点非常重要的特性:Strea...

2019-04-02 10:24:22 2769 3

原创 博客搬家至----语雀平台

CSDN 再见了,你是在说我不敢恭维,云雀是真的好用。

2020-02-15 01:18:56 465

原创 自定义注解+反射+Aop 实现代码封装(扩展性强)

问题引入 首先这篇博文是我在上直播课学习到的,受益匪浅,它教会我们用架构师的思维去解决问题,代码扩展性强,于是乎记录下来。首先遇到的是这么一个问题(简化版本),就是有两张表:一张用户表user表,另外一张是订单表order表,其结构如下userorder就是很简单的两张表,其中用户表的custId和订单表的custId相关联,现在要统计订单的信息,其...

2020-02-02 19:42:25 908

原创 SpringBoot项目自定义一个 Starter

在很多大厂中项目中,项目中大部分都是使用自己封装的架构,比如我目前所在的平安(外包),就是对Spring在进行了二次封装,它们把它称之为ark架构。比如我们常常需要用到的一些工具类或者可以共用的类,其它组里也需要用到,那我们就可以在使用统一框架的前提下倒入我们自己的starter,来达到一个自动化配置的效果。SpringBoot介绍 那我们就以目前流行的S...

2020-01-31 11:32:30 1249 2

转载 结构型模式之-----装饰者模式

定义:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类...

2020-01-30 14:38:17 177

原创 行为模式之-----观察者模式

定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有...

2020-01-29 20:07:32 425

转载 行为模式之-----模版模式

定义:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:有一些通用的方法。如何解决:将这...

2020-01-29 15:55:04 135

转载 行为模式之-----策略模式

定义:在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象,策略对象改变 context 对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。何时使用...

2020-01-29 14:43:07 154

原创 Spring中使用kafka

添加依赖Maven中引用依赖<!-- kafka --><dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId></dependency>Gra...

2020-01-29 11:55:30 1528

原创 Cookie与Session

Cookie Cookie是由服务端生成的,发送给客户端(通常是浏览器)的,保存在客户端中,并且是可见的,客户端的一些程序可能会篡改、窥探cookie中的内容。假如用到Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。(...

2020-01-24 21:19:00 188

原创 多线程之 阻塞队列

简介: 大神Doug lea 给我们开发者创建了一个名为BlockQueue的接口,见名知义就是阻塞队列,它是线程安全的,经常在JUC包下源码下可以看到它的身影,究竟为何物我们一起来学习下吧。 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;常用的队列主要有以下两种(当然通过不同的实现方式,还可以延伸出很多不同类型的...

2020-01-21 14:44:58 506

转载 Cglib动态代理

在上一文中介绍了一下jdk动态代理及实现原理,但是其有一个致命缺陷是,只能对接口进行代理。如果要代理的类为一个普通类、没有接口,则Java动态代理则毫无用武之地。CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate支持它来实现PO(Persist...

2020-01-19 23:51:19 163

原创 Jdk动态代理

目前Java的动态代理主要分为jdk自带的动态代理java.lang.reflect.Proxy 和 谷歌的cglib,它们有什么区别呢?原理:java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。差...

2020-01-15 21:46:29 250

原创 Kafka入门

kfaka简单介绍1.Kafka是什么?分布式的流式数据处理平台 可以用它来发布和订阅流式的记录,这一方面与消息队列或者企业消息系统类似 它将流式的数据安全地存储在分布式、有副本备份、容错的集群上 可以用来做流式计算 如果说其它中间件是高速公路,而Kafka则是停车场,也可以将消息直接与数据库交互2. Kafka适合什么样的场景? 它可以用于两大类别的应用:构造实时流数据...

2020-01-14 22:43:47 290

原创 RocketMQ可靠性优先使用场景

本章的重点是可靠性,解决如何让消息队列满足业务逻辑需求,同时稳定可靠的长期运行。顺序消息 顺序消息是指消息的消费顺序和产生顺序相同,在有些业务逻辑下,必须保证顺序。比如订单的生成、付款、发货这三个消息必须按照顺序处理才行。顺序消息分为全局顺序消息和部分顺序消息,全局顺序消息是指某个topic下的所有消息都必须保证吮吸行;部分顺序消息只要保证每一组消息被顺序...

2020-01-13 19:31:48 861

原创 Nameserver + Broker

对于一个消息队列来说,系统由很多机器组成,每个机器角色,ip 地址都不相同,而且这些信息是变动的。这种情况下,如果一个新的生产者或者消费者加入,怎么配置连接信息呢?Nameserver 的存在就是为了解决这些问题,由Nameserver维护这些配置信息、状态信息、其它角色都通过Nameserver协同执行。Nameserver的功能 Nameserver...

2020-01-11 13:52:07 817

原创 RocketMq 重要知识点

OffserStore和信息存储位置 实际运行系统,难免会遇到重新消费某条消息,跳过一段时间内的消息等情况。这些异常情况的处理都和offset有关。本节主要分析存储位置以及如何根据需要调整offset的值。 首先先来明确一下offset的含义,rocketmq中一种类型的消息会放到一个Topic里,为了能够并行,一般一个Topic会有多个message queue...

2020-01-07 18:01:32 718

转载 消灭if else

在我们的项目代码中总能看到一些if else这种代码,如果if else 大量出现在我们代码中就会显得特别累赘,代码可读性也很差,那我们该如何去消灭这些丑陋的代码呢,然我们的代码变得优雅且可读性强。 比如,我们在做权限管理系统的时候,不同的角色有不同的操作操作权限,比如角色a可以干嘛干嘛,角色b可以干嘛干嘛。按照我们以前写代码的惯用思维上来就是无脑if else如:...

2019-12-18 12:28:11 229

原创 用合适的方式发送和接收消息

摘自《rocketmq实战原理与解析》 生产者和消费者是消息队列的两个重要的角色,生产者向消息队列写入数据,消费者从消息队列读取数据。Rocketmq的大部分用户只需要关心生产者和消费者,本文将着重介绍生产者和消费者的特点以及它们的offset和logs 消费者可以分为两种不同的类型,一个是DefaultMQPushConsume,由系统控制读取...

2019-12-05 17:28:48 442

转载 RocketMq mqadmin 的用法详解

mqadmin是rocketmq自带的命令行管理工具,在bin目录下运行执行即可,比如你要使用查询某个topic下的路由信息:>sh mqadmin topicroute -t topicName{ "brokerDatas":[ { "brokerAddrs":{0:"192.168.142.80:10911" }, "brokerName":"bogon"...

2019-12-02 19:45:51 4479

原创 RocketMq整合springBoot的日常使用

现在使用rocketmq基本上都是搭载spring配合使用的,现在就以springBoot作为演示。1.首先先倒入所需依赖包<dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactI...

2019-12-02 14:09:26 1050

原创 pg下载和josn类型的使用

下载客户端:https://www.enterprisedb.com/downloads/postgres-postgresql-downloadsjson和jsonb的区别 postgresql支持两种json数据类型:json和jsonb,而两者唯一的区别在于效率,json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等。而jsonb是解析...

2019-11-13 20:49:52 391

原创 java遇到的问题,求解答

题目一:可见性public class Demo { private static Boolean flag = true; public static void main(String[] args) throws InterruptedException{ new Thread (() -> { System.ou...

2019-10-26 11:19:24 170 1

原创 Conditon用法整理

关键字syncronized与wait()和notify()和notifyAll()可以实现等待通知,类ReentrantLock也可以实现同样的功能,但需要借助于Condition,这个类可以实现多路通知,也就是说在一个Lock对象里可以创建多个Condition实例(对象监视器),线程对象可以注册在指定的Condition中,从而可以选择性的通知线程在线程调度上更加灵活。 ...

2019-10-13 15:17:56 433

原创 多线程的各种锁

在学习多线程的时候,我们经常会听到可重入锁/不可重入锁、公平锁/非公平锁、读写锁现在我们就逐一它们的神秘面纱。Lock包下的层级结构 1.可重入锁/非重入锁:大部分jdk提供的都是可重入锁,如syncronized,reentrantLock 都是可重入,代表单个(也可以说同一个)线程可以多次获得该锁,如果单个线程拿到锁没有释放,你再去拿,拿到则是重入锁 ,拿不到则是非...

2019-10-05 09:27:55 198

原创 JMS的应用

JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。绝大多数MOM提供商都对JMS提供支持。它类似于JDBC(Java Database Connectivity)。JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同...

2019-08-23 20:55:00 1273

原创 RocketMQ介绍和简单使用

RocketMq下载安装下载网址:http://rocketmq.apache.org/dowloading/releases/ 系统要求64bit Linux、Unix或Mac,JDK版本>=1.8解压后其中的目录文件说明什么是消息队列 消息队列 MQ 既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高...

2019-08-09 12:48:49 356

原创 MQ初识--Activemq

目前互联网分布式架构的系统基本上离不开消息中间件,也就是此篇博文要讲的,那我们就一起来认识一下这位朋友吧。讲到MQ不得不提交异步解耦这个概念,就拿电商下订单举例(一般订单都涉及到短信、物流、邮件等各个流程),下面以图片为例子说明。应用介绍应用解耦不用与线程池绑定,不用写短信线程任务、物流线程任务等 即使物流系统挂了,需要几分钟修复,在这几分钟消息物流系统待处理的消息都...

2019-07-31 23:45:42 288

原创 forkjoin线程框架

fork英文含义为叉子也可以理解为拆分,join英文含义为加入也可以理解为汇集,所以forkjoin可以理解为拆分任务然后将结果汇聚在一起,这种思想和大数据中的MapReduce很像(input --> split --> map --> reduce --> output),所以其可以大致分为两步:任务拆分和结果合并。 下面我将以一个demo来演示下for...

2019-07-30 00:12:08 124

原创 Netty入门之------基于netty实现网络通信

从前面几篇博文中我们已经学习了从BIO到NIO再到Reactor线程模型+NIO实现了客户端与服务端的一个通信,但这样写起代码来还是比较繁琐的,而Netty则极大的简化我们这种网络通信的开发,它是基于NIO之上的也同时实现了Reactor线程模型,而且使用JDK自带的NIO需要了解很多复杂的概念,一不小心就bug飞起,既然这样那我们就一起来学习下这个神秘的网络框架吧。Nett...

2019-07-13 14:39:15 1525

原创 自定义缓存组件 代替 Spring@Cache缓存注解

在实现上述功能之前先来点基础的,redis在SpringBoot项目中常规的用法,好对缓存和redis客户端的使用有一定了解。 1.添加依赖 redis客户端依赖(连接redis服务端必备)<!-- 客户端依赖二选一 --><dependency> <groupId>redis.clients</groupId> ...

2019-07-09 21:36:17 720

原创 Springcloud常用组件----Eureka

Eureka是Netflix开源的服务发现组件,本身是基于REST的服务,它包含Server和Client两部分,SpringCloud将它集成在Spring Cloud Netflix中,从而实现微服务的注册与发现。Eureka Server提供微服务的发现的能力,各个微服务启动时会向其注册自己的信息,如ip、端口、微服务名等,Eureka Server会定时存储这些信息,...

2019-07-06 11:29:24 250

原创 基于多Reactor线程模型实现简单的服务器demo

针对上一篇博文,通过selector类确实是可以达到通过一个线程管理多个客户端连接,类似消息监听与多路复用的作用,但是依然是存在性能问题的,为什么这么说呢?比如A客户端发送请求过来服务端接受到了,然后响应请求,但是如果是一些比较耗时的业务操作,那么服务端就一直只能在处理完业务操作后才能处理处理其它客户端的请求,也就是会造成堵车现象,这是性能不足点1。(可以采用线程池+Complet...

2019-06-23 20:36:27 753

原创 网络编程之BIO、NIO

已经很久没更新博客了,惭愧。在这之前先讲一下面试可能会问到的三次握手与四次挥手,也就是Tcp如何建立连接? 假设A城市往B城市发送信件,先A发到B,B收到,在发给A,在A发给B,建立起初步通信。三次挥手是为了证明A,B的收信和发信能力是ok的,这样就证明连接是通常的。 第一次握手:当A发到B时,B收到信后,此时B城市就明白了,A城市的发信能力和B城市...

2019-06-15 14:11:56 596

原创 oracle存储过程/函数 初步

存储过程:是指函数在数据库中提供提供所有用户程序调用的子程序叫做存储过程。存储过程和存储函数:相同点:完成特定功能的程序。不同点:是否用return语句返回值。语法:用creat [or replace] procedure 过程名(参数列表) AS PLSQL子程序体 命令建立存储过程和存储函数备注:其中AS相当于我们的declare用来声明程序的具体内容,PLSQL...

2019-04-14 18:49:49 191

原创 CountDownLanth(计数器) + CyclicBarrier(回环栅栏) + Semaphore(信号量)

CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了 。(运行主线程开启子线程的时候,子线程还没有结束的时候,主线程可以一直等待,直到初始化的现成的计数器count为0,主线程就可以不...

2019-04-03 20:48:25 904

转载 事务及事务的隔离级别

今天在面试过程中问道这个问题,当时没回答上,只是以前记得点,现在留作备忘!什么是事务事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(dura...

2019-03-25 22:06:33 137 1

原创 ThreadLocal的使用

从名称看,ThreadLocal 也就是thread和local的组合,也就是一个thread有一个local的变量副本,ThreadLocal提供了线程的本地副本,也就是说每个线程将会拥有一个自己独立的变量副本。 它与syncronized相反的思想,ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从...

2019-03-18 14:25:52 148

原创 线程池+ Callable +CompletableFuture 的基本使用

线程池的作用 1、减少线程创建与切换的开销在没有使用线程池的时候,来了一个任务,就创建一个线程,我们知道系统创建和销毁工作线程的开销很大,而且频繁的创建线程也就意味着需要进行频繁的线程切换,这都是一笔很大的开销。 2、控制线程的数量使用线程池我们可以有效地控制线程的数量,当系统中存在大量并发线程时,会导致系统性能剧烈下降。 3、循环利用有限的线程线程池中会预先...

2019-03-18 00:27:39 1528

原创 不可变对象设计模式

线程安全的主要目的就是在于控制并发访问中防止共享数据发生变化,除了使用关键字synchronized关键字同步对资源的写操作之外,还可以在线程之间不共享资源状态,甚至是将对象资源设置为不可变。例如Stirng类的每一个方法都没有用syncronized修饰,但是在多线程的访问下是安全的,java8通过Stream修饰的ArrayList并发访问也是安全的,所谓不可变对象就是没有机会去...

2019-03-17 11:10:49 131

kafkatool.dmg

kafka tools 工具,简单好用 mac 版本

2020-01-30

server.properties

Kafka server.properties 配置文件

2020-01-14

02-JMS熟练应用.pdf

activemq JMS PDF文档

2019-08-23

sping学习压缩文件

学习sping代码

2019-02-19

空空如也

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

TA关注的人

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