自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

清晨qc的博客

很高兴遇见你,既然来了,那就驻足,为我停留^_^

  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 分布式文件存储系统minio了解下

minio 是一个基于 Apache License v2.0 开源协议的对象存储服务。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小。是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。如果不考虑文件存储上云,minio 是一个非常不错的选择,并且支持分布式部署。

2023-12-15 14:39:39 1347

原创 postgresql 触发器如何生成递增序列号,从1开始,并且每天重置

参数说明:IF EXISTS:如果该触发器不存在name:要移除的刚刚定义的触发器的名称。table_name:定义了该触发器的表的名称CASCADE:自动删除依赖于该触发器的对象,然后删除所有 依赖于那些对象的对象RESTRICT:如果有任何对象依赖于该触发器,则拒绝删除它。这是默认值。

2023-11-02 19:48:43 1203

原创 两层for循环优化成一层for循环,时间复杂度直接降一个量级!

当存在两个嵌套的 for 循环时,时间复杂度将取决于循环嵌套的层数和循环内部执行的操作。如果内部操作的时间复杂度是 O(1),则两个 for 循环的时间复杂度为 O(n^2),其中 n 是集合中元素的数量。以下是两个list的嵌套循环,它计算了两个集合的笛卡尔积:

2023-04-30 16:32:36 1921

原创 Timing 中 Content Download 耗时过长问题如何解决

笔者在的优化中有写到基于数据库查询的优化,但实际在sql优化之前,通过f12开发者模式发现查询的接口Timing中Content Download时间过长,实际的接口响应只有200ms,但是Content Download长达3s多,在网上查阅资料,分析了一下页面加载时间,参考网上一位老哥博客地址:https://www.cnblogs.com/amyzhu/p/13125463.html(这篇博客主要是介绍浏览器上面一些参数是干嘛的)

2023-04-22 21:24:24 2703

原创 Java8:list转Map

Java8 List转Map; Map voMap = appVOList.stream().collect(Collectors.toMap(ApplicationVO::getAppId, Function.identity(), (key1, key2) -> key2));

2023-03-25 15:20:20 11616 8

原创 一文搞懂分布式事务解决方案

分布式事务是指涉及多个独立的系统或服务的事务操作。在分布式系统中,由于数据存储在不同的数据库或服务中,并且跨越多个计算节点,因此需要跨系统进行事务协调和管理,以确保事务的原子性、一致性、隔离性和持久性(ACID原则)。

2024-03-16 21:25:51 1036

转载 分享:使用Prometheus +Grafana搭建完整的应用监控系统

监控系统顾名思义就是监控服务器、应用系统以及其他第三方组件运行状态的系统。对于平台系统而言,监控系统就是我们第三只眼,监控系统会实时跟踪应用平台的运行状态,如果有应用系统出现问题或是服务器内存爆满,我们通过监控系统就可以快速定位问题所在,甚至可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。以上,我们就把监控系统介绍完了,并使用Prometheus + Grafana 构建了一个初步的监控系统。

2024-03-14 18:32:36 142

原创 MySQL关联查询如何优化

前面讲了原理,从原理出发,讲一下优化的建议被驱动表的连接字段建立索引,因为建立索引的查询方式是效率最高的。left join 或者 right join 这种外连接的情况,要保证小表(小结果集)作为驱动表,大表(大结果集)作为被驱动表,这样性能更好。在查询字段的话,要避免写出 select * ,而是根据业务需要,需要查询出来的 select 出来就行,因为这些字段也会加入到 join buffer 中,减少额外的内存消耗。能够直接多表关联的尽量直接关联,不用子查询,因为子查询的效率更加低。

2024-03-13 12:36:03 1079

原创 如何用mysql或者zk分配​​机器id

在 MySQL 中,可以使用自增主键来为每个记录分配唯一的机器 ID。创建一个包含自增主键的表,每当插入新记录时,MySQL 会自动为其分配一个唯一的 ID。对于 ZooKeeper,可以使用 ZNode 的顺序临时节点来分配唯一的机器ID。当创建一个顺序临时节点时,ZK 会为其分配一个唯一的序号,可以使用这个序号作为机器 ID。在上面的例子中,每次插入新记录时,MySQL 会为其分配一个唯一的 ID(设置 id 自增)(或者服务端本地生成 machine_id 插入进去)。

2024-01-17 14:43:56 605 2

原创 minio打开图片地址报错:Request has expired 如何解决

大家好,笔者之前在一文中简单的介绍了一下什么是minio。

2023-12-27 17:59:47 786

原创 java BigDecimal 类型求和: reduce(BigDecimal.ZERO, BigDecimal::add)

reduce(BigDecimal.ZERO, BigDecimal::add);

2023-12-13 15:02:25 1352

原创 Java8 groupingBy 分组,真的很好用

上面是笔者经常使用的几种 stream 流的 groupingBy 分组操作,后续如有扩展,再进行补充。

2023-12-13 10:56:11 626

原创 System.lineSeparator() 解决 append(“\r\n“) 换行符抛异常:No such file or diretory

返回系统相关的行分隔符字符串。它总是返回相同的值——系统属性line.separator的初始值。在 UNIX 系统上,它返回 "\n"; 在 Microsoft Windows 系统上,它返回 “\r\n”。

2023-11-16 09:44:44 192

原创 Trigger引发:“错误:超出堆栈深度限制”

我的触发条件就是在执行 insert 语句之前执行触发器里面的方法,初次调用的时候会进入第一个 sql 语句中,然后执行执行器里面的 insert 语句,然后又会触发触发器生成条件,在 BEFORE INSERT 触发器中再次 INSERT,导致对该第二个 INSERT 再次触发该触发器,再次触发 INSERT 并重新触发该触发器,依此类推。解决办法:从触发功能中 BEGIN 删除 INSERT,返回 new 将使原始的 INSERT 触发语句完成。笔者一开始在pgsql创建触发器。

2023-11-02 20:13:36 344

原创 Java中,如何在数字前面补0

String.format()

2023-10-23 16:44:09 300

原创 Java中,如何在字符串后面补全空格

String.format()

2023-10-23 16:34:37 498

原创 Java中,如何去掉字符串中前面所有的0

replaceFirst

2023-10-23 16:24:28 810

原创 Java中,字符串有多个空格如何截取

推荐使用 str.split(“(\s|\u00A0)+”) 进行空格的截取。

2023-10-23 16:15:11 241

原创 idea编译maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1

Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1报错原因是maven版本过高导致。笔者idea 2022.3版本,jdk1.8,maven用的3.9,在编译的时候,报上面这个错;项目中maven-plugin版本不匹配,可以调整自己的本地maven版本解决此问题。我是把自己的maven版本降低到3.8.1,编译通过。

2023-10-10 10:56:54 2073

原创 从非科班如何丝滑转型为 Java 程序员:充满挑战的蜕变之路

>从零开始,要从内心培养对 Java 开发的兴趣和决心,常言道:兴趣是自己最好的老师。没有科班背景并不代表你在编程领域无法有所作为。相反,正是因为你缺乏这个科班背景,你可能拥有自己独特的见解,跳出固有思维,并且正因为不是科班同学,你会更加的去努力,去学习,去补足科班同学所接受的计算机教育。坚持不懈地学习,时刻保持积极的心态,花时间,花精力去学习科班知识,你将在这条道路上越走越远。

2023-08-16 16:37:52 126

原创 结合实际谈谈:CPU密集型和IO密集型任务在并发编程中的应用

对于 CPU 密集型任务,由于大部分时间都花费在计算操作上,使用过多的线程反而可能会增加上下文切换开销,导致性能下降。在这种情况下,通常会使用较小的线程池,以充分利用 CPU 核心。选择固定大小的线程池,使线程数等于可用的 CPU 核心数,或者根据实际情况调整线程池大小。同时,还可以考虑使用更高效的算法和并行计算技术来优化计算过程,以提高 CPU 密集型任务的性能。

2023-08-06 22:15:39 563

原创 Java8 list多属性去重

在实际开发中,我们常常遇到一个业务场景:有一个 List 集合,其中包含了多个对象,需要根据对象中某个或者某些属性来进行去重操作,以确保 List 中的元素在这些属性的组合下唯一。在 Java 8 中,Stream API 为我我们提供了一些便捷的操作,使得在开发中,效率有所提升。

2023-08-05 15:22:11 2367

原创 maven开发利器:idea安装maven依赖分析插件 Maven Helper,谁用谁知道!

这篇博客给大家介绍一款博主实战开发中一直在使用的pom开发分析利器,教大家玩转maven:使用idea安装 Maven Helper 插件,可以分析依赖版本和父子引用等关系树,我本人在开发中也经常使用,强烈推荐安装!(最好是必须安装!)

2023-08-05 13:33:17 2099

原创 经验之谈:==和equals()如何正确使用

在Java编程中,比较两个对象是非常常见的操作。然而,初学者常常对于== 和 equals() 之间的区别不够清晰,容易在使用时出错。本文将深入探讨 == 和 equals() 的区别与正确使用方法,帮助您避免在对象比较中出现常见的错误。在Java中,"=="和"equals()"都用于比较对象。然而,它们在比较时所依据的原则和逻辑是不同的,需要特别注意它们之间的区别。

2023-07-31 23:07:43 221

原创 实战经验分享之:使用@Validated和@Valid进行数据校验

在上面笔者介绍了 @Validated 和 @Valid 注解的作用及使用方法。@Validated 注解主要用于Spring controller 层,在类或方法上进行数据校验,而 @Valid 注解则用于普通 Java 类的数据校验。这两个注解结合 Java Bean Validation 为我们提供了一种简单而强大的数据校验解决方案,帮助我们确保数据的合法性和完整性,从而增加应用程序的稳定性和可靠性。

2023-07-30 13:28:38 589

原创 开发经验分享之:import引入包和@Autowired注入类有什么区别

import 引入包和 @Autowired 注入类是 Java 开发中两个截然不同的概念。import 用于简化代码中对其他包的类或成员的访问,提供了更方便的写法,但不会自动创建实例。而 @Autowired 是 Spring 框架中实现依赖注入的注解,用于自动将需要的依赖注入到目标类中,从而实现类之间的解耦和依赖关系的自动装配。

2023-07-30 12:33:48 1558

原创 Redis持久化AOF和RDB,学习总结篇!

所以在 Redis 后续的进化中,将两种持久化结合到了一起,在 AOF 重写日志时,fork 出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件,然后主线程处理的操作命令会被记录在重写缓冲区里,重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件,写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件。

2023-07-16 14:53:44 219

原创 redis数据类型和数据结构你了解吗 学习总结篇!

我们常说的 Redis 数据类型是指的 Redis 键值对中的值的类型,常见的 Redis 数据类型有:String、list、哈希表、set、zset;但是随着 Redis 版本的不断更新发展,又出现了一些新的数据类型,比如:BitMap、HyperLogLog、GEO、Stream等,这些数据类型在 Redis 官网中也有介绍。

2023-07-16 13:26:09 555

原创 为什么TCP是面向字节流协议

TCP 是面向字节流的协议,在消息体传输的过程中,是分段进行的,而 UDP 则是面向报文的传输协议,一次发送一个报文,用一个队列来维护。

2023-07-12 22:13:41 653

原创 TCP三次握手四次挥手 你真的了解吗 学习总结!

TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到一个 SYN 报文,就进入SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知 IP 主机的 ACK 应答,久而久之就会占满服务端的半连接队列,使得服务端不能为正常用户服务。在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是:a. 半连接队列,也称 SYN 队列;b. 全连接队列,也称 accept 队列;

2023-07-11 22:27:41 118

原创 浅谈:重复的switch语句如何优化

switch 语句是 Java 中用于多重条件判断的常见结构之一。然而,当我们在代码中遇到多个重复的 switch 语句时,会导致代码冗长、难以维护,并且效率低下。在本篇博客中,我将分享一些技巧和最佳实践,帮助您优化重复的 Switch 语句,提高 Java 代码的效率。

2023-07-09 20:56:32 1007 3

原创 TCP 重传机制 滑动窗口 流量控制 拥塞控制 学习总结!

tcp 大家都不陌生,它的三大特性是:面向连接、可靠的、字节流的传输层通信协议。

2023-07-09 16:29:44 506

原创 idea常用快捷方式,保姆级!图文并茂【建议收藏】

给大家分享一下idea在开发过程中使用的快捷方式把,可以极大的提升生产力,提高自己的开发速度,需要在开发中不断地使用,熟能生巧!工具:idea快捷键环境:eclipse(本篇博客主要是介绍笔者在这个下进行快捷键的习惯)打开idea的settings进行设置。

2023-06-29 22:28:38 429

原创 深入探讨代码重构:提升可维护性与质量的关键步骤

代码重构是指在不改变软件功能的前提下,通过修改代码的内部结构和设计,提高代码的质量、可读性和可维护性的过程。重构旨在消除代码中的坏味道,减少技术债务并增加代码的灵活性。代码重构是提高代码质量和可维护性的重要手段,它可以帮助我们优化代码结构、提高代码可读性和可维护性,并为需求变化做好准备。在实践代码重构时,我们需要理解代码的设计与架构、使用版本控制系统、采用小步骤与频繁提交的方式、编写充分的单元测试,并持续监控代码质量。通过合理应用代码重构技术,我们可以有效改善软件系统的质量,并为持续发展提供良好的基础。

2023-06-29 22:05:05 159 2

原创 从前序与中序遍历序列构造二叉树怎么写

笔者在一文中有介绍如何通过中序遍历和后续遍历构造二叉树,难度还是挺高的,重点在于找到中间节点,并且左右分界要弄清楚,这篇文章我写出了前序遍历和中序遍历如何构造二叉树的Java编程代码,具体步骤我都在代码中用注解表示出来,一句话,一行代码,这样就不会写错。

2023-06-24 22:59:21 163

原创 从中序与后序遍历序列构造二叉树怎么写

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。这是力扣上面的中等难度题目,笔者感觉而言,还是相当有难度的,重点在于找到不同遍历顺序的左右开闭的点。那么代码应该怎么写呢?使用递归遍历来写:此时应该注意确定切割的标准,是左闭右开,还有左开右闭,还是左闭右闭,这个就是不变量,要在递归中保持这个不变量。

2023-06-24 16:12:10 199

原创 如何利用满二叉树的特性计算完全二叉树的节点个数!

遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?

2023-06-18 21:16:27 70

原创 json字符串和Java对象的相互转换:JSONObject.parseObject()

在开发中,我们会经常遇见将java对象转换成json字符串以及将json字符串转换成对象的操作,使用 JSONObject.parseObject() 和JSONObject.toJSONString() 方法来实现这个过程。本文将介绍这两个方法的作用以及如何在 Java 中使用它们进行对象与 JSON 字符串之间的转换。

2023-06-18 13:24:06 10663 3

原创 二叉树的迭代怎么写

递归遍历和迭代遍历都是遍历二叉树的方法,但它们的实现方式有所不同。递归遍历使用函数的递归调用来处理节点,而迭代遍历使用循环和栈(或队列)来处理节点。递归遍历相对简单,易于理解和编写,但可能存在函数调用的开销和堆栈溢出的风险。迭代遍历需要手动模拟递归过程,可能会更复杂一些,但可以避免函数调用的开销和堆栈溢出的风险。

2023-06-14 22:23:43 50

原创 教你用队列实现栈

在Java编程中,我们常常需要使用栈这种数据结构来解决问题。但是,有时候我们可能希望使用队列来实现栈的功能。本篇博客将笔者介绍如何使用一个队列来模拟栈的基本操作,包括入栈、出栈、获取栈顶元素以及判断栈是否为空。

2023-06-12 22:10:33 310

SQL server2012.md

SQL server2012基础知识,小白基础入门知识,随客笔记,SQL server2012现在使用的比较少,逐渐被取代,但是作为一门入门的基础知识还是相当不错的。上手简单,学习思维,为接下来的学习奠定基础

2020-07-09

空空如也

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

TA关注的人

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