- 博客(52)
- 收藏
- 关注
原创 Go - 内存逃逸
每个函数都有自己的内存区域来存放自己的局部变量、返回地址等,这个内存区域在栈中进行分配。当函数结束时,这段内存区域会进行释放。但有些变量,我们想在函数结束后仍然使用它,那么就要把这个变量在堆上分配,这种从“栈”上逃逸到“堆”上的现象就是内存逃逸。在栈上分配的内存,由系统申请和释放,不会有额外的性能开销。而在堆上分配的内存,如果要回收掉,就需要进行GC,内存逃逸额外带来的GC会导致性能开销变大。
2025-04-13 23:33:20
822
原创 权重概率问题-根据value的权重随机求key
问题,通过构建累计权重区间,在区间内生成随机数,选择区间。,分别表示奖项和对应的权重,请你根据。权重设计一个抽奖系统。我们可以将问题转化为。
2025-03-09 10:15:23
203
原创 Go - 泛型的使用
如果你发现自己多次编写完全相同的代码,而这些代码之间的唯一区别就是使用的类型不同,这个时候你就应该考虑是否可以使用类型参数。泛型和接口类型之间并不是替代关系,而是相辅相成的关系。泛型的引入是为了配合接口的使用,让我们能够编写更加类型安全的Go代码,并能有效地减少重复代码。
2025-02-28 11:38:34
982
原创 JWT实现原理及加密策略
JWT是JSON Web Token的缩写。是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于**分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被,以便从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的是个声明信息。该token可直接被用于认证,也可被加密。简单来说,JWT是一种基于JSON的用于身份验证和传递信息的开发标准。
2025-02-09 22:19:36
799
原创 CSRF 跨站请求伪造漏洞
自动防护策略:同源检测(Origin和Referer验证);token验证以及配合SameSite设置;保护页面的幂等性,不要再GET请求中做用户操作为了更好的防御CSRF,最佳实践应该是结合上面总结的防御措施方式中的优缺点来综合考虑,结合当前Web应用程序自身的情况做合适的选择,才能更好的预防CSRF的发生。
2025-01-25 21:16:27
939
原创 Go语言进阶-内存分配
golang中实现的内存分配器,简单来说就是维护了一块大的全局内存,每个线程维护了一块小的私有内存。当需要内存时,会先向私有内存进行申请,若内存不足以分配,则再向全局申请。
2025-01-22 08:32:56
1202
原创 JWT(数据结构、认证流程、加密、解密过程)、对称加密和非对称加密
JWT是JSON Web Token的缩写。是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于**分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被,以便从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的是个声明信息。该token可直接被用于认证,也可被加密。简单来说,JWT是一种基于JSON的用于身份验证和传递信息的开发标准。
2025-01-18 15:14:12
1427
原创 2019陕西ICPC-Grid with Arrows
一个总规模为n × m 的矩阵,矩阵上的每个位置有其下一位置的信息,询问是否存在一种解法从某一点出发,使得整个矩阵的每个位置都被访问到,如果越界或者遇到重复访问位置的解法被认为失败。
2024-12-15 22:06:08
491
原创 get与post到底有什么区别? post到底是发几个数据包?
get请求一般用于获取数据,请求数据表现在url上,会保存在浏览器历史记录中;post请求一般用于提交数据,请求数据放在请求体上,没有特定设置,一般不会保存在浏览器历史记录中。get和post本质上都是tcp连接,对于安全性只是针对不同的人群(普通用户和开发者)。Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。简单来说,RFC 是Internet协议字典,它里面包含了所有互联网技术的规范。
2024-11-17 16:14:49
914
原创 算法 - 高精度算法(加减乘除)
A B可以为正数或负数该怎么处理?A B可以为正数或负数该怎么处理?,判断字符串首字符的类型。,判断字符串首字符的类型。
2024-10-27 15:48:55
836
原创 gin如何具体利用Server-Send-Events(SSE)实时推送技术实现消息推送
总之,SSE 技术是一种轻量级的实时推送技术,具有支持跨域、使用简单、支持自动重连等特点,使得其在实时消息推送等场景下广泛使用。另外,SSE 相对于 WebSocket 更加轻量级,如果需求场景不需要交互式动作,那么 SSE 是一个不错的选择!
2024-10-08 21:50:58
1576
2
原创 算法: FriendShip - Kruskal+并查集判环
求所有符合题意情况的最大值中的最小值;符合题意是指保证图的连通性。那么贪心思路,将所有已存在的关系和可能存在的关系存储起来,利用Kruskal贪心算法每次取权值最小的且不构成回路的边,直到将所有边选完;最后利用并查集判断图的连通性。男女因为无法在第二次认识,所以在可能的关系中,若双方为异性则需要跳过。选择最小边,并同时通过并查集判环。若不属于同一集合,则不会形成环。若属于同一集合,则会形成环。根据边权将所有边进行排序。添加的边数等于顶点数-1。
2024-09-29 16:10:03
442
原创 二分+优先队列例题总结(icpc vp+牛客小白月赛)
要求输出最小的非负整数k,同时我们还要判断是否存在x让整个序列满足上述条件。b[i]k*b[i]
2024-09-22 20:09:47
442
原创 Python实现可混合运算的计算器
本质上还是把中缀表达式转化为表达式,然后判断运算优先级进行计算。转化的过程我们可以利用栈的先入后出的特性去解决这个问题。
2024-09-08 19:36:43
330
5
原创 计算机网络第二章-物理层
粗缆(适合较大局域网,布线距离长,可靠性好)细缆(适合短距离,安装容易,造价低)2.2 关于信道的几个基本概念。2.1 物理层下的传输媒体。这部分掌握码分复用计算即可。2.3 信道复用技术。
2024-08-05 10:32:20
171
3
原创 go语言map底层及扩容机制原理详解(下)
上文对Go map的底层数据结构有所了解,并对其扩容机制的步骤进行简略的描述。本文将会详细地去解释Go map扩容机制的详细原理。
2024-07-29 22:07:41
284
原创 计算机网络第一章-计算机网络的基本认识
是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。简单来说,计算机网络就是实现多个分散独立的计算机进行通讯的系统。
2024-07-20 09:47:45
640
原创 Go协程与通道的综合应用问题
通道,是一种用于协程之间进行通信的数据结构。类似于队列,一端为发送者,一端为接收者。使用通道可以很好地保证数据的同步性和顺序性。有缓冲通道intChan := make(chan int,)无缓冲通道阻塞:无缓冲通道发送者会阻塞直到数据被接收;有缓冲通道发送者会阻塞直到缓冲区满,接收者会阻塞直到缓冲区不为空。数据同步和顺序:无缓冲通道保证数据的同步和顺序;有缓冲管道不保证数据的同步和顺序。应用场景:无缓冲通道要求严格的同步和顺序性;有缓冲通道可以异步通信并提高吞吐量。
2024-07-10 16:19:59
1228
1
原创 Go语言中的go.mod与go.sum
go mod是 Go 语言引入的包管理工具,用于解决 Go 语言项目在依赖管理方面的问题。传统上,若不使用。
2024-06-23 17:50:37
1131
2
原创 Go如何在本地引用以及发布并引用自定义工具包
第一步:首先在gitee或github上创建相应的仓库’第二步:通过git将自定义项目推送到对应的仓库中git add .git push第三步:在当前项目的终端下下载远程依赖go get -u 仓库地址下载完成后,查看go.mod文件说明下载成功!第四部:import导入包并使用。
2024-06-16 22:47:22
653
原创 一篇文章让你彻底搞懂Go语言切片底层原理
相信认真看完本篇文章后,你会对切片的底层原理有了更加深入的理解。若有其他问题,可在评论区询问,bye~。
2024-06-03 10:38:10
622
原创 详解动态规划之01背包问题及其空间压缩(图文并茂+例题讲解)
总而言之,言而总之。动态规划问题的核心是利用空间换取时间,将曾经经过的状态保存下来,当在往后的遍历中如果需要该状态就不必再次重复一遍,只需直接访问当时的状态结果即可。而滚动数组的用法很巧妙地将上一层地状态保存下来的同时完成了对当前状态的更新。希望此文章会对您对动态规划的学习有一定帮助~
2024-05-16 13:04:47
1454
原创 go语言map底层及扩容机制原理详解(上)
在顺序结构以及平衡树中,元素与其的存储位置之间没有对应关系,因此查找一个元素时,必须进行多次比较。所以顺序查找的时间复杂度为O(N),而平衡树中则为树的高度O(log2N)。为了减少搜素时元素比较的次数,是否有一种方法可以不经过任何比较,通过元素的存储位置与它的关键码以O(1)的时间复杂度直接找到该元素呢?哈希表就是通过某种函数(hash)来使元素的存储位置和其元素值之间建立一一映射的关系,那么就可以通过这种关系快速找到该元素。(数组就是一种简单的哈希表)要提供合适的初始容量。
2024-05-12 00:10:52
1244
原创 详解Go语言Map
make()KeyType是键的类型,ValueType是值的类型,initialCapacity是可选参数,用于指定map的初始容量。map。
2024-05-02 16:58:55
557
1
原创 go-websocket小游戏项目技术总结
通过本次项目,主要学习了前后端分离技术的流程,以及对http短连接和websocket长连接的理解和应用、以及维护管理客户端连接,共享其他客户端信息、心跳检测客户端存活、重新连接解决用户弱网或断网的情况等。
2024-03-12 19:54:25
1282
2
原创 dfs的递归和迭代写法
通过循环,加入一个结点,然后出栈,将其子节点压入栈中,直到最后所有的结点都出栈,代表整棵树遍历完成,即所有方案遍历完成。从一个长度为n的数组a中挑选若干个数使得,这些数总和恰好为k,则总方案数是多少?所以说,while循环负责深度遍历,for循环负责横向遍历。入栈代表遍历到该结点;出栈代表遍历到叶子结点,进行回溯。递归写法不再做多叙述。1. while循环和for循环的作用。第二行n个整数,表示数组a的元素。一个整数,表示方案总数。第一行两个整数n,k。
2024-03-12 10:59:04
411
1
原创 dfs/bfs刷题总结
dfs借助栈(递归)实现(先入后出);bfs借助队列实现(先入先出)。如何分辨题目该抽象为树还是图?是否能看出树的深度。是否会构成环。做dfs/bfs题目要注意的问题:如果是树,树的深度是什么?结点是什么?符合构成树或图的规则是什么?vis数组是什么?
2024-02-25 21:55:20
409
1
原创 希尔排序(Go案例)
类似对扑克手牌进行排序的思想。首先认为第1个元素是有序的,对后面n-1个元素进行遍历。让第i个元素对于整个序列从后往前遍历,即从i-1开始比较,如果i
2024-01-14 20:46:48
397
1
原创 树与二叉树(Go案例)
给定n个值作为n个叶子结点,构造一棵二叉树,如果该树的带权路径达到最短,则该树就是哈夫曼树。路径与路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。一棵二叉树是节点的一个有限集合。结点的权及带权路径长度。
2024-01-07 22:43:55
940
1
原创 Go语言范围(Range)
range可以用于for循环遍历arrayslicemapstringstruct所有涉及的元素。通过range遍历到的index和value是对应值的拷贝,改变value的值是无法对目标元素的值进行修改的。
2023-12-19 10:45:58
496
1
原创 Go语言切片(Slice)
一个抽象的底层原理往往可以从它的定义方式来表现出来。就是在定义s1时的low:high超过s的cap大小,Go会怎么处理呢?需要注意的是,如果想对底层数组进行切片,low:high的值不能超过底层数组的范围切片的存在确实让我们对数组有了更加灵活的操作。在扩容方面,拷贝后的旧数组会被gc垃圾回收,也避免了多余的内存占用,但是拷贝的过程所消耗的时间是无法避免的。
2023-12-19 09:55:56
365
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人