- 博客(9)
- 收藏
- 关注
原创 Golang-图结构的实现
图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。
2023-08-31 21:47:23 119
原创 Golang实现栈结构
栈(stack)又名堆栈,它是一种运算受限的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。对比发现,使用切片代码简单,但是由于会发生扩容,所以性能相对于链表来说不是很好,但是如果我们可以确定栈的容量,那么我们就可以考虑使用切片的栈。根据栈结构定义,我们发现主要需要解决如下问题。栈顶元素需要和前一个元素关联。
2023-08-31 20:27:58 198
原创 【动态规划】打家劫舍系列
观点还是不变,每次遍历到当前结点时,两种选择,偷还是不偷,哪种选择获利最大, 而影响这个选择的因素有了变化, 由之前的数组换为了二叉树, 对于遍历二叉树有前、中、后序, 结合这道题的结果,入口(根节点)即为统算下面偷窃结果的最后一个节点,前中后序中,后序遍历符合该条件, 确定后序遍历。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),因为他们是相邻的。
2023-08-30 11:53:15 82 1
原创 raft算法
领导者是写请求的入口,在接收来自客户端的写请求时,会开始两阶段提交流程广播提议得到多数派赞同后再进行提交发送心跳,告诉自己的健康状态让folloer重置心跳检测定时器在心跳请求上加上term和最新提交的预写日志index,推动follower更新日志提交通过响应校验自己的任期是否正确。
2023-08-29 23:33:56 66 1
原创 golang-GMP模型
线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换消耗性能Golang的调度模型就是GMP模型,它可以提供一种机制,可以在线程中自己实现调度,上下文切换更加轻量,从而达到了线程数少,但是并发数并不少的效果。描述:runtime准备好G、M、P,然后M绑定P,M从本地队列或全局队列中获取G,切换至G的执行栈上执行G的任务函数,执行完成后返回M,重复此过程。官方注释:Goroutine 调度器的工作就是把“ready-to-run”的goroutine分发到线程中。
2023-08-28 22:20:09 496 1
原创 golang-context详解
context是golang中的经典工具,主要在异步场景中用于实现并发协调以及对goroutine的生命周期控制,除此之外,context还兼具一定的数据存储能力。
2023-08-27 23:12:30 820
原创 golang-chan原理
chan是Golang中实现goroutine间通信的重要方式,简称管道。它是一种线程安全的数据结构,用于在Golang程序中传递信息。chan可以实现单向通信和双向通信,可以用于发送和接收数据,也可以用于同步goroutine。
2023-08-27 23:00:19 152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人