自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 HashMap哈希桶长度为什么是2的幂次

其实hashmap这么设计更多是为了效率,而计算机中位运算是最快的计算方式因此按照2的整数幂进行分配可以利用位运算的优势。最后推荐一款作者自己开发的番茄钟小程序,支持番茄专注,翻页钟倒计时,日,周,月,年等维度信息统计。

2023-09-10 17:29:45 231

原创 如何开发一款带有支付功能的小程序(一)

小程序对于大家来说并不陌生其最早出现在微信中,日常生活中大家肯定也是用过不同类型的小程序。本以为开发一款小程序并不复杂但如果真要发布上线还是需要复杂资质审核才行,本文将介绍作者如何一步一步开发并上线一款小程序的。

2023-09-07 23:06:41 198

原创 Springcloud基于K8S滚动更新方案设计与原理

K8S 滚动更新是Deployment默认更新策略,其本质是启动一个新pod然后在停止一个旧pod直到所有pod更新完成。滚动更新发布速率可以通过如下参数进行控制maxSurge表示当前deployment运行2个pod更新deployment(应用发布)创建新的pod(蓝色pod)新pod启动成功k8s检测到readniess状态ready后停止老pod(红色)老pod停止后(红色pod)继续创建新pod新pod状态为ready 停止老pod(红色)

2023-03-27 11:48:34 1774 1

原创 Kafka connect 源码分析之 ConnectDistributed

Kafka connect 源码分析之 ConnectDistributed

2022-10-18 16:11:44 1230

原创 基于Jenkins+Newman+Postman的接口自动化测试设计

postman+jenkins+newman实现完全自动化的接口测试

2022-06-14 11:27:10 1822 2

原创 SpringCloud @FeignClient 注入Spring容器原理

前言本文分析@FeignClient注解如何别扫描并注入到spring容器中,重点分析 @EnableFeignClients工作原理。由于通过源码分析涉及内容比较多建议根据文章中流程debug调试进行学习。文章涉及 容器刷新模板方法,ConfigurationClassPostProcessor(bean工厂后置处理器),@Import注解等工作原理分析@EnableFeignClients分析在分析前先提出几个问题:@EnableFeignClients通过什么原理可以把自己加到

2022-05-26 14:57:58 2441

原创 Springboot中各个注解解析流程

前言文章主要分析springboot中注解别后处理逻辑

2022-05-15 17:20:46 289

原创 基于K8S+ingress改造vue+nginx+springcloud微服务(一)

背景前端项目整体架构使用vue开发web/h5然后部署到nginx上,后端使用springlcoud+docker进行部署。Ingress介绍Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS。Ingress 可以提供负载均衡、SSL 和基于名称的虚拟托管。必须具有 ingress 控制器【例如 ingress-nginx】才能满足 Ingress 的要求。仅创建 Ingress 资源无效。...

2022-05-13 22:02:34 1972 2

原创 SpringApplication 启动流程及各类事件生命周期那点事

SpringApplication run 方法启动那点事,看完绝对哇塞

2022-05-07 08:00:00 1421

原创 K8S Pod介绍

前言pod作为k8s中运行的最小单元可通过配置生命的方式进行创建。本文结合k8s官方文档介绍podk8s 官方介绍PodsPod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个)容器; 这些容器共享存储、网络、以及运行容器的配置声明如deplyments。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 通常对应物理机上运行的docker容器,但在k8s中pod虽..

2022-05-02 17:51:55 2900

原创 K8S 组件介绍

​本文介绍K8S主要组件及作用,文章内容主要参考K8S官方文档并结合最近K8S搭建CICD实践进行分析。通过K8S提供组件阐述K8S对容器编排,发布,监控等方面带来的优势。关于CICD实践方案请看考:基于GitLab+Jenkins集群+K8S+Docker CICD方案实践。

2022-05-01 20:43:43 934

原创 基于GitLab+Jenkins集群+K8S+Docker CICD方案实践

GitLab+Jenkins集群+docker CICD集成https://blog.csdn.net/woshiyizhiyu0/article/details/124384755

2022-05-01 17:52:34 2418

原创 GitLab+Jenkins集群+docker CICD集成

gitlab jenkins docker 实现cicd

2022-04-24 20:07:55 1720

原创 LinkedHashMap为何能够实现LRU缓存

Jdk中HashMap作为高频使用的数据结构能够满足大多数业务场景,但要HashMap实现LRU缓存功能那就需要额外增加很多代码才能实现。如果想要按照插入顺序遍历HashMap同样需要额外的代码编写才能实现。本文重点讨论LinkedHashMap原理及其应用场景。由于LinkedHashMap继承自HashMap,很多方法直接调用HashMap类中,因此阅读本前最好了解HashMap内部基本原理可以参考之前HashMap源码分析相关文章。HashMap构造方法与内存空间分配HashMap

2022-04-24 10:43:13 584

原创 ArrayList内存空间分配&回收机制

对于Java开发者来说ArrayList类的使用是非常高频的,ArrayList是基于数组实现的线性表并在数组的基础上提供了丰富的操作方法。比较常见的有ArrayList 自动动态扩容 ArrayList 支持数据向前,向后移动 ArrayList 支持按照对象查找 ArrayList 保存有效元素个数其实ArrayList还有一个回收空间的方法如果ArrayList实际元素个数小于其底层分配数组长度则可以进行空间回收,当然这种空间回收是指将多余的空间回收而不是把有效数据占用空...

2022-04-18 13:26:54 2205

原创 手把手分析Springboot @EnableScheduling原理

Java技术栈使用定时任务框架肯定首选Quartz,Quartz支持分布式执行,其原理是借助数据库实现分布式锁竞争保证任务不会同时在多台机器上执行。本文介绍springboot默认定时任务实现原理,以及在springboot单机模式下如何管理项目中所有定时任务:查看任务列表,动态修改定时cron表达式,删除定时任务,新增定时任务等操作。之所以对spring定时任务进行分析也跟工作相关,因为公司目前用airflow作为分布式调度管理大数据离线全部跑批任务,但是airflow由python开发如

2022-04-10 22:26:49 4377 2

原创 Flink Yarn Java Api Application 模式发布应用

背景最近公司在做实时数仓,技术上选择flink作为数据处理引擎,同时需要将实时数仓cdc(ODS层),建模(DWD)等逻辑进行功能化集成到数据仓库中方便数仓开发人员进行使用。由于离线平台使用Yarn作为资源管理器而flink也支持yarn,为通过api进行flink应用的启动停止最终使用flink yarn application 模式进行发布。Flink Yarn 介绍下图为flink官方架构图,主要说明了flink 应用在yarn application模式下用户jar包的执行过程。将用户u

2022-03-19 17:05:06 4296 7

原创 Spring Cloud OpenFeign 使用介绍

文章内容参考springcloud官方文档Spring Cloud OpenFeign,版本为3.0.4介绍Spring Cloud OpenFeign项目设计的初衷是将OpenFeign与Springboot项目进行整合,整合后使用springboot自动装配将其托管到spring容器中声明式rest client: FeignFeign设计为声明式web服务客户端简化了web服务间的请求,在没有使用过Feign前请求http接口需要大量的代码书写与各种配置设置,Feign通过接口+注解的方式.

2022-02-13 15:59:05 428

原创 Datax 使用RDBMS方式链接hiveserver2并查询数据

Datax 使用RDBMS方式链接hiveserver2并查询数据Datax 介绍DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插

2021-04-16 19:40:31 1423

原创 干货满满-springboot底层如何加载配置文件-看完你就知道了

Springboot 配置文件加载源码分析springboot默认配置文件名为application.yml,application.yaml,application.properties当我们在配置文件文件中加入配置后重启springboot,配置信息如何被springboot识别?本篇文章将从源码入手按照如下过程进行分析springboot监听器初始化springboot事件发布器初始化springboot监听器工作原理Springboot监听器机制分析springboot通过声明主类

2021-02-06 21:06:56 451

原创 面试官让我聊聊 ArrayList 解决了数组的哪些问题

数组简介数组对于我们来说并不陌生,在内存中是一块连续的内存空间,通过下标可以随机访问数组元素 如图一所示,而在JDK中提供了功能更加强大的ArrayList其底层是基于数据实现的,为什么JDK已经提供了数据还要使用ArrayList呢?我们通过比较两者之间的差异来聊聊ArrayList的优势java数组中如何获取数组实际元素在面试中经常会问在java中数组长度和ArrayList中的size的区别?通过下面的代码我们其实已经看出来数组获取其长度的时候永远是在声明的时候定义的长度,即使数组中只有一个

2020-09-16 13:24:34 201

原创 SpringBoot Aop原理介绍

SpringBoot Aop 简介Aspect(切面):通常是一个类,里面可以定义切入点和通知JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用Advice(通知):AOP在特定的切入点上执行的增强处理, before,after,afterReturning,afterThrowing,aroundPointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使

2020-08-21 15:13:33 913

原创 AQS中ConditionObject源码分析

简介Java 中任何对象都可以被synchronized加锁实现线程同步,其原因是Java中任何类都继承了Object类,Object类中实现了线程通讯的方法如:wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll(),通过这些方法可以实现线程的阻塞与唤醒,因为AQS队列是Java在代码层面实现的锁因此也提供了线程间通讯的方法,本文将分析AQS队列中ConditionObject内部类以及探索如何实现线程间的通

2020-07-18 10:56:54 180

原创 CountDownLatch 介绍

简介CountDownLatch是一种同步器,功能就让你一个或者多个线程等待其他线程完成任务后才开始执行,使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。成员变量Sync分析CountDownLatch 中只有Sync一个成员变量,Sync是一个实现了AQS队列的内部类,AQS的介绍可以在以前的文章中找到Sync提供带有i

2020-07-17 13:51:35 141

原创 ThreadPoolExecutor原理

简介线程作为系统的资源创建和销毁对系统的开销很大,如果系统需要通过异步的方式来处理大量请求则需要引入线程池来提高线程利用率和减少系统开销,线程池优点如下通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗当任务到达时,任务可以不需要等到线程创建就能立即执行线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控ThreadPoolExecutor 状态转换首先看下线程池的状态转换图通过状态图看到线程池的状态有5种状态,如果用

2020-07-08 16:19:02 108

原创 HashMap 扩容中巧用位运算

其实HashMap已经是一个老生常谈的问题了在面试中也是深受面试官喜爱,在网上如果搜索HashMap原理,源码分析得文章也是非常多本文基于jdk1.8分析下扩容原理jdk1.7与jdk1.8最大的差别是解决hash冲突的数据结构由原来的链表变为链表+红黑树resize方法分析首先翻一下该方法注释,翻译出来感觉还是很拗口初始化或者将table长度变为原来的2倍 如果为空,则根据字段阈值中保留的初始容量目标进行分配。否则的话由于通过double原来table方式进行扩展,如果hash桶在原

2020-06-30 13:32:02 869

原创 谈谈 HashMap(int initialCapacity)与内存分配机制

在JDK的HashMap中存在无参构造函数和有参构造函数,有参构造函数中又存在带有指定容量和加载因子的构造方法和只带有指定容量的构造方法,本文主要分析下 HashMap(int initialCapacity) 构造方法public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR);}public HashMap(int initialCapacity, float loadFactor) {

2020-06-29 14:04:18 3025

原创 SpringCloud Hystrix原理 (二)

在上一篇介绍了Hystrix与FeignClient在Springcloud中集成的基本原理,本文将介绍Hystix的原理,Hystrix在英文中原意是指豪猪,豪猪的特点就是能自我保护,如图所示豪猪成功保护自己后敌人也是一脸懵逼,通过这两张图片简单介绍了真实豪猪的威力,而今天介绍的Hystix是在微服务中起到了自我保护的组件好了讲完动物世界中的豪猪,开始本文的正题首先看下官方给出的流程图并简单介绍流程...

2020-06-27 12:30:01 175

原创 Spring cloud Feign + Hystrix 原理(一)

Spring cloud Feign + Hystrix 原理(一)Netflix Hystrix已经停止更新目前处于维护状态,在SpringCloud中对服务的调用通常是用feign完成的,如果同时想使用hystrix做熔断则只需如下配置就可以完成(前提已经引入了feign相关依赖)引入springcloud hystrix starter 依赖在application.properties 里添加feignclient enable hystrix 配置在启动主类上增加 @EnableHys

2020-06-25 15:08:05 987

原创 SpringCloud FeignClient+Ribbon 底层实现原理(三)

SpringCloud FeignClient+Ribbon 底层实现原理(三)说实话上一篇文章确实内容比较少,所用在开一篇文章彻底将Feign和Ribbon怎么结合的讲下在上一篇文章中我们讲到了jdk的动态代理,我们重点看下invocationHanlder类SynchronousMethodHandler主要分析invoke方法和executeAndDecode,invoke方法是代理类调用方法的入口,通过该方法调用executeAndDecode方法,executeAndDecode方法中真正实现

2020-06-22 13:31:06 1272

原创 SpringCloud FeignClient底层实现原理(二)

SpringCloud FeignClient底层实现原理(二)在上一篇文章中我们分析到了FeignClientFactoryBean的getTarget方法,该方法中我们先分析下loadBalance方法<T> T getTarget() { FeignContext context = this.applicationContext.getBean(FeignContext.class); Feign.Builder builder = feign(context); if (!

2020-06-21 23:15:46 1553

原创 SpringCloud FeignClient底层实现原理(一)

SpringCloud FeignClient底层实现原理(一)在springcloud架构的微服中,服务提供者与服务消费之间主要以HTTP方式进行调用,这与dubbo之间通过tcp方式调用存在一定差异,dubbo中通过接口方式进行远程调用SpringCloud中通过FeignClient定义接口实现远端调用FeignClient主要针对服务消费者使用服务消费者通过 @EnableFeignClient,@FeignClient 来启勇和声明FeignClient 其中@EnableFeignClien

2020-06-20 22:32:28 7134 1

原创 Java锁升级和Synchronized Monitor原理

Java锁升级和Synchronized Monitor原理Java锁升级是JDK对锁的一种优化来加强Java多线程的处理效率,Java中真正实现线程的阻塞与唤醒的是操作是通过底层的系统调用系统调用会进行用户态到内核态的切换并且在切换前需要保存当前的上下文信息,这个过程是相当消耗cpu的在讲锁升级前我们先来来接下Java对象头存储结构与信息,因为锁升级就是在Java对象头内通过状态标志问表示当前锁的状态对象头HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实

2020-06-14 18:30:10 265

原创 AbstractQueuedSynchronizer 简单分析

简介基于FIFO队列的同步框架可以实现锁与同步器,AQS是所有同步器的基类,通过CAS+volatile自旋方式改变同步器状态,提供Condition类来阻塞与唤醒当前线程与Object对象的wait和singal方法效果一样子类通过非public内部静态类实现所需同步器并对外提供加锁(支持公平锁与非公平锁),解锁方法本文不会完全分析该类所有方法重点分析几个模版方法,如果想深入研究请仔细阅读api文档或jdk source code非公平锁模版方法 - acquire模版方法的核心思想是就是

2020-06-12 18:08:24 148

原创 LockSupport 使用说明

LockSupport 使用说明

2020-06-12 11:42:56 179

原创 CPU 一致性缓存协议MESI

CPU 一致性缓存协议MESI计算机在执行指令的时候都是通过cpu进行逐条执行而在执行指令的过程中势必涉及对数据的读写,而数据基本从磁盘加载到内存中cpu直接使用内存中的数据由于cpu计算速度远大于对内存的读写速度如果任何数据的读写都通过内存cpu的效率将会大打折扣,因此在cpu中引入寄存器作为高速缓存提高系统效率例如i = i + 1当cpu执行该语句时首先将i从内存复制到cpu寄存器中(高速缓存)然后将i加一最后将数据更新到主存中,如果此语句在单线程下执行没有任何问题但是在多线程下会出现问题

2020-06-10 22:23:58 285

原创 Spring Boot EnableAutoConfiguration注解的工作原理

SpringBoot一个最核心思想是约定大于配置简要分析其原理

2020-06-09 11:44:55 271

原创 Java Thread 源码浅析

文章目录Thread 源码分析简介进程与线程的区别Java中的线程Thread源码解析start方法分析Thread 源码分析简介在介绍线程前先了解下进程与线程的概念进程进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序

2020-06-09 09:00:41 189

原创 SpringBoot starter 原理分析

文章目录SpringBoot starter 原理分析简介自动装配原理自动转配中注解介绍SpringBoot starter 原理分析简介SpringBoot starter 是SpringBoot提供自动装配的组件,starter的引入大大的减少了常规spring项目的xml配置,减少了由于配置书写错误,配置缺失等问题引起的项目启动异常。自动装配原理通过添加所需的starter到pom中 maven自动将所需的间接依赖添加到项目中,我们以spring-boot-starter-actuator为

2020-06-03 12:02:03 1188

原创 简要分析SpringBoot 启动流程

文章目录SpringBoot 介绍SpringBoot 启动方法分析总结SpringBoot 介绍使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。我们对 Spring 平台和第三方类库有自己的考虑,因此您可以从最基本的开始。大多数 Spring Boot 应用只需要很少的 Spring 配置。您可以使用 Spring Boot 来创建一个可以使用 java -jar 命令来运行或者基于传统的 war 包部署的应用程序。我们还提供了一个用于运行

2020-06-03 09:40:25 142

空空如也

空空如也

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

TA关注的人

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