自定义博客皮肤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)
  • 收藏
  • 关注

原创 想了解Gorm吗,一篇满足你

本文介绍了ORM(对象关系映射)技术及其在Golang中的实现GORM。ORM作为中间层,将面向对象编程与关系型数据库连接起来,通过类与表、对象与记录、属性与列的映射关系,简化数据库操作。GORM作为专为Golang设计的ORM框架,遵循ID主键、表名复数化等约定,并提供预定义结构体gorm.Model来简化模型定义。文章详细说明了模型定义、字段权限控制、时间戳管理以及标签使用等高级设置,并简要提及了数据库连接和CRUD操作的基础概念。GORM通过约定优于配置的方式,显著减少了开发者的代码量,同时保持灵活性

2025-10-16 16:26:51 1265

原创 【数据库系统Trip Two】主键和唯一键分不清?看这篇就OK了

主键和唯一键都是数据库表中用于保证数据唯一性的约束。主键要求非空且唯一,一个表只能有一个,通常自动创建聚集索引;唯一键允许空值但值必须唯一,一个表可有多个,创建非聚集索引。主键用于唯一标识行记录,而唯一键确保特定字段的数据唯一性。例如用户表中,user_id作为主键,email和username可设为唯一键。复合主键也可由多字段组合而成。两者共同维护数据完整性和唯一性,但适用场景和特性有所不同。

2025-10-17 00:42:52 469

原创 Hook解析

React Hook 是 React 16.8 引入的函数式组件增强机制,使函数组件能使用状态、管理副作用和复用逻辑。其核心原理基于 Fiber 架构和闭包机制,状态存储在 Fiber 节点而非闭包内。基础 Hook 包括 useState(状态管理)、useEffect(副作用处理)和 useContext(跨组件数据共享)。进阶 Hook 如 useReducer(复杂状态逻辑)、useRef(DOM 访问)和 useMemo/useCallback(性能优化)。Hook 的设计哲学强调函数式思维,相比

2025-10-15 17:51:32 1230

原创 【知识拓展Trip Six】宿主OS是什么,传统虚拟机和容器又有什么区别?

宿主OS是直接安装并运行在物理硬件上的底层操作系统,负责管理所有硬件资源,是创建虚拟环境的基石。在其上运行的虚拟机或容器均为“客户”。​​​传统虚拟机与容器的核心区别在于虚拟化层级:​​​虚拟机虚拟化硬件层,需在每个虚拟机内安装完整的客户操作系统,从而实现强隔离,但代价是资源开销大、启动慢。​容器则虚拟化操作系统层,所有容器共享宿主机OS内核,仅包含应用及其依赖库,因而极其轻量、启动迅速、资源利用率高,但隔离性相对较弱。

2025-10-12 15:22:43 1084

原创 【项目开发Trip第2站】casbin库与身份权限划分

Casbin是一个高效的开源访问控制库,支持ACL、RBAC、ABAC等多种授权模型。其核心是PERM元模型,通过模型文件(定义授权逻辑)和策略文件(存储具体规则)实现权限管理。关键组件包括请求(Request)、策略(Policy)、匹配器(Matchers)和效果(Effect)。策略中的"p"定义权限规则,"g"定义角色继承关系。Casbin适用于不同场景:ACL适合简单系统,RBAC适合企业应用,ABAC处理动态授权。典型应用包括API权限控制和多级VIP系统

2025-10-11 23:00:55 734

原创 【项目开发Trip第1站】jwt

摘要 JWT(JSON Web Token)是一种开放标准的安全令牌,用于安全传输信息。它由三部分组成:Header(算法和类型)、Payload(数据声明)和Signature(签名验证)。工作流程包括:用户登录验证→服务器生成JWT→客户端携带JWT访问资源→服务器验证签名和有效期。Golang实现中需注意:敏感信息不应放在Payload,合理设置令牌过期时间,并使用中间件验证请求。JWT的无状态性和自包含性使其适合分布式系统,但需遵循安全最佳实践。

2025-09-27 12:35:13 779

原创 【数据结构与算法Trip 第6站】凸包

摘要:凸点是构成点集最外围凸多边形的关键点,凸包是包含所有点的最小凸集。最大面积三角形的顶点必然位于凸包上,因此利用凸包可将计算复杂度从O(n³)降至O(h³)。常用算法包括Graham Scan和Andrew's Monotone Chain。通过凸包优化,当n=1000、h=50时,计算量可从10亿次降至12.5万次,提升约8000倍。这一方法显著提高了几何算法的效率。

2025-09-27 01:13:29 1057

原创 【知识拓展Trip Five】寄存器

寄存器是CPU内部超高速、超小型的临时存储单元,速度远快于内存但容量极小,用于暂存当前处理的数据和指令。在C语言中,register关键字可建议编译器将变量放入寄存器以提高访问速度,但现代编译器已能自动优化寄存器分配,通常无需手动指定。register变量不能取地址,且其作用在现代编程中已大大减弱,主要用于嵌入式系统或教学演示场景。

2025-09-21 13:57:53 1279

原创 【知识拓展Trip Four】显卡、GPU、独显、核显

GPU是显卡的核心芯片,负责图形处理和并行计算;而显卡是一个完整的硬件系统,包含GPU、显存、散热器等组件。独立显卡拥有独立的GPU和显存,而集成显卡的GPU则集成在CPU中,共享系统内存。简言之,GPU是芯片,显卡是承载GPU工作的完整硬件平台。

2025-09-21 00:28:00 1025

原创 【数据结构与算法Trip第5站】动态规划

动态规划是一种通过分解重叠子问题来提高效率的算法思想,包含自顶向下(记忆化递归)和自底向上(迭代)两种实现方式。本文详细介绍了动态规划的核心思想(最优子结构、重叠子问题、状态转移方程)和解题步骤,并通过斐波那契数列、爬楼梯、0-1背包和最长公共子序列等经典问题的C++代码示例展示了具体实现方法。文章还分析了动态规划的时间/空间复杂度优化技巧和适用场景,强调多实践以掌握状态定义和转移方程的设计。

2025-09-20 23:06:08 772

原创 【cpp Trip第4站】函数参数传递

C++函数参数传递主要有三种方式:传值、传引用和传指针。传值会复制参数值,安全但效率低;传引用直接操作原变量,高效但可能误修改;传指针通过地址访问,可处理空指针但语法复杂。C++11后还支持移动语义优化大型对象传递。实际应用中,基本类型适合传值,大型对象推荐传引用(加const保护),需明确修改时可用指针或引用。选择时应权衡修改需求、性能与安全性。

2025-09-19 22:39:25 994

原创 【数据库系统Trip 第1站】总概

数据库系统是现代软件的核心组件,由数据库、管理系统(DBMS)、应用程序和用户组成。相比文件系统,数据库系统具有数据一致性高、共享性强、安全性好等优势,支持事务管理和并发控制。主要分为关系型(如MySQL、Oracle)和非关系型(如MongoDB、Redis)两类,前者适合复杂查询和强一致性场景,后者则侧重灵活性和扩展性。数据库系统通过高效、安全的数据管理,成为信息社会的基石,大型系统常混合使用多种数据库类型以发挥各自优势。

2025-09-18 23:50:05 1184

原创 【前沿技术Trip Three】正则表达式

正则表达式(regex)是一种用于匹配、查找和替换文本模式的强大工具,相当于增强版的"查找"功能。它使用特殊语法(如\d匹配数字、*表示重复)构建匹配规则,主要应用于表单验证、日志分析、数据清洗等场景。在LLM(大语言模型)中,正则表达式常用于数据预处理、结果后处理、格式验证等任务,与LLM形成互补。虽然入门看似复杂,但通过在线测试工具(如regex101)练习可以快速掌握。作为程序员必备技能,正则表达式能显著提升文本处理效率。

2025-09-17 22:01:29 1434

原创 【cpp Trip第3站】string

本文详细介绍了C++中std::string的用法,包括字符串的创建与初始化、常用成员函数、字符串操作、查找比较等核心功能。特别强调了使用细节:构造与初始化方式、元素安全访问、字符串拼接效率、内存管理、与C风格字符串交互、数值转换、编码处理以及性能优化技巧。文章还指出了使用中的常见陷阱,如迭代器失效和空字符处理问题。对于现代C++特性,如移动语义和字符串视图(C++17)也进行了说明,帮助开发者更高效安全地处理字符串操作。

2025-09-16 18:05:31 1164

原创 【cpp Trip第2站】map,set,hash

C++ STL提供了map、set和hash三类关联容器。map存储键值对,set存储唯一元素,两者基于红黑树实现,保持元素有序,操作复杂度为O(log n)。哈希容器unordered_map和unordered_set基于哈希表实现,无序但查找更快(平均O(1))。选择时,若需有序访问用map/set,若需快速查找且不关心顺序则用哈希容器。map/set变体包括允许重复键/值的multimap/multiset。

2025-09-15 23:05:34 1219

原创 【cpp Trip第1栈】vector

本文总结了C++中vector容器的常用用法,包括:1)创建和初始化方法;2)元素访问方式;3)容量管理操作;4)添加/删除元素操作;5)迭代器使用;6)与STL算法配合;7)多维vector实现;8)性能优化技巧,如预分配空间和使用emplace_back;9)其他实用操作如交换和比较。vector作为动态数组,兼具高效随机访问和自动内存管理特性,是C++编程中最常用的容器之一。

2025-09-14 22:23:34 1037

原创 【数据结构与算法Trip第4站】摩尔投票法

摩尔投票法是一种高效寻找数组中出现次数超半数的算法。它通过维护候选元素和计数器,在遍历数组时进行加减计数,当计数器归零时更换候选。由于多数元素数量优势,最终剩下的候选即为所求。该算法只需O(n)时间和O(1)空间,典型应用如力扣169题"多数元素"。

2025-09-13 23:24:59 638

原创 【数据结构与算法Trip第3站】双指针

双指针法是一种高效的算法技巧,通过使用两个指针(索引)在数组或链表中协同遍历来优化问题求解。主要包括三种类型:1)快慢指针(同向不同速,用于链表问题如判环);2)左右指针(相向而行,用于有序数组问题如两数之和);3)滑动窗口(维护动态区间,用于子数组问题)。该技术能显著降低时间复杂度(如从O(n²)到O(n)),关键在于分析问题特性、明确指针含义和移动规则。掌握双指针法需要理解其核心思想并通过实践熟练掌握。

2025-09-12 22:51:21 1188

原创 【前沿技术拓展Trip Two】具身智能

摘要:具身智能(Embodied AI)强调智能需通过与物理环境的实时交互实现,与传统离身智能(如语言模型)形成对比。当前研究分为物理机器人(如DeepMind的RT系列)和虚拟智能体两大方向,利用强化学习和多模态感知取得进展,但仍面临数据稀缺、模拟现实鸿沟等挑战。未来趋势包括构建大规模交互数据集、发展具身基础模型及世界模型。随着语言模型提供"推理大脑"和机器人技术进步,具身智能正迈向通用能力突破的关键阶段。

2025-09-11 23:46:09 1324

原创 【前沿技术拓展Trip one】 芯片自动化和具身智能

摘要:芯片自动化和具身智能对时间的要求存在本质差异。芯片自动化需要严格的时序控制,要求纳秒级精确的物理时间同步,这是电路功能正确的基础。具身智能则强调实时性,要求在动态环境中及时响应,关注的是逻辑时间而非绝对时间,允许一定的不确定性。前者是静态世界中的规则执行者,后者是动态环境中的适应者。两者都涉及软硬件结合,但芯片以硬件为主体,具身智能以软件为核心。(149字)

2025-09-10 23:55:45 1213

原创 【数据结构与算符Trip第2站】稀疏数组

本文介绍了稀疏数组的概念及其在Go语言中的实现。稀疏数组通过只存储非零元素的位置和值来优化内存使用,适用于大部分元素为零或默认值的场景。文章详细说明了稀疏数组的数据结构设计、基本操作方法(初始化、设置、获取、移除元素),并分析了其优势(内存效率高、计算优化)和适用场景(科学计算、游戏开发等)。最后讨论了性能考量,指出稀疏数组在非零元素较少时效率最佳,但在元素密集时可能不如传统数组高效。

2025-09-08 23:47:28 1121

原创 【数据结构与算法Trip第1站】基本介绍

数据结构与算法是编程的核心基础。数据结构是数据的组织方式(如数组、链表、树、图等),算法是解决问题的步骤方法(如排序、查找、递归等)。它们共同决定了程序的效率和性能。学习数据结构与算法能提升代码质量、培养计算思维,是程序员必备技能。建议通过理解概念、动手实现、刷题练习来掌握,重点关注时间复杂度和空间复杂度分析。掌握这些知识不仅能优化程序,也是技术面试的重要考察点。

2025-09-07 22:57:20 1448

原创 【golang长途旅行第38站】工厂模式

本文介绍了Go语言中工厂模式的三种实现形式:简单工厂模式、工厂方法模式和抽象工厂模式。工厂模式通过封装对象创建逻辑,实现客户端与具体实现的解耦,提高代码的灵活性和可维护性。在Go中,工厂模式特别适合处理复杂对象创建、依赖接口编程以及控制实例化过程。三种模式分别适用于不同场景:简单工厂通过参数返回不同实例,工厂方法为每类产品提供独立创建函数,抽象工厂则用于创建相关对象家族。文章通过日志系统、数据库连接和UI组件等示例展示了各模式的具体实现。

2025-09-06 22:30:18 1170 1

原创 【golang长途旅行第37站】Redis连接池

Redis连接池通过预先创建并维护一组可用连接,显著提升了系统性能。它避免了频繁的网络握手和资源分配,解决了传统连接方式存在的性能开销大、资源消耗高和并发能力差等问题。连接池管理包括初始化、获取/归还连接、健康检查等环节,关键配置参数涵盖最大连接数、空闲连接数和超时设置等。实际应用中,合理配置连接池参数(如PoolSize、IdleTimeout等)能够有效优化Redis访问效率,示例代码展示了Go语言中Redis连接池的具体实现方式。

2025-09-03 23:24:00 987

原创 【golang长途旅行第36站】golang操作Redis

本文介绍了使用Go语言操作Redis的基本方法。首先需要安装go-redis库,通过go get github.com/go-redis/redis/v8命令安装。文章展示了String和Hash两种数据类型的操作示例,包括设置键值(带过期时间)、获取值、删除键等基本操作。String操作使用Set/Get方法,Hash操作使用HSet/HGet方法。代码示例中使用了context设置超时,并通过Err()和Result()两种方式处理返回结果。操作完成后需要调用cancel()释放资源。文档提供了Redi

2025-09-02 23:31:12 600

原创 【golang长途旅行第35站】Redis

Redis是一个开源的内存键值数据库,支持字符串、哈希、列表、集合等数据结构。它提供极速读写性能(微秒级响应),支持持久化存储和16个数据库切换。基本操作包括键值增删改查、数据库清空等。针对不同数据结构提供特定命令:String支持set/get/del;Hash适合存储对象,支持hset/hget等;List是双向链表,支持LPUSH/RPUSH等操作;Set是无序唯一集合,支持SADD/SMEMBERS等操作。所有数据操作都通过简洁命令完成,适合高性能数据存储需求。

2025-09-01 23:19:30 1592

原创 【golang长途旅行第34站】网络编程

网络通信基于TCP/IP四层模型实现:链路层通过MAC地址在局域网内传输数据帧,网际层通过IP地址进行全球网络寻址和路由,传输层通过端口号区分应用程序并采用TCP协议保证可靠传输,应用层则提供HTTP等具体应用协议。核心标识包括MAC地址(设备物理标识,局域网有效)、IP地址(网络逻辑地址,全球唯一)和端口号(应用程序标识,范围0-65535)。网络编程主要包括TCP Socket(底层数据传输)和HTTP编程(基于TCP的Web应用开发)两种方式,数据通过层层封装与解封实现端到端通信。

2025-08-29 22:21:04 1464

原创 【golang长途旅行第33站】常量------补充知识点

本文介绍了Go语言中常量的使用规范。常量使用const修饰,定义时需初始化且不可修改,支持bool、数值和string类型。声明方式包括常规赋值和使用iota递增。iota在每个const块中从0开始递增,支持位运算等复杂用法。常量分为类型化和无类型两种,后者更具灵活性。注意常量值必须在编译期确定,运行时才能确定的值不能作为常量。通过示例展示了常量的各种声明方式和使用场景。

2025-08-27 22:59:49 588

原创 【golang长途旅行第32站】反射

Go语言反射机制摘要:Go反射通过reflect包实现运行时动态类型检查与操作,核心功能包括获取变量类型(TypeOf)、值(ValueOf)及底层类别(Kind)。反射支持结构体分析、动态修改值和方法调用,常用于序列化、ORM等场景。使用时需注意类型断言、地址传递(Elem()修改值)及Type/Kind区别。反射通过interface{}实现泛型处理,但需确保数据类型匹配以避免panic。方法排序按ASCII码顺序排列。该机制增强了代码灵活性,但需谨慎处理类型转换和修改操作。

2025-08-26 23:30:14 1088

原创 【golang长途旅行第31站】单元测试------检验代码功能

本文介绍了单元测试的概念及其在Go语言中的实现方法。传统测试方式需在main函数中调用被测函数,存在不便和管理难题。Go语言通过testing框架和go test命令提供轻量级测试方案,支持单元测试和性能测试。测试文件需以_test.go结尾,测试函数以Test开头,并接受testing.T参数。运行测试可使用go test或go test -v命令查看详细日志。文章还说明了测试单个文件或方法的具体操作,以及PASS/FAIL结果的含义。单元测试能确保函数正确性、发现性能问题并及早暴露逻辑错误,提升代码质量

2025-08-25 23:22:07 486

原创 【golang长途旅行第30站】channel管道------解决线程竞争的好手

本文介绍了Go语言中channel的基本概念和使用方法。channel是goroutine间通信的队列机制,具有类型安全、线程安全等特点。文章详细讲解了channel的声明、初始化、数据读写操作,以及常见问题和解决方案,如阻塞、死锁等。重点介绍了channel的关闭方法、遍历方式,以及通过select解决阻塞问题的技巧。此外,还说明了如何通过类型断言处理空接口类型的channel数据,并强调了使用recover防止panic影响其他goroutine的重要性。channel作为Go语言并发编程的核心组件,正

2025-08-24 23:01:34 3935 1

原创 【golang长途旅行第29站】goroutine

本文介绍了Go语言中的goroutine并发机制及其调度模型。主要内容包括:1) goroutine与传统线程的区别,goroutine更轻量级且资源消耗小;2) MPG调度模型,由Machine(线程)、Processor(逻辑处理器)和Goroutine组成,实现高效并发;3) 通过示例展示如何创建goroutine及其并发执行;4) 解决goroutine间共享资源竞争的方法,如使用互斥锁sync.Mutex;5) 如何设置和获取CPU核心数以优化并发性能。文章还简要提及goroutine间的通信方式

2025-08-23 00:13:18 1246 1

原创 【golang长途旅行第28站】命令行读取

本文介绍了两种命令行参数读取方法:os.Args和flag包。os.Args通过切片存储参数,简单但要求顺序严格;flag包提供StringVar、IntVar等函数,支持按名称绑定参数,允许乱序输入。示例代码展示了如何定义、绑定和解析参数,最后对比了两种方法的区别:os.Args便捷但顺序敏感,flag包功能更强大可乱序处理。使用flag包时,还能获取未绑定的额外参数。

2025-08-22 00:22:37 534

原创 【golang长途旅行第27站】JSON

本文介绍了JSON数据格式及其在Golang中的应用。JSON作为轻量级数据交换格式,具有跨语言、易解析的特点。文章阐述了JSON的序列化(将数据结构转换为JSON字符串)和反序列化(将JSON字符串还原为数据结构)过程,提供了结构体、map和切片三种数据类型的转换示例。特别强调了通过tag标签控制JSON字段命名的技巧,以及Unmarshal函数自动初始化容器的特性。这些技术能有效提升网络传输效率,实现不同语言程序间的数据交互。

2025-08-21 00:31:25 1155

原创 【golang长途旅行第26站】文件

本文介绍了文件操作的基本概念和常见方法。文件是存储数据的重要形式,程序通过输入输出流进行读写操作。文章详细讲解了文件的开关、带缓冲读取、一次性读取、创建写入等操作,并提供了判断文件存在、文件拷贝等实用功能的具体实现代码。最后通过统计文件字符数量的示例,展示了文件处理的实际应用场景。全文使用Go语言示例代码,涵盖了文件操作的主要API和常见问题解决方案。

2025-08-20 00:20:55 977

原创 golang的接口

本文介绍了Go语言中接口的基本概念和使用方法。接口定义了一组没有实现的方法,任何类型只要实现了接口中的所有方法,就自动实现了该接口。文章通过代码示例展示了接口的实现方式,并详细说明了接口的11个注意事项,包括接口不能创建实例、不能包含变量、可以继承多个接口等特点。最后指出接口的主要意义在于实现多态,使函数能够接收不同类型的参数,只要这些类型实现了指定的接口方法。这种设计体现了高内聚低耦合的编程思想。

2025-08-13 21:56:04 707

原创 golang的继承

Go语言通过结构体嵌套实现继承机制,核心要点包括: 继承通过匿名嵌套结构体实现,子结构体自动获得父结构体的字段和方法 访问规则遵循就近原则,同名时需显式指定结构体名 不同包中只能访问大写字母开头的字段和方法 支持多重继承,但需避免同名冲突 与组合的区别在于是否使用匿名结构体 继承提高了代码复用性,如商品-书示例所示,通过Good结构体嵌套,Book自动获得name/price等属性和相关方法。需要注意的是Go更推荐组合而非复杂的多重继承。

2025-08-12 22:58:22 778

原创 排序与查找,简略版

本文介绍了数组排序和查找的基本方法。排序分为内部排序(冒泡、选择、插入)和外部排序(合并排序等),重点讲解了冒泡排序的实现原理和优化方法,包括通过flag标志提前终止循环。查找部分则详细说明了二分查找的算法思路,通过递归实现有序数组的高效查找,并给出了Go语言的具体实现代码示例。文章内容涵盖从基础概念到实际代码实现,为理解数组操作提供了实用指导。

2025-08-11 23:10:56 759

原创 golang的二维数组

本文介绍了二维数组的基本概念和使用方法。二维数组可以理解为一维数组的数组,每个元素都是一个一维数组。文章展示了二维数组的初始化、声明方式(包括标准声明、混合声明和简化声明)以及两种遍历方法:双层for循环和for-range循环。通过示例代码演示了如何创建3x3的二维数组并输出其内容,以及针对不同维度的灵活遍历方式。这些基础操作是处理矩阵和表格数据的重要技能。

2025-08-09 23:58:35 464

原创 golang的方法

本文介绍了Go语言中方法的相关概念和使用细节。方法是一种作用于特定数据类型的函数,可以绑定到结构体或其他自定义类型上。文章详细说明了方法的声明语法、调用方式以及底层优化机制,如指针类型的自动解引用。同时对比了方法与函数的区别,指出方法绑定的数据类型可以灵活处理值类型和引用类型的调用。此外,还介绍了方法访问控制的规则和String()方法的特殊用途。通过代码示例展示了方法在实际开发中的应用场景和注意事项。

2025-08-08 23:18:09 1038

空空如也

空空如也

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

TA关注的人

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