- 博客(45)
- 收藏
- 关注
原创 吃透文件上传入库设计
今天我们来谈谈一个老生常谈的大文件上传入库话题,主要涉及文件上传、数据去重和数据入库。如果文件相对较小的情况下,使用字节流方式上传文件到服务器,通过HashMap或者HashSet去重即可完成入库操作。但是,遇到数据量比较大文件情况下,就会暴露很多难以预料的问题,比如文件上传失败或者超时,去重内存不足或者OOM,以及入库耗时很长时间等问题。
2023-12-10 12:03:11
2313
原创 Spring注解大纲
目录一、大纲1.1 Spring IOC组件1.2 Spring AOP1.3 Spring声明式事务1.4 Spring注解之扩展二、Spring IOC组件2.1 Spring IOC注解方式2.1 @PostConstruct2.2 @PreDestroy2.3 @ComponentScan2.3.1 注解类2.3.2 实现2.4 @Filter2.5 @Conditional2.5.1 注解2.5.2 实现2.6 @Import2.6.1 注解2.6.2 实现2.7 @Profile三、AOP3.1
2023-05-07 14:47:18
2427
原创 Spring IOC之Singleton Bean创建以及BeanPostProcessor调用源码分析(二)
目录一、版本二、接口详解2.1 什么是BeanPostProcessor?2.2 BeanPostProcessor有什么作用?2.3 为什么要注册BeanPostProcessor?三、IOC容器注册BeanPostProcessor的源码解析3.1 IOC容器注册BeanPostProcessor的时序图3.2 刷新IOC容器3.3 调用注册LoadTimeWeaverAwareProcessor3.4 获取和注册BeanPostProcessor3.5 注册BeanPostProcessor3.6 注
2023-05-07 14:45:47
2370
原创 Spring IOC之ClassPathXmlApplicationContext启动深入源码分析(一)
目录一、版本:二、类图三、时序图四、源码剖析4.1 初始化IOC容器4.2 设置配置文件路径4.2 刷新IOC容器4.3 刷新Bean工厂4.4 刷新BeanFactory4.5 创建工厂4.6 加载Xml中定义的Bean信息五、简化IOC启动源码AnnotationConfigApplicationContext是Spring用来加载注解配置的ApplicationContext,它是如何加载所有的bean,与ClassPathXmlApplicationContext有什么区别,让我们接下来揭开它的神
2023-05-07 14:45:12
2365
原创 Spring IOC之ApplicationContextAwareProcessor源码分析(三)
目录一、概述二、IOC容器注册ApplicationContextAwareProcessor源码解析2.1 IOC注册ApplicationContextAwareProcessor时序图2.2 刷新IOC容器2.3 注册IOC后置处理器和类加载器三、ApplicationContextAwareProcessor源码解析一、概述ApplicationContextAwareProcessor是一个Spring内部工具,它实现了接口BeanPostProcessor,用于向实现了如下某种Aware接口
2023-05-07 14:44:50
2281
原创 Redis数据同步机制
Redis的主从同步机制可以确保redis的master和slave之间的数据同步。按照同步内容的多少可以分为全同步和部分同步;按照同步的时机可以分为slave刚启动时的初始化同步和正常运行过程中的数据修改同步。...
2022-01-11 06:28:54
3986
原创 Maven专题(六) - 插件maven-shade-plugin
网上有一些maven-shade-plugin替代maven-assembly-plugin的文章,原因是代maven-assembly-plugin打出的jar包中要么是不能设置Main-Class,要么spring的META-INF/spring.*文件相互覆盖了。
2022-01-11 06:27:04
5412
原创 Maven专题(五) - 插件maven-assembly-plugin
目录一、Assembly使用二、includes/excludes三、创建可执行的jar四、使用containerDescriptorHandlers合并文件4.1 metaInf-services4.2 metaInf-spring4.3 file-aggregatorAssembly插件主要是聚合项目的输出,比如依赖,模块以及其他文件。通俗的来说,就是将项目内容按照一定规则及指定格式重新组合并输出。它支持的输出格式有多种:jar jar包war war包dir 文件目录zip zip压缩包
2022-01-11 06:26:19
2766
原创 Maven专题(四) - 插件maven-resources-plugin
Resources插件负责处理项目资源文件并拷贝到输出目录。Maven将main resources和test resources分开,一般main resources关联main source code,而test resources关联test source code。Resources插件目标有三个:resources:resources:拷贝main resources到main output directory。它绑定了process-resources生命周期阶段,当执行compiler:
2022-01-11 06:26:12
2511
原创 Maven专题(三) - 聚合与继承
目录一、依赖管理二、插件管理三、约定优于配置四、反应堆在实际项目的使用中,常常会对项目进行模块划分,以降低耦合。如服务接口模块,各业务模块,web模块等。而模块间共享一些相同的依赖,彼此间也紧密联系。此时我们就可以通过maven的聚合和继承来管理模块。比如现在我们有以下模块:example-apiexample-serviceexample-web模块间的关系是example-web和example-service通过example-api相连接。example-web -> exa
2022-01-11 06:26:06
1496
原创 Maven专题(二) - 仓库与私服
目录一、本地仓库和远程仓库二、私服安装2.1 系统版本2.2 服务安装2.3 代理配置三、私服配置四、镜像五、仓库搜索一、本地仓库和远程仓库maven仓库分为本地仓库和远程仓库,当maven根据坐标寻找构件时,首先会从本地仓库中查找,如果本地仓库中没有,则会去远程仓库中查找,然后下载到本地仓库中再使用。本地仓库的仓库目录默认为用户目录/.m2/repository,可以修改 .m2/setting.xml 文件(默认不存在,需要从maven安装目录下copy一份)的localRepository元素。
2022-01-11 06:26:00
1786
原创 Maven专题(一) - Maven基础
目录一、坐标定义二、依赖配置三、依赖范围四、依赖传递五、依赖调解六、依赖排除七、依赖版本归类八、依赖查看与分析九、生命周期十、多环境配置十一、插件11.1 插件目标11.2 插件配置11.3 插件查找十二、Maven内置变量一、坐标定义<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht
2022-01-11 06:25:41
1435
原创 大数据任务调度之Azkaban
目录一、适用场景二、架构2.1 元数据2.2 AzkabanWebServer2.3 AzkabanExecutorServer三、作业流执行过程四、Azkaban架构的三种运行模式五、使用5.1 创建项目5.2 上传项目5.3 工作流视图5.4 项目权限5.5 执行流程视图5.5.1 失败通知5.5.2 电子邮件覆盖5.5.3 故障选项5.5.4 并发选项5.5.5 工作流选项5.6 执行5.7 执行页面5.8 历史页5.9 计划流程5.10 SLA5.11 任务页面5.12 任务编辑5.13 工作历史6
2022-01-11 06:25:02
2522
原创 Flink难点解析:揭开Watermark的神秘面纱
目录一、时间1.1 时间语义1.1.1 Event Time1.1.2 Ingestion Time1.1.3 Processing Time1.2 设置时间语义二、Watermark2.1 Watermark是什么?2.2 如何计算Watermark?2.3 何时出发窗口计算?2.4 原理2.4.1 窗口计算问题2.4.2 水印窗口2.5 Watermark设定策略2.5.1 AssignerWithPunctuatedWatermarks2.5.2 AssignerWithPeriodicWaterma
2022-01-11 06:24:53
1635
原创 Yarn DRF资源分配算法
目录一、DRF计算方式二、DRF伪代码三、算法分配案例四、Yarn源码DRF是一种通用的多资源最大最小公平分配策略(Max-Min Fairness Strategy),其核心思想是在多环境下一个用户的资源分配应该由用户的主导份额的资源决定。主导份额的资源是在所有已经分配给用户的多种资源中,占据最大份额的一种资源。简而言之,DRF试图最大化所有用户中最小的主导份额。一、DRF计算方式假设:系统资源CPU和Memory分别为9 Core和18GB,应用A每个计算任务请求资源为<1 CPU,4GB&
2022-01-10 06:54:50
2156
原创 Hive专题-distinct优化
目录一、问题描述二、分治优化一三、分治优化二一、问题描述在hive中count(distinct)很容易造成数据倾斜。但有时,“数据倾斜”又几乎是必然的。我们来举个栗子:假设表sdk_session_details中记录了访问网站客户端会话信息,即:如果用户打开App客户端,则会产生一条会话信息记录在该表中,该表的粒度为“一次”会话,其中每次会话都记录了用户的唯一标示uuid,uuid是一个很长的字符串,假定其长度为64位。现在的需求是:每天统计当月的活用用户数——“月活跃用户数”(当月访问过app就
2022-01-10 06:54:43
1727
原创 Kafka读写机制深度剖析
目录01. 概述02. Kafka架构2.1 Topic & partition03. 高可靠性分析3.1. Kafka文件存储机制3.2 复制原理和同步方式3.3 ISR3.4 数据可靠性和持久性保证3.5 关于HW的进一步探讨3.6 Leader选举3.7 Kafka的发送模式04. 高可靠性使用分析4.1 消息传输保障4.2 消息去重4.3 高可靠性配置05. BenchMark5.1 测试环境5.2 不同场景测试Kafka 起初是由 LinkedIn 公司开发的一个分布式的消息系统,后成为
2022-01-10 06:54:33
1856
原创 ZAB选举算法
ZAB选举算法01. 什么是Zab协议?01. ZAB协议三阶段02. 服务器状态03. 集群链接建立过程04. Leader选举的触发时机05. 影响成为Leader的因素06. Leader选举的过程07. 广播01. 什么是Zab协议?Zab协议的全称是 Zookeeper Atomic Broadcast (Zookeeper原子广播)。Zookeeper 是通过Zab协议来保证分布式事务的最终一致性。Zab协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议
2022-01-10 06:53:12
2364
原创 大数据之MPP架构
从并行/平行计算系统内存架构来看,目前商用服务器大体可以分为三类,包括对称多处理器架构、非一致性存储访问架构,以及海量并行处理架构
2022-01-10 06:53:05
1866
原创 OLTP与OLAP对比分析
数据处理大致可以分成联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing)两大类。 OLTP是传统关系型数据库的主要应用,主要是负责基本的日常事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。1. OLTP也叫联机事务处理(Online Transaction Processing),一般以每秒执行Transaction以
2022-01-10 06:52:47
1588
原创 Java反射-类基本操作
目录一、Class对象1.1 类描述1.2 类方法1.3 特点二、类对象2.1 获取类对象2.2 获取类构造器2.3 创建类对象三、类成员变量3.1 获取成员变量3.2 Field类介绍3.3 Field类方法摘要3.4 成员变量赋值四、类方法4.1 获取方法4.2 Method类介绍4.2 Method类方法摘要4.4 方法反射调用Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法
2022-01-10 06:52:18
1372
原创 Spark原理与实战
目录1.0 spark原理架构1.1 driver1.2 cluster manager1.3 DAG1.4 RDD依赖关系2.0 spark summary2.1 架构图2.2 项目3.0 spark kafka1.0 spark原理架构1.1 driver1.2 cluster manager1.3 DAG1.4 RDD依赖关系2.0 spark summary2.1 架构图2.2 项目spark-summary3.0 spark kafkaspark kafka.
2022-01-09 00:22:29
2885
原创 梯度下降法的推导
梯度下降法的推导01. 问题02. 什么是梯度03. 梯度推导3.1 一阶泰勒展开式3.2 梯度下降法推论04. 梯度下降是用来做什么的?05. 优缺点5.1 优点5.1 缺点06. 总结梯度下降算法的公式非常简单,”沿着梯度的反方向(坡度最陡)“是我们日常经验得到的,其本质的原因到底是什么呢?为什么局部下降最快的方向就是梯度的负方向呢?也许很多朋友还不太清楚。没关系,接下来我将以通俗的语言来详细解释梯度下降算法公式的数学推导过程。01. 问题假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山
2022-01-09 00:16:40
2323
原创 布隆过滤器原理深度剖析
HBase布隆过滤器原理深度剖析1. 数据结构与原理1.1 初始化1.2 变量映射1.3 变量检索1.4 总结2. 过滤器特性2.1 误判率2.2 判断特点3. 案列代码1970年,布隆提出布隆过滤器(BloomFilter),用于判断一个元素是否不在一个集合中,但是不能精确确定元素在集合中。通常情况下,要确定一个元素是否存在于某个业务场景的集合,一般是将元素保存到集合中,然后通过比较确定,例如采用链表、树、散列表(又叫哈希表,Hash Table)等数据结构。但是,随着集合中元素的增加,需要的存储空间
2022-01-09 00:15:26
1916
原创 Linux常用命令
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言
2022-01-09 00:11:33
2897
原创 linux shell之awk
目录1. 基本介绍1.1. 工作原理1.2 代码块1.3 模式匹配1.4 变量1.4.1 常用内置变量1.4.2 自定义变量2. 输出3. 控制语句3.1 if语句3.2 while条件3.3 for循环3.4 break/continue4. 自定义函数5. 字符串函数awk是Linux Shell文本分析工具之一,功能非常强大。其中,在文本文件处理以及报表生成上,awk是无可替代的。1. 基本介绍文件解析依据,awk认为文本文件都是结构化的。何为结构化呢?也就是,定义每个输入行为一条记录,而行中每
2022-01-09 00:09:08
1996
原创 linux shell之sed
目录1. 概述1.1 工作原理1.2 与vim的区别2. 基本语法2.1 选项2.2 示例2.2.1 多行删除2.2.2 正则匹配2.2.2 正则块匹配2.2.3 替换2.3 组合命令2.3.1 组合多条命令2.3.1 地址范围操作多条命令sed(Stream Editor)是一款强大流式、非交互式的编辑器,集合正则表达式,可以对标准输出或者其他输出进行处理并输出。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基
2022-01-09 00:08:19
1972
原创 Java基础之jdk8 HashMap源码解读
目录一、存储特点1.1 数据结构的演变1.2 特点二、类结构2.1 继承关系2.2 成员变量2.3 构造方法2.3.1 HashMap(initialCapacity, loadFactor)2.3.2 HashMap(Map<?, ?> m)2.4 成员方法2.4.1 添加节点元素2.4.2 内部添加节点元素2.4.3 将链表转换为红黑树2.4.4 扩容2.4.5 删除2.4.6 查找元素三、思考题3.1 jdk8为何需要引入红黑树?3.2 HashMap中hash函数是怎么实现的?还有哪些h
2022-01-09 00:04:45
1924
原创 Java基础之jdk8 ConcurrentHashMap源码解读
目录一、存储结构的演变二、源码成员变量2.1 table2.2 nextTable2.3 baseCount和counterCells2.4 sizeCtl三、辅助函数3.1 哈希值计算方法3.2 最小幂次数计算方法四、构造函数4.1 默认参数4.2 指定初始容量4.3 指定初始容量和加载因子4.4 指定初始容量、加载因子和并发线程数五、数据变更操作5.1 结构初始化5.2 数据插入5.3 树结点更新5.4 更新结点数5.5 修改计数5.6 桶扩容5.7 协助扩容六、数据获取6.1 数据查找6.2 大小获取
2022-01-09 00:03:59
3311
原创 Java之SecurityManager安全管理器
安全管理器在Java语言中的作用就是检查操作是否有权限执行。是Java沙箱的基础组件。我们一般所说的打开沙箱,也是加-Djava.security.manager选项。
2022-01-08 21:39:02
5576
原创 Java Unsafe技术解析
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得Java这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。
2022-01-08 21:37:36
2118
原创 Java之AccessController安全模型
目录一、JDK的安全模型1.1 JDK1.0 安全模型1.2 JDK1.1 安全模型1.3 JDK 1.2 安全模型1.4 最新安全模型二、AccessController2.1 方法摘要2.2 栗子作为一种诞生于互联网兴起时代的语言,Java从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的Java程序是安全的,如何对Java程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到Java语言的设计与实现。可以说Java在这些方面的探索与经验,对后来的一些语言与产品都带来了积极影响。
2022-01-08 21:34:03
3426
原创 Log4j日志配置详解
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2022-01-08 21:31:29
4154
原创 Java内存映射原理与实现
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。
2022-01-08 21:28:46
2720
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人