自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (5)
  • 收藏
  • 关注

原创 23.深入理解synchronized

CAS CAS(CompareAndExchange)比较交换,实现方式是硬件级别的实现,主要是底层使用的asm的汇编实现方式,主要涉及的指令是lock cmpxchg指令。 解决ABA的问题是加上版本号。 原子类型底层原理 AtomicInte...

2020-06-28 22:07:25 184

原创 OSI协议

OSI七层协议模型 从应用层到会话层主要是负责产生数据。 传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。 网络层主要功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。...

2020-06-28 21:59:01 180

原创 5.Spring Boot 启动类加载器

1. CommandLineRunner 使用方式实现CommandLineRunner接口,重写run方法。 如果有多个那么可以使用@Order进行排序 @Component@Order(1)public class FirstCommandLineRunner implements Comm...

2020-06-21 15:16:49 561

原创 4.SpringBoot 拦截器Fliter,Interceptor,Controller……

在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。 上面的图是Spring中拦截机制,请求从Filter-->>Controller的过程...

2020-06-14 01:02:44 1749

原创 3.Spring Boot ApplicationListener事件监听机制实现解析

通过SpringFactoriesLoader工厂加载类加载。 使用key为applicationListener进行加载。 Spring Boot事件监听模式 监听模式四要素: 事件。 监听器 广播器 触发...

2020-06-09 14:30:28 205

原创 2.SpringBoot工厂加载机制解析- SpringFactoriesLoader

SpringFactoriesLoader作用: 框架内部使用的通用工厂加载机制。 从classpath下多个jar包特定的位置读取文件并初始化类 文件内容必须是kv形式,即properties key是全限定名(抽象类|接口)、value是实现,多个实现用,分离 SpringBoot框架中从...

2020-05-25 15:50:49 454

原创 1.SpringBoot 系统初始化器applicationInitializer介绍使用

Spring Boot中可以使用三种方式生成自定义初始化器 自定义初始化器有什么用? SpringBoot 初始化器 ApplicationInitializer 初始化器是Spring容器刷新之前执行的一个回调函数 主要作用是向SpringBoo...

2020-05-24 21:57:16 829

原创 6.深入Kafka

Kafka如何复制? Kafka如何处理来自生产者和消费者的请求? Kafka的存储细节,比如文件格式和索引? 集群成员关系 Kafka使用Zookeeper来维护成员的信息。每一个broker都有一个唯一的标识符,这个标识...

2020-05-01 06:43:34 84

原创 5.创建消费者

消费者和消费者群组 应用程序从一个Kafka主题读取消息并验证这些消息,称之为消费者,Kafka的消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。 关于消费者个数与分区的数量关系,如下图所示。 单个消费者 ...

2019-12-24 23:04:37 163

原创 4.创建Kafka生产者

生产者工作流程 从创建一个ProducerRecord对象开始,ProducerRecord对象需要包含目标主题和要发送的内容,可以选择是否指定键或分区。在发送ProducerRecord对象时,生产者要把键值对象序列化成字节数组。 ...

2019-12-11 08:04:45 815

原创 3.Broker配置相关

常规配置 在kafka的conf中server.propertis的一些配置 broker.id:每个broker 都需要有一个标识符,使用broker.id 来表示。它的默认值是 0,也可以被设置 成其他任意整数。这个值在整个 Kafka 集群里必须是唯一的。这个值可以任意选定,如果 出于维护的需要,可以在服务器节点间交换使用这些 ID。 ...

2019-12-10 01:27:59 174

原创 2.kafka安装与使用

JDK安装 以jdk-8u231-linux-x64.tar.gz 为例 1. 下载JDK,放到usr下。 cd /usr mkdir java mv zxvf jdk-8u231-linux-x64.tar.gz ./java/ cd java ta...

2019-12-09 00:36:27 244

原创 1.KafKa基础概念

Kafka是什么? Kafka是一款基于发布与订阅的消息系统,它一般称为“分布式提交日志”或者“分布式流平台”。文件系统或数据库提交日志用来提供所有事物的持久记录,通过重放这些日志可以重建系统的状态。同样地,Kafka的数据是按照一定顺序持久化保存的,可以按需读取。此外,Kafka的数据分布在正规系统里,具备数据姑丈保护和性能伸缩能力。 消息和批次 Kafk...

2019-12-07 10:36:19 109

原创 22.关于JVM的一些常用参数配置

内存管理参数 即时编译参数 类加载参数 多线程相关参数 ...

2019-12-06 01:29:31 60

原创 21.锁优化

自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。 自适应自旋 优化:在jdk1.6中引入了自适应的自旋锁。自适应意味着自旋的时间不再固定了,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也...

2019-12-04 22:59:15 57

原创 20.线程安全

线程安全 概念:当多线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为可以获得正确的结果,那这个对象是线程安全的。 Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相...

2019-12-03 22:51:51 59

原创 19.线程调度

线程调度是指系统分配处理器使用权的过程,主要调度方式有两种,分别是协同式线程调度(Cooperative Threads-Scheduling)和抢占式线程调度(Preemptive Threads-Scheduling)。 协同式调度 使用协同式调度的多线程系统,线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另一个线程上。协同式...

2019-12-03 00:52:58 101

原创 18.Java内存模型与线程

硬件的效率与一致性 在计算机中由于处理器与主存之间处理速度存在着数量级的差异,为此计算机引入了一个高速缓存,用于解决该问题。但这样也造成了另一个问题,就是缓存一致性问题。 在多个处理器中,每个处理器都有自己的高速缓存,而他们又共享同一主存。当多个处理器的运算任务都涉及统一块主存区域是,将可能导致各自的缓存数据不一致。 为了解决这个问题,需要各个处理器访问缓存...

2019-12-02 08:06:55 65

原创 17.编译优化技术

公共子表达式消除 公共子表达式消除是一个普遍适用于各种编译器的经典优化技术,它的含义是:如果一个表达式e已经计算过了,并且从先前的计算到现在e中所有变量的值都没有发生变化,那么e的这次出现就成为公共子...

2019-12-01 03:07:00 437

原创 16.编译过程

概述 在默认设置下,无论是方法调用产生的即时编译请求,还是OSR编译请求,虚拟机在代码编译器还未完成之 前,都仍然将按照解释方式继续执行,而编译动作则在后台的编译线程中进行。 -XX:-BackgroundCOmpilation来禁止后台编译,在禁止后台编译后,一旦达到JIT的编译条件,执行线程向虚拟机提交编译请求后将会一直等待,直到编译过程完成后再开始执行编译器输...

2019-11-30 00:23:43 217

原创 15.晚期(运行期)优化

如果说编译期间的语法糖是前期优化,那么运行期间虚拟机所做的优化则称为晚期优化。 概述 在部分的商用虚拟机中,Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编...

2019-11-28 22:06:30 74

原创 14.Java语义分析与字节码生成

1. 标注检查 标注检查步骤检查的内容包括如变量的使用前是否已被声明、变量与复制之间的数据类型是否能够匹配等。以及常量折叠, //在编译期间会将以下代码转换为int a=3;int a= 1+2; 2. 数据及控制流分析 数据及控制流分析是对程序上下文逻辑更进一步的验证,它可以监察处注入程序局...

2019-11-28 01:47:39 155

原创 13.类加载及执行子系统的案例

Tomcat:正统的类加载器架构 Tomcat类加载器说明 前面3个类加载和默认的一致,CommonClassLoader、CatalinaClassLoader、SharedClassLoader和WebappClassLoader...

2019-11-26 23:36:16 71

原创 12.基于栈的指令集与基于寄存器的指令集

通过一个算术代码来了解栈的解释器执行过程 基于栈指令集Demo 演示1+1基于栈的指令集 iconst_1iconst_1iaddistore_0 两条iconst_1指令连续把两个常量压入栈后,iadd指令把栈顶的两个值出栈、相加、然后方位栈顶,最后istore_0把栈顶的值放到局部变量...

2019-11-26 00:54:42 347

原创 11.方法调用

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本,暂时还不涉及方法内部的具体运行过程。 解析 所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这种解析能成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。...

2019-11-25 01:20:24 153

原创 10.虚拟机字节码执行引擎

"虚拟机"是相对于"物理机"的概念,这两种机器都有执行代码能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行哪些不被硬件直接支持的指令集格式。在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产...

2019-11-24 05:05:19 61

原创 9.破坏双亲委派模型

历史上双亲委派模型主要出现过3次较大规模的“被破坏”情况。 第一次 双亲委派模型的第一次“被破坏”其实是发生在双亲委派模型出现之前---即JDK1.2发布之前。由于双亲委派模型在JDK1.2之后才被引入,而类加载器和抽象类java.lang.ClassLoader则在JDK1.0就已经存在了。面对已经存在用户自定义类加载器的实现代码,Java设计者引入双亲委派模型时...

2019-11-23 05:01:38 85

原创 将博客搬至CSDN

将文章同步到CSDN

2019-11-22 01:08:45 38

原创 8.类加载器

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类与类加载器 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通...

2019-11-21 23:32:28 73 1

原创 7.虚拟机类加载机制

概述 虚拟机如何加载Class文件? Class文件中的信息进入到虚拟机后会发生什么变化? 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。 类加载的时机 ...

2019-11-20 23:28:36 49

原创 6.Class文件结构

Class文件格式 魔数与Class文件版本 每个Class文件的头4个字节称为魔数(Magic Number),作用是确定这个文件是...

2019-11-19 11:31:38 105

原创 5.垃圾收集器

这篇没有图!!!! Serial收集器 单线程的收集器,“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾手机工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工程线程,直到它手机结束。 ParNew收集器 ParNew是Serial收集器的多线程版本。 Parallel Scavenge收集器 它是一个新生...

2019-11-18 10:45:47 74 1

原创 4.对象的创建与内存分配

废话不多说先来一张图 创建对象 当 JVM 收到一个 new 指令时,会检查指令中的参数在常量池是否有这个符号的引用,还会检查该类是否已经被加载过了,如果没有的话则要进行一次类加载。 接着就是分配内存了,通常有两种方式: 指针碰撞 空闲列表 ...

2019-11-17 04:05:14 74

原创 3.垃圾收集器与内存分配策略

问题 哪些内存需要回收? 什么时候回收? 如何回收? 哪些内存需要回收 凡是线程私有的内存,如程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭内存自动回收。这里需要回收的内存指的是Java堆和方法区上的内存。 引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它,计数器值就...

2019-11-16 12:55:14 57

原创 2.对象的创建

从.java文件经过编译之后生成.class字节码文件,而字节码文件由虚拟机解释运行通常有以下步骤 类加载流程 伴随着这样一个流程,可以知道对象的创建是发生在初始化之后和使用之前。 对象的创建 虚拟机遇到一条new...

2019-11-15 16:23:30 79

原创 Java 内存模型

世界没有完美的程序员,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 运行时数据区域 程序计数器 线程私有,记录当前线程执行的字节的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。为什么是线程私有?在任何一个确定...

2019-11-15 05:34:21 44

网站在线聊天系统

利用socket传输协议实现的一个移动端加客户端聊天室源码。支持群聊,私信。

2014-08-25

java猜字母游戏

java猜字母游戏

2014-07-06

一个页面与另一个界面之间的数据交互

一个页面与另一个界面之间的数据交互

2013-04-02

空空如也

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

TA关注的人

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