自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 mysql大表批量查询中IN vs JOIN vs CTE 性能实验

本实验比较了三种批量查询方法在不同规模下的性能,实验表明,不同规模下应选择不同查询策略以获得最佳性能。

2025-10-09 22:23:57 692

原创 MySQL 本机压测分析

做了个小测试,分析了一下本机的MySQL性能

2025-10-04 21:23:50 787

原创 MySQL深分页优化及试验

MySQL深分页优化及试验,内含建表、1000w数据自动生成的SQL语句。

2025-09-23 20:16:47 670

原创 图论基础知识

本文介绍了树与图的基础知识,包括存储方式和常见算法。图的存储主要有邻接矩阵(适合稠密图)和邻接表(适合稀疏图,主流做法),并给出了邻接表的C++实现模板。树是一种特殊的无环连通图,边数为n-1。有向无环图(DAG)可进行拓扑排序,Kahn算法通过维护入度队列实现,若结果节点数不足则说明有环。拓扑排序保证了依赖关系的有序性,适用于任务调度等场景。

2025-09-13 19:16:14 468

原创 Golang | http/server & Gin框架简述

从Golang的net/http包中的server讲起,一直到Gin框架的应用,一些基础的用例及基础原理。

2025-09-13 12:12:16 1139

原创 Golang Panic & Throw & Map/Channel 并发笔记

关于map的一些奇妙特点

2025-09-10 21:59:39 537

原创 一些channel的练习题

channel入门学习练习题,做一做转换Java思维到Golang思维

2025-09-08 20:37:21 170

原创 图的一些基本定义

本文摘要了图论的基础概念,主要包含以下内容:(1)图的分类:有向图、无向图、完全图、稀疏图、稠密图和网;(2)顶点关系术语:邻接、关联、顶点的度(入度/出度);(3)路径相关概念:路径长度、简单路径/回路、连通图/强连通图;(4)子图类型:连通分量、强连通分量、极小连通子图、生成树和生成森林。通过图示直观展示了完全图、顶点关联关系等典型示例,为图数据结构的学习提供了基础理论框架。

2025-09-07 16:51:08 433

原创 MySQL软件架构概述

MySQL采用三层架构设计:连接层处理客户端通信和认证,服务层负责SQL解析、优化和执行计划生成,存储层通过不同引擎实现数据存取。存储引擎是MySQL核心特性,InnoDB支持事务、行锁、MVCC等高级功能,相比MyISAM更适合现代应用。SQL执行流程包括解析树生成、查询优化和执行计划调用引擎API。MySQL8.0取消了查询缓存功能。该架构实现了SQL与存储引擎的解耦,使开发者能根据场景选择合适引擎,兼顾灵活性和性能。

2025-09-07 16:31:57 1079

原创 Golang中的context包介绍及源码阅读

Go语言context包设计与实现摘要 context包是Go语言中管理请求范围数据、取消信号和超时机制的核心工具。其设计采用链式结构,每个context节点都持有父节点引用,形成单向链表。 关键设计特点: 通过cancelCtx结构体实现取消功能,内部使用原子操作和通道通知机制 采用装饰器模式,通过With系列函数创建新的context节点 支持父子context间的取消信号传播 实现机制: 取消功能本质基于select+channel实现通知 通过propagateCancel方法建立父子context

2025-09-05 22:07:52 1041 4

原创 使用MySQL计算斐波那契数列

摘要:本文展示了使用SQL递归查询实现斐波那契数列的计算方法。通过WITH RECURSIVE语法创建临时表,先定义初始条件(F(0)=0,F(1)=1),然后在递归步骤中计算F(n+1)=F(n)+F(n-1),最终输出前10位斐波那契数。这体现了现代关系型数据库(如MySQL、PostgreSQL等)的SQL标准具有图灵完备性,能够实现常规编程语言的算法需求。该示例验证了SQL不仅适用于数据查询,还能处理复杂的计算任务。

2025-08-28 20:15:00 190

原创 入门概念|Thymeleaf与Vue

本文讨论了Thymeleaf和Vue的区别及其适用场景。Thymeleaf是Java模板引擎,用于服务端渲染HTML页面,类似于JSP,通过Servlet域对象获取数据动态生成页面,适合传统单体应用。Vue是前端框架,用于构建交互式单页面应用(SPA),实现前后端分离,后端仅提供数据接口。文章还介绍了前后端分离的优势,如减轻服务端压力、提升用户体验等。最后解释了Servlet及其域对象(request、session、application)在Java Web开发中的作用,指出Thymeleaf适合Spri

2025-08-27 21:15:00 581

原创 MySQL的类split方法实现

MySQL 8使用递归CTE和REGEXP_SUBSTR实现字符串拆分去重:通过递归CTE逐步提取顿号分隔的各段字符串,其中REGEXP_SUBSTR获取第n段内容,递归终止条件为无法提取更多段,最后用DISTINCT去除重复项。该方法适用于任意数量的顿号分隔字符串,通用性强。示例展示了如何将"各省教育厅、各省人力资源和社会保障厅"等字段拆分为独立行并去重排序。

2025-08-27 19:08:01 166

原创 基础|Golang内存分配

通俗易懂的Golang内存分配,很适合初学者。

2025-08-26 20:52:10 1182 1

原创 innoDB的buffer pool

innoDB的buffer pool的概览,一个全局的大致的描述。Buffer Pool的本质就是一大块内存数据结构,由多个缓存页和其控制块组成,另外配套的各种链表数据结构(free、flush、LRU)来辅助执行引擎的运行。

2025-08-02 23:19:33 900

原创 Go 代码优化实例|可读性&扩展性优化

在日常业务开发中,我们经常遇到一些,尤其当处理结构体中多个相似字段时,代码容易变得重复、难以维护。本文分享一个实际优化案例:将一段多层嵌套的“手动赋值逻辑”精简为的写法。

2025-06-24 20:45:00 229

原创 Go基础|map入门

map介绍,一看就会。Go语言map结构由多个哈希桶组成,每个桶包含8个槽位存储键值对,通过哈希函数定位桶和槽位,桶满了会创建溢出桶形成链表。map非线程安全,并发场景可通过三种方式解决:1)使用sync.Mutex/RWMutex全局锁;2)采用标准库sync.Map(基于分段锁实现);3)分片锁技术,将数据分块并独立加锁。其中sync.Map通过细粒度分段锁提升并发性能,相比传统全局锁更适合高频读写场景,而分片锁通过减少锁竞争进一步提高吞吐量。开发者应根据具体场景选择适合的并发控制方案。

2025-06-03 23:56:09 700

原创 go语言基础|slice入门

go语言slice介绍,入门基础。Go语言中的切片(slice)是一种可变长度的数组结构,包含指向底层数组的指针、长度和容量。相比固定长度的数组,切片支持自动扩容:1.18版本后以256为临界值,小于时双倍扩容,大于时采用(旧容量+768)/4的扩容算法,实现平滑过渡。切片作为参数传递时会被复制结构体值,虽能修改元素但无法扩容;传递指针则可完全修改。由于底层结构包含多个可变状态,切片是线程不安全的,需加锁或只读使用。这种设计在灵活性和内存效率间取得了平衡。

2025-06-03 21:15:00 1931

原创 go并发编程| channel入门

channel入门介绍,初学者一看就懂。channel 是在 Go 的并发编程中使用的,这个工具的作用之一是 goroutine 之间通信(线程通信指的是多个线程之间通过共享数据或协作机制来协调操作,通常需要借助锁来保证同步)。Go 中推荐使用 channel(不同语言有不同的并发模型,例如 Java 使用共享内存并发模型,通过锁机制和条件变量实现线程间通信)。为什么是推荐呢?

2025-05-29 22:00:30 1207

原创 go并发与锁之sync.Mutex入门

Go的sync.Mutex实现了高性能的互斥锁机制,提供悲观锁功能。其核心原理是通过CAS操作和状态管理实现锁竞争。在低竞争场景下采用自旋机制减少上下文切换;当竞争激烈(等待超1ms)则切换为饥饿模式,避免goroutine饥饿。实现上分为快速路径(直接获取锁)和慢速路径(自旋/排队),通过state字段管理锁状态、等待者数量和模式切换。典型用法包括手动Lock/Unlock以及配合WaitGroup进行协程同步。该设计在保证线程安全的同时,针对不同竞争强度优化了性能表现。

2025-05-27 21:00:00 745

原创 并发基础|进程与线程

进程和线程的基本概念及其区别,小孩都能看懂。进程是为实现程序并发执行而提出的概念,由PCB、程序段和数据段组成,解决了程序隔离性和安全性的问题。线程是更轻量级的执行单元,共享进程资源但切换开销小,主要用于减少上下文切换的损耗。文章还解释了上下文切换的原理,并发与并行的区别(同一时间段轮番执行vs同一时间同时执行),以及同步调用(等待结果)与异步调用(不等待结果)的不同特点。通过工程机械公司的比喻形象说明了线程共享进程资源的工作机制。

2025-05-26 19:30:00 1617

原创 gmp有了本地队列,为什么还要全局队列?

有食堂就不吃外卖了吗

2025-05-23 21:15:00 377

原创 GMP模型入门

Go语言的并发实现采用了M:N的线程模型,具体通过GMP模型实现。GMP模型由三个核心组件构成:Goroutine(G,用户态线程)、Machine(M,绑定内核线程)和Processor(P,调度器/执行上下文)。该模型通过P管理G的调度,由M实际执行G,从而避免了频繁的线程创建与上下文切换,提升了性能。调度机制包括Handoff和WorkStealing:当M阻塞时,G会被重新调度;当P的本地队列为空时,M会从其他P的队列中“偷取”G。系统初始化时,会创建与CPU核数相同的P,并启动M进行调度。M的主循

2025-05-23 20:15:00 666

原创 进程、线程和协程切换的比喻

进程切换像白宫换总统,要重装修,换家具,麻烦的,线程切换像换工位,搬一下电脑什么的,协程就像麦当劳座位,一会儿就有

2025-05-22 20:30:00 169

原创 AcWing 1174. 受欢迎的牛

【代码】AcWing 1174. 受欢迎的牛。

2025-03-15 15:10:56 120

原创 tarjan算法

是一种基于深度优先搜索(DFS)的图算法,用于在有向图中找到所有的强连通分量(SCC)。Tarjan算法非常高效,是解决强连通分量问题的经典算法之一。出发无法再追溯到更早的祖先节点,此时栈中从。到栈顶的所有节点构成一个强连通分量。在DFS过程中,如果发现某个节点的。

2025-03-15 14:36:46 405

原创 数据库版本问题导致的查询bug

我觉得难道是这里不能用外查询?然后测试站没有报错,很奇怪,一样的SQL,一个报错一个不报错,唯一的变量就是MySQL的版本了,测试站是8.0.28,正式站是8.0.16,应该是版本问题。但是有个问题困扰着我,就是外查询这么通用的功能,怎么可能在这么小的版本里面进行更新修复或者开发出来,而且当我把这行注释掉,正式站又可以跑的通,可是我这个SQL又不止这个地方用到了外查询这个特性。后面思考了一下,可能不是外查询的问题,我把过滤条件放在where语句就能跑的通,我很兴奋,原来是外查询放在join中是跑不通的。

2025-03-14 10:02:05 342

原创 go压缩的使用

如果要拷贝另一个文件,需要再创建一个文件且拷贝后才可以,不然之前的文件关闭了就无法再复制进去了。注意,顺序不可以颠倒,要先创建路径,然后创建文件,然后再把文件拷贝到压缩包中。压缩文件:北京/朝阳区/美食地图.jpg。基础:使用go创建一个zip。需要先做的是创建所需的层级。

2024-10-18 15:00:26 593 1

原创 动态规划|剑指 Offer II 093. 最长斐波那契数列

如果数组 arr 中存在三个下标 i、j、k 满足 arr[i]>arr[j]>arr[k] 且 arr[k]+arr[j]=arr[i],则 arr[k]、arr[j] 和 arr[i] 三个元素组成一个斐波那契式子序列。由于数组 arr 严格递增,因此 arr[i]>arr[j]>arr[k] 等价于 i>j>k。这道题说明了打表的过程是依赖状态转移方程的。把这道题的官解再次细化一下,可视化一下,这样理解起来更容易一些。

2024-07-07 22:20:59 324

原创 acwing 291.蒙德里安的梦想

根据上面的分析可以得到,一个合法的状态j,可以由很多个其他的合法状态转移而来,现在把每个合法的状态j的前一个合法状态集合求出来。状态计算:f[i,j] = ∑f[i-1,k],f[i-1,k]指的是可以到达f[i,j]的合法f[i-1]的状态。动态规划思路: 状态表示:f[i,j]表示已经将前i-1列摆好,且从第i-1列,伸出到第i列的状态是j的所有方案。结果状态:f[m,0],即前m列已经被铺满,m+1列一个格子都没有被占,即m列中没有伸到m+1列的小方块的状态。解法: 核心:先放横着的,再放竖着的。

2024-07-07 22:07:24 518

原创 最长公共子序列

但如果拿掉的是两个一样的字符,比如说都是d,即原始的两个字符串是【acbd,abedd】,拿掉末尾的d,【acb,abed】的答案是x,即【acb,abed】最长公共子串长度为x,现在在原来的字符串基础上又多了一个相同的字符,那么很自然的,最长公共子串长度应该为x+1。重新从刚才线索断掉的地方开始思考,【acbd,abedc】的尾巴一个是d,一个是c,且知道【acbd,abedc】前所有的答案,即。程序很好写,就是一个双重for循环,但是其状态转移的公式的由来是值得思考的。897. 最长公共子序列。

2024-06-29 18:23:27 484

原创 我的创作纪念日

提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。提示:在创作的过程中都有哪些收获。提示:职业规划、创作规划等​​。

2024-06-28 10:15:25 283

原创 Dijkstra求最短路径

进行第二次打表,本次打表不是从v0出发,而是从点集S出发,求得S到各点的最短距离,将距离最短的点更新加入S,然后不断重复,直到目标点被添加入点集S时,结束,此时找到最短路径。详见青大王卓课程:https://www.bilibili.com/video/BV1nJ411V7bd?从源点v0出发,求得到其余所有点的距离,打成第一张表,然后以此表为依据,寻找距离v0最近的点,将该点加入到v0的点集S中;利用了广度优先搜索,使用贪心思想,不断扫描各点距离源点的距离,然后将最短距离保存,直到所有点扫描完毕。

2024-05-07 22:40:55 347

原创 kmp之next函数实现与测试

【代码】kmp之next函数实现与测试。

2024-04-15 20:30:37 190

原创 浮点数加法

浮点数有时候计算结果会出现长尾小数,例如0.1+0.11=0.21000000000002,这种结果很麻烦。用包装类就可以轻松的解决这个问题,不过想着很久没写加法了,高精度加法也不咋写了,自己造下轮子熟悉一下算法,于是就写了个浮点数的加法,原理就是小学加法。

2024-03-18 22:53:22 306

原创 Java、GO、C++语法比较

Java:int[] arr, int arr[]都行,不过建议前者,后者是c-style。c++: *int 指针传递,&int 引用传递,int 值传递。go:arr := make([]int,0),只能在前面。c++:int arr[],只能这样,放前面会报错。go: *int 指针传递传递,int 值传递。2.声明数组(切片)方括号位置。3. 函数传递参数不同。

2024-03-06 22:34:38 290 1

原创 datagrip 使用自定义参数

1. 直接打问号❓,执行的时候会问你这个问号填什么。格式:${xxxx} xxxx是你定义的参数名字。2. 设置参数,执行的时候会问你这个参数填什么。执行就会问你这个参数填什么,定义过会保留。

2023-11-02 18:01:38 1809 2

原创 GO|经典错误之回车与\n

Linux系统里面回车是\n,但是Windows里面是\r\n,因此如果是使用 input = input[:len(input)-1]的方式去掉delim,那就会出错了,因此还是要使用相应的工具包才好,即使用。明明没有什么问题,然后把这段代码放到online go的网站上去跑,输出的是99。这个\r\n是啥, 搜了一下,是Windows系统里面的回车,好家伙,原来问题出在这里了。运行,输入99,回车,输出0。

2023-09-02 14:30:48 914

原创 数据链路层是什么?

数据链路层承接上层的数据,然后使用下层提供的,按照一定的规则,进行数据传输。物理层提供了传输媒体与连接(信道)(数据链路层使用的信道通常是物理层提供的信道),即提供了比特流动的可能性,但是杂乱无章的比特并不是信息,数据链路层需要将上层给予的数据信息组织起来,按照一定规则发送与接收。

2023-08-14 12:46:23 257

原创 及时、完善的测试的重要性

后来换个方向,去看被调用的模块,才发现被调用的模块里面有一个配置的错误,这个错误在这个模块做接口级别的测试的时候是无法发现的,而我写这个模块的时候很着急,只做了接口的测试。具体来说,这个项目使用的是ssm框架,需要进行大量的配置,而配置内容基本上都是差不多的,因此我在对某个模块进行一些框架、中间件的配置的时候,直接从原来项目中复制了过去。去年开发某个项目的过程中遇到过一个bug,让我印象深刻, 因为花费了一个下午的时间才解决,而导致bug的原因却非常的基础,并不是什么难的问题,就是配置错了而已。

2023-08-12 22:48:42 313

空空如也

空空如也

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

TA关注的人

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