- 博客(14)
- 收藏
- 关注
原创 go中的defer和return的执行顺序
Go语言中return与defer的执行顺序如下:首先评估return表达式并将值赋给结果变量(命名或临时);然后按LIFO顺序执行defer函数(defer参数在注册时即求值);最后返回结果。关键点:1) defer可修改命名返回值影响最终结果;2) 未命名返回值不受defer对局部变量的修改影响;3) 多个defer按后注册先执行;4) defer参数在声明时立即求值。特别注意循环中的defer要避免闭包捕获变量引用,以及谨慎处理defer中的返回值修改。
2025-11-29 15:28:21
914
1
原创 切片和map的分析
由于指向的是底层数组,所以在使用数组/切片创建切片的时候,切片会与原数组/切片共用一部分内存,在对切片进行修改的时候,有可能会将原数据一起修改。在Java中,为了增加散列程度,减少hash冲突,让bucket中的数据分布更加均匀,HashMap将高16位与低16位做。Go采取的是在hash函数中引入随机种子,来减少hash冲突,并使用高位来定位元素,也算是利用上了每一位hash。源码中的B,只影响buckets数组的长度,也就是bucket的个数,跟bucket内部能装多少个键值对无关。
2025-11-21 15:46:44
1165
原创 计网的体系结构及相应的协议
计算机网络五层模型包括物理层、数据链路层、网络层、传输层和应用层。物理层定义硬件参数,数据链路层处理MAC地址和帧传输,网络层负责IP路由和寻址(含IPv4/IPv6)。传输层提供TCP(可靠连接)和UDP(无连接)服务,应用层包含HTTP、DNS等具体协议。HTTPS通过TLS加密确保安全,WebSocket实现双向通信。该体系结构层次分明,各层协议协同工作,确保网络通信的高效性和安全性。
2025-11-14 20:59:35
779
原创 快速排序和堆排序
本文介绍了两种经典排序算法:快速排序和堆排序。快速排序采用分治策略,通过选取基准值、分区和递归排序实现,平均时间复杂度O(nlogn),但最坏情况为O(n²),是原地不稳定的高效算法。堆排序利用大顶堆结构,通过建堆和反复交换堆顶元素完成排序,始终保持O(nlogn)时间复杂度,同样是原地不稳定的算法。两种算法对比显示:快速排序平均性能更优且实现简单,是工程首选;堆排序最坏情况稳定,适合内存紧张场景。文章详细分析了两种算法的核心思想、实现步骤、复杂度及优化技巧,并提供了完整的代码示例。
2025-10-31 21:00:28
980
原创 动态规划的思想与实例
动态规划是一种通过分解复杂问题为重叠子问题并保存中间结果的算法思想,适用于具有最优子结构和重叠子问题特征的问题。其核心是记忆化递推和状态转移,通过自顶向下(递归+缓存)或自底向上(迭代填表)实现。文章详细介绍了动态规划的定义、核心思想、解题步骤、两种实现方式,并提供了Go语言示例(斐波那契数列和0-1背包问题),以及通用模板和常见应用类型。动态规划能显著减少计算量,但设计难度较高且占用空间大,适用于最优化、计数和判断等问题。
2025-10-24 21:00:41
983
原创 指针和滑动窗口
指针与滑动窗口是算法中两种重要的优化技术。指针主要用于数据遍历和定位,包括单指针、双指针、快慢指针和多指针,通过合理控制指针移动来降低时间复杂度。滑动窗口是双指针的高级应用,通过动态维护子数组或子串的窗口来高效解决连续区间问题,如最长无重复子串、最小覆盖子串等。这两种技术在数组、字符串处理中应用广泛,能将暴力解法的时间复杂度从O(n²)优化到O(n)。
2025-10-18 09:41:10
1217
原创 回溯算法的思想和案例
回溯算法是一种通过深度优先搜索(DFS)逐步构建和撤销候选解的系统搜索技术。它适用于组合优化、约束满足等问题,如全排列、子集生成、N皇后等。核心思想是在决策树上做DFS,通过剪枝减少搜索空间。通用模板包括路径记录、选择列表、结束条件和回溯步骤。时间复杂度通常为指数级(如O(n!)或O(2^n)),但可通过剪枝优化。典型应用包括全排列(O(n!))、子集问题(O(2^n))、组合总和(O(2^n))和N皇后(理论O(n!))。回溯算法高效解决需要枚举所有可能解或寻找可行解的复杂问题。
2025-10-12 16:24:13
1092
1
原创 Gin的bind绑定器
Gin框架的bind绑定器是模型绑定功能的核心,支持自动解析JSON/XML/Form/Query等数据到Go结构体并完成参数校验。主要分为两类方法:MustBind系列在绑定失败时自动中断请求并返回400错误,适合严格校验场景;ShouldBind系列仅返回错误不中断请求,适合需要自定义处理的场景。文章详细介绍了两种绑定器的使用方式、源码实现和区别,并提供了参数校验的常用标签和实例演示,包括自定义错误信息处理。通过结构体标签可实现丰富的校验规则,如required/min/max/email等,满足不同业
2025-10-05 11:09:27
713
原创 Gin框架的请求和响应
本文介绍了Gin框架中HTTP请求参数处理和响应控制的核心要点: 请求参数部分: 解析四种参数类型:查询参数(Query)、动态路由参数(Param)、表单参数(Form)和原始请求体(RawBody) 各HTTP方法的使用场景和RESTful风格实践 请求头获取方法和常见请求头字段解析 响应控制部分: 标准HTTP状态码分类和使用场景 多种响应数据格式(JSON/XML/YAML/HTML)的实现 文件响应、重定向和响应头设置等高级功能 文章通过代码示例展示了Gin框架处理请求参数和构建响应的完整流程,涵
2025-09-27 10:52:37
1127
原创 GORM 里常用的查询方法 First / Last / Take / Find在struct 主键有值 vs 没值时的表现对比出来
GORM查询方法对比显示:当struct主键ID非零时,查询会默认带上该条件。First、Last、Take和Find方法在ID=0时分别获取第一条、最后一条、随机记录和所有记录;当ID≠0时则按主键查询。主要坑点包括:复用struct会保留旧ID导致意外条件,Take方法传参可能产生冲突条件。建议查询前清空struct或使用Where明确指定条件。案例演示了正确用法和常见错误场景,如复用struct导致的意外查询和Take方法的参数陷阱。
2025-09-20 09:36:16
530
2
原创 Web安全
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。CSRF是指攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求,迫使 Web 应用的用户去执行攻击者预设的操作。所以遇到 CSRF 攻击时,将对终端用户的数据和操作指令构成严重的威胁;当受攻击的终端用户具有管理员帐户的时候,CSRF 攻击将危及整个 Web 应用程序。
2025-09-07 12:54:18
891
原创 Go database/sql/driver包里driver.ValueConverter和driver.Valuer的区别
Valuer:应用层开发者实现 → 把自定义类型转换成数据库能存的类型。(比如 JSON、枚举、decimal 等):驱动层用来统一处理 → 把各种Go 内置类型归一化为。(一般你不会去实现,除非写驱动)写入时Exec的参数如果实现了,会调用Value()→ 转换成(JSON 存入数据库)。读取时Scan会先检查目标是否实现了。实现了,所以自动调用,解析 JSON → Go map。
2025-08-30 11:15:51
1004
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅