- 博客(213)
- 收藏
- 关注
原创 Golang基础笔记十三之context
本文介绍了 Golang 中 context 包的核心功能和使用方法。context 主要用于跨 API 边界和 goroutine 间传递截止时间、取消信号和数据。主要内容包括: Context 接口定义及作用 取消传播的实现方式 超时控制的实现示例 截止时间的使用方法 通过 context 传递数据 通过具体代码示例,展示了如何使用 context.WithCancel()、context.WithTimeout()、context.WithDeadline() 和 context.WithValue(
2025-07-21 21:10:07
610
原创 Golang基础笔记十二之defer、panic、error
本文介绍了Golang中的defer、panic和error三个关键概念。defer用于延迟执行函数,保证资源释放,按照后进先出顺序执行。panic用于处理不可恢复错误,可通过recover捕获。error是标准错误接口,通常作为函数最后一个返回值,使用errors.New()创建错误信息。文章通过代码示例详细说明了它们的使用场景和注意事项,包括defer的参数传递、panic的捕获处理以及error的标准使用方式,帮助开发者更好地处理程序中的异常情况。
2025-07-16 23:39:23
1001
原创 Golang基础笔记十一之日期与时间处理
本文介绍了Golang中日期与时间的处理方法,主要涵盖以下内容: 获取当前时间及分解时间字段 时间与字符串的相互转换,使用特定格式"2006-01-02 15:04:05" 时间戳与时间的互相转换,包括秒、毫秒、纳秒级别 时间加减操作:使用Add()进行时分秒加减,AddDate()进行年月日加减 星期数获取方法 定时器与计时器的使用 文章通过代码示例详细展示了各项功能的实现方式,包括时间格式化、字符串解析、时间戳转换以及时间加减运算等常见操作。
2025-07-14 22:26:36
241
原创 Golang基础笔记十之goroutine和channel
本文介绍了Golang中的goroutine和channel机制。goroutine是轻量级线程,通过go关键字启动,能高效处理并发任务。channel则是goroutine间通信的管道,分为无缓冲和有缓冲两种类型。无缓冲通道要求发送和接收必须同时发生,否则会阻塞;有缓冲通道在满或空时也会阻塞。文章通过代码示例展示了如何创建和使用goroutine与channel,以及在不同场景下的阻塞情况,帮助开发者理解Golang的并发编程模型。
2025-07-09 21:55:51
717
原创 Golang基础笔记九之方法与接口
本文介绍了Golang中方法与接口的核心概念。方法部分讲解了如何为结构体、指针和自定义类型绑定方法,并演示了值类型与指针类型在方法调用中的区别。接口部分详细说明了接口的定义与实现机制,包括类型断言和空接口的使用场景。最后,文章展示了如何通过结构体和方法组合实现面向对象的封装与继承特性,包括控制字段访问权限和结构体嵌套实现继承。这些内容为理解Golang的面向对象编程提供了基础指导。
2025-07-07 21:57:41
547
原创 Golang基础笔记八之函数
本文介绍了Golang中函数的相关知识,包括:1)函数定义语法,支持传值和传指针;2)函数返回值,可返回单值或多值,并支持命名返回值;3)可变参数函数,使用"..."定义可变参数;4)匿名函数及其使用场景;5)闭包特性,通过示例展示了计数器、计算器和斐波那契数列生成器等闭包应用。文章内容简明扼要,涵盖了Golang函数的核心知识点。
2025-07-02 22:24:32
264
原创 Golang基础笔记七之指针,值类型和引用类型
本文介绍了Golang中的指针、值类型与引用类型概念,包括指针的声明与操作、函数传参方式,以及值类型和引用类型在内存分配上的区别。重点分析了内存逃逸现象及其产生原因,如函数返回指针、闭包引用等场景,并提供了减少内存逃逸的优化建议。通过理解这些底层机制,开发者可以更好地优化程序性能和内存管理。
2025-06-30 20:52:24
931
原创 Golang基础笔记六之流程控制
本文介绍了Golang中的流程控制语法,主要包括条件语句和循环语句。条件语句部分详细讲解了if-else语句和switch语句(包括表达式switch和类型switch)的使用方法,并给出相应示例。循环语句部分涵盖三种类型:普通for循环、for-range循环(适用于数组、切片、字符串和map)以及无限循环,每种循环都配有代码示例说明其应用场景。文章还特别指出在for-range循环中如何处理中文字符,以及如何在无限循环中使用continue和break控制流程。
2025-06-27 22:46:14
328
原创 Golang基础笔记五之结构体
本文介绍了Golang中结构体的基本概念和使用方法。主要内容包括:1) 结构体的定义和三种初始化方式;2) 嵌套结构体的两种形式(匿名和具名嵌套);3) 创建递归结构体实现链表和二叉树;4) 结构体标签的作用,特别是json标签在序列化中的应用,包括字段映射、忽略字段等功能。通过具体代码示例演示了结构体的各项特性,为Go开发者提供了结构体使用的实用指导。
2025-06-25 23:58:45
845
原创 Golang基础笔记四之map
本文介绍了Golang中map的基本概念、操作方法和遍历技巧。主要内容包括:1) map的两种创建方式(make和字面量初始化);2) map的增删改查操作,包括如何判断key是否存在;3) map的多种遍历方式,包括按key正/倒序和按value正/倒序排列遍历。文章还特别强调了使用map前必须初始化,并给出了嵌套map和多层map的示例。通过这些内容,读者可以掌握Golang中map的基本使用方法和常见操作技巧。
2025-06-24 00:19:46
851
原创 Golang基础笔记三之数组和切片
本文介绍了Golang中的数组和切片基础操作。数组是固定长度的同类型序列,支持一维和多维数组定义。切片是对数组的引用,由指针、长度和容量组成,可以通过引用数组、直接创建或make函数创建。文章详细讲解了切片长度和容量的区别,以及切片扩容的规律:在容量较小时通常会两倍扩容,而大容量时会结合内存对齐进行调整。此外还介绍了数组复制、排序等操作,以及切片与底层数组的关联特性。
2025-06-21 12:20:09
873
原创 Golang基础笔记二之字符串及其操作
本文介绍了Golang中字符串的相关操作,主要内容包括: 字符串定义与初始化:双引号支持转义字符,反引号保留原样输出 字符类型:byte和rune的区别,字符串长度统计方法 字符串操作: 拼接(+运算符和string.Builder性能对比) 访问(按字节/字符访问及遍历) 查找(Index函数) 替换(Replace/ReplaceAll) 分割(Split/SplitN) 前缀后缀判断(HasPrefix/HasSuffix) 包含判断(Contains) 子串统计(Count) 大小写转换(ToUpp
2025-06-20 00:25:52
703
原创 Golang基础笔记一之变量声明和类型介绍
文章摘要本文介绍了Golang的基础知识,包括运行方式、变量声明和数据类型。主要内容有:Golang运行:通过go run main.go执行代码示例变量声明:使用var或:=进行声明,支持批量声明数据类型:数值类型(整型、浮点型)布尔类型、字符串、字符(byte和rune)指针、数组、切片、map、结构体、通道fmt函数:格式化输出函数如Print、Println、Printf的使用示例代码演示了各类数据类型的定义和基本操作。
2025-06-18 01:03:23
977
原创 Python面试必备二之 lambda 表达式、函数传参 args 和 kwargs、垃圾回收机制和上下文管理器
使用 lambda 修饰,表示定义一个函数,之后跟着的 x 和 y 表示输入的参数,冒号后跟着的即为需要 return 的函数逻辑,这里是相加。
2024-05-27 23:39:01
1106
原创 MySQL面试必备三之事务
所谓事务,就是一系列的 SQL 组合,这些 SQL 操作要么全部执行,要么都不执行,是一个不可分割的工作单位。比如我们在支付系统中想要完成一个转账功能,比如从 A 账户转账一百元给 B 账户,那么从 A 账户的总额中减去 100,然后在 B 账户上加上 100,这两个就需要全部执行才算是这个转账操作的实现。这个过程就包含了 A 账户的减少 100,B 账户的加上 100,这两个操作加起来就是一个完整的事务。
2024-05-18 18:13:31
865
原创 MySQL面试必备二之binlog日志
关于 binlog,常被问到几个面试问题如下:1. binlog 是什么2. binlog 都记录什么数据3. binlog 都有哪些类型,都有什么特点4. 如何使用 binlog 恢复数据5. binlog 都有哪些作用6. binlog 属于逻辑日志还是物理日志
2024-05-11 00:01:19
1320
原创 Python笔记五之正则表达式
这一篇笔记介绍在 Python 里使用正则表达式。正则表达式,Regular Expression,可用于在一个目标字符串里对于指定模式的字符进行查找、替换、分割等操作。比如,判断某个字符串里是否都是数字,或者是否包含指定字符串,又或者更直接的例子是判断电话号码或者邮箱是否合法等。这一篇笔记里,我们将先介绍一个正则表达式的函数,并以此来引入正则表达式的各种模式,并辅以各个例子进行介绍。
2024-04-06 00:02:25
999
原创 Python面试必备一之迭代器、生成器、浅拷贝、深拷贝
本篇笔记主要介绍 Python 面试过程中常被问到的迭代器、生成器、深拷贝、浅拷贝和可变类型与不可变类型
2024-04-05 23:42:40
966
原创 Python笔记四之协程
协程是一种运行在单线程下的并发编程模型,它的特点是能够在一个线程内实现多个任务的并发操作,通过在执行任务时主动让出执行权,让其他任务继续执行,从而实现并发。以下所有的代码都是在 Python 3.8 版本中运行。
2024-03-18 22:18:18
897
原创 在 Windows 上利用Qwen大模型搭建一个 ChatGPT 式的问答小助手
经过分别使用 0.5B 版本和 1.8B 的版本,在我电脑的配置里,0.5B 版本的输出会快一些,但是在某些问题回答的质量上不如 1.8B。而 1.8B 版本答案质量相对较高,但是速度在 4g 显存的情况下,则非常慢。以上就是本次使用 Qwen1.5 在 Windows 上搭建问答小助手的全过程,之后还可以将大模型提供接口操作,将其应用到 web 页面上,从而实现一个真正的 ChatGPT 式问答助手。
2024-03-18 00:48:58
1746
原创 Python笔记三之闭包与装饰器
这一篇笔记介绍 Python 里面的装饰器。想要统计add而如果我们想要统计很多个函数的执行时间,然后打印出来,应该如何操作呢?这里就可以用上 Python 里装饰器的操作。
2024-03-12 23:55:47
909
原创 Python笔记二之多线程
这一篇笔记介绍一下在 Python 中使用多线程。以下的操作都是在 Python 3.8 版本中试验,不同版本可能有不同之处,需要注意。
2024-02-25 00:47:40
1085
原创 Flask笔记七之基于类的视图
前面我们提供API接口,都是通过或者使用Blueprint的的方式来定义接口。现在这里介绍一下使用视图类的方式来提供接口。视图类的方式和 Django 中的 View 使用的方式类似,接下来我们将之前的接口改写成视图类的方式。
2024-01-28 22:03:06
489
原创 Flask笔记六之中间件操作
在Flask中,中间件通过装饰器来使用,被分为两部分,一个是请求前,用来操作,一个是请求后,用来操作。接下来介绍一下中间件从注册到使用的操作。这里我们定义两个测试用的中间件,我们在app/utils/文件夹下创建一个的文件夹,其下再创建一个文件修饰的函数表示在请求处理前进行的操作,这里是简单的打印一条消息,除此之外,我们还可以在这里对登录进行验证。这样的话,在前面的笔记里我们对接口进行的的装饰器就不需要了,就不要在每个接口前都进行这种装饰,可以使代码变得简洁,同样实现我们想要的功能。
2024-01-05 22:48:00
2172
1
原创 Flask笔记五之日志操作
之前在 Django 笔记里详细介绍了 logging 模块关于 formatters,handlers,loggers 等基础介绍,这里直接介绍如何在 Flask 中配置日志信息。
2024-01-02 22:48:25
947
原创 Flask笔记四之异常处理
在系统运行中,有时候需要处理报错异常。异常的来源可能是系统在运行中的报错,比如错误的运算的有 1/0 这种等,还有的是访问了不存在接口,又或者,我们在查验接口参数的时候,发现没有传必传参数,需要手动触发一个报错等。这里就介绍如何在 Flask 中进行异常处理。
2023-12-29 00:54:04
703
原创 SQLAlchemy 连接使用数据库
相对于 Django 来说,Flask 并没有 Django 中自带的那种 ORM 框架,但是我们可以利用第三方的 ORM 框架来进行操作,比如我们这里介绍的 SQLAlchemy。接下来这一篇笔记将会介绍如何使用 SQLAlchemy 连接数据库、建立模型、操作表、以及查询操作表数据等内容。
2023-11-26 23:34:21
1748
原创 Flask笔记二之blueprint和session介绍
Blueprint 的使用主要有两步,一步是定义,一步是注册。下面我们用一个实例来介绍如何使用,比如我们这里使用用户登录验证的接口来操作。我们在app/文件夹下创建一个名为user的文件夹,在其下再创建一个名为bp_user.py这里,我们实例化了Blueprint,定义一个bp,然后使用的方式定义路由和可以调用的方法,比如GET,比如POST。在 login() 函数内部可以进行我们必要的一些逻辑处理,比如用户名密码进行验证操作。然后需要将其在return appflask run。
2023-11-22 00:03:29
425
原创 Flask笔记一之项目搭建、配置项导入
这一篇开始介绍Flask系列笔记,这个系列笔记将和之前的Django笔记一样会从Flask的官方文档中提取一系列的知识点,整理成系列笔记。这是 Flask 系列笔记的第一篇,本篇笔记介绍的是 Flask 项目的搭建以及配置项的导入,我们用到的 Python 的版本还是 3.8,用到的 Flask 的版本是 2.3.2。接下来我们这里用Pycharm创建一个项目,我们命名为flask_blog,在其下文件夹为app,其下再创建一个。
2023-11-21 00:15:49
324
原创 Redis对象的数据结构及其原理汇总
这样,我们就创建了两个对象,且两个都是字符串对象,因为键值对的 key 和 value 都是字符串。如果我们创建了一个列表数据,那么 key 是字符串对象,而值 value 是列表对象。//类型//编码//指向底层实现数据结构的指针void *ptrtype在上面的结构中,type 指的是这个对象的类型,比如我们创建了一个列表数据,那么这个数据的 key 就是一个字符串对象,由这个结构里的 type 来指定,这个数据的 value 就是一个列表对象,也是由 type 来进行指定区分。
2023-11-17 23:08:23
581
1
原创 Redis数据结构八之各对象对应的底层实现
本篇笔记介绍各对象及其编码和底层实现结构。属性用于表示这个对象的类型,比如 string,list,hash,set,zset 分别表示字符串对象,列表对象,哈希对象,集合对象和有序集合对象。属性则表示该对象使用的编码则是指向底层的指针。
2023-11-12 23:29:31
110
原创 Redis数据结构七之listpack和quicklist
虽然 listpack 没有了指向尾部节点的偏移量,但是同样可以快速找到 listpack 的尾部节点,方式是通过 总字节长度属性的值,可以直接获取到 listpack 的尾部,然后根据 entry 元素尾部的 length 属性,就可以找到尾部 entry 的起始地址了。
2023-11-11 22:19:19
448
原创 Redis数据结构六之跳跃表
前面介绍跳跃表节点的层属性是一个数组,包含多个指向下一个同一层级的指针,而每个节点层的大小则是根据幂次定律(power law) 来生成的。在创建一个跳跃表节点的时候,程序都会根据幂次定律随机生成一个介于 1 到 32 之间的值作为 level 数组的大小,这个规则是越大的数出现的概率越小,它有一种计算方式,层数每加 1,出现的概率都是前一个数字的 0.25。
2023-09-18 22:16:24
271
原创 Redis数据结构五之整数集合
整数集(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现。整数集合可以保存类型为 int16_t,int32_t,int64_t 的整数值,并且保证集合中不会出现重复元素。
2023-09-15 23:37:45
197
原创 Redis数据结构四之字典和哈希表
字典在 Redis 中应用相当广泛,在介绍字典之前,先来介绍一下字典、哈希表、哈希表节点的几个概念。其中,的底层就是一个哈希表student 下的就是组成哈希表的各个哈希表节点对于 Redis,哈希表和哈希表节点两个数据结构就可以实现我们对 key-value 数据的操作,但是随着哈希表保存的键值对增加或者减少,我们就需要对哈希表进行扩展或者收缩操作,因此就额外引入了字典结构来做一些额外的辅助操作,具体的实现我们接下来介绍。
2023-09-13 17:58:52
327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人