自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 Golang系列 - 内存对齐

本文将围绕内存对齐展开, 包括字符串、数组、切片等类型header的size大小、内存对齐、空结构体类型的对齐等等内容.

2025-04-06 21:35:30 700 1

原创 算法编程题-到达终点数字 & 将字符串翻转到单调递增 & 四因数 & 找出最具竞争力的子序列

本文将介绍四道LeetCode原题,分别是到达终点数字,将字符串翻转到单调递增,四因数和找出最具竞争力的子序列。首先会给出相关题目的描述,然后是思路分析,接着给出golang语言实现的且通过所有测试用例的代码,最后是相关的复杂度分析。

2024-12-23 15:15:10 1030

原创 算法编程题-不相交的线 & 联通网络的操作次数 & 销售价值减少的颜色球

本文将介绍三道LeetCode原题,分别是不相交的线,联通网络的操作次数,销售价值减少的颜色球。首先会简单描述原题,接着给出思路分析,然后是基于golang语言实现且通过所有测试用例的代码,最后是相应的复杂度分析。关键词:LeetCode,面试,golang,算法,并查集。

2024-12-19 10:19:32 1121

原创 算法编程题-字母与数字 & 等式方程的可满足性

本文将介绍两道LeetCode原题,分别是字符与数字,等式方程的可满足性。首先将简单对这两个问题进行描述,随后给出相关的思路分析,以及基于golang语言的代码实现,最后是相关的复杂度分析。

2024-12-18 10:49:33 1176

原创 算法编程题-可能的二分法、删除给定值的叶子节点、设计一个支持增量操作的栈

本文将对三道LeetCode原题进行介绍,分别是可能的二分法、删除给定值的叶子节点和设计一个支持增量操作的栈。首先会简单描述每道题,然后是给出一个思路,接着给出golang语言的实现,最后进行相应的复杂度分析。

2024-12-16 16:09:58 1026

原创 操作系统系列-进程、线程和协程

本文将分别介绍进程、线程和协程,重点关注其区别已经各自的适用场景。最后在python语言环境下,通过测试进程、线程和协程在不同任务下的执行效率来验证以上的观点。

2024-12-11 16:12:54 927

原创 数据结构-树状数组

树状数组是一种高效的数据结构,常用来解决区间和问题。本文将对这种数据结构进行介绍,并且给出golang语言的实现。最后以LeetCode 307来介绍如何使用树状数组解决问题。

2024-12-11 09:41:33 1022

原创 消息队列-rabbitmq

本文将对rabbitmq进行介绍,涉及到其队列和交换机等核心概念,其底层的工作原理,如何解决消息重复消息积压等问题,如何保证消息的可靠性等经典的消息队列问题。最后,本文以一个Spring Boot框架中使用rabbitmq来对rabbitmq进行实战。

2024-12-09 15:39:19 1409

原创 算法编程题-区间列表的交集、飞机座位分配概率

本文将介绍两道LeetCode原题,一道是区间列表交集,另外一道则是飞机座位分配概率,实质上是一道常考的智力题。本文将给出基于golang语言的实现,代码实现通过了所有测试用例,最后给出相关的复杂度分析。

2024-12-09 14:28:06 1104

原创 Devops 实践

本文首先将介绍一些基本概念,包括Devops,CI/CD等,然后基于知名开源CI/CD工具jenkins进行实战。最后本文将简单介绍一些业界关于这方面的优秀实践,同时给出自己的一些见解和思路。

2024-12-06 10:13:16 1451

原创 消息队列-kafka

本文将会对kafka进行介绍,首先介绍消息队列的一些基础知识,然后是kafka的基本概念和底层原理,以及kafka如何保证消息可靠性、消息不丢失,如何解决消息重复以及消息积压等问题,并且分析kafka为什么具有高吞吐量、低延迟等优势。最后,以golang语言来进行kafka的实战。

2024-12-03 16:56:59 1961

原创 算法编程题-最后一块石头的重量 II

本文将对面试热门题最后一块石头的重量进行介绍,通过分析论证动态规划思路的可行性,以及如何将其转换为一个0-1背包问题。给出的代码基于golang语言实现,且已经通过所有测试用例,且在执行用时上超过了100%的提交,本文最后给出相关的复杂度分析。

2024-12-02 16:43:07 917

原创 Linux命令系列-常见查看系统资源命令

本文将对linux系统上常见的查看系统各种资源的命令进行介绍,包括du,df,netstat等命令。所有这些命令都有相关实验截图,实验平台为ubuntu 20.04。

2024-11-30 16:05:48 1325

原创 算法编程题-煎饼排序 && 不含AAA或者BBB的字符串

本文将对两道LeetCode原题进行介绍,分别是煎饼排序和不含AAA或者BBB的字符串。在陈述完基本的思路后,本文给出基于golang语言实现的代码,实现都是通过了所有测试用例且运行时间超过100%的优质解法,最后给出相应的复杂度分析。

2024-11-30 10:16:44 1167

原创 算法编程题-优势洗牌

本文将对LeetCode原题优势洗牌进行介绍,从最容易想到的方法开始,循序渐进,一步步优化,对于每一种方法,都给出基于golang语言实现的且通过所有测试用例的完整代码,并且给出相应的复杂度分析。

2024-11-29 14:58:50 1194

原创 算法编程题-合并石头的最低成本

本文将对LeetCode原题合并石头的最低成本进行介绍,思路基于动态规划,设计到状态的设计和优化,实现基于golang语言实现,并且已经通过所有测试用例,每一种方法都将给出复杂度分析。

2024-11-28 14:48:23 1096

原创 Redis系列-哈希表

本文将对redis哈希表进行介绍,主要侧重从源代码的角度展开,所使用的源码版本为6.0.19

2024-11-27 15:19:16 860

原创 算法编程题-颜色交替的最短路径

本文将对LeetCode原题 1129 颜色交替的最短路径进行介绍,先介绍dijkstra算法,然后给出进一步优化得到的bfs算法。代码实现基于golang语言,且已经通过所有测试用例,最后也会给出对应的时间复杂度分析。

2024-11-27 10:32:37 774

原创 Redis系列-跳表源码分析

跳表是一种具有$O(logn)$级别的查询时间复杂度的数据结构,redis的有序集合在数据比较多或者单个数据比较大的时候底层使用的数据结构就是跳表。跳表相比于其他查询结构如红黑树、B树、B+树等等,具有易于实现的特点。LeetCode上没有手写红黑树或者B树的题目,但是有题目要求手写跳表,可见其相对易于实现。本文将以redis里的跳表源码来分析跳表这种数据结构,所使用的redis版本为6.0.19

2024-11-26 15:46:34 1351

原创 算法编程题-区间子数组个数

本文将对LeetCode原题 区间子数组个数进行介绍,首先给出自己的实现思路和代码,然后进一步优化过的代码和其他的一些思路,所有代码基于golang语言实现,且通过LeetCode所有测试用例,最后本文将给出各个方法的复杂度分析。

2024-11-26 14:16:29 636

原创 算法编程题-寻找最近的回文数

本文将对LeetCode 原题 564 寻找最近的回文数进行讲解,并且给出golang语言的实现,该实现通过了所有测试用例且执行用时超过100%的提交,最后给出相关的复杂度分析。

2024-11-25 14:30:18 950

原创 Golang语言系列-标准库中的pdq排序(源码分析+实验)

本文将从源代码的角度来分析golang标准库中如何实现的排序,一般来说,为了性能的考虑,标准库中的排序往往混合使用多种排序算法,一般包括插入排序和快速排序。

2024-11-24 16:46:01 1020

原创 docker拉取镜像问题解决

但是docker部署也有一个问题,直接拉去官方仓库的镜像对于笔者这种手上暂时没有网络工具的人来说不现实,那么只能设置为国内的代理镜像源,但众所周知,国内的大学或者知名大厂的开放镜像源现在基本上不能使用了,如下图,尝试了很多。至于rabbitmq消息队列的配置,由于设置了端口映射,可以直接在容器所在宿主机通过浏览器访问对应的管理端口,输入命令中设置的账号密码,进入管理系统,设置交换机和队列。这种方式去拉取,实际访问的网站都不是自己设置的代理镜像源,导致无法正常拉取,解决这类问题的方法是直接使用。

2024-11-24 16:28:35 1947

原创 算法编程题-最长连续序列

本文将分享一道LeetCode原题,并且给出两种方法,代码使用C++实现,并且满足时间复杂度为$O(n)$且全部通过LeetCode的测试用例。

2024-11-24 15:58:32 1081

原创 算法编程题-检测循环依赖

本文将对检测循环依赖这一面试大热题型进行介绍,并且重点介绍两种方法拓扑排序和三色标记法解决此类问题,并且将图扩展到了无向图下如何判断环路问题,包括一些鲜为人知的并查集。本文代码基于golang语言实现,所有代码经过LeetCode 210检测,通过全部测试用例。

2024-11-24 15:20:05 1244

原创 算法编程题-保持城市天际线

本文将对LeetCode原题 保持城市天际线进行思路上的讲解,并且给出golang语言的实现,最后进行相应的复杂度分析。

2024-11-24 10:56:41 1017

原创 算法编程题-分割数组、判断二分图

本文将对两道LeetCode原题、面试高频题分割数组、判断二分图进行介绍,并且给出golang语言的实现、LeetCode运行截图和复杂度分析。

2024-11-23 15:41:14 1238

原创 算法编程题-最低票价(动态规划,三指针,二分查找)

本文将对LeetCode原题983 最低票价进行讲解,设计到的思路算法有动态规划、二分查找和三指针

2024-11-22 09:55:52 559

原创 算法编程题-排序

本文将对七中经典比较型排序算法进行介绍,并且给出golang语言的实现,还包括基数排序、计数排序等非比较型的算法的介绍和实现。

2024-11-21 14:26:19 1565

原创 Golang语言系列-Channel

golang里的channel信道是golang里一个独特的概念,基于消息通信的方式来实现并发控制。信道有两种类型,缓存型和非缓存型,其中缓冲型底层基于循环数组来保存数据,然后基于互斥锁保证并发访问安全。本文将从源码分析的角度验证以上的观点。最后实现golang的信道来实现一个多线程打印问题。

2024-11-21 11:04:04 1340

原创 算法编程题-对角线遍历 II

观察到遍历的位置的变化,是否每一轮的遍历的点的xy坐标之和是相等的,且先从y坐标小的开始遍历,因此,可以考虑将所有元素加入到一个优先级队列中,每一次去队列中位置最小的点来遍历(首先考虑xy坐标之和最小,然后相等的话再比较y)。还是基于每一轮遍历的点的xy坐标之和相等,使用一个哈希表,聚合每一轮遍历的元素在一个列表中。该题也可以使用bfs来做,将原题描述中的图在这里插入图片描述稍微倾斜一点来看,如下图,那么数组的遍历可以看成是一种层序遍历。: 给定一个二维数组,按照下图所示的方式遍历,按遍历顺序输出为数组。

2024-11-21 09:59:36 971

原创 算法编程题系列-原子的数量

一道不算难得难题,笔者认为难在如何优雅简洁地实现。比较难处理的就是括号,可以采用两种方式处理,第一种是递归,即括号里面的又是一个化学表达式,第二种是用栈,可以认为是在模拟递归,遇到括号,就往栈中压入一个空的计数哈希表,进行后续的计数。:给定一个形如"K4(ON(SO3)2)2"的化学表达式,返回每种原子的数量,比如这个例子里面返回"K4N2O14S4",标识原子K,N,O,S分别有4, 2, 14, 4个,按照原子名称的字典序返回。

2024-11-20 09:26:49 837

原创 C++语言系列-STL容器和算法

本文将对C++语言中的标准模板库STL容器进行简单介绍,重点在于如何使用。

2024-11-19 17:55:57 634

原创 算法编程题-网格中的最短路径

非常典型的广度优先搜索的题目,利用一个先进先出的队列来实现广度优先搜索,搜索的状态为当前所在的位置(x, y)以及当前剩余的可以移除障碍的次数,当第一次搜索到了目标点,意味着找到了最短步数,直接返回。:给定一个m * n的网格,网格中的每一个点的值为0(无障碍),为1(有障碍),现在从左上角(0, 0)出发,每一步可以往上下左右四个方向走,最多只能移除k个障碍,求到达右下角(m-1, n-1)的最小步数。晚上要面试腾讯了,用C++语言写的,代码质量可能一般。

2024-11-19 14:52:56 828

原创 算法编程题-最大为N的数字组合

再来考虑非零的情况,从最高位开始遍历。假设遍历到第i位,从字符串数组digits中找到最大的小于等于target该位的数字,如果没找到,说明没有字符串数组里面找不到更小的数字了,此时可以直接返回答案,如果找到了,假设小于target该位的数字的个数为k,则将该位赋值为这些小于的数后,后面的位置可以随便赋值(),如果在字符串数组中能够找到target当前位一样的数字,则需要继续遍历,但要注意边界条件,即最后一位也能找到相等的,意味着digits中的数字可以组装成一个和target相同的数字。

2024-11-18 10:32:33 883

原创 算法编程题-golang语言协程池

笔者的协程在思路上借鉴了一些Java线程池七大参数的思想,分为核心协程和非核心协程,初始时只有核心协程工作,如果工作数量比较多还会起一些非核心协程来工作,但是这些非核心协程如果长时间没有工作也会被销毁,这其中涉及到的工作数量比较多的阈值、非核心协程多少时间不工作会被销毁都是可以由用户调整的参数。协程池在启动后,会写一个协程daemon,用来监测协程池的状态,决定是否要起非核心协程。此外,还实现了一个优雅关闭协程池的功能,保证所有协程在完成自己手上的工作后立即退出,然后主程序里面将所有的信道关闭。

2024-11-16 18:02:27 432

原创 算法编程题-区间最小数乘区间和的最大值,基于数组中的数字拼接可得的小于目标值的最大数

笔者的思路就是根据目标值来逐位构造,从目标值的最高位开始,在数组里找到最大的小于等于最高位的数字,如果找到的是一个小的数,那么剩余的位数可以全部采用数组中的最大数,因为已经保证了一定比目标值要小,如果找到的是相等,那么需要在下一位找类似的分析,如果没找到,则需要回退到前一位,前一位一定是在数组中出现的,此时可以尝试去数组中比该数稍小的一个数,如果能取到,剩余数字全部去最大数即可,如果没找到,需要再回退到上一位。可以优化遍历方式,在遍历的同时计算当前子数组的最小值和和,这样时间复杂度就减少到了。

2024-11-16 15:42:26 1038

原创 算法编程题-删除子文件夹

在本题中,可以用树中的每一个节点来保存一个文件夹的一个级别,然后节点额外维护一个变量,标识是否有文件夹结束在这一个节点上。然后用深度优先搜索搜索这根树,如果搜索到一个节点,发现有一个文件夹结束在这一个节点上,说明这个分支不用搜索了,因为这个分支下如果还有文件夹也一定是结束在这一个节点上的文件夹的子文件夹。原题为有很多类似于unit风格的文件夹,如\tmp, \usr\local, 且保证这些文件夹是合法的,不会存在类似于usr或者\usr\local\之类的,现在要求删除所有的子文件夹,返回剩余的文件夹。

2024-11-16 10:30:24 859

原创 Golang语言系列-哈希表

sync.map底层基于map实现,适用于读多写少的场景,基于以空间换时间和动态调整策略。整体包括两张表,read表和dirty表,前者使用atomic.Pointer指向,所以基于CAS操作并发访问,后者则需要加锁访问,且两张表的value都是atomic.Pointer类型的entry,保证了对于value的访问也可以基于CAS操作访问。

2024-11-16 09:59:18 1155

原创 Golang语言系列-数组与切片

数组是每一门编程语言最基本的概念之一,但是在golang里,用到的更多的是切片。切片其实是对数组的包装(结构体),包含指向数组元素的指针和切片的长度和容量。当长度和容量相等情况下,如果还要插入元素,就会引起切片扩容。很多计算机编程语言的动态数组都有扩容的概念,比如C++语言中的vector,Java中的ArrayList,而且扩容规则都类似,一般是小容量下,一次性扩容为原来的两倍,之后扩容为x倍(x一般在1.25到1.5之间)。并且往往这个扩容策略转换阈值和具体的扩容策略都是因不同语言不同版本而不一样的。

2024-11-14 14:37:26 841

空空如也

空空如也

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

TA关注的人

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