- 博客(32)
- 收藏
- 关注
原创 《微服务架构设计模式》核心知识点提炼
微服务架构设计模式》一书由克里斯*理查森所著。涵盖44个架构设计模式,系统解决了服务拆分、事务管理、查询和跨服务通信等难题。作者在微服务架构领域深耕多年,曽作为微服务领域的专业咨询师为企业提供微服务相关问题分析与培训。本文旨在对这本书中的知识进行精炼提取。过度的复杂性:系统本身过于庞大,业务逻辑交织,开发人员很难理解它的全部。实现新功能变得非常耗时。开发速度缓慢:IDE编译一次要花很长时间,严重拖慢开发效率。
2025-02-26 11:40:56
1186
原创 《领域驱动设计--软件核心复杂性应对之道》精要总结
领域驱动设计–软件核心复杂性应对之道》由DDD的发明者Eric Evans所著,是DDD相关书籍中的经典著作。这本书围绕以模型驱动设计为核心提出一系列的模式用于解决建模过程中的各类问题。模式是在各个领域中都被广泛应用的一种语言,它是为解决领域内某一类问题而提出的标准化解决方案,模式通常会提供一组对应的上下文环境。在《微服务架构设计模式》一书中对模式有更精确的定义。众所周知的设计模式是为了解决技术层面一系列相关问题而提出的,它为我们提供了一种交流技术层面相关问题的通用语言。而本书提出的一系列领域模式。
2025-01-12 17:30:16
975
原创 浅谈对《架构整洁之道》一书的理解
架构整洁之道》是Bob大叔在架构设计领域的著作,与另外一本颇有名气的编程类书籍《代码整洁之道》作者是同一人。Bob大叔是一个从原始编程时代跨越至今的资深老程序员,亲眼见证了软件工程的发展历程,如他在书中所说,Bob大叔经历过各式各样的项目,见识过多种多样的架构设计,可以说是名副其实的编程界活化石。这本书也是凝聚了其在软件架构方面毕生的感悟,其在书中提到的一些架构设计上的原则与思想很有借鉴意义,非常有一读的价值。本文就本书的一些重点内容加以总结。
2024-12-07 18:51:34
1136
原创 从Rabin-karp字符串匹配算法中得到的一些启发
最近在学习算法导论字符串匹配算法相关章节中,了解到一种很有趣的算法。它将字符串匹配转换为一种多项式求值问题,也就是通过计算子串的哈希(验证唯一性的指纹)来比较是否相等,具体做法是将字符串中每个字符视为以总字符集为进制的一个数,比如0-9组成的字符用十进制表示,字符串“123”就是十进制数123,如果是26个英文字母,那就是26进制数,“abc”可通过计算转换为10进制数,这个计算的结果就作为串的哈希,其中用到了霍纳法则提高多项式的计算效率。
2025-09-23 17:36:07
149
原创 矩阵的秩几何含义
对于一个超定系统A(m>n),由低维输入向高维空间转换,不发生维度的丢失,即像空间是余定义域(m维空间)的一个n维(原像空间维度)子空间,这种情况下是单射的,即一个输入对应一个唯一输出,它的齐次解空间(又称零空间或核空间)是0维的,即只有0向量一个点。对于一个欠定系统A(m<n),由高维输入向低维空间转换,变换后像空间维度就等于m维,即满射,即像空间任意一点都有对应的原像空间的某些(多对一的)输入,因是从高维空间到低维空间的转换,必定存在维度的丢失,故零空间是一个n-m维的空间。
2025-08-26 20:31:06
289
原创 矩阵初等变换的几何含义
对换改变空间定向故行列式变号,倍乘对某个基缩放故行列式放大k倍,倍加做剪切变换故行列式不变,这是线性变换的三种原子变换,可通过三种初等变换来组合出所有可能的线性变换。
2025-08-26 14:46:24
385
原创 线性代数中矩阵等价与离散数学中关系的闭包之间的关联
从deepseek的回答中我明白了矩阵的等价其实就是等价关系的一个实例,而它提到了这层关联的更高一层的抽象,通过群论的角度解释,我初次接触群论还是在3b1b讲解初等群论的视频,对该理论的理解肯定会存在偏差,不过通过下面的回答,捕捉到一些重要知识点,可见群论的冰山一角。现在我对等价关系有了新的理解,即同一对象的通过群作用所达到的不同状态之间是一种等价关系,所有的状态集合就构成一个等价类。
2025-08-26 13:17:26
518
原创 对DFT中复信号的理解
也就是说可以大致将公式中的复指数视为信号分量的初始相位,如果将n"解冻",也就是让t开始变化,那么这些等角分布的相位在单位圆上滚动起来,想象一个轮胎滚动起来时它的轮毂样子。视为ω这个多项式每一项的系数就是时域的对应的序列x[n],ω。FFT其实就是将DFT拆解成多项式的形式来观察,将。先将其中n视为一个定值其中对于某个频点k的复指数。其中的n就对应输入信号的序列。
2025-08-22 15:17:03
220
原创 对于c++三种类型传递方式的理解
C++有三种参数传递方式:按值传递会创建对象副本但可能引发双重释放;按引用传递语法简洁但不可重绑定;按指针传递最灵活但风险最大,需手动管理内存。C++11引入右值引用支持移动语义,实现资源控制权转移。此外,禁用拷贝构造可确保资源独占性。指针删除后不会自动置空,可能产生悬空指针问题。相比之下,C#/Java通过垃圾回收机制封装了指针功能,禁止指针运算和直接内存操作。
2025-07-19 21:45:31
425
原创 数据结构——散列表
散列表是实现字典操作的一种有效数据结构。尽管最坏情况下,散列表中查找一个元素的时间与链表中查找的时间相同,达到了θnθ(n)θn。然而在实际应用中,散列查找的性能是极好的。在一些合理的假设下,在散列表中查找一个元素的平均时间是O1O(1)O1。散列表是普通数组概念的推广。由于对普通数组可以直接寻址,使得能在O1O(1)O1时间内访问数组中的任意位置。本文介绍了散列表相关概念,解决散列冲突的两种方法,介绍3种散列值计算方法,最后还会介绍一种适用于静态存储的完全散列技术,它可以在O1。
2025-07-12 18:28:02
989
原创 红黑树原理详解
红黑树是被广泛应用的BST的许多“平衡树”变种之中的一种,它不像AVL那样严格平衡,但是在实际应用中,综合性能一般更加优越,可以保证在最坏情况下基本动态集合操作的时间复杂度为OlgnO(lgn)Olgn。红黑树的插入、删除操作非常复杂,尤其是删除操作是理解红黑树难点中的难点,本文尝试从两种角度,一种是红黑树角度,一种是从B树的角度来解释,这些操作中的各种情况,以帮助读者理解为什么是这样,为什么是这几种情形,不同情形下为什么这样处理及其对应的含义。避免死记硬背所有可能情况及对应处理方式;
2025-07-09 17:30:00
938
原创 专为磁盘存储设计的数据结构——B树
B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树。B树与红黑树一样都是BST的变种。但它们在降低磁盘I/O操作数方面要更好一些。许多数据库系统使用B树或者B树的变种来存储信息。下面是一颗B树示例:计算机系统利用各种技术来提供存储能力。一个计算机系统的主存(primarymemory或mainmemory)通常由硅存储芯片组成。这种技术每位的存储代价一般要比磁存储技术(如磁带或磁盘)高不止一个数量级。许多计算机系统还有基于磁盘的辅存(secondarystorage);
2025-07-07 15:29:56
1253
原创 二叉搜索树
搜索树数据结构支持许多动态集合操作,包括SEARCH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT和DELETE等。因此,我们使用一棵搜索树既可以作为一个字典又可以作为一个优先队列。本文会介绍二叉搜索树(BST)的基本性质,以及该数据结构支持的相关操作。set;set;set;set;树的遍历有四种形式,前序遍历适用于根节点需要优先处理的情况,如Json/XML的树形结构序列化需要让根在前序列化,方便重建。打印文件目录时需要先打印根目录。
2025-07-03 19:54:41
889
原创 所有节点对的最短路径问题
本文讨论如何用基于矩阵乘法的动态规划算法来解决所有结点对最短路径问题。之后给出另一种动态规划算法,即Floyc-Warshall算法。并讨论如何在有向图中找出传递闭包的问题,该问题与所有结点对最短路径问题相关。最后,给出一种针对大型稀疏图的一种求解此问题算法。其中我们重点给出Floyc-Warshall算法的实际代码,其他的算法以伪代码形式给出。
2025-07-01 17:58:49
694
原创 单源最短路径
本文讲解几种求解单源最短路径问题的算法,Bellman-Ford算法解决的是一般情况下的单源最短路径问题。在一般情况下,边的权重可以为负值。Bellman-Ford算法非常的简单,并且还能够侦测是否存在从源结点可以到达的权重为负值的环路。接着给出一种在有向无环图中计算单源最短路径的线性时间的算法。Dijkstra算法的时间复杂度低于Bellman-Ford算法,但却要求边的权重为非负值。最后本文会描述如何使用Bellman-Ford算法来解决线性规划中的一种特殊情况。如上所述是最短路径的定义,及。
2025-06-27 17:32:41
1079
原创 最小生成树
图的最小生成树问题是图论所研究的重要问题之一,它在实际的生产中有着广泛的应用价值,如在电子电路设计中要求布线连接所有端子的同时布线的长度要最小就需要用到最小生成树。本文讲解求解最小生成树的两种经典算法Kruskal算法和Prim算法。
2025-06-25 20:23:35
913
原创 不相交集合数据结构
一些应用涉及将n个不同的元素分成一组不相交的集合。这些应用经常需要进行两种特别的操作:寻找包含给定元素的唯一集合和合并两个集合。本章将介绍如何维护一种数据结构来实现这些操作。本文介绍不相交集合所支持的操作,及其使用链表及有根树表示的两种形式。有时,集合我们不关心集合代表是谁,只要能够保证每次查询时,对于同一集合中的元素始终返回同一个代表即可,而有时代表的选取又需要特别考虑。不相交集合通常支持以下三种操作:建立集合是对单个元素进行操作,它是集合初始化操作,此时集合中只包含唯一元素。
2025-06-24 20:36:23
985
原创 基本图算法介绍
由于图论问题渗透整个计算机科学,图算法对于计算机学科至关重要。成百上千的计算问题最后都可以归约为图论问题。本系列文章对《算法导论》一书中谈及的一些重要图论问题的相关知识进行汇总整理。本篇讲述图的搜索问题,图的搜索指的是系统化地跟随图中的边来访问图中的每个结点。图搜索算法可以用来发现图的结构。许多的图算法在一开始都会先通过搜索来获得图的结构,其他的一些图算法则是对基本的搜索加以优化。可以说,图的搜索技巧是整个图算法领域的核心。本文对图的搜索算法及其应用相关知识进行了总结。
2025-06-23 21:49:06
1109
原创 贪心算法思路详解
贪心算法是基于局部最优选择的高效算法,相比动态规划减少了子问题数量,但可能只得到次优解。其核心在于贪心选择性质和最优子结构:前者证明局部最优能构成全局最优,后者确保子问题最优解能组合成原问题最优解。文章通过0-1背包问题与分数背包问题的对比,说明贪心算法并非适用于所有场景;并以活动选择问题为例,展示了如何从动态规划过渡到贪心算法,包括选择策略的证明(取最早结束活动)和代码实现。最后提及拟阵理论为部分贪心算法提供理论支撑,指出其适用范围的局限性。贪心算法效率高但需严格证明,实际应用需权衡问题特性与算法适用性。
2025-06-21 18:10:22
1334
原创 动态规划算法思路详解
本文通过详细展示动态规划问题的分析过程,力图给读者建立一个完善全面的动态规划知识体系,帮助读者建立思维方式,抓住动态规划思想本质,起到拨云见日的效果。动态规划、贪心算法等等作为高级的设计技术是一系列复杂工业算法的思想基础,它解决的是一类问题,而非某种特定问题,掌握其思维方式是程序员的重要成长。
2025-06-19 15:02:14
1125
原创 c#中equal方法与gethashcode方法之间有何关联?
大家有没有遇到过,当你重写了c#对象的equal方法之后,编译器会提示你对相应的gethashcode进行重写,你是否感到疑惑?这两者之间有什么关联?为什么要有这样的规范?不重写又会发生什么问题?
2025-05-14 20:54:20
1154
原创 排序算法——堆排序(四)
堆排序实际可以看作选择排序的一种改进实现,它通过在选择到最小的数时对其他记录进行调整,从而避免了冗余的比较来提高获取下一次选择效率。其在时间空间复杂度上都有不错的表现。完整代码。
2025-03-13 17:26:53
1155
原创 排序算法——归并排序(三)
归并排序是一种比较占用内存,但却效率高且稳定的算法。非递归的迭代方法,避免了递归时深度为log2n的栈空间,空间只是用到申请归并临时用的TR数组,因此空间复杂度为O(n),并且避免递归也在时间性能上有一定的提升,应该说,使用归并排序时,尽量考虑用非递归方法。
2025-03-13 15:47:01
1212
原创 排序算法——快速排序(二)
快速排序性能好坏关键取决于枢纽的选择,选的好在一众O(nlogn)复杂度的高级排序算法中快排是首屈一指的存在,选择不好甚至还比不上简单排序算法。插入排序。
2025-03-09 20:47:22
877
原创 实现一个类似c#LINQ链式语法的观察者模式
最近在学习UniRx的源码,其中链式语法的实现引起了我的兴趣,结合LINQ的实现原理,想要自己实现一个类似的事件机制。设计目标是一个支持链式语法的,可方便取消订阅的,在事件到达中途可使用任意操作符对事件参数进行转换的观察者模式。可基于此观察者模式设计事件系统。通过使用操作符,可以在事件在真正被接收前插入任意操作,从而可以实现更灵活的控制。C# LINQ查询。
2024-07-26 14:54:58
2226
原创 Unity中Debug、断言、异常的区别及使用
Unity中提供了三种错误检测机制,这三种机制在功能上看起来类似,通常容易混淆。三种机制各有其设计意图与相应的使用情景。本文就三者的区别及适用场景加以介绍,以帮助读者正确使用三种工具。Debug:用于临时性调试和错误记录,帮助开发者快速定位和修复问题。断言(Assertion):用于代码假设验证和条件测试,确保程序按预期运行。异常(Exception):用于处理不可预见的运行时错误,提供错误恢复机制,增强程序的健壮性和稳定性。
2024-07-22 21:37:23
1083
原创 c#闭包原理
c#闭包是一个很强大的功能,在平时项目中会经常用到,我们大多数人在体验其便利性的同时,可能不会去考虑其背后的原理。这篇文章简要讲述闭包的工作原理,已帮助大家正确的使用闭包。闭包的概念应该源于离散数学这门计算机基础课程,离散数学中,一个关系R的闭包,是指加上最小数目的有序偶而形成的具有自反性,对称性或传递性的新的有序偶集,此集就是关系R的闭包。1通俗理解就是一在一个不完全的关系集上加上某些特定的序偶对使其满足了关系的某个性质。编程上闭包的概念可以类比的方式理解。
2024-07-21 18:21:21
2007
原创 c#中系统模块访问权限控制的一种解决方案
项目中系统通常会使用单例模式,但是普通单例模式会将系统API全部暴露给外界,而与该系统交互的其他系统或上层模块往往仅需要与系统的单个模块功能进行交互,为了对系统间互相调用时模块的访问权限进行限制,我设计了以下的一种解决方案由于每个系统模块功能拆分都是由自己决定,接口必须由系统自身实现,难以抽象出上层,使得系统实现部分代码量增多。如果调用方需要获取系统的数个模块调用权限,这种设计很难实现,只能扩展新的模块接口,当然实际应用中这种情形应该很少会有,系统功能模块划分理应都是针对性的提供服务。
2024-06-10 12:00:05
684
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅