自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Project Reactor源码分析系列 - SpscLinkedArrayQueue原理分析

之前做reactive streaming的调研,在回压的场景中,都会用到Queue。周末的时候又有人问到Queue的实现原理,但是印象比较模糊,现在来具体的分析一下,Project Reactor对传统Queue的优化。当然RxJava也是用到的同样的Queue的实现。类说明与注释final class SpscLinkedArrayQueue<T> extends Abst...

2019-03-04 10:29:31 1304

原创 java-窗口程序-circle

import com.sun.awt.AWTUtilities;import javax.swing.*;import javax.swing.border.Border;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class Circle ...

2019-10-06 09:14:38 339

原创 手把手教你学Go(二)——Hello world

环境安装brew install go然后查看安装情况➜ ~ go envGOARCH="amd64"GOBIN="/Users/xingqi/go/bin"GOCACHE="/Users/xingqi/Library/Caches/go-build"GOEXE=""GOFLAGS=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="da...

2019-09-14 20:03:03 239

原创 手把手教你学Go(一)——语言特点

语言特点像C语言一样足够简单,互联网时代下支持并行和分布式的支持。自动垃圾回收Go语言作为一门新生的开发语言,当然不能忽略内存管理这个问题。又因为Go语言没有C++ 这么“强大”的指针计算功能,因此可以很自然地包含垃圾回收功能。因为垃圾回收功能的支持,开发者无需担心所指向的对象失效的问题,因此Go语言中不需要delete关键字,也不需要free() 方法来明确释放内存。使用Go语言实现,我...

2019-09-14 19:37:47 397

原创 kubernetes学习实践(五)-kubernetes的本质

经过前面四章的学习,我们了解了容器,一个正在运行的Linux容器,可以分为两个视角来看:容器的静态视图:一组联合挂载在/var/lib/docker/aufs/mnt/上的rootfs,即容器镜像。容器的动态视图:一个由Namespace+Cgroups,构成的隔离环境,即容器运行时。作为一名开发者,并不关心运行时的差异,因为在整个“开发-测试-发布”的流程中,真正承载着容器信息进行传递...

2019-09-01 18:13:43 150

原创 kubernetes学习实践(四)-容器使用

通过docker部署python的web程序创建一个python的web应用from flask import Flaskimport socketimport osapp = Flask(__name__)@app.route('/')def hello(): html = "<h3>hello {name}<h3/>" \ ...

2019-09-01 17:16:40 150

原创 kubernetes学习实践(三)-容器镜像

容器内的文件系统容器的进程理应是一份完整独立的文件系统。这样就可以在自己的文件系统下进行操作,而不会受宿主机及其他容器的影响。Mount Namespace我们很容易就想到了mount namespace。int pid = clone(main_function, stack_size, CLONE_NEWNS | SIGCHLD, NULL);创建一个新的进程,声明启动mount ...

2019-08-31 20:38:37 126

原创 kubernetes学习实践(二)-容器技术基础(隔离与限制)

Docker安装Mac安装docker教程https://www.runoob.com/docker/macos-docker-install.html第一个容器➜ ~ docker run -it busybox /bin/sh/ #-it 告诉docker项目在启动容器后,分配给我们一个文本输入/输出的环境,也就是tty,跟 容器的标准输入关联,这样我们就可以跟容器进行交互啦...

2019-08-31 19:58:57 343

原创 kubernetes学习实践(一)-容器技术简介

PAAS的作用应用托管通过不同的打包方式,提供devops能力,如:cf push app在vm上通过沙盒(Cgroups Namespace)技术进行隔离缺点各个类型都是不同的打包方式打包的方式复杂通过可执行文件+启动脚本运行与环境变量,配置参数相关,只能通过试错方式调试,没有章法可循Docker一致(沙盒技术)Cgroups实现限制Namespace实现隔离...

2019-08-27 21:44:32 122

转载 Wireshark抓包分析TCP协议

之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的,所以作者觉得有必要针对tcp协议做一个介绍,希望各位读者能够静下心来认真阅读,也可以自己去看看TCP/IP协议详解这本书,一定要让自己成为那20%的人。TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,对TCP协议的文...

2019-02-26 10:57:54 506

原创 TIME_WAIT过多问题

网络连接状态查看网络连接状态netstat -nat | grep -iw “8080”或者计数netstat -nat | grep -iw “8080” | wc -l或者分组统计netstat -ant | grep 8080 | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}’网络连接状态说明为什么有ti...

2019-02-26 10:47:38 1005

转载 Apache HttpAsyncClient 源码分析

Apache HttpAsyncClient 4.1.2转载來源:简书原作者:ntjsz链接:https://www.jianshu.com/p/6bcfd6b2bd5c&amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.apache.httpcomponents&amp;amp;lt;/groupId&amp;amp;gt; &amp;am

2019-02-25 12:21:40 2815

原创 Tomcat NIO性能测试的参数调整: processorCache

tomcat在处理每个连接时,Acceptor角色负责将socket上下文封装为一个任务SocketProcessor然后提交给线程池处理。在BIO和APR模式下,每次有新请求时,会创建一个新的SocketProcessor实例(在之前的tomcat对keep-alive的实现逻辑里也介绍过可以简单的通过SocketProcessor与SocketWrapper实例数对比socket的复用情况);...

2019-02-21 15:31:58 2192

原创 术语,概念理解——并发与并行,异步与同步,非阻塞与阻塞

并发与并行并发和并行是相关的概念,但存在细微差别。并发意味着两个或多个任务正在取得进展,即使它们可能没有同时执行。例如通过时间切片来实现,其中任务的各部分被顺序执行并且与其他任务的部分混合。另一方面,当执行可以真正同时发生时,并行性就出现了。异步与同步如果调用方在方法返回值或抛出异常之前无法继续进行,则方法调用被视为同步。另一方面,异步调用允许调用者在有限数量的步骤之后前进,并且可以通过一些...

2019-01-23 12:03:09 166

转载 Google Guava官方教程(中文版)

原文链接 译文链接引言Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/...

2019-01-15 14:22:06 661

原创 Netty源码分析与Dubbo实战(三)——Java编程模型

传统的BIO编程ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作、连接成功之后,双方通过输入和输出流进行同步阻塞通信。伪异步BIO编程为了解决传统的BIO编程面临的一个I/O一个线程的问题,伪异步用线程池来处理多个客户端的请求接入。BIO编程&amp;amp;伪异步BIO编程代码由于这两种编程方式都比较简单,所以就代码就放一起啦。public class...

2018-12-23 14:32:36 232

原创 Netty源码分析与Dubbo实战(二)——I/O多路复用技术

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到用一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比较,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节约...

2018-12-09 17:13:15 676

原创 Netty源码分析与Dubbo实战(一)——网络编程模型介绍

Linux网络编程模型介绍Linux内核将所有外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。而对一个socket的读写也会有相应的描述符。描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。什么是同步?什么是异步?同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地...

2018-12-09 16:18:45 1929

原创 Java并发编程(三)——原子操作

概念不可被中断的一个或一系列操作术语定义 术语名称 英文 解释 缓存行 cache line 缓存的最小操作单位 比较并交换 Compare And Swap CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有变化,才交换成新值,发生了变化则不交换 CPU流水线 CPU pipeline CPU流水线的工作方式就

2017-08-13 18:31:29 351

原创 Java并发编程(二)——Java并发底层实现原理

Java代码会被编译后变成Java字节码,字节码会被类加载器加载到JVM中,JVM执行字节码,最终转化成汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。volatile在多线程并发编程中,synchronized和volatile都很重要,volatile是轻量级的synchronized,它在多处理器的开发中,保证了共享变量的可见性。*可见性指一个线程修改这个共

2017-08-13 17:31:36 317

原创 Java并发编程(一)——挑战

多线程一定会让程序运行更快吗? 创建线程的问题,上下文切换的问题,死锁的问题,硬件和软件资源的问题上下文切换即使单核的CPU也是支持多线程执行代码的,CPU给每个线程分配时间片来实现这个机制。 时间片是CPU分配给各个线程的时间,非常短,所以CPU通过不停的切换线程执行,时间片一般是几十毫秒。 CPU通过时间片分配算法来执行任务使用Lmbench3可以测量上下文切换的时长使用vmstat可

2017-08-13 15:14:58 402

原创 深入理解JVM(十一)——Java内存模型与线程

计算机运算的速度,与它的存储和通讯子系统相差太大,大量的时间花费在磁盘IO,网络通讯和数据库上。衡量一个服务性能的高低好坏,每秒事务处理数TPS是最重要的指标。对于计算量相同的任务,程序线程并发协调的越有条不紊,效率越高;反之,线程之间频繁阻塞或是死锁,将大大降低并发能力。硬件的效率与一致性绝大多数的运算任务不能只靠处理器计算就能完成的,至少要与内存交互,如读取运行数据,存储运算结果等,由于计算机的

2017-08-12 17:49:50 311

原创 深入理解JVM(十)——晚期(运行期)优化

对效率的追求是程序员天生的坚定信仰当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些认定为热点代码(Hot Spot Code),为了提供热点代码的执行效率,运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器)解释器与编译器许多主流的商用虚拟机都同时包含解释器和编译器,两者各有

2017-08-12 13:03:25 441

原创 深入理解JVM(九)——早期(编译期)优化

从Sun Javac的代码来看,编译过程大致分为3个过程,分别是:解析与填充符号表过程插入式注解处理器的注解处理过程分析与字节码生成过程解析与填充符号表过程词法,语法分析词法分析是将源代码的字符流转变成标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字,变量名,字面量,运算符都可以成为标记,如int a=b+2这段代码包含6个标记int,a,=,b

2017-07-29 17:02:58 311 1

原创 学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码

学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码

2017-07-29 13:02:25 440

原创 深入理解JVM(八)——字节码执行引擎

不用虚拟机,执行引擎在执行Java代码时,会有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择。运行时栈帧结构栈帧用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面 从入栈到出栈的过程。一个线程中的方法调用链可能很长,很多方法都同时处于执

2017-07-29 12:31:17 393

原创 深入理解JVM(七)——虚拟机类加载机制

虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析,初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java的类加载机制。类的加载,连接,初始化是在程序运行时完成的。生命周期加载—->连接(验证->准备->解析)—->初始化—->使用—->卸载加载,验证,准备,初始化和卸载这5个步骤是确定的,类加载过程必须按照这个顺序。而解析阶段则不一定,某些情况下

2017-07-22 16:04:44 264

原创 深入理解JVM(六)——类文件结构——code

CodeJava程序中方法体中的代码经过Javac编译器处理之后,最终变成字节码指令存储在Code属性内。Code属性出现在方法表的属性集合之中,但不是所有的方法表都必须有,譬如接口或者抽象类。Code是Class文件中最重要的一个属性,如果把一个Java程序中的信息分为代码(Code,方法体里面的Java代码)和元数据(MetaData,包括类,字段,方法定义以及其它信息)两部分 类型 名

2017-07-22 13:09:36 978

原创 深入理解JVM(六)——类文件结构

Java诞生之初就有的口号,Write Once,Run AnywhereJava规范分为Java语言规范和Java虚拟机规范,Java实现平台无关性的基础是虚拟机和字节码存储格式,Java虚拟机不与包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式关联时至今日,已经有很多语言运行在Java虚拟机之上,包括Groovy,JRuby,Jython,Scala等,只要他们通过编

2017-07-02 17:55:38 274

原创 深入理解JVM(五)——JVM调优 Eclipse调优

在开发,测试环境,我们可以通过JConsole或者VisualVM去监控Java程序的运行时,但是生产环境是不会给你安装这些应用的。JDK1.6之后,JMX管理默认都是开启的,所以你也可以通过JMX管理达到监控和调优的目的。这也是我下一阶段的工作一部分。大体的需求包括:显示虚拟机进程以及进程的配置,环境信息(jps,jinfo)监视应用程序的CPU,GC,堆,方法区以及线程信息(jstat,js

2017-07-02 14:34:39 604

原创 深入理解JVM(四)——各个版本提供的垃圾收集器

上一篇将的回收算法是内存回收的方法论,本篇讲垃圾收集器的具体实现,Java虚拟机规范并没有对齐做出规定和限制,所以不同厂商,不同版本的虚拟机,垃圾收集器有很大的区别。 收集器名称 区域 说明 Serial 新生代 单线程,GC时必须停止其它线程直到收集结束;JVM运行在client模式下新生代的默认收集器,简单有效;采用复制算法 ParNew 新生代 Serial收

2017-07-01 18:53:39 2424

原创 深入理解JVM(三)——垃圾收集器

需要了解GC吗?Q:需要了解GC和内存分配吗? A:当需要排查各种内存溢出,内存泄露问题时;当垃圾回收成为系统高并发的瓶颈时哪些内存需要回收?程序计数器,虚拟机栈,本地方法栈随着线程生而生,线程灭而灭,栈帧随着方法的进入和退出而进栈和出栈。基本上类结构确定下来就已知了。 Java堆和方法区则不同,只有运行时才知道要创建哪些对象,这部分内存的分配和回收是动态的。对象已死吗?引用计数算法给对象中添

2017-07-01 14:19:07 278

原创 深入理解JVM(一)——对象的创建

对象的创建对象的创建,在语言层面上,通常只是new这个关键字而已。(本章所讨论的对象限于普通Java对象,不包括数组和 Class对象)虚拟机遇到new指令时:检查这个指令的参数是否能在常量池定位到一个类的符号引用。检查这个符号引用代表的类是否已被加载,解析,初始化过。如果没有必须执行相应的类加载过程类加载检查后,虚拟机会为新生对象分配内存。对象所需的内存在类加载时可完全确定,为对象分配空间

2017-07-01 12:59:15 364

原创 深入理解JVM(一)——运行时的数据区域

Java与C++的围墙:内存动态分配,垃圾收集技术程序计数器当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选择下一条执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等依赖计数器。线程私有,唯一不会OutOfMemory的区域。执行Java方法时指向正在执行的虚拟机字节码,执行Native方法时为空。Java虚拟机栈描述方法执行的内存模型,每个方法执行的同时会创建一个栈帧。用于存储

2017-07-01 11:52:27 248

原创 Docker Or PaaS

背景PaaS作为云计算的三种服务形式之一,似乎一直不温不火,裹足不前。Docker的出现似乎又带来了一种新的选择,而且对于开发者来说更加灵活、便捷、易用。既然用户可以直接在Docker上运行,PaaS是否还有应用场景?面对企业繁杂的应用环境,用Docker作为PaaS的替代方案是否完美无缺? PaaS是企业的刚需?Docker是容器 PaaS是服务 从概念上来看PaaS是完美的解决方案,从深远的

2017-05-30 20:21:43 959 1

原创 云计算基础,相关概念,IaaS,PaaS,SaaS,CaaS,MaaS

前言随着数字技术的普及,越来越多的企业面临着海量数据。虽然企业都希望用大数据掘金,然而数字化能力的缺失也使企业极易淹没在这片无边无际的数据海洋里。互联网使得数据的流动和共享成为了可能,云计算技术的发展使数据分析向更加全面的方向迈进。为什么走向云?业务需求的爆炸式增长在移动互联网还没有兴起的时候,大部分业务的需求量都是可控的,或者说是可控的。传统的互联网可以满足这样的需求。 但是移动互联网使得需求

2017-05-30 18:08:31 4857

原创 Docker常用命令

Docker镜像常用命令1 一定要按照前一篇强调内容中的讲解配置加速器2 docker命令需要加root权限执行,需要加sudo,不然会报错permission denied搜索镜像 docker search java 执行该命令后Docker会在Docker Hub上搜索含有java关键字的镜像仓库下载镜像 docker pull java 执行该命令,Docker会从Docker

2017-05-30 17:12:46 519

原创 Docker安装——Ubuntu16.04

Docker介绍Docker是一个开源的容器引擎,它有助于更快地交付产品。Docker可将应用程序和基础设施层隔离,并且将基础设施当作程序一样进行管理。使用Docker,可以更快地打包,测试以及部署应用程序,并可以缩短从编程到部署运行代码的周期。Docker架构Docker daemon守护进程,运行在宿主机(DOCKER_HOST)的后台进程,可通过Docker客户端与之通信。Client

2017-05-30 12:07:54 30000 1

原创 好用的工具推荐——curl

介绍curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。优势越来越多的rest阵营越来越多的HTTP没有前端,自己做测试的神器如果研究ElasticSearch等下载地址https://curl.haxx.se/download.html安装步骤sudo tar -xzvf /hom

2017-05-26 21:14:53 1002

原创 RabbitMQ在Ubuntu 16.04下的安装与配置

按照上一篇的介绍,我们选择一种安装方式添加源 新增公钥(不加会有警告) 更新源 安装rabbitmq-serverecho 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.listwget -O- https://www.rabbitmq.com/rab

2017-05-25 20:52:01 25475 8

空空如也

空空如也

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

TA关注的人

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