![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java高级
文章平均质量分 76
代码Flying
代码飞扬
展开
-
Docker镜像构建(JDK、Maven、RocketMQ)
构建前提 由于从Oracle下载JDK时需要进行认证,而原有添加Request Head的方式已经不能用了,所以需要先下载jdk jar包到宿主机上构建方式 整个构建流程通过bash脚本实现,该脚本中会复制JAR到构建上下文中、生成Dockerfile、写入文件内容,然后执行build完成构建。为了简单起见,在执行脚本时只需提供JDK jar路径、镜像名。脚本如下(当然你也可以在该脚本...原创 2019-12-04 10:54:28 · 428 阅读 · 0 评论 -
Docker组件简介、常用命令
Docker Docker是基于GO语言开发的一个开源的应用容器引擎,基于Linux内核,通过cgroup,namespace等等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 简单来说,Docker是一种操作系统级别的容器虚拟化技术,基于Linux内核(而非具体系统),所需资源和性能开销都极少,可以运行在任何主流的Linux系统上。 与VM等传统虚拟技术相比,Docker...原创 2019-12-02 20:46:52 · 216 阅读 · 0 评论 -
Docker简介
安装前置条件64位机器 Linux3.8或更高版本的内核 内核必须支持适合的存储驱动,默认存储驱动通常是Device Mapper安装 Docker有多种安装方式,包括从存储库安装、下载RPM包手动安装等,其中官方推荐前者(详见官方安装说明)。这里简单介绍一下Centos 7下从存储库安装的过程,安装前建议先检测一下内核版本、存储驱动是否安装等先决条件。#检查内核版本[roo...原创 2019-12-02 18:02:05 · 255 阅读 · 0 评论 -
Java NIO详解
底层I/O 在说NIO之前需要先了解一下系统底层的一些I/O细节,我们知道,为了系统的安全性等原因的考虑,用户进程(如你的应用程序)是无法直接操作I/O设备的,必须通过调用系统内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer。整个流程如下图所示:用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间...原创 2020-03-01 21:27:04 · 349 阅读 · 0 评论 -
RabbitMQ基础介绍与功能演示
Vhost rabbitmq以vhost的形式在逻辑上进行空间划分,一个vhost相当于一个命令空间,每个vhost拥有自己的exchange、queue及权限控制等。rabbitmq默认提供了一个名为“/”的vhost,此外可以通过命令add_vhost <vhost>创建新的vhost,但无法通过AMQP协议进行创建。[root@localhost rabbitmq]# ...原创 2020-03-01 21:34:16 · 525 阅读 · 0 评论 -
Redis(五):主从复制
全量同步 增量同步 主从配置 复制流程及源码分析 主从复制问题及优化 Redis主从复制可以分为全量同步和增量同步,在Redis 2.8之前从节点每次连接主节点都会发送SYNC命令,来执行一次全量同步;2.8之后全量同步主要针对首次连接的情况,对于断线重连可以进行增量同步,且2.8之后用PSYNC代替了SYNC,其中psync ? -1表示全量同步,增量同步用psync <ru...原创 2020-04-22 00:03:54 · 575 阅读 · 0 评论 -
Redis(四):Key读写及过期策略
DB结构体 Redis默认有16个数据库,存储数据前必须先通过SELECT INDEX来指定DB(默认index为0,DB结构体对应server.h/redisDb),DB主要存储并维护键值对信息。值得注意的是Redis目前没有命令可以获取当前正在操作的库,所以比较好的做法是每次操作前select。typedef struct redisDb { dict *dict; ...原创 2018-11-19 17:04:28 · 1065 阅读 · 0 评论 -
Redis(三):SLOW LOG源码简析
目录Slowlog概述 Slowlog源码简析 Slowlog测试Slowlog概述 slowlog是指那些执行时间超过某个指定时间的查询,这里的执行时间不包括对磁盘的I/O操作、与客户端的连接等额外开销,只包含对内存数据的操作时间。Redis提供了以下两个配置来管理slowlog # 超时时间阈值设定,单位微妙slowlog-log-slower-than 10000...原创 2018-11-19 17:04:19 · 381 阅读 · 0 评论 -
Redis(二):RDB 、AOF原理细解
RDB概述 RDB是Redis默认的持久化机制,RDB模式下每间隔一定时间,Redis就会将内存中的数据集快照(snapshot)写入到磁盘文件,文件存储路径由dir + dbfilename决定。当redis重启或需要恢复数据时,同样可以根据dir + dbfilename找到对应rdb文件,把快照数据加载进内存。默认有以下三种情况会自动触发RDB操作,此外bgsave、save、flush...原创 2018-11-19 17:04:10 · 1231 阅读 · 0 评论 -
memcache(一)工作原理及源码分析
目录memcache简介 memcache工作原理(1)memcache内存管理 内存结构 内存分配方式 内存回收方式 (2)memcache分布式 分布式实现原理 分布式算法分析 memcache其它高级特性及总结 memcache缺陷(注意点) memcache命令memcach...原创 2018-09-28 14:20:14 · 2092 阅读 · 0 评论 -
Java集合高级(一)HashMap
目录HashMap容器简介 HashMap源码及数据结构深入分析 注意问题及性能优化HashMap容器简介 HashMap以K/V形式来存储数据,基于哈希表结构,本质上是一个数组+链表的结构,提供了高效率的添加和检索。影响HashMap性能的主要有两个因素,一个是桶的数量,另外一个就是加载因子,桶数*加载因子就是HashMap扩容的临界值。如果扩容临界值设置过小,实际存储...原创 2018-09-25 20:13:13 · 460 阅读 · 0 评论 -
JVM(四):对象与垃圾回收
目录对象创建 对象的引用 无效对象的判断 对象的复活机会 垃圾回收算法 垃圾回收器对象创建(以HotSpot为例) 创建对象在JVM中对应的指令是new,当JVM碰到一个new指令时,会先检查new后面跟着的符号引用(位于常量池,代表类)是否被加载,如果没有,则必须先对类进行加载、连接、初始化等操作,当类被加载后,JVM根据类信息则可以在堆上分配一个适当大小的空间来存储实例...原创 2018-09-12 15:00:12 · 244 阅读 · 0 评论 -
JVM(三):自定义ClassLoader 及 类并发加载问题
问题: 目前大部分JVM实现都采用延迟加载的策略,在运行时,当需要用到某个类时才会去真正装载该类。当JVM加载某个类时,会提取出其中的类型信息存储在方法区中,类的静态变量也同样存在该方法区中,虽然JVM内部以什么样的数据结构来存储类型信息,依赖于JVM的具体实现,但从存储的信息基本是一样的,比如类的基本信息(完全限定名称、父类信息、加载器信息等等)、常量池、字段信息、方法信息(签名、字节码流、...原创 2018-09-04 17:47:27 · 2826 阅读 · 0 评论 -
JVM(二):深入理解Java类的加载过程
目录类加载底层原理.class文件寻址规则(双亲委派) .class文件校验 类信息的存储 类对象的创建forName()与 loadClass()的区别 类并发加载问题类加载底层原理从JVM的角度来看,类加载的过程就是查找解析.class文件,并提取其中类信息以某种数据结构存储在方法区中,并在堆内存中创建一个Class对象的过程。细节上又可以分为装载、连接、初始化三个操作,...原创 2018-09-04 17:47:01 · 1029 阅读 · 0 评论 -
JVM(一):JVM体系结构详解
JVM简介 JVM是Java程序得以运行的平台,也是Java程序可以跨平台的底层支撑,从整体上来看,JVM的主要功能可以分为加载和执行两大块。其中类加载器负责.class文件的寻址与加载,执行引擎负责字节码指令执行及内存的管理等等。下面是JVM一个经典的体系结构图类加载系统:关于类加载体系的详细说明在另一博客https://blog.csdn.net/w1673492580/ar...原创 2018-09-04 17:46:26 · 5278 阅读 · 0 评论