自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(150)
  • 收藏
  • 关注

原创 简单玩转23种Java设计模式

什么是设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码...

2019-01-02 15:18:46 6793

原创 手把手教你定制一个夸夸群机器人

手把手教你定制一个夸夸群机器人2019年3月,三八妇女节送女友什么礼物好?最近有女网友在网上吐槽,男友把她拉进百人群,群友整整夸了她三分钟。“他说是某宝上卖的夸夸群,这种沙雕男朋友还留着么?”夸人还能挣钱?你在某宝、某鱼等平台输入搜索"夸夸群",会发现不少商品都有成交记录。5分钟50元,还有2000+的付款记录,还不错吧。在微信上看到一篇文章《“夸夸群”5分钟20块?!手把手教你定制一款...

2019-03-23 15:46:24 2405 4

原创 小白读Dubbo源码01 - 从零开始

所有源码基于dubbo 2.7.1版本,请自行从github上下载源码。1. 源码demo运行环境准备从demo跑起,从dubbo的运行过程来解读源码。目前大家熟悉可能还是xml配置的形式,所以选择xml版的demo。通常实际项目中都是以zookeeper作为dubbo的注册中心的,因此修改demo的xml中关于注册中心的配置。dubbo-provider.xml和dubbo-...

2019-03-20 19:03:26 771

原创 Ant Design, 报错TypeError [ERR_INVALID_CALLBACK]: Callback must be a function

使用Ant-Tool构建Ant Design,执行命令如下dora -p 8001 --plugins “webpack,hmr,proxy,livereload”报错Caught exception: TypeError [ERR_INVALID_CALLBACK]: Callback must be a function at maybeCallback (fs.j...

2019-03-16 17:24:08 1886

转载 npm install 、npm install --save 和 npm install --save-dev的区别

转载自:https://blog.csdn.net/github_38851471/article/details/79495526相同点三者都会本地安装包到项目的node_modules目录中区别区别在于对项目package.json的修改,npm install不会修改package.json,而后两者会将依赖添加进package.json,后两者的区别请看下文循序渐进。指...

2019-03-16 10:07:42 48963 2

转载 log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析

转自:https://blog.csdn.net/kxcfzyk/article/details/38613861注:下文中的“桥接”、“转调”、“绑定”等词基本都是同一个概念。log4j-over-slf4j和slf4j-log4j12是跟java日志系统相关的两个jar包,当它们同时出现在classpath下时,就可能会引起堆栈溢出异常。异常信息大致如下(摘自slf4j官网文档Dete...

2019-03-10 20:51:41 2132

原创 Java SPI解析

什么是SPI?SPI 全称为 (Service Provider Interface) 服务提供接口,是JDK内置的一种服务提供发现机制。SPI是一种动态替换发现的机制, 比如有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。Java SPI 应用实例当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接...

2019-03-09 22:36:19 331

转载 JDK8函数式接口Function、Consumer、Predicate、Supplier

转自:https://blog.csdn.net/z834410038/article/details/77370785备注1:观察发现,函数式接口下共有 1、三种方法 1.1 唯一的抽象方法 1.2 使用default定义普通方法(默认方法),通过对象调用。 实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写 。当然如果接口中的默认方法不能满足某个实...

2019-02-17 21:48:21 6140 1

转载 JVM字节码指令

转载自:https://www.cnblogs.com/tenghoo/p/jvm_opcodejvm.htmlJava虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。基本数据类型1、栈帧(Stack Frame)的局部变量表中的最小单位为slot(变量槽)。除了l...

2019-02-17 14:29:56 767

转载 JVM常用参数

堆配置-Xms //初始堆大小-Xmx //最大堆大小-Xmn2g //设置年轻代大小为2G。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8。-XX:NewSize=n //设置年轻代初始大小初始值大小-XX:MaxNewSize=n //设置年轻代的最大值大小-XX:NewRati...

2019-02-14 16:00:41 546 1

转载 dubbo 服务消费方调用过程

转自:https://blog.csdn.net/meilong_whpu/article/details/72178447 消费端调用1、在业务层代码中调用远程接口的方法时,实际上是调用的本地创建的代理对象。即在《4.4.3 创建服务类的本地代理》中创建的代理对象。2、在该代理对象中,调用了InvokerInvocationHander.invoke方法。远程调用以Invcati...

2019-02-08 17:44:13 2164

转载 dubbo泛化实现

转自:https://www.cnblogs.com/jmbkeyes/p/7537795.html实现泛化调用泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。通过 Spring 实现泛化调用在 Sprin...

2019-02-03 21:55:56 792

转载 Java SPI机制简介,及dubbo SPI

转自:https://www.jianshu.com/p/46aa69643c97SPI 简介SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描...

2019-02-03 18:10:07 2872 1

转载 ZooKeeper数据模型

转自:https://blog.csdn.net/tomato__/article/details/78549368 Zookeeper数据模型Zookeeper的结构类似标准的文件系统,但这个文件系统中没有文件和目录,而是统一使用节点(node)的概念,称为ZNode。ZNode作为保存数据的容器(限制在1mb以内),也构成了一个层次化的命名空间。ZNode的节点路径和Unix文件路径非...

2019-01-29 14:27:18 227

转载 使用zookeeper封装组件curator的锁,发现zookeeper大量临时节点没有被删除

转自:https://www.cnblogs.com/xiaodu1993/articles/xiaodu1993.html使用zookeeper封装组件curator的锁,发现zookeeper大量临时节点没有被删除现象:zookeeper集群大量临时节点没有释放掉,导致集群响应很慢分析过程:通过工具排查,发现大量创建lock对象的节点没有释放,奇怪的是release的时候应该删除...

2019-01-29 13:56:08 5328

转载 Paxos算法原理与推导

转自:https://www.cnblogs.com/linbingdong/p/6253479.htmlPaxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。网上有很多讲解Paxos算法的文章,但是质量参差不齐。看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文《Paxos Made Simple》,其次是中...

2019-01-28 20:59:13 403

转载 ZooKeeper监听机制

转自:http://www.cnblogs.com/viviman/archive/2013/03/11/2954118.html前言Zookeeper的监听机制很多人都踩过坑,感觉实现了watcher接口,后面节点的变化都会一一推送过来,然而并非如此。Watch机制官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给...

2019-01-28 12:54:50 5193

转载 Jedis常见异常汇总

转自:https://yq.aliyun.com/articles/236384?spm=a2c4e.11155435.0.0.e21e2612uQAVoW#cc1Jedis虽然使用起来比较简单,但是如果不能根据使用场景设置合理的参数(例如连接池参数),不合理的使用一些功能(例如Lua和事务)也会产生很多问题,本文对这些问题逐个说明:详细目录:一、redis.clients.jedis...

2019-01-28 12:17:28 1075

转载 Netty4实战 - TCP粘包&拆包解决方案

转自:https://www.jianshu.com/p/d89002b57339Netty是目前业界最流行的NIO框架之一,它的健壮性、高性能、可定制和可扩展性在同类框架中都是首屈一指。它已经得到了成百上千的商业项目的验证,例如Hadoop的RPC框架Avro就使用了Netty作为底层通信框架,其他的业界主流RPC框架,例如:Dubbo、Google 开源的gRPC、新浪微博开源的Motan...

2019-01-23 14:46:15 307

转载 Netty4 实现心跳机制与断线重连

转自:https://segmentfault.com/a/1190000006931568基础何为心跳顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.为什么需要心跳因为网络的不可靠性, 有可能在 TCP 保持长连接的过程中, 由于某些突发情况, 例如网线被拔出, 突然掉电等...

2019-01-23 14:38:47 3725 1

转载 ByteArrayOutputStream或ByteArrayInputStream不需要关闭流原因分析

转自:https://blog.csdn.net/u012668925/article/details/53941471 在解压图片的时候发现ByteArrayOutputStream不需要关闭,为啥呢? ByteArrayOutputStream或ByteArrayInputStream是内存读写流,不同于指向硬盘的流,它内部是使用字节数组读内存的,这个字节数组是它的成员变量,当这个数组不...

2019-01-21 15:58:46 11650

转载 高效Java技巧重写equals方法时应当重写hashCode方法

转自:http://tantanit.com/java-always-override-hashcode-when-override-equals/hashCode需满足的条件当equals方法中涉及的参数没有改变时,hashCode应保持不变 如果根据equals方法,两个对象是相等的,那么这两个对象的hashCode应该一样 两个对象如果不相等,hashCode不强制要求不一样,但...

2019-01-19 12:06:52 3424

原创 Netty io.netty.util.IllegalReferenceCountException: refCnt: 0 问题解决

运行时报错 io.netty.util.IllegalReferenceCountException: refCnt: 0 at io.netty.buffer.AbstractByteBuf.ensureAccessible(AbstractByteBuf.java:1450) at io.netty.buffer.AbstractByteBuf.checkReadableBytes0...

2019-01-17 22:59:24 7801

原创 如何用Netty实现一个简单HTTP服务器

本文代码基于netty 4.1版本。既然你搜到这篇文章了,说明对netty有所了解了,不废话直接上例子,基本上根据netty官网DEMO修改而成。HttpServerpublic class HttpServer { private int port; public HttpServer(int port) { this.port = port; ...

2019-01-15 23:28:09 2887

转载 Java NIO开发需要注意的坑

转自:https://www.cnblogs.com/pingh/p/3224990.html陷阱1:处理事件忘记移除key在select返回值大于0的情况下,循环处理。Selector.selectedKeys集合,每处理一个必须从Set中移除。Iterator<SelectionKey> it = set.iterator(); While(it.hasNe...

2019-01-15 17:10:56 1534

转载 maven快照版本和发布版本

转自:https://www.cnblogs.com/EasonJim/p/6852840.html1. 场景一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。举个例子,设想一个团队开发应用的前端,项目为app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是data-service(data-service.jar:1.0)...

2019-01-12 14:36:47 3997

转载 Linux下I/O多路复用系统调用(select, poll, epoll)介绍

转自:https://zhuanlan.zhihu.com/p/228341261. 概念引入I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。Linux中基于socket的通信本质也是一种I/O,使用socket()函数创建的套接字默认...

2019-01-11 18:16:25 2598

转载 读Socket流时产生阻塞的解决方案(粘包拆包问题)

转自:https://www.cnblogs.com/qhyuan1992/p/5385289.html其实最终讨论的是TCP通信过程中的粘包拆包(半包)问题。在用socket写一个服务器时遇到了问题于是将主要的问题抽了出来,代码如下,由于代码很简单于是也没有注释。public class Main { private static ServerSocket serverSo...

2019-01-08 21:38:42 1741

转载 深入分析 Java I/O 的工作机制

转自:https://www.ibm.com/developerworks/cn/java/j-lo-javaio/Java 的 I/O 类库的基本架构I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶颈。正因如此,所以 Java 在 I...

2019-01-02 14:22:15 191

转载 排序算法时间复杂度、空间复杂度、稳定性比较

排序大的分类可以分为两种:内排序和外排序。放在内存的称为内排序,需要使用外存的称为外排序。

2018-12-31 14:09:13 65042 9

原创 B树、B+树、B*树

简介      B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。先介绍下二叉搜索树二叉搜索树所有非叶子结点至多拥有两个儿子(Left和Right); 所...

2018-12-28 13:18:25 585

转载 Java线程池

线程池的作用减少资源的消耗 通过重复利用已创建的线程来减少创建线程和销毁线程的开销。 提高响应速度  每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。 提高线程的可管理性  线程是一种稀缺资源,若不加以限制,不仅会占用大量资源,而且会影响系统的稳定性。  因此,线程池可以对线程的创建与停止、线程数量等等因素加以控制,使得线程在一种可控的范围内运行,不...

2018-12-27 15:26:20 199

转载 Fork/Join框架解析

1.概述java.util.concurrent.ForkJoinPool由Java大师Doug Lea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。Fork/Join框架是Jav...

2018-12-24 16:14:40 528

转载 ConcurrentHashMap JDK1.7 和 JDK1.8 的区别

转自:https://www.jianshu.com/p/933289f27270ConCurrentHashMap 1.8 相比 1.7的话,主要改变为: 去除 Segment + HashEntry + Unsafe 的实现, 改为 Synchronized + CAS + Node + Unsafe 的实现 其实 Node 和 HashEntry 的内容一样,但是HashEnt...

2018-12-20 17:00:05 2260

转载 StampedLock浅析

所谓的乐观读模式,也就是若读的操作很多,写的操作很少的情况下,可以乐观地认为,写入与读取同时发生几率很少,因此不悲观地使用完全的读取锁定,程序可以查看读取资料之后,判断是否发生写入执行的变更,再采取后续的措施(重新读取变更信息,或者抛出异常) ,这一个小小改进,可大幅度提高程序的吞吐量!StampedLock 可以说是Lock的一个很好的补充,吞吐量以及性能上的提升足以打动很多人了,但并不是说要替代之前Lock的东西,毕竟他还是有些应用场景的,起码API比StampedLock容易入手。

2018-12-19 14:31:13 2879

转载 Java读写锁ReentrantReadWriteLock原理详解

ReentrantLock属于排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁ReentrantReadWriterLock在同一时刻可以允许多个线程访问,但是在写线程访问时,所有的读和其他写线程都被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。下面我们来看看读写锁ReentrantReadWriter特性公平性选择:支持非公平(默认)和公平的锁获取模式,非公平的吞吐量优于公平;重入性。

2018-12-18 16:15:20 3118

原创 Java中instanceof和isInstance的区别

1. instanceof 是一个操作符使用方法:A a = new A();if (a instanceof A) {}表示对象a是否是A的实例对象一个对象是自身类的一个实例对象 一个对象是自身类、父类和接口的一个实例对象 所有对象都是Object类的实例对象 凡是null有关的都是false,null instanceof(class)2. isInstance...

2018-12-16 15:11:09 1540

转载 JAVA多线程之中断机制(如何处理中断?)

转载自:https://www.cnblogs.com/hapjin/p/5450779.html介绍这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理。感觉对InterruptedException异常进行处理是一件谨慎且有技巧的活儿。由于使用stop()方法停止线程非常的暴力,人家线程运行的好好的,突然就把人家杀死...

2018-12-15 15:51:53 5673 2

转载 Java并发工具类Phaser

Phaser由java7中推出,是Java SE 7中新增的一个使用同步工具,在功能上面它与CyclicBarrier、CountDownLatch有些重叠,但是它提供了更加灵活、强大的用法。CyclicBarrier,允许一组线程互相等待,直到到达某个公共屏障点。它提供的await()可以实现让所有参与者在临界点到来之前一直处于等待状态。CountDownLatch,在完成一组正在其他线...

2018-12-14 16:39:58 248

转载 从JVM源码看synchronized

索引synchronized的使用 修饰实例方法 修饰静态方法 修饰代码块 总结 Synchronzied的底层原理 对象头和内置锁(ObjectMonitor) synchronzied的底层原理 synchronized的优化 偏向锁 轻量级锁 轻量级锁膨胀 重量级锁 自旋 编译期间锁优化 总结 参考资料 synchron...

2018-12-12 12:04:32 3106 3

空空如也

空空如也

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

TA关注的人

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