摘要:
剖析CAS Proxy的设计原理 由于CAS在开源社区的影响力,它逐渐被应用到各种复杂的SSO环境中。CAS的基本原理在广州UserGroup上有很多文章介绍,我不再做原理性的探讨,但CAS Proxy稍微复杂,值得对其作一个剖析,以便在日后的配置中减少配置上的失误。 1,CAS Proxy的目的 阅读全文
摘要:
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。 class Solution { public int rangeBitwiseAnd(int m, int n) { if(m==n) return m; i 阅读全文
摘要:
现象:容器运行1-2小时后,内存逐渐上升到100%,主进程被os kill, 随后容器被重新拉起, 内存再次上升... 配置信息, 容器设置的最大内存8G 分析过程: 1. jinfo pid打印出进程的配置信息, 进程堆内存设置为4G 2. jmap -heap pid 打印出堆内内存情况 jma 阅读全文
摘要:
JAAS 认证过程 如上图所示,JAAS 认证过程分如下几个步骤: 1. 实例化一个 javax.security.auth.login.LoginContext 对象,它负责协调认证过程。该过程可用如下代码描述: LoginContext lc = new LoginContext(name, n 阅读全文
摘要:
1.类加载器的父类(非父子继承关系) 启动类加载器,由C++实现,没有父类。 拓展类加载器(ExtClassLoader),由Java语言实现,父类加载器为null 系统类加载器(AppClassLoader),由Java语言实现,父类加载器为ExtClassLoader 自定义类加载器,父类加载器 阅读全文
摘要:
从Java 8开始,Java开始提供Lambda表达式,这里不再介绍Lambda表达式怎么用,只总结Lambda表达式的作用: 使用更清楚简洁的一个表达式代替一个函数式接口 减少代码量代码意图更突出对集合数据Collection的迭代,过滤,抽取更容易,代码也更简洁使用变量记住一段逻辑 任务逻辑传递 阅读全文
摘要:
因为各种三方库依赖的log4j实现不同,所以可能会出现找到多个log4j实现的警告,但是不影响程序(logback是会影响的),如下: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:f 阅读全文
摘要:
1.HDFS写流程: 客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本 如图: 写详 阅读全文
摘要:
首先抛出的异常如下: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): Failed to APPEND_FILE /binlogsync_test 阅读全文
摘要:
1. java类加载器 程序若想执行,必须加载到内存当中才能成功执行。java程序并不是可执行文件,由许多独立的类文件来完成。所以java中加载程序是以类为单外来完成的。这也就需要我们来简单了解一下java的class loader加载机制。 Java 中的类加载器大致可以分成两类,一类是系统提供的 阅读全文
摘要:
InputStream is = getClass().getClassLoader().getResourceAsStream("helloworld.properties"); getClass():取得当前对象所属的Class对象 getClassLoader():取得该Class对象的类装载 阅读全文
摘要:
Java Agent一点都不神秘,也是一个Jar包,只是启动方式和普通Jar包有所不同,对于普通的Jar包,通过指定类的main函数进行启动,但是Java Agent并不能单独启动,必须依附在一个Java应用程序运行,有点像寄生虫的感觉。 如何动手写一个Java Agent 因为Java Agent 阅读全文
摘要:
一直都不太理解中断异常的作用, 直到最近遇到容器内的进程莫名被kill掉, 并且执行完整的结束进程操作. 在这个执行的过程中, 定时任务中抛出中断异常 参见: https://segmentfault.com/a/1190000017480171 阅读全文
摘要:
CyclicBarrier用法 字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 Cyclic 阅读全文
摘要:
#!bin/bash export PATH=$PATH:/usr/lib/java/jre export PATH=$PATH:/usr/lib/java/bin path 结果发现直接运行./ path 没起到效果, 后来发现原来机制是这样: 类似于局部变量,从当前shell中运行脚本path, 阅读全文
摘要:
Exception in thread "main" java.lang.ExceptionInInitializerError at org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:12 阅读全文
摘要:
Pod亲和性与反亲和性 Pod 间的亲和性与反亲和性根据已经在 Node 上运行的 Pod 的标签来调度新的 Pod 到哪个 Node 上,这些规则的形式是: 如果 X 已经运行一个或多个符合规则 Y 的 Pod,那么这个 Pod 应该(如果是反亲和性,则不应该)运行在 X 上。 和 Node不同, 阅读全文
摘要:
一、交互shell 和 非交互shell 1、交互shell 交互式:顾名思义就是 shell 与用户存在交互, 用户登录后,在终端上输入命令,shell 立即执行用户提交的命令。 当用户退出后,shell 也终止了。 2、非交互shell 非交互式:即 shell 与用户不存在交互,而是以 she 阅读全文
摘要:
正常情况下,定时器我们都是用Timer和TimerTask这两个类就能完成定时任务,并且设置延长时间和循环时间间隔。 ScheduledThreadPoolExecutor也能完成Timer一样的定时任务,并且时间间隔更加准确。 误差说明: 在后台程序看看一下Timer执行程序是有可能延迟1、2毫秒 阅读全文
摘要:
第一:初始化的时候 object Sample { var name:String=_ def main (args: Array[String]){ name="hello world" println(name) } 在这里,name也可以声明为null,例:var name:String=nu 阅读全文
摘要:
一, 概述 控制器是Kafka的核心组件之一,它的主要作用是在 ZooKeeper 的帮助下协调和管理整个Kafka集群。Kafka 利用ZooKeeper 的领导者选举机制,每个Broker 都会参与竞选主控制器,但是最终只会有一个 Broker 可以成为主控制器。下面我们简单的看一下控制器主要的 阅读全文
摘要:
1、KafkaConsumer poll 详解 消息拉起主要入口为:KafkaConsumer#poll方法,其声明如下: public ConsumerRecords<K, V> poll(final Duration timeout) { // @1 return poll(time.timer 阅读全文
摘要:
1. 相关配置项 Consumer读取partition中的数据是通过调用发起一个fetch请求来执行的。而从Kafka Consumer来看,它有一个poll方法。但是这个poll方法只是可能会发起fetch请求。原因是:Consumer每次发起fetch请求时,读取到的数据是有限制的,通过配置项 阅读全文
摘要:
创建TCP连接 消费者端的主要程序入口是KafkaConsumer,但构建KafkaConsumer实例不会创建任何TCP连接 构建KafkaProducer实例时,会在后台默默地启动一个Sender线程,Sender线程负责Socket连接的创建在Java构造函数中启动线程,会造成this指针逃逸 阅读全文
摘要:
Java8的foreach循环,这个循环里面,break和continue都不管用. 需要使用return,这个只能跳过本次循环,还是会继续执行for循环的 package com.lxk.java8.lambdaTest; import java.util.Arrays; import java. 阅读全文
摘要:
Consumer Group 提及Consumer Group,最先想到的就是Group与Consumer Client的关联关系: 1,Consumer Group用group.id(String)作为全局唯一标识符2,每个Group可以有零个、一个或多个Consumer Client3,每个Gr 阅读全文
摘要:
kafka 在 0.10.1.1 版本增加了时间索引文件,因此我们可以根据时间戳来访问消息。 时间戳可否自定义, 如果自定义时间戳写入先后错乱, 索引怎么弄???? 具体原理 具体使用 如以下需求:从半个小时之前的offset处开始消费消息,代码示例如下: package com.bonc.rdpe 阅读全文
摘要:
SASL/PLAIN认证机制开启方法: 修改Kafka配置文件 server.properties 或者其它名字(CDH和Ambari的发行版可能文件名有所差异) sasl.enabled.mechanisms = PLAIN sasl.mechanism.inter.broker.protocol 阅读全文
摘要:
SASL - 简单认证和安全层 SASL是一种用来扩充C/S模式验证能力的机制认证机制, 全称Simple Authentication and Security Layer. 当你设定sasl时,你必须决定两件事;一是用于交换“标识信 息”(或称身份证书)的验证机制;一是决定标识信息存储方法的验证 阅读全文
摘要:
传统的JAVA安全机制没有提供必要的架构支持传统的认证和授权;在J2SE里的安全是基于公钥密码体系和代码签名。也就是说,认证是基于在JVM里执行代码的思想,并且没有对资源请求提供策略。而且授权也是基于这样的概念--代码试图去使用一个计算机资源。Java认证和授权服务(JAAS)也就被设计成去应付这些 阅读全文
摘要:
1、为什么要有浮动IP这个东西 现在有一个场景,在一台Linux上部署一个web应用,应用跑在tomcat里面,linux网卡上的ip是115.239.100.120 大致就是如下的部署关系: 用户通过输入IP地址就能访问这个应用了,但是天有不测风云,有时候因为一些原因,服务会挂掉。于是开发人员就 阅读全文
摘要:
当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令。这些行为都算是启动bash时的过程。 另外,有些时候登录系统是可以交互的(如正常登录系统),有些时候是无交互的(如执行一个脚本),因此总的来说bash启动类型可分为交互式shell和非交互式shel 阅读全文
摘要:
ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中,下文主要是探究 ConfigMap 的创建和更新流程,以及对 ConfigMap 更新后容器内挂载的内容是否同步更新的测试。 测试示例 假设我们在 default namespace 下有一个名为 阅读全文
摘要:
Pod、ReplicaSet、Deployment、Service之间的关系如下图 Pod: Pod是一个或多个容器的组合,这些容器共享存储、网络和命名空间,以及如何运行的规范。Pod是Kubernetes的最小可部署单元。Pod的中文译词是豌豆荚,docker容器就像是豆子运行在豌豆荚内。 Rep 阅读全文
摘要:
方法的定义 有以下几点需要注意: 所有参数必须制定类型;递归方法,不能省略返回值类型,其他情况下可以忽略(方法可以通过=右侧的函数主体推断出返回值类型)单行方法主体,可以与方法写在一行并忽略{} 过程 在Scala中,定义方法时,如果方法体直接包裹在了花括号里面,而没有使用=连接,则方法的返回值类型 阅读全文
摘要:
kafka的每个topic都可以创建多个partition,partition的数量无上限,并不会像replica一样受限于broker的数量,因此partition的数量可以随心所欲的设置。那确定partition的数量就需要思考一些权衡因素。 越多的partition可以提供更高的吞吐量 在ka 阅读全文
摘要:
sh方式 使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。$ ./script.sh与$ sh script.sh等效。 例子 使用loop.sh脚本反复打印当前进程号。 $ 阅读全文
摘要:
一个例子 闭包,简单的理解就是:函数内部的变量不在其作用于时,仍然可以从外部进行访问,听上去有些抽象; 下面我们来通过一个简单的例子实现 Scala 中的闭包,代码如下: object Closures { def main(args: Array[String]): Unit = { val ad 阅读全文
摘要:
Kafka分布式的单位是partition,同一个partition用一个write ahead log组织,所以可以保证FIFO的顺序。不同partition之间不能保证顺序。 但是绝大多数用户都可以通过message key来定义,因为同一个key的message可以保证只发送到同一个parti 阅读全文
摘要:
先用一张图总结Sender线程的流程 在 KafkaProducer 中会启动一个单独的线程,其名称为 “kafka-producer-network-thread | clientID”,其中 clientID 为生产者的 id 1、Sender 线程详解 1.1 类图 我们先来看一下其各个属性的 阅读全文