- 博客(322)
- 资源 (72)
- 收藏
- 关注

原创 老猿说说-AbstractQueuedSynchronizer(2)
本章我们主要聊下如何释放锁和同步队列两大部分。1 释放锁释放锁的触发时机就是我们常用的 Lock.unLock () 方法,目的就是让线程释放对资源的访问权(流程见整体架构图紫色路线)。释放锁也是分为两类,一类是排它锁的释放,一类是共享锁的释放,我们分别来看下。1.1 释放排它锁 release排它锁的释放就比较简单了,从队头开始,找它的下一个节点,如果下一个节点是空的,就会从尾开始,一直找到状态不是取消的节点,然后释放该节点,源码如下:// unlock 的基础方法public final
2020-10-14 09:45:34
87989
1

原创 老猿说说-ArrayList
1 概述ArrayList 整体架构比较简单,就是一个数组结构比如:长度为10的数组,从1开始计数,index表示数组的下标,从0开始计数,elementData表示数组本身,源码中除了这两个概念,还有以下三个基本概念:DEFAULT_CAPACITY表示数组的初始大小,默认是10,这个数字要记住;size表示当前数组的大小,类型int,没有使用volatile修饰,非线程安全的;modCount统计当前数组被修改的版本次数,数组结构有变动,就会+1。类注释看源码,首先要看类注释,我们看
2020-10-09 11:37:04
39691
7
原创 CSI-external-provisioner
这段代码是一个复杂的CSI Provisioner实现,它集成了Kubernetes客户端、CSI驱动、度量收集、拓扑感知、容量管理等多个组件。通过精心设计的架构和模块化的代码,它能够在Kubernetes集群中高效地提供和管理持久卷。
2025-04-14 23:01:01
500
原创 CSI-PVController-volumeWorker
与claim worker流程一样,从volumeQueue中取数据,也就是取出的都是PV,如果informer中有这个pv,就进入update流程。
2025-04-13 20:26:03
493
原创 CSI-PVController
与claim worker流程一样,从volumeQueue中取数据,也就是取出的都是PV,如果informer中有这个pv,就进入update流程。周期性的List pv pvc放到对应的claimoueue&volumeQueue里面重新处理。如果pv没有更新(与缓存中一致),就直接返回处理下一个,如果有更新,执行syncVolume。增加pvc索引pod。
2025-04-13 18:31:49
874
原创 Koordinator-nodeMetricController
获取NodeColocationStrategy,再从上面获取NodeMetricCollectPolicy。
2025-04-12 18:08:33
230
原创 Koordinator-CpuEvictor
初始化CpuEvictor,也是一个framework.QOSStrategy。参数:驱逐间隔1秒、冷却时长20秒、metric采集间隔1秒、stateInformer、metric缓存。
2025-04-02 17:06:29
128
原创 Koordinator-Metric查询
以CollectAllPodMetricsLast()举例,看看koordinator怎样使用tsdb进行查询。
2025-03-29 18:14:11
331
原创 Koordinator-QOSManager
构建opt,包含cgroupReader、statesInformer、metric缓存、eventRecorder、k8s客户端、驱逐版本、Qos配置、metricAdvisor配置。初始化eventRecord、cgroupReader、evictor。构建context,包含evictor和策略map。
2025-03-29 12:37:23
250
原创 Koordinator-NodeMetricInformer
核心方法collectMetrics(),采集nodeMetricInfo, podMetricInfo, prod。把采集的数据放入nodeMetricStatus,node对应的更新NodeMetric CR。nodeMetricInformer也在这里进行了Start()继续往下看,stateInformer启动plugin。一开始的时候作为一个Plugin进行了初始化。nodeMetricInformer在。再看下nodeMetric的数据结构。
2025-03-29 12:36:32
249
原创 Koordinator-Predict
遍历所有的pair,最大检查个数和间隔时间判断下,然后调用model的SaveToCheckpointer方法。目前只看到了怎样把数据放入到model中,还没有看到怎样去使用model数据。获取node最近cpu/mem使用率,更新nodeid model。不存在对应model则设置一下model,调用AddSample()遍历所有的model,若上次更新信息大于配置的过期时长,则删除。更新node priority class model。接下来去找下哪里使用了model。遍历所有的model。
2025-03-29 12:35:39
392
原创 版本号后面的字母含义
RC:版本 (Release Candidate) Candidate是候选人的意思,用在软件上就是候选版本。Release是发行、发布的意思。Release.Candidate.就是发行候选版本。和Beta版最大的差别在于Beta阶段会一直加入新的功能,但是到了RC版本,几乎就不会加入新的功能了,而主要着重于除错!GA版本在很多软件下载的时候,你会发觉标识为GA或者CRx等。比如MySQL和JBoss都采用这种标识。那什么是GA呢。GA是GenerallyAvailable的缩写,意思.
2021-02-18 17:37:36
3112
原创 线程池面试题
#md#1 面试题1.1 创建子线程时,子线程是得不到父线程的 ThreadLocal,有什么办法可以解决这个问题?答:这道题主要考察线程的属性和创建过程,可以这么回答。可以使用 InheritableThreadLocal 来代替 ThreadLocal,ThreadLocal 和 InheritableThreadLocal 都是线程的属性,所以可以做到线程之间的数据隔离,在多线程环境下我们经常使用,但在有子线程被创建的情况下,父线程 ThreadLocal 是无法传递给子线程的,但 Inhe
2020-12-22 09:43:44
47653
原创 Future、ExecutorService
1 整体架构画了一个关于线程 API 之间关系的依赖图,如下:在上一章节,我们说了 Thread 和 Runnable,本小节我们按照这个图把剩下的几个 API 也说完,然后把 API 之间的关系理清楚。为了方便大家更好的理解,我们首先看一个 demo,这个场景说的是我们往线程池里面提交一个有返回值的线程,代码如下:// 首先我们创建了一个线程池ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 3, 0L, TimeUnit.MILL
2020-12-22 09:36:47
46924
原创 kudu坑1
坑1: Caused by: org.apache.kudu.client.NoLeaderFoundExceptionCaused by: org.apache.kudu.client.NoLeaderFoundException: Master config (192.168.1.117:7051) has no leader.Exceptions received: org.apache.kudu.client.RecoverableException:[peer master-192.1..
2020-11-25 15:05:36
860
转载 TIME_WAIT、CLOSE_WAIT原因,危害,如何避免
前言请说说你对TCP连接中time_wait状态的理解解答:先上TCP的状态变迁图这幅图来自《TCP IP详解卷1:协议 原书第2版中文》13.5 TCP状态转换图这幅图来自《UNIX网络编程,卷1:套接字联网API》2.6.4 TCP状态转换图1. time_wait状态如何产生?由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在...
2020-11-24 17:50:44
1731
原创 老猿说说-Thread
引导语从本章开始我们开始学习线程的知识,线程是非常有趣的一个章节,大多数同学对于线程 API,属于不用就忘,到用时需要百度的情况,希望通过本小节的源码阅读,能够加深对线程的印象。本小节主要三章,本章主要说线程的基本概念、使用姿势、Thread 和 Runnable 的源码;Future、ExecutorService 源码解析章节主要说异步线程执行;押宝线程源码面试题章节主要说说常遇到的源码面试题。由于线程的概念很多,所以本章会先介绍很多线程的基本概念,说清楚后再解析源码,不然有些同学会看不懂,大家见
2020-11-24 10:12:11
45941
原创 队列面试题
1 面试题1.1 说说你对队列的理解,队列和集合的区别。答:对队列的理解:首先队列本身也是个容器,底层也会有不同的数据结构,比如 LinkedBlockingQueue 是底层是链表结构,所以可以维持先入先出的顺序,比如 DelayQueue 底层可以是队列或堆栈,所以可以保证先入先出,或者先入后出的顺序等等,底层的数据结构不同,也造成了操作实现不同;部分队列(比如 LinkedBlockingQueue )提供了暂时存储的功能,我们可以往队列里面放数据,同时也可以从队列里面拿数据,两者可以同时进
2020-11-24 10:03:49
46412
原创 rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
解决办法:在rpm 语句后面加上 --force --nodeps就可以了。例如sudo rpm -ivh python3-libs-3.6.8-13.el7.x86_64.rpm --force --nodeps
2020-11-23 19:05:15
11566
原创 老猿说说-SynchronousQueue
引导语SynchronousQueue 是比较独特的队列,其本身是没有容量大小,比如我放一个数据到队列中,我是不能够立马返回的,我必须等待别人把我放进去的数据消费掉了,才能够返回。SynchronousQueue 在消息队列技术中间件中被大量使用,本文就来从底层实现来看下 SynchronousQueue 到底是如何做到的。1 整体架构SynchronousQueue 的整体设计比较抽象,在内部抽象出了两种算法实现,一种是先入先出的队列,一种是后入先出的堆栈,两种算法被两个内部类实现,而直接对外的
2020-11-19 10:06:56
122913
5
原创 老猿说说-LinkedBlockingQueue
引导语说到队列,大家的反应可能是我从来都没有用过,应该是不重要的 API 吧。如果这么想,那就大错特错了,我们平时使用到的线程池、读写锁、消息队列等等技术和框架,底层原理都是队列,所以我们万万不可轻视队列,队列是很多高级 API 的基础,学好队列,对自己深入 Java 学习非常重要。本文主要以 LinkedBlockingQueue 队列为例,详细描述一下底层具体的实现。1 整体架构LinkedBlockingQueue 中文叫做链表阻塞队列,这个命名很好,从命名上就知道其底层数据结构是链表,并且
2020-11-19 09:21:10
51488
原创 vue中v-on支持的事件总结
资源事件事件名称 何时触发 error 资源加载失败时。 abort 正在加载资源已经被中止时。 load 资源及其相关资源已完成加载。 beforeunload window,document 及其资源即将被卸载。 unload 文档或一个依赖资源正在被卸载。 网络事件事件名称 何时触发 online 浏览器已获得网络访问。 offline 浏览器已失去网络访问。 焦点事件事件名称 何时触发...
2020-11-17 16:19:29
1645
原创 老猿说说-CopyOnWriteArrayList
引导语在 ArrayList 的类注释上,JDK 就提醒了我们,如果要把 ArrayList 作为共享变量的话,是线程不安全的,推荐我们自己加锁或者使用 Collections.synchronizedList 方法,其实 JDK 还提供了另外一种线程安全的 List,叫做 CopyOnWriteArrayList,这个 List 具有以下特征:线程安全的,多线程环境下可以直接使用,无需加锁;通过锁 + 数组拷贝 + volatile 关键字保证了线程安全;每次数组操作,都会把数组拷贝一份出来,在新
2020-11-17 11:04:25
73406
原创 并发List/Map面试题
#md#1 CopyOnWriteArrayList 相关1.1 和 ArrayList 相比有哪些相同点和不同点?答:相同点:底层的数据结构是相同的,都是数组的数据结构,提供出来的 API 都是对数组结构进行操作,让我们更好的使用。不同点:后者是线程安全的,在多线程环境下使用,无需加锁,可直接使用。1.2 CopyOnWriteArrayList 通过哪些手段实现了线程安全?答:主要有:1. 数组容器被 volatile 关键字修饰,保证了数组内存地址被任意线程修改后,都会通知到其他线程;对
2020-11-17 10:41:31
38082
原创 老猿说说-ArrayBlockingQueue
#md#引导语本小节我们来介绍本章最后一个队列:ArrayBlockingQueue。按照字面翻译,中文叫做数组阻塞队列,从名称上看,我们就比较清楚此阻塞队列底层使用的是数组。一说到数组,大家可能会想到 ArrayList 和 HashMap,举新增场景来说 ArrayList 通过 size ++ 找到新增的数组下标位置,HashMap 通过 hash 算法计算出下标位置,那么 ArrayBlockingQueue 是不是也是这两种方法呢?都不是,ArrayBlockingQueue 使用的是一种非常
2020-11-16 09:51:12
41081
转载 基于 Flink SQL CDC 的实时数据同步方案
Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 Flink CDC 同步的解决方案以及更多的应用场景和 CDC 未来开发规划等方面进行介绍和演示。1、传统数据同步方案2、基于 Flink SQL CDC 的数据同步方案(Demo)3、Flink SQL CDC 的更多应用场景4、Flink SQL CDC 的未来规划传统的数据同步
2020-11-10 17:56:42
1292
1
原创 kafka0.8-socketserver
class SocketServer(val brokerId: Int, val host: String, val port: Int, val numProcessorThreads: Int, val maxQueuedRequests: ...
2020-11-10 13:11:33
163
原创 句柄自动释放问题
FileChannel没有自动释放!!!!其他的垃圾回收会自动释放import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.ch...
2020-11-10 13:11:05
685
原创 kafka源码环境
本文主要讲述的是如何搭建Kafka的源码环境,主要针对的Windows操作系统下IntelliJ IDEA编译器,其余操作系统或者IDE可以类推。1.安装和配置JDK确认JDK版本至少为1.7,最好是1.8及以上。使用java -version命令来查看当前JDK的版本,示例如下: C:\Users\hidden> java -versionjava versio...
2020-11-10 13:10:51
283
原创 hadoop日常运维
日常运维 升级 问题处理方法日常运维进程管理由于配置文件的更改,需要重启生效,或者是进程自己因某种致命原因终止,或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动,或者是增删节点过程中的需要,进程的关闭与启动,使用hadoop-daemon.sh start|stop datanode/namenode/journalnode/zkfcyarn-da...
2020-11-10 13:10:38
481
原创 hive1.2.2安装
Hive是Hadoop组态中的数据仓库,本质是将sql语句转换为MapReduce任务,所以Hive只是一个解析引擎,它的数据存储在hdfs上,元数据信息依托mysql数据库。在这里有一个小问题,为什么需要mysql关系数据库,因为hdfs存储的只是数据信息,而建表的时候是需要列名来查询的,因此要用mysql来建立表信息,当然也可以用其他的关系型数据库。在这里依托mysql数据库搭建Hive组件。...
2020-11-10 13:10:29
200
原创 gc配置
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如2013-05-04T21:53:59.234+0800)-XX:+PrintH...
2020-11-10 13:10:14
185
原创 yarn配置
下面配置的是两个队列default和etl,default队列分配20%的处理能力, etl队列分配80%的处理能力,用户dba只能向default队列提交作业,用户etl只能向etl队列提交作业,dba用户组只能向default队列提交任务:yarn.scheduler.capacity.maximum-am-resource-percent=0.2 --AM可以占用资源队列的最大百分比...
2020-11-10 13:10:04
230
原创 dmesg
一、适用场景:如果发现自己的java进程悄无声息的消失了,几乎没有留下任何线索,那么dmesg一发,很有可能有你想要的。二、具体操作sudo dmesg|grep -i kill | less1去找关键字oom_killer,找到的结果类似如下:[6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0,...
2020-11-10 13:09:43
247
原创 Spring Cloud Gateway路由规则
概念解释:Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容Spring Cloud GateWay 工作流程如下所示:客户端向Spring Clou
2020-11-06 10:47:26
2935
原创 位于磁盘不同磁道的扇区读写速度是否一样
位于磁盘不同磁道的扇区读写速度是否一样,每个磁道上的扇区又是怎么分布的硬盘的划分我们都知道机械硬盘的最小存储单位为扇区。而扇区分布在磁盘盘面上,盘片上划分出一个个同心圆,每两个同心圆之间被称为磁道。不同盘片上的同一位置的磁道组成了一个个柱面。对磁道再进行划分就成了扇区。而硬盘容量的计算公式为:硬盘容量=柱面数 x 磁头数 x 扇区数 x 扇区大小对于同心圆上的磁道进行划分的话,每个同心圆的扇区数是一样的(早期的硬盘确实如此)由于硬盘主轴的工作方式都是CAV(Constant Angular...
2020-11-05 09:23:37
1096
原创 zipkin日志配置
日志配置在需要追踪的示例应用中,修改日志配置,这里使用springboot构建,logback作为日志输出工具<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] [%thread] %-5level %logger{50} - %msg%n"/><!-- 按照每天生成日志文件 --> <appender
2020-11-04 12:58:39
1477
axis2-eclipse-codegen-plugin-1.6.2.zip
2014-12-22
axis2-eclipse-service-plugin-1.6.2.zip
2014-12-22
apache-solr-3.5.0.jar
2014-10-16
jQuery实战中文版+源码
2014-12-01
疯狂JAVA讲义+源码.李刚.rar
2014-12-22
Hive编程指南.pdf
2014-10-29
HTTP权威指南(中文版)
2015-04-08
storm实时数据处理
2014-10-29
深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)
2014-10-25
Oracle DBA培训教程:从实践中学习Oracle数据库管理与维护(第2版).part1
2014-05-04
protobuf-2.5.0.tar
2015-03-22
ArrayList.md
2020-10-12
HashMap.md
2020-10-12
Spark大型集群上的快速和通用数据处理架构(翻译版)
2015-04-29
ADT-21.1.0.zip(eclipse安卓插件)
2015-05-14
Spark快速大数据分析PDF
2017-03-28
HTTP权威指南(中文版).part2
2015-04-08
Go语言编程
2015-07-24
ADT15.0.0.zip(安卓开发工具)
2015-05-14
Storm分布式实时计算模式.pdf(中文)
2015-04-29
Go语言·云动力
2015-07-24
实用负载均衡技术:网站性能优化攻略
2015-04-08
HTML5高级程序设计(完整版)
2015-04-08
Cassandra权威指南
2015-04-08
Nginx模块开发与架构解析
2015-07-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人