- 博客(69)
- 收藏
- 关注
原创 Java多线程并发——CAS和AQS
同步实现方式CASCompare And Swap,CAS原子操作,更新之前,比较期望值,如果是期望值的话,写数据,否则不写数据。Java的CAS操作调用的是unsafe本地Native方法,通过使用CPU相关指令来达到原子性操作,包括多核CPU。通常为保证更新成功,操作需要自旋ABA问题,CompareAndSwap的值从A变为B,再由B变为A,这种情况下,CAS认为值没有变,但其实是变了的,需要使用版本号来解决,Atomic使用AtomicStampedReference来解决CAS
2021-06-30 21:21:43
342
2
原创 Java垃圾回收
标记引用计数引用计数无法解决重复引用问题,导致垃圾被回收根引用root引用法,栈中局部变量,方法区全局变量出发,没有被引用到的对象垃圾回收算法标记清除标记需要回收的对象,然后回收对象,产生内存碎片,浪费资源复制标记需要回收的对象,复制到一块空区域,回收原来的整块区域特点:解决了内存碎片缺点:需要额外内存空间标记整理没有内存碎片,也不浪费内存,但是比较耗时内存分代堆内存分为年轻代,老年代minorGC,回收年轻代FullGC,回收老年代M..
2021-06-29 20:04:56
236
2
原创 Java类加载机制
类加载,类加载器将编译好的class文件以字节码的形式加载到运行内存的元数据区(java7及以前是方法区),并且在堆内创建Class类型的对象,来描述class文件的内容。程序可以通过class对象来调用类的属性,方法等功能。类加载来源:文件、远程服务、Jar包等字节流。每个Class都有一个ClassLoader,来标识class是由哪个ClassLoader加载的类加载过程延迟加载,不是一次性加载全部需要的类,而是按需加载,程序在运行过程中会逐步遇到需要的类,需要时使用ClassLoader.
2021-06-25 17:21:37
240
1
原创 Java内存
Java内存区域在1.7以及之前,Java的内存区域如下图:Java1.8后,Java的内存区域发生了变化,如下图:其中,程序计数器 ,线程私有编译后,程序变为字节码,程序计数器指向某一行字节码,通过改变计数器值,可以指向下一行字节码。线程切换时,保存执行现场,重新获得cpu时间片时,继续根据保存的现场执行程序。栈,线程私有支持程序执行的数据结构,每个方法一个栈帧,栈帧中包括:局部变量表方法出口操作数栈,也是一个栈,运行时,一行一行的代码入栈出栈动态链接,方法调用时,目标.
2021-06-25 15:09:24
157
1
原创 掌握Redis
概述redis是什么?引用官方,redis.ioRedis是一个开源的,内存数据结构存储,作为数据库,缓存,消息队列使用。redis提供了String,Hash,List,Set,Zset多种数据结构,并针对这些数据结构支持范围查询,bitmap,hyperloglogs,geospatial 索引和流。Redis内置了复制、Lua脚本、LRU eviction、事务和不同级别的磁盘持久性,并通过Redis 哨兵和Redis Cluster自动分区提供高可用性。数据结构StringHash
2021-06-17 20:12:52
349
1
原创 Netty原理
Netty原理1 概述1.1 netty是什么?1.2 特点2 原理2.1 IO模型2.1.1 阻塞IO2.1.2 IO多路复用2.1.3 异步IO2.2 netty模型3 架构4 实现reactor线程模型Reactor 多线程单线程 reactorFuture 和 Promise事件模型Pipleline零拷贝其他设计FastThreadLocalThread1 概述netty的基本了解1.1 netty是什么?快速简单的网络编程框架,极大的简化了基于TCP UDP协议的网络编程,简单,灵活,高
2021-05-17 22:37:07
1396
7
原创 docker搭建单节点mongodb
查看需要安装的版本:# docker search mongo下载镜像# docker pull mongo先以最简单方式启动镜像# docker run --name="mongo" -itd mongo进入容器,复制配置文件一份,并查看配置文件路径# docker exec -it mongo bash# 进入容器后# ls /data/configdb 配置文件目录# cat /etc/mongod.conf.origi 原始配置文件# exit创建数据目录da
2021-04-19 20:18:03
399
原创 MySQL(一)存储引擎
MySQL存储引擎MyISAMArchiveBlackHoleCSVInnoDBMemoryMyISAM查询插入速度快,不支持事务Archive插入速度快,查询支持不好。适合存储大量独立的,历史记录类的数据BlackHole黑洞引擎CSV逻辑上由逗号分隔的数据InnoDBMySQL5.5版本后的默认存储引擎,支持ACID事务,支持事务Memory...
2021-03-01 17:46:41
134
原创 操作系统OS进程(一)初识
OS进程什么是进程状态内存什么是进程逻辑上,执行程序的过程操作系统加载程序,执行程序,产生一个进程物理上,操作系统分配的资源程序执行过程中需要的内存,寄存器等资源进程由什么组成程序,要执行的代码数据,程序要处理的数据PCB(Process Control Block),进程控制块,操作系统管理控制进程所需信息集合(在linux中,称为task_struct)状态内存...
2021-03-01 10:12:02
335
原创 Idea添加自定义模板
Java代码规范中对注释有各种要求,添加注释对于代码的可读性,可持续性,质量都至关重要,下面看怎么通过模板在idea中添加自定义的注释模板,并且能够被JavaDoc识别并生成在API文档中。类,接口,注解,枚举在idea中打开File—>Settings—>Editors—>File and Code Templates在Files中找到Class可以看到右边的模板,只需要将以下注释添加到响应的位置即可添加内容/** * * @author ${USER} * @dat
2021-01-22 15:59:32
4105
4
原创 Gerrit代码评审工具
gerrit代码评审工具1. 简介1.1 Code Review1.2 代码流程1.3 优势2. 安装2.1 配置文件解析2.2 集成jenkins2.3 集成git3. 使用3.1 创建账号3.2 code review4. DevOPSgerrit是一个基于git仓库的代码评审工具,项目管理工具。关键词: gerrit 开源 免费 代码评审工具 free opensource code review 基于git仓库1. 简介Gerrit分支自Rietveld,作者为Google公司的Sh.
2020-11-27 14:16:18
2890
1
原创 列式存储ClickHouse(二)接口
Click提供了丰富的接口来访问数据库以及数据库管理系统,如下表:接口类型描述httpClickHouse默认提供了HTTP接口,通过http进行数据库和数据库管理系统相关操作。ClickHouse默认监听8123端口(可修改),http接口比其他接口受到更多的限制,但是兼容性更好,文档齐全,上手简单tcpcommand-linejdbcodbcc++ client libaryclient libariesIntegration
2020-11-03 11:21:10
3466
1
原创 列式存储ClickHouse(一)概述
这里写目录标题概述优势特性缺点特性性能安装测试创建表导入数据查询数据ClickHouse,是一个快速,开源,OLAP的数据库管理系统。ClickHouse是列式存储的,支持实时使用SQL的查询生成分析报告。什么场景下使用ClickHouse分析干净,结构合理且不可变的事件或日志流。 建议将每个这样的流放入具有预连接维度的单个宽事实表中。特别是以下场景:网络和应用分析广告网络和实时出价电信电子商务和金融信息安全监控和遥测时间序列商业智能网络游戏物联网概述优势特性真正的面向
2020-10-30 16:39:11
2049
2
原创 列式存储和行式存储
行式存储数据库和列式存储数据库,随着业务深入,技能增长,经常会碰到,今天来理解一下。列式存储(Clolumn-Based)和行式存储(Row-Based)都是相对于对方的,他们的区别是在磁盘的存储方式不同,所以在读写数据时,方式不同,以至于他们的适用场景也都不同。列式存储数据库主要包括:HBase,ClickHouse,HP Vertica(也支持行式存储)行式存储数据库主要包括传统关系型数据库:MySQL,Oracle,DB2,SQLServer因为是磁盘存储方式不同,所以先跳出固有思维来理解,想
2020-10-29 16:57:22
1599
原创 数据仓库ETL(二)基本概念
数据治理领域有一些基本名词,数据仓库,数据挖掘,商业智能,数据同步,联机计算等等,下面一起看一下专有的名词。DB(DataBase)数据库,一般指支撑应用的OLTP()DWOLAPDMBIETL
2020-08-24 11:01:53
377
原创 Docker安装实践Jenkins
Docker安装实践Jenkins启动容器配置Jenkins配置SonarQubejenkins集成SonarQube欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Jenkins是领先的开源
2020-08-12 18:04:29
232
2
原创 数据仓库ETL之DataX(一)简介
简介ETL,使用ETL工具将数据从数据源端(Extracting,Transform,Loading),抽取,传输,加载同步到目标端的过程。dataX是阿里巴巴内部被广泛使用的离线数据同步工具,实现包括MySQL,Oracle,SqlServer,PostgreSQL,HDFS,Hive,ADS,HBase,TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的R
2020-07-27 10:43:08
1699
1
原创 微服务权限控制(二)共享Session方式的登录认证
接上一篇的权限控制,再讨论再网关zuul的登录认证实现。网关使用SpringCloud的zuul,登录认证选择使用自定义共享session的方式,来实现集群的登录验证。保护接口的私密,保证系统安全。Filterzuul提供了filter来对请求进行过滤处理,首先,了解网关zuul的filter。zuul的filter有三种类型的,pre,route,post,error,stati...
2020-01-13 14:02:02
2179
原创 Kafka(一)背景和概念
背景Apache的一个开源的、分布式的流处理平台,由Scala和Java开发。背景,原来是一个高吞吐量,分布式的发布——订阅消息系统,分布式流处理平台,最初由Linkedin 公司开发,后台成为Apache项目的一部分。核心模块由Scala开发,支持Java,C/C++,Scala,Python,Go,Erlang,Nodejs等多语言的客户端。越来越多的开源分布式系统支持与Kaf...
2019-12-25 16:52:37
402
原创 Java8新特性
目录1,Lambda表达式2,方法引用3,stream4,Optional5,Nashorn JavaScript6,日期时间7,Base64编码Java8即JDK1.8新增了很多新的特性,一起来探索一下吧。1,Lambda表达式Java8支持Lambda表达式,来支持函数式编程,将函数作为方法的参数。经常用于代替匿名内部类的使用。函数接口可以使用lambd...
2019-08-13 18:15:12
317
原创 Java设计模式之代理(动态代理,静态代理)
代理设计模式,是一种常用的设计模式。顾名思义,在面向对象的世界中,就是一个对象对另一个对象的代理。如现实生活中,处处都是代理,中介是对业主的代理,王婆是对金莲的代理,经纪人至于艺人的代理,销售代理等,当然这是通俗代理。代理对外是代理对象去交互,但是真正完成工作的,往往又是被代理的对象。例如租房,找中介,但是真正租到的是业主的房子。xxx找王婆,但是最终干活的是金莲。找艺人拍戏,找的是经纪人...
2019-08-06 18:33:28
188
原创 Spring(二)Spring IOC
IOC(Inversion of Control)和DI(Dependecy Injection),IOC控制反转,由Spring来控制管理对象的生命周期和对象间的关系。将对象交给容器来创建,程序不再创建;DI依赖注入,容器创建对象时,容器将对象的依赖注入到对象中。Spring以这两种思想来实现对Bean的管理。继而实现松耦合。首先了解一下关键APIBeanFactory,接口,Sprin...
2019-08-06 17:03:28
214
原创 Spring(一)概述
对于Java应用开发来说,Spring再熟悉不过了。起初Spring是一个降低程序复杂度的Java框架,解决代码层级之间的松耦合问题,在SpringBoot阶段,SpingCloud提供了更多松耦合集成的模块,在解决微服务,数据处理等各个方面表现突出。Spring是模块化的,松耦合的,可以在你需要的时候,使用你需要的任何模块。截止Sping5,Spring模块。 模块名称 ...
2019-08-02 14:07:03
126
原创 Hadoop(七)Hive基础
Hive是基于Hadoop的数据仓库工具,提供了在Hadoop分布式存储上对大数据集使用SQL进行查询、修改、管理数据的功能。Hive提供标准SQL功能,包括SQL:2003,SQL:2011和SQL:2016分析功能。Hive的SQL也可以通过用户自定义的函数(UDF),用户自定义聚合(UDAF)和用户自定义的表函数(UDTF)使用用户代码进行扩展。Hive不要求数据存储为某种特定的格式...
2019-07-31 11:42:47
432
原创 Hadoop(六)搭建分布式HBase集群
接上一章节,在单机版的HBase中,HMaster,HRegionServer,Zookeeper都在一个JVM进程中运行,通过两个阶段来搭建、学习分布式的HBase,伪分布式和分布式。一,伪分布式HBaseHBase仍然在单个主机上运行,但是每个HBase的守护进程(HMaster,HRegionServer,Zookeeper)作为一个单独的进程运行。分布式,伪分布式的HBase对于生...
2019-07-29 11:31:20
374
原创 Hadoop(五)HBase基础
Apache HBase是Hadoop的数据库,一个分布式的,可扩展的,大数据存储组件。Apache HBase适合随机的、实时的读写你的大数据场景,HBase的目标是管理非常大的表,在商业硬件集群上管理10亿行级别和500W列级别的数据。HBase是一个开源的,分布式的,版本化的非关系数据库,模仿Google的Bigtable,BigTable是结构化数据分布式存储系统。正如Bigtable...
2019-07-29 11:14:13
272
原创 Hadoop(四)hdfs基本操作
HDFS是Hadoop的分布式文件系统,存储海量数据,通过多HDFS操作的了解,进一步了解HDFS。HDFS上的操作,通过两个方面来了解,1:shell客户端,2:Java客户端。一,shell客户端shell命令操作hdfs的一般格式为hadoop fs [option] [command]或者hdfs dfs [option] [command]1.1,opti...
2019-07-29 10:07:38
381
原创 Hadoop(二)搭建Hadoop集群
在了解Hadoo基础之后,借助于docker快速实现虚拟化,搭建Hadoop集群,进一步了解Hadoop,实地测试,实地操作,更进一步的了解Hadoop。首先需要了解Hadoop的各个模块概念已经功能,确定搭建怎么样集群。本文选择搭建一个如下的集群。 容器 NameNode DataNode ResourceManager ...
2019-07-26 17:03:15
435
原创 Hadoop(三)MapReduce
一,概述Hadoop MapReduce是一个可以轻松编写应用程序的软件框架,可靠,容错,在大型集群(数千节点)的商用硬件上并行处理大量数据(多TB级别的数据)。MapReduce是Hadoop的计算核心。MapReduce通常将输入数据集拆分为独立的块,这些块由Map任务以完全并行的方式处理。框架对Map的输出进行排序,然后输入到reduce任务。通常,作业的输入和输出都存储在文件系...
2019-07-26 16:16:12
394
原创 linux无密码ssh,scp,rsync
维护中,常常遇到需要ssh,scp,或者rsync,每次都需要输入密码,非常麻烦。特别是在自动化shell脚本中,涉及到scp或者rsync的操作时,就需要无密码执行命令。以下来看一下,如何无密码ssh,scp。现在有两台主机,主机A和主机B,在同一个网络中,且两台主机都有同一个用户root(也可以是同一个其他用户),下面为同一个用户root添加无密码ssh,scp。1,在主机A生成密钥和...
2019-07-26 16:14:08
483
原创 Hadoop(一)基础概念
hadoop是一个大数据分布式存储和计算平台。hadoop1包括hdfs和mapreduce两部分核心hadoop2包括hdfs,yarn,mapreduce三部分核心,其中hdfs,hadoop分布式文件系统,可扩展,容错,高性能分布式文件系统,异步复制,一次写入多次读取,负责数据存储。包括namenode,datanode等部分。 yarn,资源调度,管理调度任务,支持其他计算框...
2019-07-25 16:42:33
192
原创 Docker实践(七)部署SpringBoot微服务
目录打包编写DockerFile构建镜像创建容器并启动容器测试打包使用maven或者其他构建工具,打包可运行jar或者war,这里使用可运行jar进行部署。编写DockerFile创建构建目录,复制jar包到构建目录,并编写Dockerfile如下;#基础镜像,在openjdk8的基础上构建FROM openjdk:8#维护人信息MAINTAINE...
2019-07-22 15:32:05
371
原创 搭建redis主从结构
Redis Replication,非常简单的配置和使用,是非常普遍的master-slave结构,Slave Redis实例准确的复制主实例的副本。 每次连接断开时,slave将自动重新连接到master,并且无论主站发生什么情况,slave都会尝试成为master的精确副本。主从复制结构主要使用三种机制:当slave和master节点正常连接时,master节点发送多个命令的数据流给s...
2019-07-19 16:25:41
326
原创 Docker实践(六)部署redis
目录选择镜像下载镜像创建配置创建启动容器测试选择镜像通过命令docker search redis命令查找redis镜像,在docker hub上寻找需要按章的版本。[root@ecs-7bc6-0001 redis]# docker search redisNAME DESCRIPTION ...
2019-07-19 14:30:32
908
原创 Docker部署MySQL5.7主从复制结构
目录准备基于bin-log文件位置的主从复制基于事务的主从复制Mysql复制可以将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。 默认情况下,复制是异步的,slave不需要永久连接以接收来自主站的更新。 根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。MySQL中复制的优点包括:横向扩展解决方案 - 在多个...
2019-07-18 20:41:18
691
原创 Docker实践(五)docker部署MySQL5.7
目录1,安装2,选择镜像3,下载镜像。4,准备部署5,创建并启动6,测试使用docker容器部署mysql5.71,安装没有docker,首先安装docker,参照Docker简单实践(一)安装Docker2,选择镜像远程搜索docker hub上的mysql镜像。[root@ecs-7bc6-0001 mysql]# docker search ...
2019-07-18 16:09:20
3772
原创 Java集合List,Set,Map,Queue,Deque
集合是Java基础中非常重要的一部分,Java提供了非常丰富的集合API,了解各个集合的特点,怎么样在各种各样的场景中使用正确的集合,非常重要,也是一个Java程序员最基本的素养。整体了解Java最基本,最常用的的集合主要有,Set,List,Map,Queue,Deque。 Collection是集合List,Set,Queue的最顶层接口。Collection继承自Iterable接...
2019-07-07 23:17:34
489
原创 ElasticSearch实践(三)Rest API简介
REST APIElasticsearch提供了非常全面和强大的REST API,可以使用API与集群进行交互。 使用API可以做什么呢?检查群集,节点和索引运行状况,状态和统计信息 管理您的群集,节点和索引数据和元数据 对索引执行CRUD(创建,读取,更新和删除)和搜索操作 执行高级搜索操作,例如分页,排序,过滤,脚本编写,聚合等等API命令可以在Kibana控制台中运行。使...
2018-12-07 14:51:19
400
原创 Elasticsearch实践(二)linux安装
首先确保环境安装了Java81,下载安装包在ElasticSearch官网根据操作系统,选择需要安装的安装包,以及版本。https://www.elastic.co/downloads/elasticsearch下载linux安装包[root@yun10514 src] wget https://artifacts.elastic.co/downloads/elasticse...
2018-12-05 18:00:26
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人