自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小马里奥的博客

技术路上的小见证

  • 博客(26)
  • 收藏
  • 关注

原创 AQS核心逻辑源码分析

AQS核心逻辑源码分析AQS是什么AQS的设计初衷:将基础的同步相关操作抽象在AbstractQueuedSynchronizer中,利用AQS为我们构建同步结构提供了范本       它能降低构建锁和同步器的工作量,还可以避免处理多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。       Abstrac

2022-03-07 00:10:30 278

原创 Spring事务看这一篇就够了

Spring事务看这一篇就够了事务的特性基本概念MySQL 怎么保证原子性的?Spring 支持两种方式的事务管理1.编程式事务管理2.声明式事务管理Spring 事务管理接口介绍事务管理接口概述PlatformTransactionManager:事务管理接口TransactionDefinition:事务属性TransactionStatus:事务状态事务属性详解事务传播行为事务隔离级别不可重复读和幻读的区别?事务超时属性事务只读属性为什么我一个数据查询操作还要启用事务支持呢?@Transactiona

2022-02-24 23:52:05 413

原创 Java注解学习笔记(四)运行时注解

Java注解学习笔记(四)运行时注解运行时注解(RetentionPolicy.RUNTIME)概念定义注解按生命周期来划分可分为3类:那怎么来选择合适的注解生命周期呢?自定义源码注解样例获取注解自定义注解运行时注解(RetentionPolicy.RUNTIME)概念定义注解按生命周期来划分可分为3类:RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;RetentionPolicy.CLASS:注解被保留到class文件,但

2022-02-24 00:31:25 608

原创 Java注解学习笔记(三)编译时注解

编译时注解(RetentionPolicy.CLASS)概念定义       说到编译时注解(RetentionPolicy.CLASS) 都要和 注解处理器(Annotation Processor) 扯上关系,因为这里是真正体现编译时注解价值的地方。需要注意的一点是,运行时注解(RetentionPolicy.RUNTIME)和源码注解(RetentionPolicy.SOURCE)也可以在注解处理器进行处理,不同的注解有各自的生

2022-02-24 00:03:32 496

原创 Java注解学习笔记(二)源码注解

Java注解学习笔记(二)自定义源码注解自定义源码注解(RetentionPolicy.SOURCE)概念定义自定义源码注解样例自定义源码注解(RetentionPolicy.SOURCE)概念定义       源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件

2022-02-18 08:03:42 229

原创 Java注解学习笔记(一)基础概念理解

Java注解学习笔记(一)基本概念注解的概念注解的语法与定义形式单个注解举例分析注解的分类第一种分法根据注解如何创建的来定义第二种分法根据注解的生命周期来定义注解的概念       注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations。注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声

2022-02-18 08:02:35 114

原创 Kafka学习笔记(三)Kafka基础设施评估及服务器端配置

Kafka学习笔记(三)Kafka基础设施评估及服务器端配置Kafka基础设施评估操作系统磁盘选型磁盘容量规划方法带宽规划方法Kafka服务器端重要配置静态配置(server.properties)存储信息相关【推荐】log.dirs【不推荐】log.dirZooKeeper相关【推荐】zookeeper.connectBroker与Client端连接配置【推荐】listeners【参考】advertised.listenersTopic管理配置(Broker作用域下)【推荐】auto.create.top

2022-02-13 20:07:09 1159

原创 Kafka学习笔记(二)Kafka操作实践

Kafka学习笔记(二)Kafka操作实践Kafka操作实践分区机制和策略建议为啥要分区?分区策略轮询策略随机策略(不推荐)Key-ordering 策略无消息丢失配置Producer端Broker端Consumer端消费者组机制基础定义重平衡(Rebalance)基础定义触发条件问题风险组成员数发生变更导致重平衡优化方法场景1:未能及时发送心跳,导致 Consumer 被“踢出”Group场景2:Consumer 消费时间过长分区位移提交机制【参考】自动提交【参考】手动提交——同步提交【参考】手动提交——

2022-02-13 19:59:10 1114

原创 Kafka学习笔记(一)Kafka基础概念理解

Kafka学习笔记Kafka基础定义kafka是什么?为什么要用Kafka(消息队列)?Kafka传输消息的格式是什么?Kafka的消息传输模型Kafka常见支持的客户端语言Kafka核心术语主题(Topic)客户端(Clients)生产者(Producer)消费者(Consumer)服务器端(Broker)Kafka集群备份机制(Replication)——高可用方案分区机制(Partition)——扩展(可伸缩)方案分区位移(Offset)消息日志(Log)日志段(Log Segment)消费者组(Co

2022-02-13 13:59:05 1295

原创 手把手带你了解Spark作业“体检报告” --Spark UI

手把手带你了解Spark作业“体检报告” --Spark UISpark UI 一级入口ExecutorsEnvironmentStorageSQLJobsStages总结扩展Spark UI 二级入口SQL 详情页ExchangeSortAggregateJobs 详情页Stages 详情页Stage DAGEvent TimelineTask MetricsSummary MetricsTasksSpark UI 一级入口      &nb

2022-01-12 22:46:20 2117 1

原创 Java基础巩固(四)线程生命周期和死锁的定位与解决

线程线程生命周期介绍      关于线程生命周期的不同状态,在Java 5以后,线程状态被明确定义在其公共内部枚举类型java.lang.Thread.State中,分别是:新建(NEW),表示线程被创建出来还没真正启动的状态,可以认为它是个Java内部状态。就绪(RUNNABLE),表示该线程已经在JVM中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU片段,在就绪队列里面排队。在其他一些分析中,会额

2022-01-11 20:45:57 185

原创 Java基础巩固(三)IO

Java基础巩固(三)IOIO的分类知识扩展区分同步或异步(synchronous/asynchronous)区分阻塞与非阻塞(blocking/non-blocking)Java NIO概览IO的分类Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。     1. 传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出

2022-01-09 19:08:00 456

原创 Java基础巩固(二)类加载器和双亲委派模型

Java的类加载过程分为三个主要步骤:加载、链接、初始化首先是加载阶段(Loading),它是Java将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构(Class对象),这里的数据源可能是各种各样的形态,如jar文件、class文件,甚至是网络数据源等;如果输入数据不是ClassFile的结构,则会抛出ClassFormatError。 加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。第二阶段是链接(Linking),这是核心的步骤,简单说是把原始的类定义

2021-10-24 16:30:04 722

原创 工作中用到的设计模式--责任链模式

责任链模式含义作用使用场景应用实例背景分析类图一期过滤链类图二期优化后类图代码样例优点缺点含义避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。作用职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。使用场景1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。2、在不明确指定接收者的情况下,向多

2021-09-19 20:50:31 231

原创 工作中的设计模式小记--策略模式

策略模式含义定义算法家族,分别封装起来,让他们之间可以相互替换,此模式可以让算法的变化,不会影响到使用算法者。作用解决在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。使用场景如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。一个系统需要动态地在几种算法中选择一种。如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。应用实例背景因为业务入库需求,需要开

2021-09-12 16:34:14 151

原创 基于Docker快速安装Spark及基础使用

基于Docker快速安装Spark及基础使用实战环境信息docker编排工具docker-compose安装使用官网指导方式安装(不推荐)使用国内镜像源安装(推荐)安装docker的spark镜像结果通过 Spark Shell 进行交互分析基础操作新建RDDRDD的更多操作缓存Spark SQL 和 DataFramesSpark Streaming独立应用程序(Self-Contained Applications)应用程序代码安装 sbt使用 sbt 打包 Scala 程序通过 spark-submi

2021-08-08 19:48:49 9767 4

原创 Caffeine使用分享

简介        Caffeine是一种高性能Java缓存库,可提供接近最佳的命中率。缓存与ConcurrentMap相似,但并不完全相同。最根本的区别是ConcurrentMap会保留添加到其中的所有元素,直到将其明确删除为止。Caffeine可以通过建造者模式灵活的组合以下特性:通过异步自动加载实体到缓存中基于大小的回收策略基于时间的回收策略自动刷新key自动封装虚引用value自动封装弱引用或软引用

2021-05-03 11:46:20 1111

原创 如何做单元测试

如何做好单元测试一. 定义二. 为什么要做单元测试三. 单元测试用例四. 阿里单元测试规约五. 测试框架的使用Junit(下面以Junit4 为例来介绍)1.1、什么是Junit1.2、为何使用Junit1.3、Junit的快速入门导入Junit对应jar包(maven):下面我们来写一段简单的逻辑代码进行单元测试演练1.4、Junit测试失败的两种情况:测试失败的情况一测试失败情况二:1.5、Junit的运行流程:1.6、Junit的常用注解:1.7、Junit的参数设置1.8、Junit模拟方法异常执行

2021-04-03 22:24:21 4538

原创 提升代码质量的小技巧

1.不要为了方便,直接在代码中使用0,1等魔法值,应该要用enum枚举代替。正例:if(UserVipEnum.NOT_VIP.getCode.equals(userInfo.getVipFlag)){ //非会员,提示去开通会员 tipOpenVip(userInfo);}else if(UserVipEnum.VIP.getCode.equals(userInfo.getVipFlag)){ //会员,加勋章返回 addMedal(userInfo);}pub

2021-04-03 10:56:59 315

原创 Java基础巩固(一)引用

引用分类强引用、软引用、弱引用、幻象引用这四种引用有什么区别?        不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响 。        所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象

2021-03-28 12:10:33 135

原创 布隆过滤器原理及使用

原理布隆过滤器由一个长度为 m 的位数组和 k 个哈希函数组成。数组初始化为0。当添加一个元素时,分别用 k 个哈希函数计算出该元素的哈希值,这 k 个哈希值作为数组的下标,并将数组中下标对应的值置为1当查询一个元素时,同样的,用 k 个哈希函数计算出该元素的哈希值,这 k 个哈希值作为数组的下标。我们去查询数组中对应下标的值,如果存在一个值为0,则表明被查询的元素一定不在集合中;如果对应下标的值都为1,则表明被查询的元素可能在集合中。如果一个元素其实并不存在,但被误认为存在,我们称其为“假阳性(f

2021-02-22 22:41:57 387

原创 在oracle中通过身份证号获取出生日期,性别

首先弄清身份证18位的构成(这里只讲18位的 ):位数作用第1、2位数字表示所在省份的代码第3、4位数字表示所在城市的代码第5、6位数字表示所在区县的代码第7~14位数字表示出生年、月、日(1到9的月份和日用01到09表示)第15、16位数字表示所在地的派出所的代码第17位数字表示性别,奇数表示男性,偶数表示女性第18位数字是...

2021-02-18 22:25:23 6148

原创 oracle快速生成上千万条测试数据

话不多说直接上代码insert into student(ID,XM,ZJH,ZL,DJSJ,XYSJ)select rownum as ID, dbms_random.string('x',2) as XM, trunc(dbms_random.value(100000000000000000,999999999999999999))...

2021-02-18 22:24:23 1560 2

转载 [转]Java-集合之-ArrayList详细介绍-源码解析-和使用示例

 概要上一章,我们学习了Collection的架构。这一章开始,我们对Collection的具体实现类进行讲解;首先,讲解List,而List中ArrayList又最为常用。因此,本章我们讲解ArrayList。先对ArrayList有个整体认识,再学习它的源码,最后再通过例子来学习如何使用它。内容包括:第1部分 ArrayList简介第2部分 ArrayList数据结构第3部分 A...

2021-02-18 12:49:02 124

转载 [转]Java中的static关键字解析

[转]Java中的static关键字解析  static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲:  一.static关键字的用途  二.static关键字的误区  三.常见的...

2021-02-18 12:47:50 100

原创 超详细的使用Github+Hexo搭建属于自己的博客

Github是什么Hexo是什么话不多说咱们进入正题准备相关的工具hexo安装初始化生成静态文件启动服务器Github配置1,注册Github账号2,创建Github仓库3,建立关联4,部署更换主题写作在不同电脑管理hexo博客最后Github是什么gitHub是一个面向开源及私有软件项目的托管平台,因...

2021-02-18 12:46:14 945 1

空空如也

空空如也

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

TA关注的人

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