自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

forBurnInG的专栏

专注java相关技术,分享互联网前沿技术,用技术成就梦想

  • 博客(107)
  • 收藏
  • 关注

转载 雪花算法(snowflake) :分布式环境,生成全局唯一的订单号

snowflake方案snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号,最后还有一个符号位,永远是0。比如在snowflake中的64-bit分别表示如

2020-12-05 15:03:39 146

原创 maven常用命令介绍

一、关于mvn各个阶段的工作mvn clean: 清除各个模块target目录及里面的内容 mvn validate: mvn compile: 静态编译,根据xx.java生成xx.class文件 mvn test: 单元测试 mvn package: 打包,生成各个模块下面的target目录及里面的内容 mvn verify: mvn install: 把打好的包放入本地仓库(~/.m2/repository) mvn site: mvn deploy: 部署,把包发布到远程仓库二

2020-11-08 18:32:24 36

原创 mvn -U的用法

一、 mvn -U 说明-U,--update-snapshots Forces a check for missing releasesand updated snapshots on remote repositories意思是:强制刷新本地仓库不存在release版和所有的snapshots版本。对于release版本,本地已经存在,则不会重复下载 对于snapshots版本,不管本地是否存在,都会强制刷新,但是刷新并不意味着把jar重新下载一遍。 只下载几个比较小的文件,通过这几个

2020-11-08 18:29:05 8277

原创 mac idea maven更新不下来包-终极解决方案

1. 现象:接口方升级了个jar包的版本,提供了新的pom配置,项目中更新pom配置后,java类中import 包名的地方,一直标红,显示未引入。但是检查maven本地库发现,新版本的jar包,已经更新到本地库了。并且在测试环境中,编译,构建,启动都没问题,就是本地环境有问题。2.解决:查阅资料,试了各种方法都没奏效。偶尔发现下面这个命令,试了下,发现可以。截图如下:3.命令介绍:mvn -U idea:idea 将继续下载未下载完整的依赖....

2020-11-08 18:16:35 1521 2

原创 elasticsearch scroll查询原理

ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。 Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 而Fetch阶段比较重,需要将每个shard的结果取回,在协调结点进行全局排序。 通过From+size这种方式分批获取数据的时候,随着from加大,需要全局排序并丢弃的结果数量随之上升,性能越来越差。而Scroll查询,先做轻量级的Query阶段以后,免去了繁重的全局排序过程。 它只是将查询结果集,也就是doc id列表保留在一个上下文里,之后每次分...

2020-07-20 18:21:36 930

转载 jsonp跨域原理解析

背景:由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题,jsonp即是为了解决这个问题出现的一种简便解决方案。同源策略即:同一协议,同一域名,同一端口号。当其中一个不满足时,我们的请求即会发生跨域问题。举个简单的例子:http://www.abc.com:3000到https://www.abc.com:3000的请求会出现跨域(域名、端口相同但协议不同)http://www.abc.com:3000到http://www.abc.com:3001的请求会出现跨域(域名、协议相同

2020-05-25 21:20:43 101

原创 IntelliJ IDEA For Mac 快捷键汇总

快速查找快捷键 中文描述 cmd+O 查找类 cmd+shift+O 查找文件 cmd+F12 查找类中方法 cmd+option+O 查找符号 cmd+shift+A 查找动作 cmd+F 文件内查找 cmd+shift+F 全局查找 cmd+R 文件内替换 cmd+shift+R 全局替换 double shift 查找任何东西 ⌘G 查找模式下,向下查找 ⌘⇧G 查找.

2020-05-12 10:14:55 127

原创 常用在线工具汇总

json解析: https://www.json.cn/在线做图: https://processon.com/在线进制转换: https://tool.oschina.net/hexconvert/工具大全: https://tool.oschina.net/#欢迎关注公众号:“架构一线”,定期分享一些实战心得,互联网前沿技术等....

2020-05-11 19:13:03 188

原创 部分机器CPU使用率99% 问题分析

背景:收到cpu使用率报警,应用中多台机器cpu使用率高达99%左右。初步处理:第一时间重启一台机器,发现使用率恢复正常。陆续重启其它机器,保留一台用于观察分析问题根源。分析:初步观察这台机器的内存监控,网络监控等都基本正常。并且观察近几天的cpu使用率情况,基本都正常,就上截图中时间,突然升高。 通过堡垒机,连到该机器,top命令,发现确实java进程cpu使用率高达90%多。 top -H -p #pid,进一步观察进程中线程,cpu使用率情况;发现有多个线程,c..

2020-05-09 16:02:04 894

原创 线上事故回滚失败-JspServlet工作目录

一、背景:上线两个应用,中心,portal端;portal端依赖中心。portal应用用的是jsp做前端页面。上线后;用户反馈新上功能有问题,为减小影响,立即回滚。本以为线上会恢复正常,没想到用户反馈有页面打开失败。二、回滚导致新问题原因分析:事态紧急,各种分析日志,环境。从tomcat自带的日志文件localhost.log中发现,有jspServletInit异常...

2020-04-23 12:19:14 199

转载 JVM 出现 fullGC 很频繁,怎么去线上排查问题

https://blog.csdn.net/wilsonpeng3/article/details/70064336

2020-04-17 16:03:38 572

原创 ElasticSearch 更新后延迟解决方法

在index后有一个refresh_interval默认1秒,在这个时间间隔内search是不可见的。解决办法有两种:1,通过ui层解决。比如更新成功后,弹出提示框;2,设置刷新策略,有以下三种(es版本5.4.3)。public static enum RefreshPolicy implements Writeable { NONE("false"), // 默认;异步刷新...

2020-04-17 15:20:26 1560

转载 ElasticSearch底层原理浅析

基本概念索引(Index)ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。类型(Type)类型是索引内部的逻辑分区(categ...

2020-04-17 14:45:51 131

原创 单线程的 Redis,不是快吗?为什么需要连接池?

先说一下,Redis 为什么是单线程的?因为 CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方 FAQ)既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于 redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求,为什么使用连接池?Redis 是单进程单线程的,它利用队列技术将并发访问...

2020-01-08 16:28:12 1705

转载 Redis为什么设计成单线程

今天下午,烟哥吃饱了撑着没事干,上班时间到处工(zhuang)作(bi)!只见同事小刘的桌上摆了一本Redis相关的书籍,内心嘿嘿一笑:“终于,又有机会勾搭小刘了!”于是有了如下对话"嗯,不要方,跟着我思路来想!"烟哥道。"假设,此刻有任务A和任务B,现在有如下两种执行方式"方式一:两个线程,一个线程执行A,另一个线程执行B方式二:一个线程,先执行A,执行完以后继续执行B"请问...

2020-01-08 16:18:37 122

原创 Java代码配置的表达式解析 之 SpEL表达式

背景: 有些场景下,可能需要把一些java代码的表达式,做成配置化的形式,存储到db中;使用时,从db读取,这时候就需要解析java代码表达式。下面简单介绍通过SpEL 表达式 进行解析。实际使用:/** * value与配置的表达式匹配 * @param value 值 * @param expressionDefinition 表达式 ...

2019-12-27 15:37:49 1054

转载 补码原理——负数为什么要用补码表示

文首  我们都知道负数在计算机中是以补码(忘了补码定义的戳这里)表示的,那为什么呢?本文尝试了解补码的原理,而要想理解它,首先得理解算术中“模”的概念。所以首先看一下什么是模,然后通过一个小例子来理解补码。1 模(Modulo)1.1 什么是模数In mathematics, modular arithmetic is a system of arithmetic for intege...

2019-12-26 14:16:06 124

转载 ZooKeeper学习第八期——ZooKeeper伸缩性

一、ZooKeeper中Observer1.1 ZooKeeper角色经过前面的介绍,我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower。Leader可以接受client请求,也接收其他Server转发的写请求,负责更新系统状态。 Follower也可以接收client请求,如果是写请求将转发给Leader来更新系统状态,读请求则由Follower的内...

2019-12-24 17:11:30 68

转载 ZooKeeper学习第七期--ZooKeeper一致性原理

一、ZooKeeper 的实现1.1 ZooKeeper处理单点故障我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示。图 1.1 ZooKeeper解决单点故障那么我们继续分析一下,ZooKeeper通过Master选举来帮助分布式系统解决单点故障,保证该系统中每时每刻只有一个Master为分布式系统提供服务。也就是说分布...

2019-12-24 17:09:59 75

转载 ZooKeeper学习第六期---ZooKeeper机制架构

一、ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control List) ZooKeeper 的权限管理亦即ACL 控制功能,使用ACL来对Znode进行访问控制。ACL的实现和Unix文件访问许可非常相似:它使用许可位来对一个节点的不同操作进行允许或禁止的权限控制。但是和标准的Unix许可不同的是,Zookeeper对于用户类别的区分,不止局限于所有者(own...

2019-12-24 17:06:39 59

转载 ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

引言本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法、Zab协议、通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解。由于内容比较多,一口气吃不成胖子,得慢慢来一步一个脚印,因此我对后期ZooKeeper的学习规划如下:第一阶段:|---理解ZooKeeper的应用|---ZooKeepe...

2019-12-24 17:03:34 60

转载 ZooKeeper学习第四期---构建ZooKeeper应用

一、配置服务配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分。简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和更新配置文件。使用ZooKeeper中的观察机制,可以建立一个活跃的配置服务,使那些感兴趣的客户端能够获得配置信息修改的通知。下面来编写一个这样的服务。我们通过两个假设来简化所需实现的服务(稍加...

2019-12-24 16:50:26 61

转载 ZooKeeper学习第三期---Zookeeper命令操作

一、Zookeeper的四字命令Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。Zookeeper常用的四字命令见下图所示。上图,是Zookeeper四字命令的一个简单用例。[root@hadoop ~]# echo ru...

2019-12-24 16:46:34 64

转载 ZooKeeper学习第二期--ZooKeeper安装配置

一、Zookeeper的搭建方式Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。■单机模式:Zookeeper只运行在一台服务器上,适合测试环境;■伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;■集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)Zookeeper通过复制来实...

2019-12-24 16:40:36 39

转载 ZooKeeper学习第一期---Zookeeper简单介绍

一、分布式协调技术在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术。那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果。这时,有人可能会说这个简单,写一个调度算法就轻松解决了。说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解。如果这些进程...

2019-12-24 16:37:53 44

转载 Zookeeper的功能以及工作原理

1.ZooKeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户2.ZooKeeper提供了什么?1)文件系统2)通知机制3.Zookeeper文件系统每个子目录项如 Nam...

2019-12-24 16:16:27 44

转载 JAVA中常用的二进制位操作

一,计算某个正数的二进制表示法中 1 的个数1 //求解正数的二进制表示法中的 1 的位数2 private static int countBit(int num){3 int count = 0;4 for(; num > 0; count++)5 {6 num &= (num...

2019-12-24 16:02:33 51

转载 Java NIO 之 初识NIO

Java NIO(New IO / Non-Blocking IO)是从JDK 1.4版本开始引入的IO API , 可以替代标准的Java IO API 。NIO与原来标准IO有同样的作用和目的,但是使用方式和读写方式完全不同,NIO支持面向缓冲区,基于通道的IO操作。NIO以更高效的方式进行文件的读写操作。  NIO的核心组成部分:    · Buffers    · Chan...

2019-12-20 17:14:59 46

转载 Java NIO 之 Buffer(缓冲区)

缓冲区(Buffer):一个用于特定基本数据类型的容器,由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类。Java NIO 中的Buffer 主要用于和NIO中的通道(Channel)进行交互, 数据从通道(Channel)读入缓冲区(Buffer)或者从缓冲区(Buffer)写入通道(Channel)。如下,我画的一个简图,Chanenl直接和数据源或者目的位置接触...

2019-12-20 17:05:46 56

转载 Java NIO之拥抱Path和Files

一 文件I/O基石:PathJava7中文件IO发生了很大的变化,专门引入了很多新的类来取代原来的基于java.io.File的文件IO操作方式:import java.nio.file.DirectoryStream;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.f...

2019-12-20 16:57:07 59

转载 Java NIO 之 Channel(通道)

一 Channel(通道)介绍通常来说NIO中的所有IO都是从 Channel(通道) 开始的。 从通道进行数据读取:创建一个缓冲区,然后请求通道读取数据。 从通道进行数据写入:创建一个缓冲区,填充数据,并要求通道写入数据。 数据读取和写入操作图示:Java NIO Channel通道和流非常相似,主要有以下几点区别:通道可以读也可以写,流一般来说是单向的(...

2019-12-20 16:51:54 57

转载 Java NIO之Selector(选择器)

一 Selector(选择器)介绍Selector一般称 为选择器,当然你也可以翻译为多路复用器。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。使用Selector的好处在于:使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线...

2019-12-20 16:44:33 62

转载 JodaTime官网API,使用JodaTime处理时间实例

简介在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。在这里记录下使用方法,方便日后参考。api 官网 :http://www.joda.org/joda-time/apidocs/index.html?overview-summary.html...

2019-12-18 14:27:22 95

转载 Java 之 JUC

1. JUC 简介在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类, 用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中 的 Collection 实现等;2. volatile 关键字volatile 关键字: 当多个线程进行操作共享数据时,可以保...

2019-12-13 18:12:58 54

转载 用mat分析内存dump文件中unreachable objects

现象某个大版本上线后,某服务频繁报警: load过高,但很快就会恢复,即间歇性load过高,原因难以定位。观察从报警系统观察报警时间分布,有一些周期性,但周期会在1小时到2小时之间,不稳定 初步排除是定时任务导致 观察gc日志,发现报警时间点与gc时间开销较高的点比较吻合,因此着重观察GC 发现JVM GC相关的配置不是很合理,做了简单的优化:将old区的并行收集改为CMS,情...

2019-12-13 17:16:15 2287

转载 使用jmap和MAT分析JVM堆内存

我的一台生产环境机器每次运行几天之后就会莫名其妙的宕机,分析日志之后发现在tomcat刚启动的时候内存占用比较少,但是运行个几天之后内存占用越来越大,通过jmap命令可以查询到一些大对象引用没有被及时GC,这里就要求解决内存泄露的问题。Java的内存泄露多半是因为对象存在无效的引用,对象得不到释放,如果发现Java应用程序占用的内存出现了泄露的迹象,那么我们一般采用下面的步骤分析:1. 用工...

2019-12-13 16:53:20 93

转载 jvm 性能调优工具之 jstat

概述Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat 用法option: 参数选项 -t: 可以在打印的列加上Time...

2019-12-13 16:40:26 61

转载 mac下MAT内存分析工具安装--独立版安装

一、背景在java程序运行中发生OOM的时候,我们可以使用强大的内存分析工具MAT进行问题跟踪,但由于习惯了使用idea开发,再为了MAT下载个eclipse太麻烦,所以安装MAT独立版。二、安装下载地址:https://eclipse.org/mat/downloads.php选择自己系统相应的版本下载,下载完得到一个zip文件,笔者这里使用的是Mac OSX (Mac/Cocoa ...

2019-12-13 16:28:57 475

转载 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并...

2019-12-13 16:20:38 67

转载 DDD实战--互联网开发中的实践分析

至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD)。在互联网开发“小步快跑,迭代试错”的大环境下,DDD似乎是一种比较“古老而缓慢”的思想。然而,由于互联网公司也逐渐深入实体经济,业务日益复杂,我们在开发中也越来越多地遇到传统行业软件开发中所面临的问题。本文就先来讲一...

2019-12-12 18:31:29 334

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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