自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cjh的博客

cjh的博客

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

原创 idea 运行异常 gradle 项目

idea 运行异常 gradle 项目

2024-07-16 11:56:25 318

原创 责任链模式:原理与实现解析,及其应用场景代入

在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。在GoF的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。当然,在实际的开发中,也存在对这个模式的变体,那就是请求不会中途终止传递,而是会被所有的处理器都处理一遍。职责链模式有两种常用的实现。

2024-05-13 10:34:23 968

原创 如何定义系统无故障运行维度的能力(高可用、高可靠、高稳定、高容错),及对应衡量指标

高可用性、高可靠性、高稳定性和高容错性 这 4 个概念经常用于定义系统无故障运行维度的能力。它们之间存在区别。

2024-04-15 21:15:00 1405

原创 如何定义系统计算维度的能力(高性能、高吞吐、高并发),及对应衡量指标

高性能、高吞吐、高并发,这 3 个概念经常用于定义系统计算维度的能力。

2024-04-12 21:15:00 600

原创 概念与定义的区别(如何高效理解和沟通某个事物)

理解概念:首先,你需要对要定义的概念有一个清晰的理解。这可以阅读相关的文献、观察实例或与专家进行讨论。确定内涵:内涵是指概念所指的事物的本质特征。你需要思考这个概念的核心特征是什么,它与其他类似概念的区别在哪里。考虑外延:外延是指所有属于这个概念的具体对象。你需要确定这个概念可以应用到哪些事物上,这些事物的共同特征是什么。使用简洁明了的语言:一个好的定义应该是简洁且易于理解的。避免使用过于复杂或模糊的词汇,尽量用简单的语言来表达。确保准确性和一致性。

2024-04-11 21:45:00 1166

原创 分布式系统的指标:啥是分布式的三围

按照不同维度,分布式系统的指标可以分为性能、资源占用、可用性、可扩展性这四大类。我们自然希望自己的系统,是高性能、高可用、高扩展和低资源占用的,但考虑到硬件成本、开发效率等因素,必须要在设计不同的系统、业务时有所取舍。所以,这里也分析了典型的电商、IoT、电信、HPC(高性能计算)、大数据、云计算、区块链等业务或系统的不同诉求,进而得出了系统设计者需要关注哪些指标。你在设计其他类型的系统时,可以按照这个思路进行取舍。在文中提到了,分布式系统的指标之间会存在一些冲突或约束。

2024-04-05 15:39:46 1563

原创 分布式缘何而起:从单兵,到游击队,到集团军

在文章里分享了分布式的起源,即从单机模式到数据并行(也叫作数据分布式)模式,再到任务并行(也叫作任务分布式)模式。单机模式指的是,所有业务和数据均部署到同一台机器上。这种模式的好处是功能、代码和数据集中,便于维护、管理和执行,但计算效率是瓶颈。也就是说单机模式性能受限,也存在单点失效的问题。数据并行(也叫作数据分布式)模式指的是,对数据进行拆分,利用多台计算机并行执行多个相同任务,通过在相同的时间内完成多个相同任务,从而缩短所有任务的总体执行时间,但对提升单个任务的执行性能及降低时延无效。

2024-04-05 14:34:56 884

原创 【分布式事务】Seata 组件介绍

官网地址:https://seata.apache.org/zh-cn/docs/user/quickstart/

2024-03-31 17:53:46 624

原创 【布式事务】分布式事务和分布式指导理论简介

分布式系统是由多个子业务组成的,这些子业务分布在不同的服务器节点上,共同工作以完成系统的业务目标。在这样的背景下,为了确保分布式系统的高可用性和可扩展性,设计师们提出了 CAP 定理和 BASE 理论。CAP定理是分布式系统设计中的基本理论,由Eric Brewer在2000年提出,并由Seth Gilbert和Nancy Lynch在2002年证明。总的来说,BASE理论的核心思想是在分布式系统中,可以适当放宽强一致性的要求,追求更高的可用性和性能,通过一定的机制,最终实现一致性。

2024-03-31 16:10:06 1125

原创 JVM内存模型

方法区是线程共享的,用于存放被虚拟机加载的类的元数据信息,如常量、静态变量和即时编译器编译后的代码。若要分代,算是永久代(老年代),以前类大多“static”的,很少被卸载或收集,现回收废弃常量和无用的类。刚创建的对象在新生代的Eden区中,经过GC后进入新生代的S0区中,再经过GC进入新生代的S1区中,15次GC后仍存在就进入老年代。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。栈的大小可以是固定的,或者是动态扩展的。与虚拟机栈作用相似。

2024-03-18 23:15:00 981

原创 并发编程3大基本特性(有序性、可见性、原子性)

在java内存模型中,共享变量存在于主内存,每个线程有独享的工作内存(为了提高处理速度,每个处理器都有自己的缓存,如闪存等)。当一个线程在一个处理器上修改了一个变量的值,这个值可能会暂时只存在于该处理器的缓存中,而其他处理器的缓存中仍然保留着旧值。如果两个操作之间存在数据依赖关系,即一个操作的结果是另一个操作的输入,则这两个操作不能被重排序,因为这会改变程序的执行结果。a. 编译器优化:编译器在编译过程中会进行一定程度的重排,例如将读取同一数据的操作放置在一起执行,以减少数据读取的时间开销和提高效率。

2024-03-18 21:15:00 1103

原创 数组--[15]三数之和/medium 理解度C

优化点主要在找到二元变量相互的影响规则,然后用双指针来处理,此时复杂度是 n(找二元变量影响规则的原因:双指针在每次循环中只移动某个指针,而移动左指针或者右指针需要基于影响规则来确定)1、三元变量转二元变量:nums[i] + nums[j] + nums[k] = 0 ==> num[j] + num[k] = -num[i]2、遍历数组,将每个数指定为 num[i],再使用双指针扫描下标 i 之后的数据,查找是否存在 num[j] + num[k] = -num[i]唯一可能的三元组和为 0。

2024-03-14 10:31:43 394

原创 二分查找--33. 搜索旋转排序数组/medium 理解度C

通过不断的用Mid二分,根据定理二,将整个数组划分成顺序区间和乱序区间,然后利用定理一判断target是否在顺序区间,如果在顺序区间,下次循环就直接取顺序区间,如果不在,那么下次循环就取乱序区间。在这些场景中,使用二分查找的变种来搜索旋转排序数组是非常有效的,因为它可以在O(log n)的时间复杂度内找到目标元素,大大提高了搜索效率。:在数据恢复场景中,可能需要从损坏的数据文件中提取信息,这些文件可能因为某些操作导致数据的顺序被打乱,形成了旋转排序数组。,则返回它的下标,否则返回。按升序排列,数组中的值。

2024-03-04 10:52:00 855

原创 分治--215. 数组中的第K个最大元素/medium 理解度C

数据库查询:在数据库查询中,可能需要找出某个字段值排名第K的记录,这时也需要找出数组中的第K个最大元素。算法设计:在设计一些需要排序的算法时,如快速排序、堆排序等,找出第K个最大元素可以作为算法的一部分。网络编程:在网络编程中,可能需要找出传输速度排名第K的节点,这时也需要找出数组中的第K个最大元素。机器学习:在机器学习中,可能需要找出预测结果排名第K的模型,这时也需要找出数组中的第K个最大元素。游戏开发:在一些游戏中,可能需要找出得分排名第K的玩家,这时就需要找出数组中的第K个最大元素。

2024-03-04 10:51:22 369

原创 二分查找--153. 寻找旋转排序数组中的最小值/medium 理解度B

在这些场景中,使用修改的二分查找算法来寻找旋转排序数组中的最小值是非常有效的,因为它可以在O(log n)的时间复杂度内找到目标值,大大提高了搜索效率。若通过不断的用Mid二分,根据定理二,找乱序区间,如果存在乱序区间,下次循环就直接取乱序区间,如果不存在,那么直接取区域最左值。定理三:每次二分,至多存在一个乱序区间,即要么有一个乱序区间,要么没有乱序区间。原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。

2024-03-04 10:51:01 910

原创 二分查找--215. 数组中的第K个最大元素/medium 理解度B(wait opt)

数据库查询:在数据库查询中,可能需要找出某个字段值排名第K的记录,这时也需要找出数组中的第K个最大元素。算法设计:在设计一些需要排序的算法时,如快速排序、堆排序等,找出第K个最大元素可以作为算法的一部分。网络编程:在网络编程中,可能需要找出传输速度排名第K的节点,这时也需要找出数组中的第K个最大元素。机器学习:在机器学习中,可能需要找出预测结果排名第K的模型,这时也需要找出数组中的第K个最大元素。游戏开发:在一些游戏中,可能需要找出得分排名第K的玩家,这时就需要找出数组中的第K个最大元素。

2024-03-04 10:50:06 348

原创 回溯--22. 括号生成/medium 理解度A

本问题主要采用自顶向下的方式思考。(自顶向下,往往意味着在向下传递前先进行逻辑处理)递归处理每个位置的可能字符。考虑2点:什么情况可放置左括号、什么情况可存放右括号。用递归解决问题时,通常是以2个角度来构思解决方案:自底向上、或自顶向下。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。

2024-02-01 08:30:00 368

原创 回溯--39. 组合总和/medium 理解度C

2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。本问题主要采用自顶向下的方式思考。(自顶向下,往往意味着在向下传递前先进行逻辑处理)用递归解决问题时,通常是以2个角度来构思解决方案:自底向上、或自顶向下。如果至少一个数字的被选数量不同,则两种组合是不同的。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。

2024-02-01 08:15:00 386

原创 回溯--17. 电话号码的字母组合/medium 理解度B

本问题主要采用自顶向下的方式思考。(自顶向下,往往意味着在向下传递前先进行逻辑处理)给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。用递归解决问题时,通常是以2个角度来构思解决方案:自底向上、或自顶向下。的字符串,返回所有它能表示的字母组合。

2024-01-31 08:30:00 402

原创 回溯--78. 子集/medium 理解度C

幂集中,每个子集里都保持着下标递增的顺序。每次递归,index表示当前子集里最大的下标+1。本问题主要采用自顶向下的方式思考。(自顶向下,往往意味着在向下传递前先进行逻辑处理)用递归解决问题时,通常是以2个角度来构思解决方案:自底向上、或自顶向下。返回该数组所有可能的子集(幂集)。

2024-01-31 08:15:00 400

原创 回溯--46. 全排列/medium 理解度C

给定一个不含重复数字的数组 ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]] 提示:用递归解决问题时,通常是以2个角度来构思解决方案:自底向上、或自顶向下本问题主要采用自顶向下的方式思考。(自顶向下,往往意

2024-01-30 08:30:00 569

原创 链表--114. 二叉树展开为链表/medium 理解度C

额外空间)展开这棵树吗?你可以使用原地算法(

2024-01-30 08:15:00 1144

原创 二叉树--199. 二叉树的右视图/medium 理解度C

想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2024-01-29 08:30:00 440

原创 二叉树--230. 二叉搜索树中第K小的元素/medium 理解度A

社交网络:在社交网络中,我们可能需要找到最受欢迎的K个话题、最活跃的K个用户等。数据分析:在数据分析中,我们经常需要找到数据集中的第K小的元素。例如,在金融分析中,可能需要找到某个股票价格的历史数据中的第K低的值。在这种情况下,找到第K小的元素可以帮助我们快速定位到满足条件的记录。在这种情况下,找到第K小的元素可以帮助我们快速确定玩家的排名。在这种情况下,找到第K小的元素可以帮助我们快速定位到重要的特征。实时系统:在某些实时系统中,我们需要快速找到第K小的元素。小的值,你将如何优化算法?

2024-01-29 08:15:00 953

原创 二叉树--98. 验证二叉搜索树/medium 理解度B

二叉搜索树:对于每个节点,都满足其左子树节点小于当前节点,其右子树节点大于当前节点。故我们遍历每个节点时,要把其左子树节点先遍历到。类似于左 中 右的中序遍历方式。根节点的值是 5 ,但是右子节点的值是 4。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

2024-01-28 08:30:00 375

原创 树--108. 将有序数组转换为二叉搜索树/medium 理解度B

二分偏左位置的数字作为根节点。左边的数据递归作为左子树,右边的数据递归作为右子树。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。排列,请你将其转换为一棵。

2024-01-28 08:15:00 713

原创 链表--102. 二叉树的层序遍历/medium 理解度B

二叉树的层序遍历

2024-01-27 08:30:00 331

原创 链表--543. 二叉树的直径/medium 理解度C

3.求以当前节点为根节点,二叉树的直径:可以转换成求当前节点左子树深度、和右子树深度,再将左右子树深度进行求和,此时左右子树深度加和 表示 左子树最长分支叶子节点 -》到 右子树最长分支叶子节点的距离。3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。这条路径可能经过也可能不经过根节点。是指树中任意两个节点之间最长路径的。1.二叉树的直径通常出现在叶子节点之间。给你一棵二叉树的根节点,返回该树的。由它们之间边数表示。

2024-01-27 08:15:00 416

原创 链表--101. 对称二叉树/medium 理解度B

为简化代码:我们递归函数中,考虑判断当前对称的2个节点是否相等,而不是判断这2个节点对称的子节点是否相等。你可以运用递归和迭代两种方法解决这个问题吗?给你一个二叉树的根节点。, 检查它是否轴对称。

2024-01-26 07:45:00 496

原创 链表--226. 翻转二叉树/medium 理解度A

翻转二叉树,即将二叉树中的每个节点的左右子树互换,这个操作在特定的算法和应用场景中有用。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。

2024-01-26 07:15:00 719

原创 链表--104. 二叉树的最大深度/medium 理解度A

对每个节点都进行左右子树的深度搜索,有2个递归终止条件:①当前节点为null;②当前节点为叶子节点,此时要保存最大深度。是指从根节点到最远叶子节点的最长路径上的节点数。

2024-01-25 07:45:00 373

原创 链表--24. 两两交换链表中的节点/medium 理解度C

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。在实际应用中,两两交换链表中节点的操作通常是链表排序算法的一部分,而排序算法的选择则取决于具体的应用场景和性能要求。两两交换(交换start、end)其实就是涉及三条指针的调整:p1->start->end->两两交换链表中的节点,即对链表进行排序操作。指针2:start->end 要调整为 start->指针1:p1->start 要调整为 p1->end。指针3:end-> 要调整为 end->start。

2024-01-25 07:15:00 1331

原创 哈希--73. 矩阵置零/medium 理解度A

则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。

2024-01-24 07:30:00 338

原创 哈希--560. 和为 K 的子数组/medium 理解度C

1.求两个位置之间的元素和。可以转换成 两个位置前缀和之间的差值。2.A+B=k,可以转换成计算 B-k=A。子数组是数组中元素的连续非空序列。

2024-01-24 07:15:00 430

原创 哈希--128. 最长连续序列/medium 理解度B

注:如何判断某元素是否为所在分段开头位置:判断该元素-1的数是否存在于哈希表,若不存在,则该元素是所在分段开头位置。:在某些操作系统或数据库管理系统中,可能需要找到一组连续的空闲内存块来满足特定的需求。:在基因测序或蛋白质结构分析中,可能会用到最长连续的DNA序列或氨基酸序列。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。遍历数组,只要遇到该元素是所在分段的开头位置,则遍历该段的长度。:在某些类型的游戏中,可能需要生成或分析一系列的连续事件或状态。若该元素不是所在分段的开头位置,则忽略。

2024-01-23 07:30:00 384

原创 技巧--75. 颜色分类/medium 理解度C

此时可以用摩尔投票算法(由摩尔在1981年提出,该算法的主要目标是在无序且候选人数不固定的情况下,有效地找出出现次数超过总数量一半的元素。这种算法的时间复杂度为O(n),空间复杂度为O(1),其中n是数组的大小。例如,在文本文件中,出现频率最高的单词或字符可以被编码为一个指针,指向该单词或字符在文件中的一个位置,大大减少了存储空间的需求。例如,如果某个查询返回的结果集中,某一列的值出现次数最多,那么数据库可以利用这一信息,只返回该列的值,而不是整个结果集,从而提高查询效率。,返回其中的多数元素。

2024-01-23 07:15:00 393

原创 哈希--49. 字母异位词分组/medium 理解度B

例如,可以将具有相同字母的单词分组,然后从每个组中选择一个单词作为密码的一部分。例如,可以将具有相同字母的单词分组,然后让学生找出每组中的其他单词。例如,当用户输入“teh”时,系统可以将其与“the”、“then”等单词分组,从而提供正确的建议。例如,我们可以将具有相同字母的单词分组,以便在创建标题、元描述和URL时使用这些关键词。例如,在分析关键词时,可以将具有相同字母的单词分组,从而减少重复计算。②集合间元素的差异性:不同集合的元素,其字母种类不同、或某种字母的个数不同。给你一个字符串数组,请你将。

2024-01-22 08:00:00 579

原创 技巧--169.多数元素/medium 理解度B

此时可以用摩尔投票算法(由摩尔在1981年提出,该算法的主要目标是在无序且候选人数不固定的情况下,有效地找出出现次数超过总数量一半的元素。这种算法的时间复杂度为O(n),空间复杂度为O(1),其中n是数组的大小。例如,在文本文件中,出现频率最高的单词或字符可以被编码为一个指针,指向该单词或字符在文件中的一个位置,大大减少了存储空间的需求。例如,如果某个查询返回的结果集中,某一列的值出现次数最多,那么数据库可以利用这一信息,只返回该列的值,而不是整个结果集,从而提高查询效率。,返回其中的多数元素。

2024-01-22 07:15:00 596

原创 哈希--283. 移动零/medium 理解度A

在历史数据分析或项目管理中,如果将时间点或事件表示为数组,并且希望将所有零值(即无效或无关的事件)移动到末尾,可以使用移动零的方法。:对于需要对数组进行特定操作的场景,例如重新排序或统计非零元素的数量,可以先使用移动零的方法来预处理数组。:在某些操作系统或数据库管理系统中,可能需要将一组连续的内存块中的所有零元素移动到一端,以优化内存的使用。然后再最后补齐固定值。:在进行数据处理或数据清洗时,可能需要将数组中的零元素移动到特定位置,比如数组末尾。移动到数组的末尾,同时保持非零元素的相对顺序。

2024-01-19 15:56:58 382

原创 技巧--136.只出现一次的数字/medium 理解度A

而本题,只有一个数出现一次,其余数均出现2次,所以整个数组全部异或后,出现2次的数会被相冲为0,最终只剩下只出现一次的数。,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。异或运算:是一种二进制运算,会将两数的同位数据做对比,相同为0,不同为1;要求是:数组的重复数据基于某个规则,可以相冲。线性时间复杂度,查找一批数据中的特殊数。故2个相同的数,异或后,值为0。

2024-01-18 07:45:00 393

MemoryAnalyzer-1.8

堆转储分析器(无需安装eclipse)

2022-03-03

空空如也

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

TA关注的人

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