自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 kafka学习笔记

kafka属于消息引擎系统, 主要用于系统间传输消息, 可以做到系统业务上的解耦, 缓冲系统上下游瞬时突发流量,使其更平滑(削峰填谷)。kafka系统里各种概念消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。分区:Partition。一个有序不变的消息序列。每个主...

2022-05-05 14:46:41 124

原创 计算机编码相关问题

整数在计算机中的编码整数在计算机中是以补码的形式存储的, 补码和原码的区别在负数上。 下面代码上展示了10这个整数在计算机中的二进制是怎么表示的。public static void main(String[] args) { //1010 32位只输出了4为, 其他的28为都为零 System.out.println(Integer.toBinaryStri...

2022-03-07 16:14:03 109

原创 Elasticsearch基本使用

安装Elasticsearch可以在https://www.elastic.co/cn/downloads/elasticsearch这个页面找到elasticsearch对应系统的安装包,elasticsearch用java开发的, 最新的版本内置了对应的jdk, 通过下面的方式能快速启动:cd /安装目录/elasticsearch/bin./elasticsearch #验证是否启动...

2020-12-10 14:12:23 427

原创 Tomcat spring boot 项目启动慢的问题

清理不必要的 Web 应用首先我们要做的是删除掉 webapps 文件夹下不需要的工程,一般是 host-manager、example、doc 等这些默认的工程,可能还有以前添加的但现在用不着的工程,最好把这些全都删除掉。如果你看过 Tomcat 的启动日志,可以发现每次启动 Tomcat,都会重新布署这些工程。清理 JAR 文件我们还可以删除所有不需要的 JAR 文件。JVM 的类加载器...

2020-07-02 10:47:57 1277

原创 Disruptor简单使用

  Disruptor从功能上来说,可以实现队列的功能,也可以把它当成单机版的JMS来看待。从性能上来说,它比ArrayBlockingQueue有更好的性能表现,对于生产者消费者模型的业务,Disruptor是一个更好的选择可以很好的实现业务的分离。简单入门定义消息类,这里的消息在Disruptor里称为Event,也就是我们系统里生产消费的业务对...

2019-03-25 16:02:00 357

原创 Netty Recycler源码解读

Recycler是一个轻量级的对象缓存池,用来实现对象的复用。下面是使用Recycler的一个简单实例:import io.netty.util.Recycler;public class RecycleTest { private static final Recycler<User> RECYCLER = new Recycl...

2018-12-12 11:23:00 311

原创 Netty Unpooled 内存分配

Netty里的内存管理是通过ByteBuf这个类作为桥梁连接着业务代码与jdk底层的内存。所以理解ByteBuf的结构就很有必要了。ByteBufByteBuf的内部结构如下图:这里通过两个指针,readerIndex与writerIndex分别指向已经读到的位置和写入的位置,比JDK提供的ByteBuffer 省了flip操作。类结...

2018-12-10 16:06:00 6976

原创 Java中弱引用、软引用、虚引用、强引用、 Finalizer引用

在Java层面,一共有四种引用:强引用、软引用、弱引用、虚引用,这几种引用的生命周期由强到弱。转换关系大致如下图所示:强引用(Strong Reference)  就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用...

2018-12-07 18:30:00 343

原创 Netty 模拟百万连接

  我们知道单机的端口最多65536,除去系统使用的端口, 留给程序使用的也就6万个端口, 在需要对单机做长连接压力测试的时候,如果要测60W的长连接并发,就得找10台机器,而一般情况下我们并没有这么多的空闲机器去做这种规模的测试,那如何用两台机器模拟百万连接呢?对于TCP的连接,系统用一个4四元组来唯一标识:{server ip, server port...

2018-12-06 10:34:00 3320

原创 FastThreadLocal

JDK提供了ThreadLocal,用于构造线程安全的对象,ThreadLocal通过Thread的ThreadLocalMap内部属性来保证线程安全,而ThreadLocalMap的key是ThreadLocal。通过map这种数据结构来存储线程相关的数据。而Netty里的FastThreadLocal是如何做到比ThreadLocal有更快的速度的呢。...

2018-12-05 13:51:00 180

原创 Netty 编码与数据的写入

Netty 编码业务里的数据最终需要通过socket写回到客户端,我们写的业务方法都是面向对象来进行编码的,而channel底层传输的是字节,Netty通过定义encoder来完成对象到字节的转换。自定义的encode可以通过继承MessageToByteEncoder(encoder也是ChannelHandler),下面是MessageToByt...

2018-12-04 17:01:00 793

原创 Netty 解码器

解码器抽象的解码过程  Netty里的解码通过抽象类ByteToMessageDecoder进行统一规划。ByteToMessageDecoder继承了ChannelInboundHandlerAdapter,解码器也是一个ChannelHandler下面是ByteToMessageDecoder解码的过程ByteToMessageDecode...

2018-12-03 18:36:00 179

原创 ChannelPipeline源码分析

pipeline的初使化pipeline的创建:pipeline在创建channel(无论是客服端的channel还是服务端的channel)的时候被创建。pipeline的入口Netty里目前只有一个pipeline的实现, 也就是DefaultChannelPipeline,构造方法如图:pipeline的构造...

2018-11-29 11:55:00 116

原创 Netty 新连接的接入

本文通过源码分析Netty是如何一步步的将接收客户端的新连接,然后将连跟NioEventLoop绑定,并注册相应的Read事件。检测新连接入口为NioEventLoop的processSelectedKey方法新连接接入的入口进入到NioMessageUnsafe的read方法NioMessageUnsafe的r...

2018-11-28 15:18:00 784

原创 记一次unable to create new native thread错误处理过程

早上运维说线上出错了,发了如下截图:错误截图unable to create new native thread,看到这里,首先想到的是让运维搞一份线上的线程堆栈(可能通过jstack命令搞定的)。发现线上的堆栈竟然有5M多大,打开文件后线程数量居然达到了8000多个。有大量的线程堆栈如下图所示:线程堆栈。看到有大量的线程是以sc...

2018-11-20 16:30:00 23847

原创 Elasticsearch6.4安装

下载地址:https://www.elastic.co/cn/downloads 假设系统安装好了对应的jdk,且jdk的版本要高于8。下面是具体的安装步骤。解压下载的安装包,命令如下:tar -xzvf elasticsearch-6.4.3.tar.gz增加一个新用户和用户组:因为elasticsearch有远程执行脚本的功能所以容易中木...

2018-11-16 17:03:00 457

原创 JVM监控及诊断工具

命令行工具jps  jps类似于linux中的ps命令,用于打印正在运行的java进程相关的信息。主要参数有:1)-l 打印模块名以及包名2)-v 打印传给JVM的参数3)-m打印传给main方法的参数jstat  用于打印JVM进程的性能数据,主要用来查看JVM gc相关的数据。实际中用法如下图:jstat用法其中-gc...

2018-11-08 11:25:00 1250

原创 Spring集成TestNG测试MVC Controller

  在项目中需要写单元测试,如何保证写的单元测试的质量是比较高的。有以下几个原则。编写具有确定性结果的测试用例。代码中使用断言,而不是System.out.print语句输出结果,然后人工验证。对于需要访问数据库的操作或者外部数据,可以使用内存数据库或者EasyMock之类的工具。测试完数据之后,尽可能的恢复现场(测试之前的环境,这样测试用例便可...

2018-11-06 17:14:00 2670

原创 JMH基准测试

  OpenJDK 中的开源项目 JMH(Java Microbenchmark Harness)。JMH 是一个面向 Java 语言或者其他 Java 虚拟机语言的性能基准测试框架。它针对的是纳秒级别、微秒级别、毫秒级别,以及秒级别的性能测试。如何使用根据maven 上的 archetype,生成项目骨架mvn archetype:genera...

2018-10-25 15:22:00 952

原创 数据结构--堆

堆有两个特性:堆是一个完全二叉树堆中所有父节点都大于(最大堆)或者小于(最小堆)子结点。在一般的实现中,我们可以用数组来存储堆中的元素,数组的索引用于实现结点左右孩子的查找。最小堆的实现代码如下:import java.util.ArrayList;import java.util.List;import java.util.Rando...

2018-09-27 13:44:00 153

原创 数据结构--线段树

  线段树用于处理区间数据的更新与查询问题,不考虑往区间中增加与删除数据的,主要用于统计数据方面的需求,在更新与查询的时间复杂度都为logn级别。线段树不属于完全二叉树,但属于平衡二叉树。线段树事例数组为存储的实现代码如下:/** * * 功能描述:线段树 * * @version 2.0.0 * @author z...

2018-09-27 13:42:00 134

原创 java SSL

加密方式加密方式优缺点对称加密加密效率高,密钥在网络中传输不安全非对称加密加密效率低,安全性高,公钥可以在网络中传输数字签名防止抵赖,能够检查签名之后内容是否有更改。通过单向散列算法对内容进行求值,相当于对内容进行提取了指纹。CA证书颁发机构(相当于所有人都信任的一个中间机构),CA机构也有自已的公钥与私钥。cl...

2018-09-25 17:35:00 2873

原创 java字节码

  我们都知道Java字节码是JVM所使用的指令集。java字节码可以分为如下几类:操作数栈  Java 方法的栈桢分为操作数栈和局部变量区。通常来说,程序需要将变量从局部变量区加载至操作数栈中,进行一番运算之后再存储回局部变量区中。操作数栈的指令有如下:dup 复制栈顶元素(常用于复制 new 指令所生成的未经初始化的引用。)如下代码生所的...

2018-09-03 15:10:00 254

原创 java线程池

线程池能够帮助我们提高系统资源利用效率,并简化线程管理。通过并发包下的Executors(不是Executor)可以方便的创建如下几类线程池。分别为:newCachedThreadPool(),用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过 60 秒,则被终...

2018-08-30 13:25:00 89

原创 java线程

  从操作系统的角度,可以简单认为,线程是系统调度的最小单元,一个进程可以包含多个线程,作为任务的真正运作者,有自己的栈(Stack)、寄存器(Register)、本地存储(Thread Local)等,但是会和进程内其他线程共享文件描述符、虚拟地址空间等。  具体实现中,线程还分为内核线程、用户线程,Java 的线程实现其实是与虚拟机相关的。对于我们最...

2018-08-28 18:37:00 93

原创 CAP学习笔记

  定义:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。CAP关注的是分布式数据读写。一致性(Consistence):对某个指定的客户端来说,读操作保证能够返回...

2018-08-28 14:51:00 164

原创 AbstractQueuedSynchronizer源码解读

   AbstractQueuedSynchronizer(AQS),是 Java 并发包中,实现各种同步结构和部分其他组成单元(如线程池中的 Worker)的基础。AQS 内部数据和方法,可以简单拆分为:一个 volatile 的整数成员表征状态(state属性),同时提供了 setState 和 getState 方法。1: ReentrantL...

2018-08-24 16:23:00 143

原创 java应用CAS

  CAS(Compare and Swap),即比较并替换。jdk里的大量源码通过CAS来提供线程安全操作,比如AtomicInteger类。下面我们来分析一下AtomicInteger是如何在多线程的环境下保证线程安全的。在AtomicInteger里定义了用于存值的value变量,与用于操作value的Unsafe以及value变量的偏移量。源码如下...

2018-08-24 14:36:00 322

原创 JVM学习笔记

本文所有内容来于:http://stuq.com/a/100wwjava代码是如何执行的java代码是运行于java虚拟机上的,通过java虚拟机实现了跨平台,并且java虚拟机帮助程序员处理了容易出错的事务,比如内存管理。java虚拟机会解释执行java字节码,并且对于热点代码会采用即时编译(Just-In-Time compilation...

2018-08-23 16:07:00 134

原创 fastjson详解

  fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。简单使用通过maven引入相应的json包 <dependencies> <dependency> <groupId>com.alibaba<...

2018-08-18 17:37:00 1462

原创 ThreadLocal和InheritableThreadLocal深入分析

  通过ThreadLocal和InheritableThreadLocal,我们能够很方便的设计出线程安全的类。JDK底层是如何做到的呢?ThreadLocal和InheritableThreadLocal有什么区别呢与联系呢?为什么有了ThreadLocal类还需要InheritableThreadLocal类,他们与Thread类是什么关系?带着这些...

2018-08-14 17:09:00 361

原创 java 日志处理

java各日志组件介绍common-logging(同时也称JCL)  common-logging是 apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-loggi...

2018-08-13 21:00:00 4405

原创 Spring MVC ControllerAdvice深入解析

  Spring 在3.2版本后面增加了一个ControllerAdvice注解。网上的资料说的都是ControllerAdvice配合ExceptionHandler注解可以统一处理异常。而Spring MVC是如何做到的资料却比较少,下面会先给出使用的例子和踩过的一个坑。然后进行相应的源码分析,之后再介始ControllerAdvice另外的两种使用方...

2018-08-10 11:51:00 1138

原创 从零开始学架构读书笔记

  软件架构的出现是为了解决系统规模增加后出现了系统耦合严重,开发效率低,逻辑复杂,扩展困难等问题。所以架构设计是为了解决软件复杂度而存在的,所以架构设计的目地是识别出需求的复杂点然后针对性的解决。系统设计时需要考虑:性能,系统的可扩展性,安全性,高可用,成本。  架构师的工作并不神秘,成熟的架构师需要对已经存在的技术非常熟悉,对已经经过验证的架构模式烂...

2018-08-02 18:34:00 499

原创 Redis设计与实现读书笔记

数据结构部分字符串(SDS)数据结构为如下:struct sdshdr{//记录bug中已经使用了的长度 int len;//记录buf中没有使用的长度 int free;//字节数组,用于保存字符串 char buf[];}优点:可以以常数复杂度获取字符串的长度,因为记录了字符串的长度。 通过free空间可以减少字符串修改时带来的内存重新分配次数。...

2018-07-27 14:20:00 1087

原创 深入分析Spring MVC中RequestBody与ResponseBody

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换。在Spring MVC内部是如何做到的呢?先记住下面这张图,然后对里面的每个对象进行分析:HttpInputMessage HttpInputMessage是对一次Http请求报文的抽象。接口定义了getBody方法用于得到http请...

2018-07-25 16:00:00 1138

原创 深入分析Spring Formatter

  在Web项目中,通常需要将数据转换为具有某种格式的字符串进行展示,因此Spring3引入了格式化转换器(Formatter SPI) 和格式化服务API(FormattingConversionService)从而支持这种需求。现在来看看格式转换器相关的接口定义:Printer接口:格式化显示接口,将T类型的对象根据Locale信息以某种格式进行打印显示(即返回字符串形式),源码如下图所示...

2018-07-24 20:36:00 1203

原创 深入分析Spring Type Conversion数据转换

  Spring 3 推出了全新的数据类型之间的转换以替换PropertyEditor转换模式,但网上并没有很好的源码解读。Spring MVC是如何用这套转换体系将页面中的数据转成相应的业务对象的呢?首先让我们看看在不使用Spring 容器的情况下,如何使用Spring的类型转换功能。简单使用首先我们定义一个类,Point,表示一个点,有横作标与纵...

2018-07-24 17:20:00 1835

原创 Netty NioEventLoop源码解读

  NioEventLoop中维护了一个线程,线程启动时会调用NioEventLoop的run方法,执行I/O任务和非I/O任务:I/O任务:即selectionKey中ready的事件,如accept、connect、read、write等,由processSelectedKeys方法触发。非IO任务:添加到taskQueue中的任务,如register...

2018-07-24 14:32:00 181

原创 Netty ChannelHandler与ChannelPipeline源码解读

ChannelHandler  ChannelHandler基本上是我们第一次接触Netty就会碰到的对象,我们自定义的各种ChannelHandler主要用于处理我们系统的各种业务逻辑,比如发生了active事件后的处理逻辑,发生了读事件的处理逻辑,下面先来看一下ChannelHandler的类继承图:image.png  Chann...

2018-07-24 09:30:00 287

angular 4视频教程 高清版

angular 4视频教程 高清版,包括视频与课堂代码与ppt。

2017-11-07

空空如也

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

TA关注的人

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