- 博客(73)
- 资源 (1)
- 问答 (3)
- 收藏
- 关注
原创 【Maven】将普通Eclipse项目改造为Maven项目(非SpringBoot项目)
将普通Eclipse项目结构改造为Maven标准结构。
2025-02-27 11:25:21
1039
原创 【软件设计】常用设计模式--代理模式
与真实对象和代理对象共享相同的接口,以便客户端可以通过代理访问。与之前相同,定义一个公共接口。代理模式在控制对象访问和增强系统功能方面提供了很大的灵活性,且每种变体都有其独特的用处,需要根据需求进行选择和实施。
2024-10-24 14:42:10
1177
1
原创 【软件设计】常用设计模式--观察者模式
观察者模式的变体为不同的应用场景提供了灵活性,从推拉模型到优先级处理和异步通知,它适用于从简单的GUI事件系统到复杂的分布式微服务架构。在选择具体变体时,需要权衡性能、响应速度、解耦程度等多方面因素,以便为系统设计提供最佳的解决方案。
2024-09-17 14:18:10
1848
原创 【软件设计】常用设计模式--策略模式
策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互换。策略模式让算法独立于使用它的客户而变化。通过策略模式,我们可以将不同的算法封装到独立的类中,并通过客户端在运行时选择具体的策略类。这种模式的优点是提高了代码的灵活性和可扩展性。
2024-09-05 15:24:07
1857
1
原创 【软件设计】常用设计模式--工厂模式
经过上面的学习,不难发现,从简单工厂模式到工厂模式,再到抽象工厂模式,实际就是对软件架构进一步解耦的过程,提高代码的扩展性,也使得软件架构能够更加的灵活。例如,不同的数据库(如SQL Server、MySQL、Oracle)可以通过工厂模式进行选择,实现不同数据库的连接对象。抽象工厂模式通过为一系列相关或依赖的对象提供一个创建接口,使得客户端可以不必指定具体的类名,就可以创建对象族。在这个变体中,工厂方法接受不同的参数类型,不仅仅是一个标识符字符串,还可以是枚举、配置对象或条件判断等。
2024-09-05 15:18:25
1197
原创 【软件设计】常用设计模式--单例模式
在多线程环境中,如果多个线程同时调用获取实例的方法,可能会创建多个实例。为了解决这个问题,我们需要在单例模式中加入线程安全的机制。单例模式的核心目标是确保一个类只有一个实例,并提供一个全局访问点。这意味着无论何时何地,你都可以访问到同一个对象实例。掌握了单例模式的基本原理和实现,可以尝试在实际项目中应用它,或者探索如何将其与其他设计模式组合使用。在不同的编程语言中,单例模式的实现可能略有不同。
2024-09-05 11:39:53
816
原创 【创作纪念日】我的CSDN1024创作纪念
直到考研后专业改变,成为了主要跟软件编程、计算机知识相关的研究后,才逐步开启自己的CSDN博客创作。对于未来,我肯定是要朝着全栈工程师去成长的,当前已经学完了前端的技术路线,后端也在汲取知识种,虽然工作后可能留给自己的学习时间没那么多了,但是不积跬步,无以至千里。自己也从最开始的技术小白,通过一步步努力成为了技术菜鸟(哈哈哈哈哈),其中踩过的坑很多,想着不能白踩,这都是宝贵的经验啊!项目当中遇到的问题、代码当中遇到的bug(XD)、需要学习的新技术等都会经过思考提炼为自己的知识,填充进自己的知识图谱里。
2024-07-03 14:02:26
319
原创 【数据库】高并发场景下的数据库开发注意要点
在高并发项目中,数据库开发需要全面考虑数据查询和存储的优化,从索引、缓存、读写分离到分库分表、分布式数据库、事务管理等多个方面入手。同时,持续的性能监控和调优也是保障数据库稳定高效运行的关键。
2024-05-14 10:01:59
568
原创 【React Router】React Router学习笔记
React Router 是一个基于 React 之上的强大路由库,它可以让你向应用中快速地添加视图和数据流,同时保持页面与 URL 间的同步。
2023-10-23 20:45:57
598
原创 【Linux】Linux远程访问Windows下的MySQL数据库
安装MySQL,这里安装的MySQL 8.0,本来想安装5.7版本,但是arm不支持,amd倒是可以。可以先换一下ubuntu镜像源,我使用的清华源,根据自己的设备情况按需选择Ubuntu ports(ARM)或者ubuntu(aAMD):https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/Linux需要安装MySQL,我是树莓派安装的ubuntu 22.04,所以mysql需要安装ARM 64位的,电脑应该是AMD 64位。
2023-09-28 20:28:37
1700
原创 算法通关村第十五关——从40亿个数中产生一个不存在的数的处理方法
给定一个输入文件,包含40亿个非负整数,请设计一个算法,产生一个不存在该文件中的整数,假设你有1GB的内存来完成这项任务。存储的不是这40亿个数据本身,而是其对应的位置。本题不用写代码,能把方法过程说清楚就可以。
2023-09-13 21:51:20
318
原创 算法通关村第十五关——位运算在查找重复元素中的妙用
大部分算法默认给定的数据量都比较小,只有几个或者几十个元素,但是如果将数据量提高到百万甚至几十亿,那么处理逻辑就会发生很大差异。在海量数据中,普通数据结构都无效了,因为内存空间放不下,常规的递归、排序、回溯、贪心和动态规划等思想也无效了,执行都会超时。81。
2023-09-13 20:55:08
246
原创 算法通关村第十四关——解析堆在数组中找第K大的元素的应用
给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。:按照“找最大用小堆,找最小用大堆,找中间用两个堆”,这道题用最小堆来解决,构造一个大小只有K的最小堆。,比如找第4大的数,先让前四个入堆,之后继续遍历与堆顶元素进行比较,比堆顶元素大才能入堆否则不行。新元素的插入只是替换根元素,然后重新构造最小堆,完成之后的根元素就是第4大的元素。
2023-09-13 20:34:16
261
原创 算法通关村第十四关——原来这就是堆
关于堆的问题总结为口诀:查找:找大用小,大的进;找小用大,小的进。就是找第K大的数,就用小顶堆,后续数据只有比根元素大的时才允许进入堆。如果时找第K小的数,就用大顶堆,后续数据只有比跟元素小才能进堆。排序:升序用小,降序用大。升序用小顶堆,从根节点开始到叶子节点逐渐增大,降序用大顶堆,从根节点开始到叶子节点逐渐减小。
2023-09-13 19:51:15
87
原创 算法通关村第十三关——幂运算问题解析
幂运算为常见的数学运算,形式为a^b,其中a为底数,b为指数,力扣中,幂运算相关的问题主要是判断一个数是不是特定正整数的整数次幂,以及快速幂的处理。
2023-09-10 15:01:00
654
原创 【React】React学习:从初级到高级(四)
如果一个Effect中的逻辑有多个组件用到了,就可以考虑将重复逻辑部分提取出来。Hook的名称必须以’use’开头!自定义Hook共享的是状态逻辑,而不是状态本身。对同一个 Hook 的每个调用是各自完全独立的。使用了useEffect// ...});// ✅ 声明所有依赖首先明白一件事,就是如果你需要写Effect就意味着需要"走出React"和某些外部系统同步,或者需要做一些react中没有对应内置API的事。
2023-09-07 09:31:42
1140
原创 算法通关村第十三关——溢出问题处理模板
溢出问题是面试当中输出涉及到数字的一个需要特别注意的地方,典型的题目有三个:数字反转,将字符串转成数字和回文数。
2023-09-05 22:03:47
413
原创 【React】React学习:从初级到高级(三)
随着应用不断变大,应该更有意识的去关注应用状态如何组织,以及数据如何在组件之间流动。冗余或重复的状态往往是缺陷的根源。
2023-09-03 09:40:37
759
1
原创 算法通关村第十二关——字符串反转问题解析
字符串反转是关于字符串算法里的重要问题,虽然不是太难,但需要考虑到一些边界问题。本篇文章就对几道字符串反转题目进行分析。
2023-09-02 20:41:45
421
原创 算法通关村第十二关——不简单的字符串转换问题
字符串是我们在日常开发中最常处理的数据,虽然它本身不是一种数据结构,但是由于其可以包含所有信息,所以通常作为数据的一种形式出现,由于不同语言创建和管理字符串的方式也各有差异,因此针对不同语言特征又产生了很多问题。常见的字符串转换题目,也就是在大小写字母、数字、特殊字符这几种类型之间进行。但是在转换过程中需要处理几种特殊情况,比如当前元素能否进行转换,如果是字符串转换为数字还要考虑当前元素是不是数字,转换之后是否会溢出等。
2023-08-31 16:38:38
451
原创 【React】React学习:从初级到高级(二)
例如,你可能只想要更新表单中的一个字段,其他的字段仍然使用之前的值。在改变state时,不能改变state中现有的对象,要重新创建一个对象把原来的对象替换掉。这个事件对象还允许阻止传播。事件处理程序是开发者自己写的的函数,它将在用户交互时被触发,如点击、悬停、焦点在表单输入框上等等。中的数组时,需要创建一个新的数组(或者创建一份已有数组的拷贝值),并使用新数组设置。如果子组件定义了一个函数,那么在子组件函数被触发后,会向上冒泡到父级组件层级。对象的哪些部分被改变了,并会依照你的修改创建出一个全新的对象。
2023-08-30 21:18:56
1152
1
原创 【React】React学习:从初级到高级(一)
JSX 虽然看起来很像 HTML,但在底层其实被转化为了 JavaScript 对象,你不能在一个函数中返回多个对象,除非用一个数组把他们包装起来。通常,文件中仅包含一个组件时,会选择默认导出,而当文件中包含多个组件或某个值需要导出时,则会选择具名导出。在父组件中引入即可,但是不要在组件中定义组件。一个React组件,不管什么时候给了它一个相同的输入,那么它的输出就是相同的,就像数学公式一样。局部突变的意思就是在渲染时更改刚刚创建的变量和对象,属于内部突变,不会影响函数外部的变量或函数。
2023-08-27 13:15:16
1014
原创 算法通关村第十一关——搞清位运算
很多人都记不清源码、反码和补码的区分,都是二进制,其实记忆起来很简单,分为正数和负数来记。正数的原码、反码和补码都是一样的,负数的原码符号位为1,反码是在原码的基础上进行改变:保持符号位不变,其他位取反;补码是在反码的基础上:反码的末位加1。
2023-08-27 13:02:08
452
原创 算法通关村第十关——快速排序算法
快速排序的是将分治法运用到排序问题的典型例子。基本思想:是通过随机标记一个pivot元素将含有n个元素的序列划分为左右两个子序列left和right,其中left的元素都比pivot小,right的元素都比pivot大,然后再次对left和right分别执行快速排序,这样将左右两个子序列排列完后,整个序列也就是有序的了。但是当数组中包含时,会出现性能下降的现象,此时我们可以使用三路快速排序算法。
2023-08-26 17:01:25
338
原创 算法通关村第九关——透彻理解二分查找
常见的查找算法有顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等。如果进行归类,那么二分查找、插值查找(一种查找算法)以及斐波那契查找都可以归为(大类)。而插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。这些算法中最重要的就是和。xarrr−arrikey−arri])r−i其中,i和r分别代表数组的第一个和最后一个索引,key代表待查找的元素。
2023-08-22 18:56:06
449
原创 算法通关村第八关——轻松搞定二叉树的深度和高度问题
从局部到整体递推分情况讨论,明确递归终止条件,得出完整的递归逻辑,如果想验证的话,就从整体到局部画图推演。
2023-08-19 15:39:22
296
原创 算法通关村第八关——轻松搞定翻转二叉树
观察图中翻转前后的二叉树,我们不难发现,翻转过程中,只需要把每一个节点的左右子节点交换以下就可以了,但是我们应该以什么样的顺序来遍历二叉树呢?如果是后序遍历,就先交换叶子结点,如果当前遍历到的节点的左右子树均已翻转,就只需要交换两棵子树位置,就可以完成二叉树的翻转。也可以实现翻转,先将二叉树的根节点放入队列,然后从队列中拿出节点,交换节点的左右子节点,如果交换后的左右子节点不为空,则将左右子节点放入队列,再拿出节点,交换左右子节点,二叉树的经典算法问题主要考察的还是对二叉树前中后序三种遍历方法的掌握。
2023-08-18 15:51:20
217
1
原创 算法通关村第七关——递归和迭代实现二叉树前中后序遍历
迭代主要是模拟一个系统栈出来,将节点压入栈中,再取出。前中序遍历容易理解,后序遍历较为复杂,涉及到反转操作。只要调整前序遍历的左右顺序就可以得到后序遍历。反转后的后序遍历与前序遍历相比就是左右顺序不同
2023-08-14 20:09:35
432
原创 算法通关村第六关——原来如此简单
这道题也是层次遍历的变种题,我们思考一下,既然需要我们找到每一层最右边节点的值,那在我们遍历每一层节点的时候,我们已经将这层节点放入队列,是不是只需要判定一下。遍历当前层次的节点时,如果这个节点还有子节点,就将其加入队列中;如果当前层次遍历完了,就将队列的长度重新指向新的队列长度。我们先看一下基础的层次遍历题,力扣102题:给你一个二叉树,请你返回其按层序遍历得到的节点值。就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,直到访问完二叉树的叶子节点那层。
2023-08-14 14:53:30
146
原创 算法通关村第六关——如何使用中序和后序来恢复一颗二叉树
Tree:表现得是一种,为nn≥0个节点构成的有限集合,当n=0时,称为,对于任一颗非空树(n>0),它具备以下性质: 树中有一个根(root)节点,用r表示 其余节点可分为m(m>0)个的有限集T1T2...Tm,其中每个集合本身又是一棵树,称为原来树的Subtree。子树不相交;除了根结点外,每个结点有且仅有一个父结点;一颗N个结点的树有N-1条边。
2023-08-08 16:35:08
476
原创 算法通关村第五关——n数之和问题解析
首先,三层循环想都不要想!时间复杂度太高了,直接放弃。比较好的办法就是“排序+双指针”。先将数组升序排序,之后固定一位元素,再用两数之和思想找剩下的两个元素。我们可以使用哈希表法来将寻找第二个数的时间复杂度降低。
2023-08-08 10:43:05
367
原创 算法通关村第五关——HashMap和队列问题分析
Hash也称为散列。就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。假设数组array存放的是1到15这些数,现在要存在一个大小是7的Hash表中,存储的位置计算公式是:对于如何取值,比如要取13,我们同样利用计算存储位置的计算公式13 % 7 = 6,我们访问array[6]13是在的,返回true。如果想看20在不在哈希表里,操作同上20 % 7 = 6,访问array[6],没有20,返回false。通过上面的例子可以发现有一些数据被存放到同一个位置了。
2023-08-06 16:53:32
282
原创 算法通关村第四关——最大栈问题解析
弹出栈顶元素时我们同步将辅助栈中栈顶元素弹出,这样就可以保证只要辅助栈不为空,辅助栈里的栈顶元素始终都是当前栈的最大值。为了在最短事件内获得栈中的最大值,就不应该在执行。存储到另外一个辅助栈中,这样在后面的操作过程中只要栈顶元素为。的过程中就应该计算好当前栈中的最大值。不会被弹出,在操作过程中的任意一个时刻,只要。在最大栈的问题上,除了实现普通栈拥有的方法。:基于栈后进先出的特点,那么在将一个数。在栈顶,那么栈里的元素就一定是。压入栈中时,如果栈里已经存在。入栈时,把当前栈中的最大值。
2023-08-06 10:29:45
379
原创 算法通关村第四关——如何基于数组实现栈
具有一定操作约束的线性表,只在一端(栈顶,Top)做插入(Push)、删除(Pop),不可操作的一端称为栈底(Bottom)。后进先出(Last In First Out, LIFO),若栈中没有元素则称为空栈。一维数组栈顶单链表链栈栈可以用于表达式求值,如后缀表达式求值、中缀表达式求值、函数调用及递归实现、深度优先搜索、回溯算法等push(E)Epop()peek()empty()在设计栈时,不管用数组还是链表,都需要实现上面几个方法。
2023-08-04 21:50:42
205
原创 算法通关村第三关——双指针的妙用
所谓的双指针其实就是两个变量,不一定真的是指针。双指针可以分为快慢双指针(以不同速度向同一边走)、对撞双指针(从两边向中间走)、相反双指针(从中间向两边走)适用场景:处理数组、字符串问题,比如删除有序数组中的重复项、元素奇偶移动、数组轮转、数组区间、字符串空格替换等。
2023-08-03 14:59:09
170
ti_cgt_c2000_20.2.1.LTS_windows_installer.exe
2020-05-24
科大讯飞语音识别 Recongnizer error 10407 一直得不到解决
2021-11-15
ROS_URDF_Xacro惯性矩阵函数调用报错如何解决
2021-09-06
ROS noetic版本如何进行pocketsphinx功能包的安装和使用
2021-08-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人