自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

方圆 Blog

怕什么真理无穷,进一寸有进一寸的欢喜

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

原创 深入理解回溯算法

本篇我们来讲回溯。回溯相当于穷举搜索,它会尝试各种可能的情况直到找到一个满足约束条件的解,寻找解的手段一般通过DFS实现,是一个增量构造答案的过程。

2024-05-06 19:54:04 997 1

原创 工程中实践的微服务设计模式

最近在读《微服务架构设计模式》,开始的时候我非常的好奇,因为在我印象中,设计模式是常说的那23种设计模式,而微服务的设计模式又是什么呢?这个问题也留给大家,在文末我会附上我对这个问题的理解。本次文章的内容主要是工作中对微服务设计模式的应用,希望能对大家有所启发。

2024-04-07 09:47:33 1168

原创 二分查找是偏爱细节的魔鬼

二分查找本质上是一个规模退化且固定规模减小一半的分治算法,它的。通常我们会认为二分查找的应用场景是数组有序(单调),但实际上它也能在无序数组中应用,限制二分法使用的并不是数组是否有序,而是,只要一段满足某个性质,另一段不满足某个性质,那么就可以使用二分法。本篇内容我想带大家更好地理解二分查找,不再根据模版生搬硬套,也不再对条件判断中的等号云里雾里。如果大家想要找刷题路线的话,可以参考。

2024-03-05 09:47:15 1020

原创 学算法要读《算法导论》吗?

这篇文章是我学习算法的心得,希望它能够给一些将要学习算法且准备要读大部头算法书籍的朋友一些参考,节省一些时间

2024-02-25 19:23:45 1366

原创 时间复杂度为 O(n) 的排序算法

本文介绍线性排序,即时间复杂度为 O(n) 的排序算法,包括桶排序,计数排序和基数排序,它们都不是基于比较的排序算法,大家重点关注一下这些算法的适用场景。

2024-02-03 18:08:16 1320

原创 23 年终总结:生活是一场永无止境的探索

23 年年终总结一直想提笔写,由于前段时间部门异动,在学习和生活上有些懈怠和佛系,导致一直难产,甚至有了“胎死腹中”的倾向,为了给之后回看留一个引子,也为了更好的规划新的一年,这篇文章必须被尽快生下来,推脱不得,所以它才与大家相见,如果用一个关键词来概括 23 年的话,我觉得探索是最合适的。

2024-01-22 09:17:56 837

原创 树专题 —— 深入理解经典红黑树

本篇我们讲红黑树的经典实现,Java中对红黑树的实现便采用的是经典红黑树。前一篇文章我们介绍过左倾红黑树,它相对来说比较简单,需要大家看完上篇再来看这一篇,因为旋转等基础知识不会再本篇文章中赘述。

2023-12-18 09:03:47 919

原创 Mybatis 拦截器实现单数据源内多数据库切换

物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:现在需要上线报表服务来查询所有数据库中的数据进行统计,那么现在的问题来了,该如何。

2023-12-11 09:02:26 271

原创 树专题 —— 二叉树层序遍历

本篇关于二叉树的层序遍历,主要以题目为主,而且我觉得层序遍历是求解二叉树问题中最简单的,学会了基本的层序遍历,在这基础上的扩展题也能迎刃而解,如果大家想要找刷题路线的话,可以参考。

2023-12-04 09:10:46 159

原创 树专题 —— 左倾红黑树

上文我们已经规定,被红链接引用的节点为红色,被黑色链接引用的节点为黑色,我们在节点中添加colorTrue表示红色,Falseint key;int value;Node left;Node right;/*** 判断节点是否为红色*/} else {

2023-12-04 09:08:49 99

原创 树专题 —— 二叉树后序遍历

本篇关于二叉树的后序遍历,依然是由题目来展开,如果大家想要找刷题路线的话,可以参考。

2023-11-23 15:58:43 98

原创 树专题 —— 二叉树前序遍历

本篇关于二叉树的前序遍历,主要由题目进行展开,如果大家想要找刷题路线的话,可以参考。

2023-11-13 20:27:20 117

原创 树专题 —— 二叉搜索树和中序遍历

int key;int val;Node left;Node right;// 根节点Node root;

2023-11-06 09:33:36 502

原创 一文搞懂优先队列及相关算法

大家好,我是。优先队列在 Java 中的定义是 PriorityQueue,它基于数据结构实现,其中的元素并不是全部有序,但它能够支持高效地。二叉堆是一种特定条件的,树的根节点为堆顶,最右端叶子节点为堆底,分为和。小顶堆堆顶元素最小,且任意节点小于等于其子节点,大顶堆堆顶元素最大,且任意节点大于等于其子节点,如下图所示:完全二叉树只有叶子节点未被填满,且叶子节点从左向右进行填充。优先队列可以用于解决和,下面我们先来看一些练习。如果大家想要找刷题路线的话,可以参考。

2023-11-06 09:31:57 145

原创 时间复杂度为 O(nlogn) 的排序算法

在上文实现中,我们在每次合并两个有序数组时,即使是很小的数组,我们都会创建一个新的 temp[] 数组,这部分耗时是归并排序运行时间的主要部分。:分解待排序的 n 个元素的序列成各具 n/2 个元素的两个子序列,将长数组的排序问题转换为短数组的排序问题,当待排序的序列长度为 1 时,递归划分结束。在数组有大量重复元素的情况下,快速排序的递归性会使元素全部重复的子数组经常出现,而对这些数组进行快速排序是没有必要的,我们可以对它进行优化。快速排序有很多优点,但是在哨兵划分不平衡的情况下,算法的效率会比较低效。

2023-10-30 09:13:17 471 1

原创 关于双指针算法问题的思考

本篇是对双指针算法的总结,我将它分成了数组和字符串类型的题目,大家可以按照文章题目的顺序进行练习,如果大家想要找刷题路线的话,可以参考。

2023-10-23 09:29:15 68

原创 时间复杂度为 O(n^2) 的排序算法

对于小规模数据,我们可以选用时间复杂度为 O(n) 的排序算法,因为时间复杂度并不代表实际代码的执行时间,而且它也省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序算法是不二选择。本篇我们主要对 O(n) 的排序算法进行介绍,在介绍之前,我们先了解一下算法特性::经排序后,若等值元素之间的相对位置不变则为稳定排序算法,否则为不稳定排序算法。

2023-10-16 09:13:21 730

原创 滑动窗口算法技巧

在我刷了一些滑动窗口相关的题目之后,发现很有技巧性,只要掌握了解题思路,就会很简单,所以我决定用这篇帖子记录一下,也帮助同样在刷滑动窗口相关题目的同学。

2023-10-09 21:29:02 205

原创 单调栈和单调队列可以很简单

我觉得单调栈和单调队列的题目很有特点,而且理解了它的特点能够很轻松容易地解决一系列题目,所以决定用这篇帖子记录一下,也想以此来帮助在刷同样类型题目的朋友们。

2023-09-25 09:13:17 72

原创 手撕 LFU 缓存

LFU 的缩写是 Least Frequently Used,简单理解则是将使用最少的元素移除,如果存在多个使用次数最小的元素,那么则需要移除最近不被使用的元素。LFU 缓存在 LeetCode 上是一道困难的题目,实现起来并不容易,所以决定整理和记录一下。

2023-09-18 09:49:42 285

原创 从 LinkedHashMap 源码到手撕 LRU 缓存

最近在刷 LeetCode 上LRU缓存的题目,发现答案中有 LinkedHashMap 和自己定义双向链表的两种解法,但是我对 LinkedHashMap 相关源码并不清楚,所以准备学习和记录一下。如果大家想要找刷题路线的话,可以参考。

2023-09-10 09:56:49 485

原创 深入理解线段树

线段树是常用的维护的数据结构,它可以在 O(logn) 的时间复杂度下实现单点修改、区间修改、区间查询(区间求和、区间最大值或区间最小值)等操作,常用来解决 RMQ 问题。RMQ(Range Minimum/Maximum Query) 问题是指:对于长度为 n 的数列 A,回答若干询问 RMQ(A, i, j) 其中 i, j

2023-09-05 10:01:53 115

原创 深入理解树状数组

关于各类区间和问题有很多种解法,我们可以根据题目要求选择解题的方向:、树状数组和线段树和线段树和线段树数组区间修改,区间查询:线段树树状数组是其中能解决问题最多的,而且它相比于线段树代码量更少更简单,是我们。在本文我们对线段树进行介绍,并在文末附上相关的习题供大家练习。如果大家想要找刷题路线的话,可以参考。

2023-08-28 09:11:30 87

原创 高性能MySQL实战(三):性能优化

这篇主要介绍对慢 SQL 优化的一些手段,而在讲解具体的优化措施之前,我想先对 EXPLAIN 进行介绍,它是我们在分析查询时必要的操作,理解了它输出结果的内容更有利于我们优化 SQL。为了方便大家的阅读,在下文中规定类似 key1 的表示二级索引,key_part1 表示联合索引的第一部分,unique_key1 则表示唯一二级索引,primary_key 表示主键索引。和是本文的前置知识,欢迎大家阅读。原文收录在我的中,欢迎Star和获取原文。

2023-08-21 09:24:05 998

原创 高性能MySQL实战(二):索引

我们在上篇中已经建立好了表结构,这篇我们则是针对已有的表结构和搜索条件为表创建索引。除此之外,我还会讲一些关于索引必须要了解的知识。原文收录在我的 Github 中,欢迎Star和获取原文。

2023-08-14 09:06:51 160

原创 高性能MySQL实战(一):表结构

最近因需求改动新增了一些数据库表,但是在定义表结构时,具体列属性的选择有些不知其所以然,索引的添加也有遗漏和不规范的地方,所以我打算为创建一个高性能表的过程以实战的形式写一个专题,以此来学习和巩固这些知识。原文还是收录在我的中,欢迎Star和获取原文。

2023-08-07 09:05:22 120

原创 实战:工作中对并发问题的处理

最近在接口联调时发生了数据并发修改问题,我想把这个问题讲解一下,并把当时提出的解决方案进行实现,希望它能在大家以后在遇到同样的问题时提供一些借鉴和思考的方向。原文还是收录在我的Github中,欢迎Star和获取原文。

2023-07-31 08:45:54 41

原创 事务,不只ACID

应用在运行时可能会发生数据库、硬件的故障,应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题,为了提高应用的可靠性和数据的一致性,事务应运而生。从概念上讲,事务是应用程序将多个读写操作组合成一个逻辑单元的一种形式,这样其中所有的读写操作都被视为单个操作来执行,要么成功提交,要么失败回滚,不存在任何部分成功和部分失败的情况。现在,几乎所有的关系型数据库和一些非关系型数据库都支持事务。

2023-07-24 15:33:56 54

原创 用“分区”来面对超大数据集和超大吞吐量

本文的内容参考《数据密集型应用系统设计》的第六章,原文收录在我的中,欢迎Star和获取原文。

2023-07-17 08:56:54 95

原创 分布式服务高可用实现:复制

本文的内容大多数来自于《数据密集型应用系统设计》,也夹杂着一些我个人对复制的理解,原文收录在我的 Github: enthusiasm 中,欢迎Star和获取原文。

2023-07-10 08:52:00 119

原创 从流处理来深入理解消息队列

在《数据密集型应用系统设计》这本书中关于流处理的部分提到了消息队列相关的知识,我觉得它对理解和之后使用消息队列中间件有很大的帮助,遂将其中重要的部分总结出来,但也更推荐大家去看原书

2023-07-03 08:30:00 194

原创 分布式批处理:MapReduce初探

MapReduce 是一个编程模型(框架),它采用“分治”的处理模式:首先将数据进行分块,之后对数据进行处理,包括Map阶段和Reduce阶段。Map阶段是对输入的数据进行整合,通过定义的输入格式获取文件信息和类型,并且确定读取方式,最终将读取的内容以键值对的形式保存。Reduce阶段则是对Map阶段生成的数据进行二次处理,从而获得我们想要的计算结果。

2023-06-26 09:03:16 224

原创 分布式事务:XA和Seata的XA模式

上一篇博客介绍了保证分布式事务提交的两阶段提交协议,而XA是针对两阶段提交提出的接口实现标准,本文则对XA进行介绍。

2023-06-21 09:07:08 500

原创 从2PC和容错共识算法讨论zookeeper中的Create请求

最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分,也希望它能帮助像我一样对这两者有误解的同学。

2023-06-13 20:38:34 941

原创 JVM内存变化分析实战

基于不准确的数据判断和推测:JVM堆内存变化是年轻代中的对象在进行垃圾回收时被转移到老年代导致的,但是没有准确的数据支撑这个结论看起来非常牵强,而且还有一点需要注意:项目服务端使用Netty搭建,调用本地方法在本地内存中生成的对象虽然不直接占用堆内存,但是它也会有在Java堆里的对象作为这块内存的引用,不清楚这会不会造成堆内存的升高。由于本次压测的关注重点并不在此,而在于内存和CPU的最大使用情况,所以之后并没有调整数据采集时间间隔再进行压测,如果之后再进行压力测试应注意该参数的设置。

2023-06-04 19:06:21 656

原创 Netty服务开发及性能优化

Netty是一个异步基于的框架,可以看做是对NIO和BIO的封装,并提供了简单易用的API、Handler和工具类等,用以快速开发高性能、高可靠性的网络服务端和客户端程序。

2023-04-11 09:21:34 325 1

原创 如果职场也有感情和人与人之间的帮助的话

如果我稍微有一点儿能力让大家过得好,能承担起一些微不足道的责任,哪怕它看起来会很傻,哪怕它不符合主流的观念,哪怕它掺杂了太多感情在里面儿,那也别说什么,就先让我去做吧,趁着热血没凉,也趁着我还想…

2023-03-06 09:00:03 253

原创 关于算法学习和刷题的建议

大家好,我是方圆。最近花时间学了学算法,应该算是我接触Java以来第一次真正的学习它,这篇帖子我会说一些我对算法学习的理解,当然这仅仅是浅浅的入算法的门,如果想深挖或者是有基础的人想提升自己,我觉得这篇文章不合适;如果你是算法小白或者是大一、大二有充裕时间的同学,它可能真的稍微有一点点帮助。

2023-02-27 09:09:59 516

原创 方圆的2022年度书单,不只技术

今年读的闲书仍然比较杂,没有开始专题阅读,怪就怪在手头屯书太多,暂时消化不掉。技术书以电子书为主,实体书只在居家办公的时候抽时间读了几本。

2022-12-26 10:03:48 171

原创 工作中对InheritableThreadLocal使用的思考

大家好,我是方圆。最近在工作中结合线程池使用 InheritableThreadLocal 出现了获取线程变量“错误”的问题,看了相关的文档和源码后在此记录。

2022-11-15 09:37:45 349

狂神说JUC.pdf

Bilibili狂神老师的JUC课程笔记,讲的非常的好,希望大家结合视频学习狂神老师的JUC编程,精进自己的技术。

2020-05-02

空空如也

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

TA关注的人

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