自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

atarik@163.com

高产似母猪。100% 抄袭 , 欢迎指正

  • 博客(593)
  • 资源 (10)
  • 收藏
  • 关注

原创 四层、七层负载均衡的区别

一、简介 ** 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;**同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。 ** 所谓的四到七层负载均衡,就是在对后台的

2021-02-28 13:40:06 47

原创 ObjectProvider使用

在看HttpMessageConverter部分内容的时候,看到了ObjectProvider。是在这HttpMessageConvertersAutoConfiguration HttpMessageConverters 2个类中引入这个的。在网上找了2篇文章。感觉写的不错自动配置中的ObjectProvider在阅读Spring Boot自动配置源码中关于Tomcat的配置时,看到这样如下的自动配置配置源代码。@Configuration(proxyBeanMethods...

2021-02-28 13:37:46 117

原创 spring session

官方文档当我们把单体 web 应用拆分成分布式 web 应用时,一个不得不面对的问题就是如何处理 session。我们一般的做法不使用 HttpServletRequest,使用分布式存储数据库来存储 session,用的比较多的方案是使用 redis 来存储 sesion 。这样做没什么问题,但是需要修改业务代码,增加了开发和维护成本。对于这个问题 spring-session 提供了一整套的解决方案。它的好处就是你不需要修改你的代码,你依然可以使用原来的 HttpServletReques.

2021-02-28 13:25:22 39

原创 @refreshscope注解

要说清楚RefreshScope,先要了解Scope Scope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念 RefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载。 Scope -> GenericScope -> Refres

2021-02-12 19:33:45 335

原创 CAS-认证

剖析CAS Proxy的设计原理由于CAS在开源社区的影响力,它逐渐被应用到各种复杂的SSO环境中。CAS的基本原理在广州UserGroup上有很多文章介绍,我不再做原理性的探讨,但CAS Proxy稍微复杂,值得对其作一个剖析,以便在日后的配置中减少配置上的失误。1,CAS Proxy的目的CAS Proxy的目的是,当浏览器用户Peter访问应用A,应用A引用了应用B1, B2的授权性资源(Authorized Resource),应用A想代表Peter去访问应用B1, B2,因此应用A需...

2021-02-12 19:28:42 56

原创 记一次内存泄漏问题排查

现象:容器运行1-2小时后,内存逐渐上升到100%,主进程被os kill, 随后容器被重新拉起, 内存再次上升...配置信息, 容器设置的最大内存8G分析过程:1. jinfo pid打印出进程的配置信息, 进程堆内存设置为4G2. jmap -heap pid 打印出堆内内存情况 jmap -histo:live pid > tmp.txt打印每个class的实例数目,内存占用,类全名信息.VM的内部类名字开头会加上前缀”*”.如果live子参数加上后,只统计活的...

2021-02-06 12:33:02 117

原创 类加载器

1.类加载器的父类(非父子继承关系) 启动类加载器,由C++实现,没有父类。 拓展类加载器(ExtClassLoader),由Java语言实现,父类加载器为null 系统类加载器(AppClassLoader),由Java语言实现,父类加载器为ExtClassLoader 自定义类加载器,父类加载器肯定为AppClassLoader。 2.在JVM中表示两个class对象是否为同一个类对象存在两个必要条件类的完整类名必须一致,包括包名。 加载这个类的ClassL

2021-01-01 13:04:54 38

原创 Lambda 表达式的作用

从Java 8开始,Java开始提供Lambda表达式,这里不再介绍Lambda表达式怎么用,只总结Lambda表达式的作用:使用更清楚简洁的一个表达式代替一个函数式接口 减少代码量 代码意图更突出 对集合数据Collection的迭代,过滤,抽取更容易,代码也更简洁 使用变量记住一段逻辑 任务逻辑传递 (目的就是传递一段动态的任务逻辑交给执行者执行) 回调逻辑传递 (目的是调用方发生某个事件之后进行回调) 虽然在能力强弱,表现形式,实现方式和原理上都有诸多不同,但从效果和应用

2020-10-23 19:52:09 80

原创 log4j日志实现重复警告slf4j-log4j12和log4j-slf4j-impl

因为各种三方库依赖的log4j实现不同,所以可能会出现找到多个log4j实现的警告,但是不影响程序(logback是会影响的),如下:SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/software/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found bind

2020-10-18 15:57:36 424

原创 hdfs读写流程

1.HDFS写流程:客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本如图:写详细步骤:1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在2、namenode返回是否可以上传3、client会先对文件进行切分,比如一个blok块128m

2020-10-18 13:00:12 72

原创 hdfs 写异常AlreadyBeingCreatedException

首先抛出的异常如下:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): Failed to APPEND_FILE /binlogsync_test/binlog/mock/test/test_1502173606572 for DFSClient_NONMAPREDUCE_-70835360_1 on 127.0.0.1 because DFSC.

2020-10-18 12:58:35 200

原创 kafka客户端注册报错 InstanceAlreadyExistsException

[kafka_spout:7-MultipleThreadSpoutExecutors] WARN o.a.kafka.common.utils.AppInfoParser - Error registering AppInfo mbeanjavax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=gx-test-20170629at com.sun.jmx.mbeanserver.Repositor

2020-10-18 12:20:43 139

原创 URLClassLoader使用方法

1. java类加载器程序若想执行,必须加载到内存当中才能成功执行。java程序并不是可执行文件,由许多独立的类文件来完成。所以java中加载程序是以类为单外来完成的。这也就需要我们来简单了解一下java的class loader加载机制。Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个: 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现...

2020-10-07 14:02:56 150

原创 Linux查找class类所在jar包

找到Integer.class所在的jar包1.1.使用ls命令版本1ls *.jar | while read jarfile; do echo "$jarfile" jar -tf $jarfile | grep "Integer.class"done在Linux终端命令行输入如下命令,然后直接回车即可:[root@dap211-159 lib]# ls *.jar | while read jarfile; do> echo "$jarfile

2020-10-07 13:49:16 205

原创 关于getClass().getClassLoader().getResourceAsStream

InputStream is = getClass().getClassLoader().getResourceAsStream("helloworld.properties");getClass():取得当前对象所属的Class对象getClassLoader():取得该Class对象的类装载器类装载器负责从Java字符文件将字符流读入内存,并构造Class类对象,所以通过它可以得到一个文件的输入流。装载类的过程非常简单:查找类所在位置,并将找到的Java类的字节码装入内存,生成对应的Cl

2020-10-07 13:46:31 313 1

原创 Java Agent

Java Agent一点都不神秘,也是一个Jar包,只是启动方式和普通Jar包有所不同,对于普通的Jar包,通过指定类的main函数进行启动,但是Java Agent并不能单独启动,必须依附在一个Java应用程序运行,有点像寄生虫的感觉。如何动手写一个Java Agent因为Java Agent的特殊性,需要一些特殊的配置,在META-INF目录下创建MANIFEST文件.并在MANIFEST文件中指定Agent的启动类这里需要解释下为什么要指定Agent-Class和Premain

2020-10-04 12:52:18 82

原创 maven生命周期

1. 生命周期介绍maven是一个项目构建(build)工具。对于一个项目包含清理、编译、测试、打包、发布包、部署等工作,maven把这些工作抽象成一个项目的生命周期,即mavn的生命周期。可以在不使用maven的情况下,实现项目的清理、编译、测试、打包等项目相关操作,可以更好理解maven功能。参考 java自带项目管理命令 。Maven提供了三个独立的生命周期clean、default、site:clean生命周期:负责清理项目 default生命周期:负责构建项目 site生命周期:负

2020-10-03 11:31:21 942

原创 关于泛型

1.一个栗子List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100);for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i); Log.d("泛型测试","item = " + item);}程序的运行结果会以崩溃结束:java.lang.ClassCastExce.

2020-10-03 11:18:39 83

原创 列化对象中的HashMap、HashSet或HashTable等集合不能包含对象自身的引用

如果一个被序列化的对象中,包含有HashMap、HashSet或HashTable集合,则这些集合中不允许保存当前被序列化对象的直接或间接引用。因为,这些集合类型在反序列化的时候,会调用到当前序列化对象的hashCode方法,而此时(序列化对象还未完全加载)计算出的hashCode有可能不正确,从而导致对象放置位置错误,破坏反序列化的实例...

2020-09-11 20:50:49 313

原创 Linux文件句柄泄漏

在 Linux 平台上运行的进程都会从系统资源申请一定数量的句柄,而且系统控制了进程能够申请的最大句柄数量。用户程序如果不及时释放无用的句柄,将会引起句柄泄露,从而可能造成申请资源失败,导致系统文件句柄用光连接不能建立。本文主要介绍Linux下如何查看和修改进程打开的文件句柄数,避免这类问题的发生。句柄介绍句柄的介绍及应用句柄是在 Windows 中引入的一个概念,它是和对象一一对应的 32 位无符号整数值。句柄可以映射到唯一的对象,它是处理对象的一个接口,对于所涉及的对象,可以通过相应的句柄来操

2020-09-11 20:49:17 399

原创 浮点数==比较

System.out.println(0.1d == 0.1f);结果会是flase类型升级(type promotion)首先,来看看java中的几种原生的数值类型进行==或!=比较运算的时候会发生什么。如果运算符两边的数值类型不同,则首先会进行类型升级(type promotion),规则如下:如果运算符任意一方的类型为double,则另一方会转换为double 否则,如果运算符任意一方的类型为float,则另一方会转换为float 否则,如果运算符任意一方的类型为long,则另

2020-09-11 20:46:53 81

原创 Java 中断异常的作用

一直都不太理解中断异常的作用, 直到最近遇到容器内的进程莫名被kill掉, 并且执行完整的结束进程操作. 在这个执行的过程中, 定时任务中抛出中断异常参见:https://segmentfault.com/a/1190000017480171

2020-09-02 19:59:16 111

原创 java程序启动参数-D

java -Dfoo="some string" SomeClass也就是说-D是用来在启动一个java程序时设置系统属性值的。如果该值是一个字符串且包含空格,那么需要包在一对双引号中。何为系统属性值呢?也就是在System类中通过getProperties()得到的一串系统属性。下面我们来写个测试方法就知道了!public class TestSystem {public static void main(String args[]) {System.out.println(.

2020-09-02 19:55:03 217

原创 maven打包插件

一, maven-assembly-pluginAssembly插件支持将项目的所有依赖、文件都打包到同一个输出文件中。目前支持输出以下文件类型:zip tar tar.gz (or tgz) tar.bz2 (or tbz2) tar.snappy tar.xz (or txz) jar dir war二,maven-jar-plugin将java代码打成jar包, 并指定执行程序入口置主类MainClass<plugin> &...

2020-09-02 19:53:04 244

原创 SpringBoot中main方法执行完毕后程序不会直接退出

大部分人应该都知道使用System.exit()或Runtime.exit()可以直接导致当前JVM进程退出,但是仔细想想这个好像跟SpringBoot没啥关系哈另外一个可能会导致进程退出的是所有的非daemon进程完全终止,那么根据这个条件反推的话是不是说只要保证SpringBoot进程中包含1个以上的daemon进程就可以保证程序不会退出接下来我们去看下SpringBoot是如何基于这个特性实现的我们以SpringBoot默认使用的Tomcat容器为例,在我之前SpringBoot源码分析的

2020-09-02 19:40:26 741

原创 消费端报错The coordinator is not aware of this member

1)Consumer中出现单独的standalone consume,而且standalone consume的名字和某个GroupId名字相同,这种现象就会触发报错,具体原因我未深究,因为本项目没有standalone consume存在;2)组成员“崩溃”,造成kafka被动Rebalance,这样就会触发The coordinator is not aware of this member关于第一种错误可能:standalone consumer与consumer group冲突时:这..

2020-09-02 19:38:25 2589

原创 jvm堆外内存监控

一Native Memory Trackingjava8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用开启-XX:NativeMemoryTracking=summary使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off,可以设置为summary或者detail来开启;开启的话,大概会增加5%-10%的性能消耗查看/ # jcmd 1 VM..

2020-07-16 22:09:54 528

原创 System.getProperty 和 System.getenv

介绍java.lang包在java应用中会自动导入。该包包含很多常用的类,从NullPointException到Object,Math以及String等。java.lang.System类是一个final类,意味这我们不能创建它的实例,因此其所有方法都是static。下面我们说明两个系统方法读取系统属性和环境变量的区别,方法名称分别为getProperty and getenv。使用System.getProperty()java平台使用Properties 对象去提供本地系统配置信息,我

2020-07-03 21:31:50 97

原创 在Linux中设置UMASK值

umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。[root@localhost ~]#umask0022umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑,与一般权限有关的是后3组数字。默认情况下,对于目录,用户所能拥有的最大权限.

2020-07-03 21:28:23 379

原创 CyclicBarrier

CyclicBarrier用法  字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。  CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器:publicCyclicBarrier(intparties, Runnable ..

2020-07-03 21:26:39 95

原创 解决SHELL脚本中的export无法生效的问题

#!bin/bashexport PATH=$PATH:/usr/lib/java/jreexport PATH=$PATH:/usr/lib/java/bin---path结果发现直接运行./ path 没起到效果, 后来发现原来机制是这样: 类似于局部变量,从当前shell中运行脚本path,是先创建一个子进程shell 然后运行脚本程序,然后子进程退出,返回父进程shell,因此子shell中对环境变量的改变并不影响父进程看到的环境变量.解决办法: source ./path将代码取

2020-07-03 21:22:09 428 2

原创 更换group.id时kafka从何处开始消费

设置消费者properties的两个参数consumer.group.idproperties.setProperty("auto.offset.reset", "earliest”) // latest注意:只要不更改group.id,每次重新消费kafka,都是从上次消费结束的地方继续开始,不论"auto.offset.reset”属性设置的是什么场景一:Kafka上在实时被灌入数据,但kafka上已经积累了两天的数据,如何从最新的offset开始消费?(最新指相对于当前系.

2020-05-09 20:50:58 237

原创 k8s之pod亲和性与反亲和性的topologyKey

Pod亲和性与反亲和性Pod 间的亲和性与反亲和性根据已经在 Node 上运行的 Pod 的标签来调度新的 Pod 到哪个 Node 上,这些规则的形式是:如果 X 已经运行一个或多个符合规则 Y 的 Pod,那么这个 Pod 应该(如果是反亲和性,则不应该)运行在 X 上。和 Node不同,由于 Pod 都是有命名空间的,所以基于 Pod 标签的标签选择器(Label Selector)必须指定命名空间。可以通过namespaces(与labelSelector和topologyK...

2020-05-09 20:47:23 1736

原创 dockerfile的时区问题

k8s直接挂在/etc/localtime,发现进去容器后执行date -R和宿主机得到的结果一致, 但是jvm中获取到的时间和系统相差8小时, 日志打印同样相差8小时. 在当前基础镜像下, 没有/etc/timezone只有/etc/localtime, 通过命令ls -l /etc/localtime发现宿主机和容器所对应的软连接不一致导致, /etc/localtime存储本地时间,并软连接...

2020-04-24 22:27:26 149 1

原创 docker CMD和ENTRYPOINT指令

CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。单从功能上来看,这两个命令几乎是重复的。单独使用其中的一个就可以实现绝大多数的用例exec 模式和 shell 模式CMD 和 ENTRYPOINT 指令都支持 exec 模式和 shell 模式的写法,所以要理解 CMD 和 ENTRYPOINT 指令的用法,就得先区分 exec 模式和 shell 模式。这两种...

2020-04-19 09:44:22 216

原创 交互/非交互/登录/非登录 shell

一、交互shell 和 非交互shell1、交互shell交互式:顾名思义就是 shell 与用户存在交互,用户登录后,在终端上输入命令,shell 立即执行用户提交的命令。当用户退出后,shell 也终止了。2、非交互shell非交互式:即 shell 与用户不存在交互,而是以 shell script 的方式执行的。shell 读取存放在文件中的命令, 并且执行它们。...

2020-04-19 08:59:26 127

原创 sudo配置文件/etc/sudoers详解

一、sudo执行命令的流程将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。具体工作过程如下:当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限-->确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认-->若密码输入成功,则开始执行...

2020-04-19 08:36:26 141

原创 kafka服务端--SocketServer

kafka在设计上大量使用了Selector+Channel+Buffer的设计原理.所以在开始之前简单介绍一下NIO 的Selector+Channel+BufferNIO 的Selector+Channel+BufferBuffers(缓冲区)Java NIO中的Buffer用于和NIO通道进行交互。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成N...

2020-04-10 22:07:09 108

原创 kafka服务端--ReplicaManager

一、ReplicaManager简介replicaManager主要用来管理topic在本broker上的副本信息。并且读写日志的请求都是通过replicaManager进行处理的。每个replicaManager实例都会持有一个Pool[TopicPartition, Partition]类型的allPartitions变量。Pool其实就是一个Map的封装。通过key(TopicPa...

2020-04-10 21:51:43 129

原创 kafka消费端--增量拉取

前言消费端通过poll方法拉取数据时, 每次都会调用fetch去服务端发起拉数据请求, 那每次不间断的拉取数据, broker端如何判定该次请求拉取的offset?简介为了减少客户端每次拉取都要拉取全部的分区,增加了增量拉取分区的概念。拉取会话(Fetch Session),类似于web中的session是有状态的,客户端的fetch也可以认为是有状态的。这里的状态指的是知道“...

2020-04-10 21:40:47 660

linux 下c实现简单的网络嗅探器

简单的网络嗅探器

2019-02-14

java监听器demo

一个java监听器的实现demo,即观察者设计模式实现

2016-12-27

dbeaver-ce_6.0.0_amd64.deb

dbeaver-ce_6.0.0_amd64.deb

2019-03-11

搜狗词典转txt

py3脚本-py3脚本-py3脚本-py3脚本-py3脚本-py3脚本-py3脚本-py3脚本-

2019-04-26

io文档文档

io说明文档, io说明文档, io说明文档, io说明文档, io说明文档, io说明文档,

2018-05-07

lucene3源码分析

lucene3源码分析

2018-07-12

activemq和spring整合发布消息和订阅消息demo

activemq和spring整合 发布消息和订阅消息demo

2016-11-11

lucene5+zoie实现近实时索引

lucene+zoie近实时索引demo lucene+zoie近实时索引demo

2018-03-07

rabbitmq-server-generic-unix-3.6.13.tar

rabbitmq linux 安装包 rabbitmq linux 安装包 rabbitmq linux 安装包 rabbitmq linux 安装包

2018-01-31

Java虚拟机规范.pdf

Java虚拟机规范(Java SE 8版) pdf Java虚拟机规范(Java SE 8版) pdf Java虚拟机规范(Java SE 8版) pdf Java虚拟机规范(Java SE 8版) pdf

2019-10-12

空空如也

空空如也

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

TA关注的人 TA的粉丝

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