自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java CompletableFuture结合线程池 - 异步多线程

CompletableFuture是对Future的扩展和增强。CompletableFuture实现了Future接口,并在此基础上进行了丰富的扩展,完美弥补了Future的局限性,同时 CompletableFuture 实现了对任务编排的能力。借助这项能力,可以轻松地组织不同任务的运行顺序、规则以及方式。

2024-04-09 11:18:00 286

原创 TiDB分布式关系型数据库

TiDB 是一个开源的分布式关系型数据库,由 PingCAP 公司主导开发。它的设计目标是提供水平可扩展的高性能分布式事务数据库,同时保持与 MySQL 协议的兼容性和事务的 ACID(原子性、一致性、隔离性和持久性)特性。水平扩展:TiDB 支持无缝的水平扩展,能够通过增加新节点来应对增长的数据量和事务负载。分布式事务:TiDB 提供完全的分布式事务支持,采用了基于 Google Percolator 模型的事务算法,可以提供跨节点的一致性。

2024-03-15 17:35:43 355

原创 HBase非关系型数据库

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库。HBase是一个NoSQL数据库,把数据存在HDFS上,低成本来存储海量的数据并且支持高并发随机写和实时查询。HBase 的原型: Google 的 BigTable 论文。

2024-03-11 16:15:15 1056

原创 Spark scala如何本地运行

运行一个spark任务需要打包任务并上传到spark集群上运行,但是往往远端运行时间较长、众多处理器的日志收集困难,导致spark任务的调试时间成本很高,几个小时的等待可能换来的只是一个低级的错误。Apache Spark是一个开源的大数据处理框架,它提供了一个接口用于编程大规模分布式计算,且提供了很多高级工具,包括支持SQL查询、流数据处理、机器学习和图计算等。那么如何不提交远端Spark集群,在本地就像调试Java代码一样调试Spark scala。

2024-02-06 17:29:24 762

原创 Spark如何用repartition来提升执行效率

在这种情况下,Spark会尽量保证每个分区中的数据量大致相等,但并不能保证每个分区中的数据在业务逻辑上的均匀分布。也就是说,如果你的数据在某个特定的列上有特定的分布模式,那么在重新分区后,这种分布模式可能会被打乱。果在调用 repartition 方法时没有指定列,那么Spark会将数据均匀地分布到指定数量的分区中,但具体的分区策略是不确定的。需要注意的是,repartition 操作会引发全量数据的洗牌,可能会消耗大量的计算和I/O资源,因此在使用时需要谨慎考虑。

2024-02-02 17:03:50 429

原创 Spark如何用累加器Accumulator收集日志

Spark任务的实际运算是交由众多executor来执行的,如果再执行算子内部打印日志,是需要到对应的executor上才能看到。当不知道对应executor的情况下就需要挨个查询日志,是否不方便。是否有办法可以收集所有executor上的日志内容打印在driver上呢?这样就可以直接在stdout里看到所有日志。

2024-01-30 17:00:58 488

原创 Spark性能调优

2.1 增加大数据量位置的repartition数。2.2 增加spark session的超时时间。1 首先可以尝试开大executor的内存分配。

2024-01-30 15:24:36 574

原创 为什么写进MySQL里的数据顺序乱了?

使用Collectors.groupingBy收集器对流(Stream)中的元素进行分组时,默认情况下会使用ArrayList来收集同一组内的元素,List的顺序是按照它们在流中出现的顺序添加的。但是因为因为HashMap不保证顺序,key的迭代顺序可能与元素被插入到Map中的顺序不同。

2024-01-23 11:31:07 535

原创 正确的姿势完成Http请求

这是因为在URL中,空格和某些其他字符(如#,%等)是需要进行编码的。空格通常被编码为%20或者+

2023-12-19 16:06:08 403

原创 Http请求类型GET, POST, PUT

用于提交请求,可以更新或者创建资源,是非幂等的,举个例子:在用户注册功能上,每次提交都是创建一个用户账号,这个时候就用POST。目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据。用于向指定URL传送更新资源,是幂等的。每次请求都只是覆盖原先的值,当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。跟GET功能类似,但是报文中不返回文件主体(只返回到head line)。用于检查文件,而不是真的获取文件内容。

2023-10-07 16:12:09 135

原创 Hive实战-表创建

ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式。通过实测,储存空间被压缩为默认的1/3。对比默认数据储存格式。

2023-09-27 10:34:42 656

原创 Spark报错异常及解决

【代码】Spark常见报错异常及解决。

2023-09-22 11:03:39 565

原创 Java中使用Thrift

需要注意的是,transport 客户端要和服务端对应,比如如果要对 NIO 模型的服务端进行调研,transport 就必须使用 TFramedTransport或TFastFramedTransport。业务代码中只需要注入 SimpleService.Iface,并直接调用接口方法,而完全不需要关注内部逻辑实现。通过 thrift compiler 生成 java 代码。client端可以直接调用接口,二不用关心具体的实现类。之后将相应的 Iface 注册到 IOC 容器中即可。

2023-07-19 15:01:39 1168

原创 O/R Mapping 对象关系映射

ORM(Object-Relational Mapping)是一种将对象模型和关系型数据库之间的映射关系进行自动化转换的技术。ORM 的目标是将对象模型和关系型数据库之间的转换过程自动化,使开发人员可以使用面向对象的方式来操作数据库,从而提高开发效率和代码质量。对象和关系之间的映射关系定义。数据库操作的自动化,包括 CRUD 操作、事务管理等。

2023-07-17 20:31:04 228

原创 Spring Actuator 监控管理

Spring Actuator 是 Spring Boot 提供的一个功能强大的监控和管理端点。它提供了一系列的 HTTP 端点,可以用来监控应用程序的运行状态、健康状况、性能指标等信息。这些端点可以通过 HTTP 或 JMX 访问。但是因为安全因素,所以需要另外设置才能打开這些 endpoint。引入依赖后,SpringBoot 在运行时就會自动开启。这两个endpoint。

2023-07-17 15:14:54 577

原创 Java虚拟机(JVM)

类模板对象,其实就是 Java 类在 JVM 内存中的一个快照,JVM 将从字节码文件中解析出的常量池、类字段、类方法等信息存储到模板中,这样 JVM 在运行期便能通过类模板而获取 Java 类中的任意信息,能够对 Java 类的成员变量进行遍历,也能进行 Java 方法的调用。初始化(Initialization):在初始化阶段,JVM会执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。类的初始化是在首次使用该类时进行的,它确保类的静态资源被正确初始化,并且只会执行一次。

2023-07-12 15:04:34 235

原创 解释执行和编译执行

C, C++, Java(Java是一种特殊的编译执行语言,它将源代码编译为字节码文件,然后在Java虚拟机上解释执行字节码)

2023-07-10 18:59:42 422

原创 Java静态与非静态

总结来说,静态成员在类加载时就会被初始化,并且可以在整个程序的生命周期内使用,而非静态成员需要在类的实例创建后才能使用。

2023-07-10 16:13:54 142

原创 Java Spring多线程

对于 Future.get()方法返回的结果,一个重要的事情是,只有提交的任务实现了java.util.concurrent.Callable接口时才返回 Future。如果所有的线程都在忙于执行任务并且又有新的任务到来了,这个线程池将创建一个新的线程并将其提交到 Executor。此方法用于取消已提交任务的执行。如果任务完成,结果将立即返回给调用者,否则调用者将被阻塞,直到 Executor 完成此操作的执行并计算出结果。但是,如果管理得不合理,或者任务不是很短的,则线程池将包含大量的活动线程。

2023-06-30 11:05:58 719

原创 Aviator-Java轻量级高性能Java表达式求值

在上述代码中,首先定义表达式字符串,然后使用AviatorEvaluator的compile()方法编译表达式,将表达式编译成可执行的对象。接着,准备参数并执行表达式,最后输出结果。AviatorScript 文档 https://www.yuque.com/boyan-avfmj/aviatorscript/ashevw。Aviator是一款Java语言编写的轻量级高性能Java表达式求值库,支持java基本类型、字符串、日期、集合、数组等类型的表达式求值运算。

2023-04-27 11:23:04 298

原创 Spring中的设计模式及使用示例

设计模式是指在面向对象软件设计中常见的解决特定问题的方法。设计模式不是一段可复制粘贴的代码,而是一种通用解决方案,可以帮助开发者更好地组织代码、提高代码的可复用性、扩展性和可维护性。常见的设计模式包括单例模式、工厂模式、命令模式、观察者模式、责任链模式等等。每个设计模式都有其内部机制,其核心思想在于相似的问题有相似的解法,将这些解法规则化后,通过加以应用和变通,就可以避免重复的代码和架构设计。

2023-04-26 21:43:45 608

原创 抽象同步队列AbstractQueuedSynchronizer(AQS)简要理解

AQS(AbstractQueuedSynchronizer)是 Java 中实现锁和同步器的基础设施,它是一个抽象类,提供了构建锁和同步器的基本框架,可以用于实现 ReentrantLock、Semaphore、CountDownLatch 等同步器。A Q S定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极大地减少实现工作。

2023-04-19 16:13:05 618

原创 Java基本类型和包装类型int和Integer

该错误提示表明你在处理一个Optional类型的参数时,传入的参数中包含一个名为hasRef的int类型参数,但是无法将它转换为一个null值,因为该参数被声明为基本数据类型int。基本数据类型是无法赋值为null的,因此将一个Optional的参数传递给一个接收int类型参数的方法,如果传递的参数值为null或者Optional未被设置值,则会导致此类型的错误。总结来说,基本类型用于表示普通的数据类型,快速处理数字。在这种情况下,可以使用Optional类型的参数来代替Optional类型的参数。

2023-04-17 17:26:54 317

原创 Java和Spring常用注解

在Spring框架中,@Component和@Service都是用来将一个Java类标记为Spring容器中的一个组件。不过,在实际开发中,@Service通常用于标记业务层的Bean,而@Component则更为通用,可以用于标记任意层的Bean。具体而言,@Component表示通用的组件,可以用在任何层次。它是一个比较抽象的概念,可以用于标记任何需要被Spring容器管理的组件类。而@Service则表示服务层组件,用于标记服务层(业务层)的Bean。

2023-04-13 11:50:14 639

原创 Java的语言特性

机器码(Machine Code)是计算机能够直接执行的最底层的指令集合,它表示计算机硬件上具体的操作。例如,将两个数相加,将一个值存储到内存中等操作。机器码由二进制代码组成,被计算机硬件直接识别并执行。机器码通常是由计算机的汇编器生成的,汇编器会将汇编语言程序翻译成机器码。机器码是计算机最底层的指令,直接由计算机的硬件进行执行,因此它具有高效、快速的特点。虽然机器码非常有效,但是它很难进行人工编写和阅读。因此,程序员通常使用高级编程语言编写程序,并使用编译器将高级语言编译成机器码。

2023-04-13 11:24:22 404

原创 Java数据结构实现及效率

移除set元素,调用remove方法,底层实际上是调用HashMap的remove方法删除指定Entry,时间复杂度是O(1),因此效率高。添加set元素,调用add方法,底层实际上是调用HashMap的put()方法添加key-value对,时间复杂度O(1),因此效率高。获取set元素,需要调用iterator方法,返回的元素无序,因此需要遍历集合,时间复杂度O(N),效率低下。TreeMapget操作的时间复杂度是O(log(n))的,相比于HashMap的O(1)还是差不少的。

2023-03-20 16:04:59 303

原创 浅谈几种网络攻击及攻防原理

浅谈几种网络攻击

2023-03-08 15:38:32 433

原创 kafka消息队列原理及常见问题

mafka消息队列原理及常见问题

2023-03-07 15:05:59 55

原创 后端开发的小坑们

后端开发中,日常遇到的小问题。

2022-11-01 19:12:56 345

原创 Java开发异常记录

Java开发中遇到的异常

2022-10-25 16:29:25 186

原创 Java数据结构-HashMap

Java HashMap

2022-09-09 11:44:34 341

原创 小马哥讲 Spring 核心编程思想-课程学习

Spring学习

2022-07-28 20:35:23 1044

原创 Spring事务抽象

玩转Spring全家桶 学习笔记Spring事务传播特性Spring中通过Propagation来设置事务的传播属性的,在这个属性中提供了我们其中关于事务传播的特性:PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。默认PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRE

2022-02-28 16:49:58 212

原创 应对不合法输入的策略

应对不合法输入的策略接受不接受接受catch异常,返回一个可接受的值,比如:(),“”不接受中断:Exception,return

2021-12-30 21:34:15 191

原创 Spark的action和transformation

Spark的action和transformation

2021-12-22 17:22:11 1114

原创 技术学习书单

技术学习书单程序员修炼之道-从小工到专家 2021.12.16

2021-12-16 14:50:03 69

原创 POM文件

依赖顺序https://blog.csdn.net/lizz861109/article/details/111594969dependencyManagement和dependencies

2021-12-13 21:32:41 254

原创 如何优雅的命名

如何优雅的命名JavaJavaJava命名规范参考类一般采用大驼峰命名: StudentCount方法和局部变量使用小驼峰命名: myStudentCount而大写下划线命名通常是常量和枚举中使用: CACHE_EXPIRED_TIME

2021-11-18 15:41:44 75

原创 MySQL数据库中SQL语句分类

MySQL数据库中SQL语句分类DML(Data Manipulation Language)DDL(Data Define Language)DQL(Data Query Language)DCL(Data Control )DML(Data Manipulation Language)数据操纵语言,用于添加、删除、修改数据库记录,并检查数据完整性。insert, delete, updateDDL(Data Define Language)数据定义语言,用于库和表的创建、修改、删除。crea

2021-11-02 12:08:44 55

原创 MySQL事务和回滚

MySQL回滚事务回滚机制undo logredo log事务回滚机制原子性,就是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做;如果事务中的一个sql语句执行失败,则已执行的语句必须回滚,数据库会退回到事务前的状态。我们可以这么理解,就是说如果事务失败了,那么它对我们的数据库是没有任何影响的。undo logInnDB引擎还提供了两种事务日志:redo log(重做日志)和undo log(回滚日志)。持久性通过 Redo Log(重做日志)来实现,原子性和一致性通过 Undo

2021-10-28 20:27:27 1662

空空如也

空空如也

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

TA关注的人

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